[Spring] /actuator 엔드포인트에 인터셉터 적용 문제

Intro 사이드 프로젝트에 actuator 를 적용해보았다. 그런데 /actuator 경로를 그냥 오픈하고 싶지는 않았는데, 마침 기존에 관리자 페이지 접근 권한 부여를 위해 사용하던 인터셉터가 하나 있어서, actuator 엔드포인트에 등록 해 두고 그대로 사용하면 되겠다 싶었다. 아래 코드는 기존의 인터셉터 등록에 관련된 코드. @SpringBootApplication(exclude = [UserDetailsServiceAutoConfiguration::class]) @EnableJpaAuditing @EnableScheduling class DutyparkApplication( private val authService: AuthService, private val jwtConfig: JwtCon..

Programming/JPA ⁄ Spring 2023.05.15
여러개의 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
Gradle-Kotlin 멀티모듈 생성하기

Intro 프로젝트를 진행하다보면 분리에 대한 고민이 드는 시점이 종종 있습니다. 당장 필요해서 열심히 구현하고보니 다른 프로젝트에서도 자주 쓰일 것 같을 때도 있고, 다른프로젝트에서 여기에 있는 기능을 가져다 쓰려고 하는데 전부 포함시키기에는 불필요한 의존성이 너무 많을 때도 있습니다. 가장 쉬운 방법은 Copy And Paste(CNP방법론) 이 있겠지만, 그렇게 복사해낸 코드에 변경사항이라도 필요하면 일일히 복사된곳을 찾아가서 하나하나 고쳐줘야 하는 번거로움이 있습니다. DRY(Don't Repeat Yourself) 원칙을 위배하면 나중에 수습하기가 참 고생입니다. 특히, 서로간 통신이 빈번해 동일한 도메인을 공유해야하는 프로젝트간에는 이 공통된 객체간의 동기화가 보장되는게 정말 중요합니다..

Programming/Kotlin 2023.03.18
[Java] JaCoCo로 코드 커버리지 측정하기

Intro Code Coverage 코드 커버리지는 작성한 소스코드중 얼마나 많은 부분이 자동화된 테스트에서 실질적으로 실행되었는지를 측정할 수 있는 지표 입니다. 높은 코드 커버리지는 테스트가 실행되는 동안 소스코드의 더 많은 부분이 실제적으로 실행된것을 의미하기 때문에 보다 낮은 커버리지의 프로그램에 비해 버그가 발생할 확률이 더 낮다고 기대할 수 있습니다. 물론 높은 커버리지가 더 좋은 테스트임을 보장하는 것은 아닙니다. 특히 최근의 트랜드처럼 급한 템포의 개발이 이루어지는 상황에서도 빠르게 만들어낼 뿐만 아니라 신뢰수준이 높고 좋은 퀄리티의 코드를 작성하기 위해서는 정말 중요한 지표라고 생각됩니다. 진행중인 사이드 프로젝트에서 코드 커버리지를 측정하고 해당 지표를 조금씩 개선해보는 실습을 진행 해..

Programming/Java 2023.02.25
[Java] Primitive vs Wrapper class 기본형 타입과 래퍼클래스

Intro 자바에서 기본형 타입과 래퍼클래스 간에는 변환이 자동으로 이루어지기 때문에 그 차이를 굳이 인식하지 않고도 어렵지 않게 코드를 작성할 수 있습니다. 그나마 스트림을 사용할 때나 필요에 의해 명시적으로 .boxed() 나 .mapToInt() 를 호출하게 되는데요. 모두 아시는 것처럼 primitive와 각각의 Wrapper 클래스는 많은 차이가 있습니다. 그 차이점에 대해 자세히 다루어 보려고 합니다. 둘의 차이에 대해 이해하기 위해서는, 먼저 자바의 스택 메모리와 힙 메모리에 대한 이해가 필요합니다. Stack Memory vs Heap Space JVM은 메모리를 효율적이고 효과적으로 관리하기 위해 Stack과 Heap으로 불리는 두 가지 영역으로 메모리를 분리했습니다. 우리가 새로운 변수..

Programming/Java 2023.01.12