[Java] Switch와 else-if의 효율성 비교 (Switch와 else-if 중에 어떤 걸 사용해야 할까?)

1. Switch와 if-else 조건에 따라 실행을 분기해야 할 때 우리는 조건문을 사용한다. Java에서는 switch / if-else 두 조건문을 선택적으로 사용 가능하다. 보통 가독성을 기준으로 선택을 많이 하나, 효율성 기준에서 어떤 것을 선택하는 것이 좋을지 비교해보려 한다. 일단 switch 구분에서 Strings를 사용하는 것에 관한 공식문서를 보면, The switch statement compares the String object in its expression with the expressions associated with each case label as if it were using the String.equals method; consequently, the comparison of String objects in switch statements is case sensitive. The Java compiler generates generally more efficient bytecode from switch statements that use String objects than from chained if-then-else statements. ...

10월 24, 2023 · Jun Kang

[Java] 클래스 로딩 과정(Java Class Loading Process)이란?

1. 클래스 로딩 과정 (Java Class Loading Process) 이란? 자바 클래스 로딩 과정 (Java Class Loading Process)은 클래스 로더가 클래스 파일을 찾아 동적으로 JVM의 메모리 영역인 Runtime Data Areas에 올려놓는 과정을 말한다. 자바에서 객체가 어떻게 형성/관리 되는지 이해하려면. java 파일의 소스코드가 어떻게 JVM 위에 로딩되는지 아는 것이 중요하고, 클래스 로딩할 때 발생하는 문제 (‘java.lang.ClassNotFoundException'과 같은 에러)를 쉽게 해결하고, 코드상 동적으로 클래스 로딩하는 구문 이해하는데 필요하다. 2. 클래스 로더 3단계 과정 클래스 로더는 다음 3단계 과정을 거쳐 클래스 파일을 로딩한다. ...

10월 23, 2023 · Jun Kang

[Linux] 스왑 메모리(Swap Memory)의 개념과 적용방법

1. 리눅스 Swap 메모리 설정 (예제는 EC2 환경에서 진행) 1-1. Swap 메모리 확인 swapon -s free -h shared = 하나의 프로세스에서 다른 프로세스의 데이터에 효율적으로 접근하기 위해 사용하는 메모리 buff/cache = 버퍼와 캐시를 위해 사용하는 메모리, 커널이 성능향상을 위해 캐시 영역으로 사용되는 메모리 buff = 프로세스가 사용하는 메모리 영역이 아닌 시스템 성능향상을 위해 커널이 사용하고 있는 영역 cache = 캐시영역의 메모리, I/O 작업을 더 빠르게 하기 위해 커널에서 사용 ...

10월 23, 2023 · Jun Kang

[Spring] 스프링부트 + Mybatis 데이터소스 여러개 연결 (스프링 다중 데이터베이스 연결)

다음은 스프링부트 + 마이바티스 프로젝트에 2개 이상의 데이터소스를 연결하는 예제이다. 기존 스프링 데이터베이스 연동이 되어있다고 가정 후 진행되며, 신규 데이터베이스는 구별이 쉽도록 new 데이터베이스로 명칭 한다. 1. 신규 데이터베이스 접속정보 추가 추가될 데이터베이스의 속성을 application.properties에 추가 #기존 DB Setting spring.datasource.url={url} spring.datasource.driverClassName={driverClassName} spring.datasource.username={username} spring.datasource.password={password} spring.datasource.schema={schema} #추가될 DB Setting new.datasource.url={url} new.datasource.driverClassName={driverClassName} new.datasource.username={username} new.datasource.password={password} new.datasource.schema={schema} 2. 데이터베이스 연결 빈 속성 추가 기존 데이터베이스 연결 설정을 하는 DatabaseConfig.java 외에 NewDatabaseConfig.java신규로 추가한다. 기존 DatabaseConfig.java ...

10월 20, 2023 · Jun Kang

[Spring] 스프링 배치 ItemReader의 개념, (MybatisCursorItemReader, MybatisPagingItemReader 구현)

1. ItemReader란? 스프링 배치의 ItemReader는 다음과 같은 과정을 거쳐 데이터를 처리한다. 대부분의 데이터 형태는 이미 ItemReader로 제공하고 있기에 ItemReader, ItemStream 인터페이스 자체를 구현할 필요는 없다. ItemReader는 Chunk 기반 트랜잭션을 다루며 Cursor, Paging 가 대표적인 2가지 방식이다. 2. Cursor, Paging 형식 2-1. Cursor기반 ItemReader JDBC ResultSet의 기본 기능이다. ResultSet이 Open 될 때마다 데이터베이스의 데이터가 반환된다. 데이터베이스와 연결 맺은 후 데이터를 Streaming 방식으로 I/O이다. 현재 행에서Cursor를 유지하며 다음 데이터를 호출하면 Cursor를 한 칸씩 옮기면서 데이터를 가져온다. 하나의 Connection으로 배치가 끝날때까지 사용되기에 Batch가 끝나기 전에 데이터베이스와 애플리케이션의 연결이 먼저 끊어질 수 있어 데이터베이스와 SocketTimeout을 충분한 값으로 설정하여야 한다. 모든 결과를 메모리에 할당 하기 때문에 메모리 사용량이 많아진다. Chunk 사이즈 만큼의 트랜잭션 단위로 데이터를 처리한다. Cursor 기반 ItemReader 구현체 ...

10월 19, 2023 · Jun Kang