p6spy로 로그 포맷팅
Back-end/Spring Boot, JPA2023. 6. 16. 15:25p6spy로 로그 포맷팅

JPA 로그를 보다보면 select ~ from 테이블 where col1 = ? and col2 = ? 로 포맷팅 되지 않은 형태로 sql 로그가 찍히는 걸 볼 수 있다 1. 개행 없음 2. 바인딩 되는 파라미터 정보 부재 spring data jpa 기능으로만 위 1, 2 문제는 해결이 가능하다, 그러나 select ~ from 테이블 where col1 = ? and col2 = ? ~ binding parameter ['1'] ~ binding parameter ['philz'] 로 파라미터와 sql로그가 따로 찍혀서 불편하게 해석해야 한다 따라서 p6spy를 이용하면 저 물음표 자리에 파라미터 정보를 넣어서 편하게 볼 수 있다 select ... from 테이블 where col1 = '1' a..

[Gradle] 기존의 프로젝트의 이름(group, artifact) 바꾸기
Back-end/Build (Gradle, Maven)2023. 6. 13. 11:19[Gradle] 기존의 프로젝트의 이름(group, artifact) 바꾸기

때로, 기존 프로젝트를 작업하다가 원본 프로젝트를 그대로 둔 채 이름을 바꾸고 싶을 때가 있다 현재 내가 그런 상황에 있다, ticketing-service보다 performance-ticketing-service로 바꾸고 싶은 것,, 이에 따라 Git도 변경해주면 된다 (이건 GPT가 잘 설명해줬다.) 기존에 내가 알고 있던 것과 일치하고, 명령어도 다시 한 번 점검 후 사용했다 Gradle 프로젝트 변경하기 다만 GPT-4가 Gradle 변경은 아쉽게 알려주었다 우선 나의 경우 매번 잊기 때문에 (왜냐하면 이걸 할 일이 많지 않음) 확인하는 수단이 따로 있다 아래 사이트로 이동하자 (이 사이트를 모르면서 Spring 개발하는 분은 없겠지..?) https://start.spring.io/ 자기 상황에..

Spring Cloud Config 을 이용한 빠른 YAML 리펙터링
Back-end/Spring Cloud, MSA2023. 5. 29. 15:02Spring Cloud Config 을 이용한 빠른 YAML 리펙터링

보통 yaml 파일을 리펙터링하면 서버를 재기동하면서 제대로 설정됐는지를 확인한다 내 노트북 같은 경우 보통 재기동하면 40초 ~ 2분 정도의 시간이 걸린다... 참으로 답답하지 않을 수 없다 Spring Cloud Config 을 이용하면 변경한 yaml 파일을 동적으로 반영해서, 빠르게 리펙터링을 해나갈 수 있다 우선 아래 정보를 참고해서 Spring Cloud Config을 설정한다 (설명이 친절하지 않아서 미안...) - Section 7: Cloud Configuration (tistory.com) - Section 8, 9: Cloud Bus, 암호화 (tistory.com) 아래와 같은 상황이 있다고 가정해보자 (내 상황이었음) 정~말 긴 yml 파일이 있는데... route 설정 정보로 인..

Gradle dependency 분리 하면서 생긴 문제, 해결
Back-end/Build (Gradle, Maven)2023. 5. 28. 17:38Gradle dependency 분리 하면서 생긴 문제, 해결

멀티모듈을 하면서 갑자기 잘만되던 eureka에 api gateway 등록이 안되었다 문제가 무엇인지 보니 아래처럼 dependency가 없어졌던걸 확인했다 위처럼 applicatoin.yml를 확인하면, 속성을 reslove하지 못한 것 위주로 import하면 해결할 수 있다 (컴파일 문제의 경우 빌드 자체가 실패하기 때문에 쉽게 알아낼 수 있다) 나의 경우 eureka client 의존성이 없는게 문제였다 아래처럼 dependencies 추가하면 간단히 해결된다 dependencies { // Service Registry Client implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client' }

Gradle 멀티모듈 - 의존성을 관리하는 두 가지 방법
Back-end/Build (Gradle, Maven)2023. 5. 28. 15:43Gradle 멀티모듈 - 의존성을 관리하는 두 가지 방법

그레이들을 건드리면서 한숨을 참 많이 한것 같다 ( 이 코끼리자식아 ) 머만 하면 컴파일 에러가 뜨지 않나... 자바와는 다르게 빠르게 시행착오를 통해 배우는게 쉽지 않다 사실 지금도 정확히 안다기보다는 대략 이런 느낌으로 하면 버그를 없앨 수 있지않을까... 하면서 진행했던게 도움이 되었다 공식문서, 유튜브 등을 참고 해봤지만 크게 도움되지는 않았던 것 같다 서론이 길었다, 멀티 모듈하면서 공통 의존성들이 많이 생긴다. 이걸 관리하는 방법은 크게 두 가지이다 이펙티브 자바식으로 얘기하면 상속과 조합이다 (Gradle에서 공식적으로 사용하는 용어가 아닙니다!) 상속 부모 디렉터리에 공통 의존성을 정의한다 그러면 자식은 그 의존성을 받기만 하면 되며 별다른 설정은 하지 않아도 된다 예를 들면, 내가 실제로..

IDEA에서 Kotlin을 사용 중 감동한 건에 대해서... (null 검증)
Back-end/Java, Kotlin2023. 5. 21. 20:58IDEA에서 Kotlin을 사용 중 감동한 건에 대해서... (null 검증)

주말에 코틀린 코딩 중에 감동을 했다... 바로 젯브레인 IDEA에서 리펙터링 추천을 한 거에 대한 건데... 평소 같으면 Optional의 orElseThrow를 통해서 예외 처리를 했겠지만, 코틀린의 문법 + IDEA의 지원을 믿었나 역시나 다를까... 위 캡쳐처럼 엘비스 연산으로 줄일 수 있는데, 안하겠냐고 추천을 한다!! 역시... 흑흑 감동 젯브레인과 그의 자녀 코틀린.. 난 오늘도 감동하면서 코딩을 한다 (쮸르륵...)

Gradle 성능 최적화
Back-end/Build (Gradle, Maven)2023. 5. 12. 02:30Gradle 성능 최적화

여러 블로그에서 소개한 방법대로 gradle.properties에 캐싱, 병렬처리 등을 추가해서 비교해보았다 사내 프로젝트를 기준으로 22초 -> 7초로 줄어든 것을 확인하였다... 작은 설정으로 큰 쾌거를 이루었다 참고 gradle build 속도 | 폭간의 기술블로그 (sejoung.github.io) Improve the Performance of Gradle Builds

Gradle 멀티 모듈하면서 배운 것들
Back-end/Build (Gradle, Maven)2023. 5. 12. 02:15Gradle 멀티 모듈하면서 배운 것들

Gradle을 통해서 멀티 모듈로 구성을 할 수 있다 나는 MSA를 하기 위해 구성했다 이렇게 하면 좋은 점 중 하나는 아래처럼 인텔리제이가 지원하는 기능을 사용할 수 있다 프로젝트 최상단에 build.gradle을 두면 각 모듈은 해당 파일을 기본적으로 먼저 해당 정보를 적용한다 allprojects { ... } subprojects { ... } allprojects는 루트 모듈과 모든 하위 모듈에 대해 subprojects는 루트 모듈을 제외한 모든 하위 모듈에 대해 적용을 하겠다는 block이다 이렇게 해서 공통 설정 정보를 몰아넣을 수 있다 만일 어떤 한 모듈만 루트의 build.gradle의 어느 한 의존성만 사용하고 싶지 않을 때가 있다 예를들어, 루트 build.gradle에는 톰캣 기반..

Spring Boot 3.x에서 H2 DB 설정
Back-end/Spring Boot, JPA2023. 5. 12. 00:10Spring Boot 3.x에서 H2 DB 설정

최근에 H2 DB를 사용하면서 복습겸 알게된 사실이 있어서 간단히 작성했다 먼저 스프링 부트 3.x 기준으로 더 이상 이전 버전의 H2를 설정할 수 없다 강의를 보며 MSA 프로젝트 진행 중, 기존 방식대로 되지 않아서 H2를 서버모드로 바꾸어서 진행했다 H2의 두 가지 모드:: Embed, 서버 모드 H2에는 Embed(내장)과 서버 모드가 있는데 Embed은 스프링 부트에 포함된 H2를 돌리는 것이고 서버모드는 직접 H2를 수동으로 실행한 후에 스프링 부트를 실행해서 접근해서 사용하는 방식이다 서버모드는 Embed와 달리 서버를 중단시켜도 데이터가 휘발되지 않는다 서버모드를 사용하기 위한 과정은 아래와 같다 1. H2를 실행 2. H2 Embed 설정으로 실행한후 서버 종료 3. H2 서버 모드로 실..

Java ZoneDateTime 에 대해서
Back-end/Java, Kotlin2023. 5. 8. 23:34Java ZoneDateTime 에 대해서

GMT, UTC부터 이해하면 많은 도움이 된다 우선 둘은 거의 동일한 용어이다 (실제로는 둘 사이의 시차가 몇미리초 정도 차이가 난다고 한다) 초기에는 영국에서 그리니치 천문시를 만들고 (GMT) 후에 UTC가 되었다 영국시 기준으로 0시라 가정할 때 우리나라는 상대적으로 +9시간을 더해서 시차를 계산한다 단순히 일시를 나타내는 LocalDateTime과는 달리 ZoneDateTime은 Zone에 따른 시차까지 고려한다 ZoneDateTime은 크게 두가지 정보 ZoneId는 아시아/서울 등의 지역 정보 ZoneOffset은 +9 등의 단순 시각 정보를 갖는다 ZoneOffset은 ZoneId를 상속한다 존이 다르더라도 epoch 시각으로 변환해서 대소관계를 비교할 수 있다 (isEqual()를 사용해야..

Back-end/Java, Kotlin2021. 7. 14. 09:55Thread에 대한 것들

쓰레드 생성은 아래와 같다. 방식은 크게 두가지이다. class ThreadSapmle extends Thread { @Override public void run() { StringBuffer sb = new StringBuffer("Running ThreadSample "); } } public Class Main { public static void main(String[] args) { ThreadSample th = new ThreadSample(); ThreadSample th2 = new ThreadSample(); th.start(); th2.start(); } } class RunnableSapmle implements Runnable { @Override public void run()..

spring security
Back-end/Spring Boot, JPA2021. 5. 5. 22:51spring security

whitesheep 백기선님 강의 정주행중.. Password history 부분을 읽고 있다. docs.spring.io/spring-security/site/docs/5.1.5.RELEASE/reference/htmlsingle/#core-services-password-encoding Spring Security Reference The authenticator is also responsible for retrieving any required user attributes. This is because the permissions on the attributes may depend on the type of authentication being used. For example, if binding..

image