전체 글
[Spring] IntelliJ에서 Application 종료 후 재시작시 사용하는 포트가 존재한다고 나올때
로컬에서 IDE로 개발할때 코드 수정하고 Application 재시작할 경우 어쩌다 포트가 이미 사용중이라고 에러가 나는 경우가 있다 일반적으로 아래와 같이 현재 실행중인 spring 프로세스를 찾아서 kill 하면 된다 ps -ax | grep spring kill -9 {PID} 만약 로컬에 spring 프로세스가 많이 실행되고 있는 경우 아래 방법처럼 찾아서 kill한다 # 해당 포트 확인 및 pid 확인 lsof -i :8080 # pid 확인 ps -ax | grep {PID} # 프로세스 죽이거나 포트 바꾼다 # 프로세스 kill kill -9 {PID} # application.yml 에서 포트 변경 server.port = ****
[MySQL] Charset, Collation 확인하기
가끔 conf 파일의 설정 미비 혹은 database 생성 구문에서 빠뜨려서 charset, collation이 의도하지 않은 것을 사용하는 경우가 있다 1. Charset, Collation 확인하기 # database 생성 구문 확인 show create database ; # database charset, collation 확인 SELECT default_character_set_name, DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA WHERE schema_name = ; # table 컬럼별 charset, collation 확인 SHOW FULL COLUMNS FROM .; # table 생성 구문 확인 show create table ...
[Gradle] 외부 파일로 Dependency 버전 관리 하기
일반적으로 spring boot를 사용하는 경우 io.spring.dependency-management 플러그인으로 dependency 관리를 한다 일부 몇몇 외부 라이브러리 사용하는 경우 다음과 같이 build.gradle 내에서 buildscript에 선언하여 version을 명시할 수 있다 // build.gralde buildscript { ext { resilience4jVersion = '1.7.1' } } 그러나 가끔 멀티 모듈을 사용할 경우 중복되는 라이브러리들의 버전은 별도로 관리하고 싶은 경우가 있다 방법 1. 별도 gradle 파일 이용 // versions.gradle 파일을 생성하고 다음과 같이 작성한다 ext.versions = [:] versions.spring_boot = ..
[JDBC] JPA(Read) + jdbcTemplate(Write) 사용하기
JPA를 사용할 경우 Entity의 Id 생성 전략이 IDENTITY일 경우 INSERT 구문이 실행될 때마다 SELECT 구문이 실행된다. 1개 row 작업의 경우 JPA를 사용함에 있어 큰 이슈가 없지만 대량의 배치성 작업의 경우 성능에 영향을 미친다. 이를 위해서 jdbcTemplate을 이용하여 jdbc의 prepareStatement와 rewriteBathchedStatements 옵션을 사용하여 성능 개선을 이룰수 있다. 그러나 다른 테이블의 데이터를 읽어서 새로운 테이블로 데이터를 migration 하는 경우 대량의 데이터를 한번에 읽을 수 없으므로 일반적으로 페이징 기법을 사용한다. 그러나 jdbc에서 페이지네이션(pagination) 쿼리를 만들기 귀찮아 jpa에서 PageRequest를..
[Bean] Router 구현
가끔 특정 비지니스 로직에서 주어진 입력에 따라 Bean을 선택적으로 사용하고 싶은 경우가 있다 Interface를 사용하여 해당 인터페이스를 구현한 Bean들을 컬렉션(List or Map)에 넣어 사용할 수 있다 1. Interface public interface SampleInterface { // 임시로 String으로 구현하였으나 Enum으로도 구현 가능하다 boolean isTarget(String targetName); } 2. Implements import org.springframework.stereotype.Component; @Component public class SampleComponent implements SampleInterface { private static fina..