전체보기 106

복잡한 정책을 고려한 코드 작성법

기획자와 협의를 하다보면 다음과 같은 말을 종종 들을때가 있습니다."이 정책은 우선 이렇게 결정되긴 했는데, 담당자 확인후 확정 드리겠습니다.""고객에 따라서 이 정책은 다르게 적용될 수도 있습니다.""특정한 조건에 해당하는 고객은 이 정책을 적용해주세요"물론 대부분의 경우 기획에 정확한 정책을 요구하는게 이상적이지만, 기한이 얼마 남지 않았거나, 고객 별로 딱 맞는 정책들을 적용하고 싶은 경우 등 어쩔수 없이 복잡하게 개발을 해야만하는 순간이 오게 됩니다.오늘은 이러한 경우에 어떻게 회사에서 해결했는지 얘기해보려고 한다. 설명에서는 실제 도메인이 아닌 할인 정책 예시 도메인을 사용하겠습니다.1. 전략 패턴가장 처음 적용한 해결책은 전략 패턴입니다.전략 패턴은 정책의 종류나 상태에 따라 동작이 달라지는 ..

QueryDSL 데드락 해결하기

문제프론트에서 특정 페이지에 접속하면 결과가 계속 넘어오지 않는 이슈를 전달디버깅을 위해 페이지에서 호출하는 각 쿼리를 일일이 호출한 결과 문제 없이 수행정말 딱 해당 페이지에 접속할때만 결과가 넘어오지 않음더 큰 문제는, 이러한 과정이 반복되면 모든 요청이 처리되지 않는 문제가 발생원인 파악1. 커넥션 확인현 프로젝트는 JPA 를 사용하고 있으며, connection leak 이 발생하면 로그를 출력하도록 설정해둠위 버그를 재현하면 다른 로그 없이 connection leak 로그가 출력커넥션의 상태를 추적하고자 함라이브러리에서 커넥션을 흭득하는 과정을 보면 다음과 같이 metricTracker에 로그를 남기는 모습을 볼 수 있음public Connection getConnection(final lon..

왜 개발자는 블로깅을 해야할까?

주위에서 개발자는 블로깅을 작성해야한다는 말을 여러번 듣는다.처음에 블로그 환경을 세팅하고 글을 작성할때는 재매있지만, 곧 흥미를 잃어버리면 글을 쓰는 것을 주저하게 된다.이 글에서는 정말로 블로그 글을 작성하는게 도움이되는지 확인하고자 한다.우선 다른 사람들이 블로그 글을 작성하는 이유를 살펴보자.hackernews 에는 Why I still blog after 15 years포스트와 댓글에 여러 토론이 있다.굉장히 양이 많지만 블로깅의 이유에 대한 내용을 요약하면 다음과 같다.블로깅의 즐거움 : 글쓰는 과정 자체가 즐겁다.생각 정리 : 글쓰기를 통해 생각을 정리하고 다양한 관점에서 고려할 수 있다. 노력 : 공개할 글의 완성도를 높이기 위해 노력하는 과정에서 코드, 아이디어를 더욱 다듬게 합니다.기록..

카테고리 없음 2024.12.02

Logback 로그 출력 검사 방법

검증을 위한 Logback 로그 출력 테스트 방법 로그 출력을 검증하는 것은 테스트 코드 작성 시 중요한 부분입니다. 특히, 로그 레벨에 따른 조건적인 출력을 검증할 때는 정확성이 요구됩니다. 이 문서는 Logback 라이브러리를 사용하여 로그 출력을 효과적으로 검사하는 방법을 설명합니다. Appender란? Appender는 Logback의 핵심 구성 요소로 로그 이벤트를 기록하는 역할을 합니다. 공식 문서에 따르면: Logback은 로깅 이벤트를 작성하는 작업을 'appender'라고 불리는 컴포넌트에 위임합니다. Appender는 ch.qos.logback.core.Appender 인터페이스를 구현해야 합니다. - Logback 공식 문서 기본적으로, 스프링 부트에는 콘솔에 로그 이벤..

카테고리 없음 2024.01.29

[Spring] Request Body 를 직접 읽을 때 주의할 점

[Spring] Request Body 를 직접 읽을 때 주의할 점 들어가며 Filter 를 이용해 로그에 Request Body 를 기록하는 기능을 추가하자 기존 API의 Request Body가 비어있는 오류가 발생했다. 원인과 해결방안에 대해서 알아보자 예시 HTTP 코드 다음과 같은 테스트 HTTP API 코드가 있다고 하자 @RestController class TestController { companion object{ val log:Logger=LoggerFactory.getLogger(this::class.java) } @PostMapping("/test/requestBody") fun test(@RequestBody message: Message): Message { return mes..

카테고리 없음 2023.12.28

[Kotlin] Companion Object vs Inner Object

Companion Object vs Inner Object 들어가며 companon object를 단순히 java의 static을 대체한다고만 하는 경우가 많아 좀 더 자세히 알아보도록 하자. companon object 에 대한 정의는 공식 문서에서 확인할 수 있다. 공식문서에서는 원리보다는 용례에 대해 중점적으로 설명하고 있는데, 여기에서는 companon object의 원리와 inner object와의 차이에 대해서 알아보고자 한다. 예시코드 class CompanionObject { companion object{ const val LIMIT=100 fun add(a: Int,b: Int): Int = a+b } } class InnerObject { object Companion{ const v..

카테고리 없음 2023.12.27

MySQL TestContainer 적용기

스프링에서 데이터에베이스에 연결해 테스트를 진행할 때는 로컬에 설치하거나 H2 인메모리 데이터베이스를 테스트 코드와 같이 실행시키는 등 다양한 방법이 있다. 이번에는 TestContainer를 이용해서 테스트 코드를 실행할 떄 MySQL 컨테이너를 실행시키고 연결해 통합테스트코드를 수행하는 방법에 대해서 알아보자. 완성된 프로젝트 코드는 링크에서 찾을 수 있다. 준비 도커 설치 MySQL 컨테이너를 실행시키기 위해선 당연히 컨테이너 실행 도구가 필요하다. 이 중 가장 대표적인 도커를 설치해보자. 링크를 통해 OS에 맞는 도커를 설치하도록 한다. 환경 변수 설정 To run Testcontainers-based tests, you need a Docker-API compatible container run..

카테고리 없음 2023.11.14

[Gradle] MySQL JDBC 연결 방법

서론 (Introduction) Java에서 JDBC를 이용해 MySQL에 연결하는 방법을 알아보고, MySQL 드라이버의 연결과정에 대해서 알아보자 본문 (Body) 1. MySQL을 실행한다. 아래 Docker Compose를 이용하면 localhost:3306을 통해서 mysql에 접속이 가능하다. 물론 도커가 아니라 직접 설치해도 된다. services: db: image: mysql:8.2.0 command: --default-authentication-plugin=mysql_native_password restart: always environment: MYSQL_ROOT_PASSWORD: example MYSQL_DATABASE: testDB ports: - 3306:3306 2. gradl..

카테고리 없음 2023.10.30

Arc browser 한국어 번역 적용 방법

현재 Arc browser를 이용해 번역을 사용하려고 하면 영어로만 번역하려고 한다. 다음 절차를 통해 한국어로 번역하도록 수정 할 수 있다. 1. 언어 설정 페이지 이동 command + L 을 입력하고 arc://settings/lanugages 를 입력한다. 2. 한국어 추가 Add languages 버튼 클릭 후 다음과 같이 한국어를 추가한다. 3. 번역 언어 설정 아래와 같이 한국어를 번역어로 설정한다. 4. 확인 아래와 같이 한국어로 번역대상이 설정된 경우 성공이다.

Etc 2023.10.19

Gradle - QueryDSL JPA 가장 간단하게 설정하기!

서론 (Introduction) QueryDSL은 ORM을 사용하다 보면 언젠가는 사용하게 될 기술 중 하나입니다. 이를 설정하는 법을 구글링해보면 표준적인 설정 방법이 없기 때문에 각기 다른 방법을 제시하고 그만큼 설정에 에러를 많이 겪는 경우가 보입니다. 여기에서는 자바 버전에 따라 가장 간단하게 QueryDSL을 설정하는 방법을 알아보고, 각 설정의 의미에 대해서 서술해보도록 하겠습니다. 본문 (Body) 간단한 QueryDSL 원리 설정에 대해 알아보기전, 간단하게 QueryDSL의 원리에 대해 알면 설정을 이해하기 쉽습니다. 만약, 빠르게 설정만 하고 싶다면 아래 (QueryDSL 설정)를 바로 참고하시기 바랍니다. QueryDSL은 "쿼리를 안전하고 쉽게 하기 위한 도메인 특화언어(DSL, D..

카테고리 없음 2023.10.14