반응형

Spring 9

Spring - flyway (using RoutingDataSource)

이번엔 flyway를 다중 데이터베이스 커넥션 환경에 적용해보자 AbstractRoutingDataSource 를 사용하여 DataSource를 유동적으로 변경할 수 있는 환경을 만들었다. @Slf4j public class TenantRoutingDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { log.info(">>> determineCurrentLookupKey thread: {},{}",Thread.currentThread().getId(), Thread.currentThread().getName() ); log.info(">>> RoutingDataSource:..

Spring 2021.08.18

Spring - flyway

Flyway 데이터베이스를 위한 형상관리 툴 데이터베이스에 대한 변화를 버전으로 관리하고 마이그레이션 해줌 스프링에 flyway를 적용해보자 build.gradle 디펜던시 추가 필자는 스프링 부트를 사용하고 있어 버전은 따로 입력하지 않았다 implementation 'org.flywaydb:flyway-core 버전에 따른 sql 파일을 resources > db > migration 에 위치해준다. sql 파일 네이밍은 위 주소의 문서에서 확인할것 drop table user if exists; create table user (id bigint not null, name varchar(200), primary key (id)); 테스트 용으로 위와같이 테이블 생성 쿼리를 V1__init.sql 로..

Spring 2021.08.18

QueryDsl with Lombok

QueryDsl 과 Lombok 같이 사용시 cannot find symbol 에러를 만났다 Lombok이 코드를 만들기 전에 QueryDsl 이 먼저 컴파일을 작업하여 롬복이 만들어낼 코드를 찾을수 없다고 에러를 띄운다. 아래와 같이 build.gradle에 Lombok 작업후 QueryDsl 컴파일을 지시하도록 하자 project.afterEvaluate { project.tasks.compileQuerydsl.options.compilerArgs = [ "-proc:only", "-processor", project.querydsl.processors() + ',lombok.launch.AnnotationProcessorHider$AnnotationProcessor' ]

Spring 2021.08.05

Spring boot 2.5 이상 docker를 위한 unpack

task moveLib { doLast { def unpackDir = "$buildDir/unpack" ant.move(file: "${unpackDir}/app/BOOT-INF/lib", toFile: "${unpackDir}/lib") } } task unpackJar(type: Copy) { def unpackDir = "$buildDir/unpack" delete unpackDir from zipTree(jar.getArchiveFile()) into "$unpackDir/app" finalizedBy moveLib } build { finalizedBy unpackJar } 도커의 계층구로로 라이브러리와 소스코드를 분리하여 도커 이미지를 빌드하는 build.gradle 코드이다 뒤에서 해당 소..

Spring 2021.07.17

Mapstruct & Lombok 적용

인터넷 자료를 보고 Mapstruct를 적용하려고 하다가 하나가 되면 하나가 안되고 또 하나가 되면 하나가 안되고 그래서 내가 다시 정리해본다. 1. 디펜던시 적용 ext { mapstructVersion = "1.3.0.Final" } dependencies { compileOnly 'org.projectlombok:lombok' implementation "org.mapstruct:mapstruct:${mapstructVersion}" annotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}" annotationProcessor 'org.projectlombok:lombok' annotationProcessor 'org.pr..

Spring 2021.04.16

스프링 멀티 모듈 적용

이전에 스프링으로 서버 운영시 모든 소스를 하나의 모듈에 묶어 운영하여 유지보수가 어려웠다. 또 프로파일 설정으로 각 서버에 적용되어야 하는 파일을 분리하여 적용하려고 하니 참 무식했다... 필자도 멀티 모듈을 적용하여 서버를 운영하고자한다. 그래들 설정에 대해 아직 기본도 잘 모르는 초짜이기에 일단 설정을 따라해본다. 우선 start.spring.io 로 프로젝트를 생성하고 진행해보자 루트 build.gradle 설정을 아래와 같이 해주자 buildscript { ext { springBootVersion = '2.3.9' } repositories { mavenCentral() } dependencies { classpath "org.springframework.boot:spring-boot-grad..

Spring 2021.03.15

JPA - 클라이언트 파라미터에 따른 동적 데이터베이스 연결 (AbstractRoutingDataSourceAbstractRoutingDataSource)

https://www.sollabs.tech/AbstractRoutingDataSource AbstractRoutingDataSource Sollabs Main Page www.sollabs.tech 상황에 따라 동일한 스키마를 갖는 3개의 Database 중 하나에서 데이터를 불러와야 한다1. 이런 상황에 맞닥뜨린 경험이 있다. 서비스 내부에 분산된 3개의 DB를 지켜보며 운영상에 발생하는 문제를 모니터링해야하는 부분이었는데 실제 Production에서는 3개의 DB를 EntityManager 레벨에서 인스턴스화 시켜서 static한 map에 담아 쓰고 있었고 여기까지 가다 보니 메모리에 부담이 꽤 크게 오는 상태였다. 우연하게 이 모듈 - 정식 모듈은 아니고, 개발팀이 반쯤 토이프로젝트처럼 관리하는 ..

Spring 2020.10.30
반응형