Yun Blog

기술 블로그

좋은 코드 설계를 위한 답없는 고민들

좋은 코드 설계를 위한 고민들을 평소에 많이 해왔고, 그에 관련한 학습들도 진행했었다. OOP, DDD, Clean Code, Clean Architecture 등등을 통해서 나름의 주관이 생겼으며 경력 초반에는 이런 것들을 지키기 위해 많이 노력해왔다. 현재는 이런 개념들을 선택적으로 적용하며 또 어떠한 의미에서는 이런 것들을 지키는 것에 대해서 가......

IntelliJ 자주 사용하는 기능 및 추천 플러그인 정리

Tab Tab Limit settings -> editor tabs -> Tab Limit으로 Tab limit 설정 가능 여러 Tab을 켜도 Limit 한 설정값으로 유지, Limit 1을 추천 자주 사용하는 Tab 이동 Name Hot Key Desc Split Right fn + ctr + ➡️ 현재 화면 오른 쪽......

Kotlin groupBy, groupingBy, chunked, flatMap, aggregate 정리

groupBy 123456789101112131415161718192021222324252627282930313233data class Member( val name: String, val status: MemberStatus)enum class MemberStatus(description: String) { NORMAL("정......

Spring Batch 업데이트 성능 최적화 및 분석

아래와 같은 시나리오의 경우 배치 애플리케이션 성능을 높이기 위한 방법에 대한 내용을 정리했습니다. 시나리오 해당 배치 애플리케이션은 등록되어 있는 가맹점(Store)에 대한 상태를 외부 API를 단건으로 조회하여(단건 API만 존재) 가맹점 상태를 OPEN("오픈"),, CLOSE("폐업"), 업데이트하는 애플리케......

MySQL Batch Update 성능 측정 및 분석

JPA, Exposed 대량 업데이트 처리

MySQL 기반으로 대량 업데이트를 진행하는 경우 JPA, Exposed 프레임워크 기반으로 테스트를 진행했습니다. 결론부터 말씀드리면 Exposed 기반 Batch Update가 가장 빨랐습니다. 물론 JPA에서도 addBatch 방식을 진행하면 유의미한 속도 차이는 없을 것 같아 보이나 Exposed가 addBatch 기능을 직관적으로 지원하고 있......

테스트 대역폭 늘리기

다양한 케이스에 대한 테스트 대역폭을 늘려서 테스트 코드를 작성하는 것은 중요한 작업입니다. 로직이 복잡하고 다양한 케이스에 대응하는 코드가 있다면 이러한 테스트 대역 폭은 더욱 중요합니다. 본 포스팅은 다양한 케이스에 대한 커버리지를 높이는 방법에 대한 방법에 관한 내용입니다. Sample Code 1234567891011121314151617181......

외부 인프라스트럭처 테스트

외부 인프라를 의존하는 로직의 경우 테스트 코드를 작성하기 어려운 부분이 있습니다. 예를 들어 특정 날짜 기준으로 환율 정보를 기반으로 금액을 계산하고, 그 환율 정보를 외부 HTTP Server에 질의한다고 하면 HTTP Server가 외부 인프라라에 해당합니다. 이런 경우 대부분 Mocking을 하여 테스트 코드를 작성하게 됩니다. 이전 포스팅 M......

DataGrip 살펴 보기

DataGrip은 JetBrains에서 만든 데이터베이스 및 SQL 용 크로스 플랫폼 IDE입니다. 자세한 소개는 DataGrip에서 확인 가능합니다. 다양한 제품들이 있지만 저는 DataGrip 선호하며 애용하고 있는 제품입니다. 공식 자료에서도 충분히 다양한 기능들을 소개해 주고 있지만 개인적으로 DataGrip에 좋은 기능들을 정리해 보겠습니다.......

Spring Cloud Gateway Error Handling & Filter

Spring Cloud Gateway를 활용하여 여러 API를 서비싱 하는 경우 해당 API들은 이전에 포스팅한 Spring Guide - Exception 전략으로 통일된 Error Response를 갖게 할 수 있습니다. 하지만 게이트웨이 내부에서 발생한 예외에 대한 Error Response를 핸들링하지 않게 되는 경우는 통일된 메시지를 갖지 못......

Kotlin 기반 경량 ORM Exposed 추가 정리 part 1

Exposed 포스팅 Kotlin 기반 경량 ORM Exposed Kotlin 기반 경량 ORM Exposed 추가 정리 part 2 Kotlin 기반 경량 ORM Exposed 추가 정리 part 3 실제 자주 사용하는 기능들 위주로 다루어 보겠습니다. Table Object 123456789101112131415object Writers : L......