no image
[JPA] QueryDSL에서 enumPath 사용하기
회사에서 SQL 쿼리를 작성하다 보니 CASE WHEN을 사용해야 하는 경우가 있었는데(안티패턴으로 취급되기도 하지만) QueryDSL에서 CASE WHEN 과 함께 enum 으로 받고 싶어서 사용해보다가 뭔가 이상한 구석이 있어서 한번 기록으로 적어보았다. QueryDSL에서 CASE WHEN 사용법의 경우 이곳에 잘 정리되어 있다.사용법우선 EnumPath 를 사용할 경우 예시로 아래와 같이 사용할 수 있다.@RequiredArgsConstructorpublic class SomeRepositorySupportImpl implements SomeRepositorySupport { private final JPAQueryFactory queryFactory; @Override p..
2023.11.30
no image
[GIT] Upsource 말고 Jetbrains 에서 GitLab 통합 기능으로 코드 리뷰를 해보자
코드 리뷰를 도와주는 도구 중 Jetbrains 에서 만든 Upsource 라는 유명한 도구가 있다. 하지만 2022년 2월에 지원 종료를 하면서 기존에 사용하는 유저들만 계속 지원하고, 신규로 사용하고자 한다면 Space 라고 하는 통합 개발 플랫폼을 이용하라고 말한다. 현재 회사에서는 Upsource 를 이용하고 있지 않았고, 통합 개발 플랫폼도 사실상 GitLab 을 사용하고 있었기 때문에 Space 를 사용할 수도 없었다. 코드 리뷰를 하기 위한 도구를 물색하면서 Codestream 이라던가 다른 도구들을 살펴보았지만, Upsource 만큼의 편의성을 제공하는 도구는 없어보였다. Jetbrains 의 Marketplace 에서 GitLab MR 관련된 플러그인이 있긴 했지만 유료였다. 그렇게 딱히..
2023.10.15
no image
[GIT] 특정 시점에서의 변경 내역만 되돌리기
회사에서 다른 분이 작업했었던 브랜치가 master 에 병합이 되었는데 적용하지 말아야 하는 경우가 생겨서 이미 다른 사람들까지 병합이 된 상황에서 되돌려야 하는 경우가 생겼다. $ git log --oneline --graph * f82c9d2 (HEAD -> master, tag: v1.16.7o, origin/master, origin/HEAD) Merge branch 'hotfix/EMTT-350' into 'master' |\ | * cf2113f (origin/hotfix/EMTT-350, hotfix/EMTT-350) feat: cache key 확인 후 없으면 api 호출하도록 수정 | * adb8f11 refact: 인자 수정 | * e1653bd refact: isset 은 null 확..
2023.09.14
no image
[Spring] RestTemplate 과 MessageConverter 사이의 Converter 순서 이슈
계기회사에서 내가 만들어둔 라이브러리를 다른 팀에서 사용하고 있는 경우가 있었는데, 어느 날 갑자기 다른 팀에서 아래와 같은 메세지가 나타난다고 확인 요청이 왔다.java.lang.IllegalStateException: org.springframework.web.client.HttpClientErrorException$BadRequest: 400 Bad Request: "{"errors":["failed to parse JSON input: invalid character '\u003c' looking for beginning of value"]}"이게 갑자기 나타날리가 없어서 어떤 작업을 한 후에 나타났냐고 물으니, build.gradle 에 아래와 같은 의존성을 추가하면 위와 같은 에러가 나타난다고..
2023.02.05
no image
[회고] Graylog 에서 ELK 까지의 작업 후기
사내에 로그가 남겨지고 있는 서비스들이 대부분 파일로 관리되고 있는 것이 많았는데 그 중에서 많은 트래픽이 오는 두 개의 서비스 로그 지표를 확인해보고 싶었다. 기존에는 정작 애플리케이션 단위에서 얼마나 요청이 들어오고 나가는지, 어떤 데이터가 얼마나 들어오는지를 개발팀에서 알 수 있는 방법이 없어 실제로 장애 상황이 일어났을 때도 연관 데이터를 쉽게 분석하기 어려웠다.또한, 로그가 파일로 남겨지고 있어서 SE 분들이 로그를 삭제해도 되는지에 대한 문의가 우리팀에게 간헐적으로 전달되었고, 우리가 직접 서버로 들어가서 삭제하거나 SE 분들이 삭제하곤 했다. 이런 이슈를 이번에 따로 개선해보고 싶었다. 팀에서 해당 서비스의 로그는 오랫동안 보관하기에는 중요하지 않은 로그라고 판단했고, 주기는 1~3개월 정도..
2023.02.05
no image
[Spring] 컬럼이 많은 상황에서 Reflection 시 ConversionService 활용해보기
배경회사에서 100개가 넘는 컬럼들을 다루어야 하는 경우가 있었다.100개가 넘는 컬럼들 중 섹션별로 일부의 데이터를 추가하거나 수정할 수 있어야 했고, 기존의 데이터와 서로 다른지 판단할 수 있어야 하며 이를 로그로도 남겨야 하는 요구사항이 있었다. 예를 들면 Entity 가 아래와 같은데, @ExampleSection 이라는 Annotation 으로 섹션을 분리한 뒤 사용자가 원하는 Section 별로 데이터를 저장하거나 수정할 수 있어야 하는 것이다.@Entity(name = "exampleEntity")@Table(name = "EXAMPLE_ENTITY", schema = "GREATSCHEMA")@DynamicInsert @DynamicUpdate@Builder@Getter@NoArgsCons..
2022.11.21
no image
[Spring] AutoConfiguration 직접 만들어서 라이브러리로 만들어보기
Spring 에서는 상당히 많은 AutoConfiguration 을 제공해주고 있는데, 따로 라이브러리를 만들면서 직접 만들 수도 있다.테스트로 하나 만들어보자 구성우선 구조는 아래처럼 잡고 멀티모듈로 구성했다.autoconfigure - Spring Boot 에서 자동으로 AutoConfiguration 이 적용되는 로직 관련somelogic - 비즈니스 로직// root - build.gradlebuildscript { ext { projectVersion = '1.0.0' projectGroup = 'kr.pe.karsei' springBootVersion = '2.7.5' springDependencyVersion = '1.0.15.RELEA..
2022.11.11
no image
[여행] 베어트리파크에 다녀오다 (22/10/29, feat. Nikon D5600)
가을 단풍이 막 물들고 있었고 구경가보고 싶어져서 다녀왔다.대충 위치는 아래세종시에 있는 곳인데 돈이 아깝지 않을 정도로 좋았다.맞은편에는 레스토랑 건물이 있었는데 양식 위주로 메뉴가 있었다.당일에 결혼식이 있었는데 그곳에서 결혼식도 같이 할 수 있는 곳인 것 같았고 이런 곳에서 하는 것도 나쁘지 않은 것 같다.베어트리파크하면 '베어' 답게 '곰' 이 빠질 수 없다.'곰' 을 볼 수 있었다.
2022.10.29
no image
[여행] 피나클랜드에 다녀오다 (22/10/15, feat. Nikon D5600)
어디 갈까 하다가 가족들이 여기 홍보하는 걸 어디서 본걸 딱 떠올라서 한번 가보게 되었다.수목원이나 식물원, 정원 등의 장소를 가는 것을 좋아해서 들리게 되었다.규모는 꽤 큰 것 같았고 생긴지는 얼마 되지 않아 보였다.  주차장은 상당히 커서 무리는 없었지만 그보다는 주차장까지 가는 길목이 상당히 협소했다.약간 경사진 길이 있는데 나중에 돌아갈 때를 생각해보니 앞에 큰차가 뒤로 밀려나게 된다면 큰 사고가 날 수 있을 것 같으므로 여기 부분은 나중에 잘 해결이 되었으면 좋을 것 같다.매표소는 주차장 옆에 있는 길을 계속 따라 걸어가다보면 왼쪽에 있다.현장에서도 발권할 수 있고, 인터넷에서도 발권할 수 있다.미리 인터넷 예매를 하고 가면 줄서서 기다리지 않고 바로 티켓을 받아서 갈 수 있다. (현장에서 줄서..
2022.10.29