전체 글 177

JVM 언어에서의 날짜 변환 문제

title: JVM 언어에서의 날짜 변환 문제 date: 2023-07-23 tags: Introduction 일반적으로 날짜를 저장한다면 yyyyMMdd 형태를 이용한다. 이러한 형식의 String 값을 날짜로 변환할 때, 일반적으로 yyyyMMdd 형식(이하 ymd)을 이용한다. Java와 Kotlin 동일하게 ymd를 사용할 때 한 가지 문제가 있다. 이 문제를 발견하고 어떻게 해결하였는지 공유한다. Problem Auto Conversion of ymd ymd의 경우 일반적인 날짜가 들어온다면 정상적으로 변환해 준다. 그렇다면 02/30, 혹은 04/31과 같이 실제로 존재하지 않는 날짜가 들어오면 어떻게 될까? class WrongLocalDateTimeFormatterTest { private..

Programming 2023.07.23

Spring Batch Test 시 DB 초기화

title: Spring Batch Test 시 Transaction date: 2023-07-18 tags: Spring Spring Batch Introduction 업무로 Spring Batch 개선 작업을 진행하였다. 이를 Test할 때 간단한 Batch임에도 매우 긴 시간이 소요되는 문제가 발생하였다. 해당 문제를 해결하고 Local 환경에서의 Build 속도를 약 500% 개선하였다. 겪은 문제를 공유하고 해결책을 알아본다. Problem Spring Batch Test 시 Transaction Spring Batch는 내부적으로 Tx을 건다. 여러 문제로 인하여 JobRepository를 이용한 테스트에서 @Transactional Annotation을 붙이면 아래와 같이 예외가 발생한다. ..

Spring Batch 2023.07.18

2023년 상반기 회고

title: 2023년 상반기 회고 date: 2023-07-16 tags: Retrospect Introduction 약 2주 정도 늦었지만 상반기를 돌아본다. 졸업 가장 할 말이 없어서 먼저 작성한다. 작년에 이미 졸업 확정이 되었고, 졸업 유예로 남아봤자 이득이 없다고 판단하여 정규직 취업을 하지 않았지만 바로 졸업하였다. 졸업식에서 볼 사람이 많았지만 아쉽게도 가지 못하였다. 인턴십-1 합격 작년 네이버파이낸셜 Winter Dev Internship에 서버 파트로 지원하였다. 데이터 엔지니어링 공부만 하였는데, 해당 직군이 없기에 서버로 지원하게 되었다. 코테는 쉽다고 생각했는데 다행히 통과, 2:1 면접까지 진행하였다. 면접은 제일 특이했고, 제일 재밌었다. 단순히 CS나 기술적인 지식을 물어보..

ETC 2023.07.16

Spring에서 JdbcTemplate Test 시 Parameter 나열 문제

title: Spring에서 JdbcTemplate Test 시 Parameter 나열 문제 date: 2023-06-01 tags: Spring Introduction JdbcTemplate을 이용한 Unit Test 작성 과정에서 Mocking이 예상대로 동작하지 않는 문제가 발생하였다. 이를 해결하기까지 많은 노력이 필요하였으며 누군가는 겪었을 문제라고 생각하지만. 관련 자료가 없기에 기록하고자 한다. Problem JdbcTemplate Mocking 프로젝트에서 Multi DataSource를 이용하고 있다. 정확히 프로그램이 실행될 때는 단일 DataSource이나, 여러 DataSource 설정을 갖추고 유동적으로 바꾸어 사용하려는 목적이다. 이에 따라 Repository에서 DataSour..

Spring 2023.06.01

Spring RestTemplate Test

title: Spring RestTemplate Test date: 2023-05-29 tags: Spring Introduction 외부 API 호출 시 RestTemplate을 이용하였다. Service 로직 중 외부 API 호출은 단 하나의 Method에서만 이루어지기에 해당 Method 내부에서 RestTemplate을 직접 선언하였다. 하지만 이로 인하여 테스트 구성에서 문제가 발생하였다. Problem 기존 Service의 API 로직은 아래처럼 구성하였다. public ResponseEntity fetchBookFromNaverApi(String keyword, boolean searchRecent) { String naverBookApiUrl = "https://openapi.naver.c..

Spring 2023.05.29

Spring RestTemplate vs WebFlux

title: Spring RestTemplate vs WebFlux date: 2023-05-20 tags: Spring Introduction 외부 API 호출 시 RestTemplate과 WebFlux 중 한 가지를 최종적으로 선택하여야 하는 상황이었다. 두 가지 모두 처음 사용하기에 모두 이용한 후 종합적으로 판단하기로 결정하였다. RestTemplate RestTemplate은 Spring 3.0에서 도입되었다. 2000년대 말 도입이지만, 안정적인 시스템이 중요한 현업에서는 2010년대에 도입이 되었을 것이다. 그렇지만 간단하게 사용할 수 있으며, WebFlux에 비하면 오래된 기술이기에 유지 보수 측면에서는 더욱 좋다고 판단하였다. public ResponseEntity fetchBookFro..

Spring 2023.05.20

Spring의 RestTemplate에서 GET 이용 시 Header 설정

title: Spring의 RestTemplate에서 GET 이용 시 Header 설정 date: 2023-05-20 tags: Spring Introduction 기존에는 외부 API 호출 시 WebFlux를 이용하였다. 다만 Non-Block으로 관리하는 것이 어려워 우선 Block을 이용하던 상황이었다. Async 및 Non-Block의 이점을 위해 WebFlux를 사용하는 것인데, 잘못 사용하고 있다는 생각을 지울 수 없었다. 결국 Spring에서 지원하는 RestTemplate으로 간단히 이용하는 것을 고려하게 되었다. 다만 RestTemplate 구현 과정에서 Header가 설정되지 않는 문제가 발생하였다. Problem 초기에는 아래와 같이 RestTemplate을 구성하였다. public ..

Spring 2023.05.20

Spring에서 정적 파일 로딩 시 ERR_ABORTED 404

title: Spring에서 정적 파일 로딩 시 ERR_ABORTED 404 date: 2023-05-18 tags: Spring Introduction Thymeleaf를 이용하여 Admin 페이지 구성 중, css 파일이 계속하여 적용이 되지 않았다. 다른 Layout 이용 -> 해당 Layout에서 또 다른 Fragment 이용 등의 구조가 문제인가- 싶었으나 이는 문제가 되지 않았다. 경로가 잘못되었는지, 개발자 도구를 이용해서 확인하면 css 파일을 찾을 수 없었다. Problem left-tab.css 파일은 프로젝트에서 resources/static/left-tab.css에 존재하였다. default 경로가 resources라고 생각하여 처럼 작성하였으나, 이것이 문제였다. Solution ..

Spring 2023.05.18

Spring에서 yml 파싱

title: Spring에서 yml 파싱 date: 2023-05-11 tags: Spring Introduction 여러 Secret Key를 로컬에서 관리해야 하는 상황인데, 이는 Github에 올릴 수 없기에 별도의 .yml을 이용해야 하는 상황이다. application.yml이 아닌 .yml을 이용할 때는 ${FOO.BAR} 처럼 값을 가져올 수 없다. 다소 번거롭더라도, 별도의 Secret 관리 서비스 없이 로컬에서 이를 관리하려면 이를 파싱하여 이용하여야 한다. Problem 파일을 읽은 후, 각 Line마다 분리하여 :을 기준으로 파싱할 수도 있다. 하지만 이 방법은 로직이 꽤나 길어질 수 있다. 이를 해결하기 위해 찾아보는 과정에서 간단한 방법을 찾을 수 있었다. Solution Snak..

Spring 2023.05.11

@Sql Annotation을 이용한 SQL Query 관리

title: @Sql Annotation을 이용한 SQL Query 관리 date: 2023-05-10 tags: Spring Introduction 최근 새로운 프로젝트의 테스트 코드 작성 중 Query 관리로 문제를 겪었다. 이전에는 각 클래스마다 String으로 DDL을 명시하였으나, 프로젝트의 규모가 커진다면 관리가 어렵다고 판단하였다. 별도의 파일로 Query를 관리하는 과정에서 겪은 문제들과 이에 대한 해결, 한계 등을 정리한다. Problem DDL의 경우, .sql 파일로 관리하는 것이 편하다고 판단하였다. 하지만 DDL을 제외한 Query는 Service 로직에서 사용되며, 이 경우 .sql 파일을 이용하려면 직접 파싱해야 한다. 이 과정은 번거로우며 확장성이 그리 좋지 않다고 느꼈으며,..

Spring 2023.05.10