개발자취

· 개발자취
문제상황 프로젝트에서 시간 관련 객체는 모두 타임존 정보가 없는 LocalDateTime 객체로 처리되고 있다. 사실 별 이유가 있었던 것은 아니고 잘 몰라서였다.(흑흑) 서버의 타임존은 KST로 설정되어있었기 때문에 요청값과 응답값이 모두 별도의 타임존 값 없이 암묵적으로 KST 시간대로 통일되어 돌아가고 있었다. 그런데 프로젝트에 여러 클라이언트들이 붙으며 작업을 할수록 문제가 생겼다. 서비스에서 사용자 개인이 직접 표시 시간대를 설정할 수 있고, 이 설정값에 따라서 KST로 설정되어있는 시간 데이터를 다시 적절히 계산하여 내려줘야하는데 이걸 서버 측에서 모두 하자니 누락되는 부분이 발생할 확률이 매우 높았고, 표시 시간대 데이터를 매번 조회해야하므로 성능상 좋지도 않았다. 결국 성능과 유지보수 측면..
· 개발자취
서론 입사 후 가장 많은 커밋을 남긴 프로젝트라고 한다면 역시 PHP 기반 레거시 코드를 Java + Spring Boot 기반 프로젝트로 마이그레이션 한 메일 API가 되겠다. 비슷한 시기에 개발된 모바일 애플리케이션에서만 선제적으로 배포되어 다소 시험적으로 운영되던 해당 프로젝트는 이제 정말 웹 환경에서의 본격적인 릴리즈를 앞두고 있다. (두근두근) 릴리즈가 얼마 남지 않은 현 시점에서, 프로젝트 중 가장 많은 트래픽을 받을 것으로 예측되는 엔드포인트의 쿼리가 어떤 식으로 개선되어왔는지 정리하고자 한다. 참고로 사내 메일 데이터는 MySQL 데이터베이스에서 관리되고 있으며, 본문에 작성되는 코드들은 모두 예시를 위해 임의로 작성되었음을 알린다. 문제상황 메일 API에서 가장 많은 트래픽을 받는 엔드포..
· 개발자취
서론 최근에 사내에서 실시한 기술 세미나 이른바 테코톡에서 테스트 코드를 주제로 발표를 하게되었다. 언제부턴가 테스트 코드가 없으면 불안함을 많이 느끼는 터라 테스트를 잘 짜기 위해선 무엇이 중요할지, 테스트 코드가 가져올 수 있는 긍정적인 영향은 무엇일지에 대해 많은 고민을 해왔었다. 그 과정에서 테스트 코드 리팩토링을 통해 속도, 메모리 등과 관련해 테스트 환경도 개선해보고, 테스트 커버리지 100% 적용, ATDD 등 다양한 경험을 해볼 수 있었다. 하지만 그렇다보니 준비 과정에서 오히려 하고 싶은 말이 너무 많아져서 발표 주제의 방향성이 모호해지는 걸 느꼈다. 그러다가 2023 인프콘에서 이민우님께서 발표하신 "인프런에서는 수천 개의 테스트 코드를 이렇게 다루고 있어요"를 보고 깊은 인상을 받아서..
· 개발자취
서론 사내 프로젝트에서 새로운 API를 추가한 후, MockMvc를 통해 통합 테스트를 하는 과정에서 계속해서 오류가 발생했다. 테스트 코드 로그를 통해 자세한 오류를 확인한 결과, 요청이 엉뚱한 RequestHandler에게 가고 있었다. 예컨대, 아래와 같이 API가 정의되어있다고 가정해보자. @RestController public class OrderController { @RequestMapping(method = RequestMethod.GET, value = "/orders/{no}", produces = "application/json") public long getOrder(@PathVariable long no) { ... } // 새로 추가 @RequestMapping(method =..
· 개발자취
https://seongonion.tistory.com/145 생애 첫 오픈소스 컨트리뷰트 도전기 (1) https://seongonion.tistory.com/144 Java Mail API의 SharedFileInputStream 오류(로 추정되는 것) 수정해보기 SharedFileInputStream? A SharedFileInputStream is a BufferedInputStream that buffers data from the file and supports the mark and reset m seongonion.tistory.com 위 글과 이어지는 내용입니다. 테스트 코드를 추가하고 얼마 후, 리뷰를 해주던 jmehrens가 갑자기 살짝 갸우뚱한 얘기를 했다. 대략적으로 해석해보자면,..
· 개발자취
https://seongonion.tistory.com/144 Java Mail API의 SharedFileInputStream 오류(로 추정되는 것) 수정해보기 SharedFileInputStream? A SharedFileInputStream is a BufferedInputStream that buffers data from the file and supports the mark and reset methods. It also supports the newStream method that allows you to create other streams that represent subsets of the fil seongonion.tistory.com 위 수정사항을 Java Mail API에 PR로 ..
· 개발자취
SharedFileInputStream? A SharedFileInputStream is a BufferedInputStream that buffers data from the file and supports the mark and reset methods. It also supports the newStream method that allows you to create other streams that represent subsets of the file. A RandomAccessFile object is used to access the file data. Note that when the SharedFileInputStream is closed, all streams created with the..
· 개발자취
문제상황 사내에서 진행 중인 프로젝트의 테스트 코드와 관련된 문제는 꽤 오래전부터 체감되어왔다. 1. 테스트 코드 OOM(메모리 이슈) https://seongonion.tistory.com/140 에서 적은 바 있던 내용이다. 스프링 테스트코드 메모리(OOM)이슈 해결 아닌 회피기 어느 날 CI 파이프라인 중 테스트 실행 단계에서 지속적으로 OOM 에러가 나며 빌드에 실패하는 현상을 발견했다. 확인을 위해 로컬 환경에서 테스트 실행 시 현상이 재현되진 않았으나, 신기하게 seongonion.tistory.com 해당 문제를 분석하며 파악한 문제점은 다음과 같았다. @SpringBootTest 를 사용하는 테스트 코드들이 ApplicationContext 캐싱 hit rate가 낮아 매번 새로운 컨텍스트..
SeongOnion
'개발자취' 카테고리의 글 목록