여러개의 Datasource 등록중 겪은@ConfigurationProperties 적용 문제와 해결

Intro 여러개의 데이터베이스에 연결하는 스프링부트 프로젝트에서 커넥션풀 설정이 제대로 적용되지 않고 있다고 하여 확인을 해 보았습니다. 데이터베이스를 한개만 쓴다면, spring.datasource 에만 등록하면 충분합니다. 하지만 여러개를 등록하려고 하면 스프링부트의 autoconfigure 만으로는 부족합니다. 일단, 프로젝트를 열어 코드를 살펴보니 아래와같이 application.yml 에 각각의 데이터 소스를 설정 할 때, prefix를 주어서 각각의 데이터소스를 설정하고 있었습니다. ${code:application.yml} myapp.datasource: type: com.zaxxer.hikari.HikariDataSource driver-class-name: org.postgresql.D..

Programming/JPA ⁄ Spring 2023.04.19
스프링 Stereotype 어노테이션 @Component @Controller @Service @Repository 차이점

Intro 스프링기반 프로젝트를 만들다 보면 기계적으로 필요에 따라 각종 어노테이션을 붙이게 됩니다. 컨트롤러에는 @Controller를, 서비스 레이어에는 @Service를, 그리고 데이터베이스에 접근하는 퍼시스턴스 레이어에서는 @Repository를 붙였습니다. 그 외 어플리케이션 컨텍스트에 빈으로 등록 하고 싶은데 특별한 설정 절차가 필요 없어서 컴포넌트 스캔을 통한 자동 등록이면 충분 할 때에는 @Component를 붙여 왔습니다. 그런데, 사실 Bean 으로 등록되어 후에 Dependency Injection에 사용된다는 공통점을 생각 해 보았을 때는 "전부 @Component"로 해도 되는거 아니야?" 라는 생각이 들 수 있습니다. 각각의 차이도 모른채 습관적으로만 사용하고 있는게 사실입니다...

Programming/JPA ⁄ Spring 2022.12.30
스프링 부트 프로젝트에서의 안정적인 대용량 파일 업로드

Intro 프로젝트에서 파일 업로드 부분에 대한 개선을 진행 했습니다. 기존의 파일 업로드를 처리하는 부분에 몇가지 문제가 있었는데, 특히 대용량 파일을 안정적으로 업로드 하기 위해서 해결해야 하는 포인트들이 여러가지가 있었고, 꽤나 난해했습니다. 사용자가 파일 업로드를 마쳤지만, 서버에서 일어나는 다양한 작업을 마칠때까지 오랜 시간동안 응답을 받지 못함 사용자 입장에서 업로드 100% 에서 오랜시간 화면이 멈추어 있어 UX가 좋지 않음 대용량의 파일을 업로드할 때 응답에 걸리는 시간이 너무 오래걸려 timeout 되는 문제 사용자는 파일을 성공적으로 업로드 했지만, 서버에서 해당 파일을 처리중 문제가 생겼을 때의 방안 대용량의 파일 업로드시 대량의 IO 작업으로 시스템 자원이 쏠리는 현상 간단히 추려보..

Programming/JPA ⁄ Spring 2022.12.11
[H2] Database "mem:testdb" not found, either pre-create it or allow remote database creation 해결

Intro 스프링부트에서는 아래와 같은 설정으로 간단하게 인메모리 H2 데이터베이스를 사용 할 수 있습니다. application.yml spring: datasource: url: jdbc:h2:mem:testdb username: sa build.gradle.kts runtimeOnly("com.h2database:h2") 이후 h2:console 설정을 켠다면, 콘솔 페이지에서 데이터베이스를 직접 확인 해 볼 수 있는데요 spring: h2: console: enabled: true settings: web-allow-others: true 위와 같이 설정했을때에는, /h2-console 경로로 들어가면 데이터베이스를 웹 페이지에서 직접 확인 해 볼 수 있습니다. 그런데, Test Connectio..

Programming/JPA ⁄ Spring 2022.11.15
스프링 부트 java -jar 혹은 bootrun시 port 변경하기

Intro 이번글은 매우 간단한 글인데, 자꾸 까먹어서 블로그 글로 정리해두고 필요할 때 찾아보려고 작성 해 두려고 합니다. 스프링 부트 프로젝트를 IDE로 손쉽게 실행 할 수 있지만, Scale out 이나 로드밸런스 등의 테스트를 할 때는 같은 어플리케이션을 여러개 띄워두어야 하는 경우가 생깁니다. 테스트의 경우에는 인텔리제이에서 Run Configuration을 여러개 카피해서 사용하는게 가장 좋기는 하지만 이런 방법도 있다고 알고 있는 편이 좋겠고 실제로 쓸일이 제법 있었습니다. 포트 지정해 실행 아래와 같이 포트 설정을 하여 실행 할 수 있습니다. java -jar 아마 가장 흔하게 쓰이지 않을까 생각 됩니다. java -jar -Dserver.port=18080 ./target/my-app-0..

Programming/JPA ⁄ Spring 2022.11.14