🎉 경축 🎉 무려 23년 7월에 게시하였고 12월에 Merge, 그리고 그 이후 3개월 후인 오늘 Jakarta mail-api 2.1.3 버전에서 나의 PR이 릴리즈되었다 😊 남들이 보면 별 거 아닌 것일수도 있지만... 학생 시절엔 이런 건 도대체 어떤 사람들이 하는걸까 싶었는데 직접 해보니 감개가 무량하다. 무엇보다 어디사는지 어떻게 생겼는지도 모르는 사람이랑 몇 달간 커뮤니케이션하면서 문제 해결 과정을 공유한 것이 너무 좋은 재미있었고 좋은 경험이었다! 개발하면서 이건 왜 이렇게 했을까 저건 왜 저렇게 했을까 불편함을 참 많이 느끼는 나인데 또 다른 프로젝트들도 드나들면서 고칠만한 거 없는지 더 찾아봐야겠다 흐흐흐 글 보러가기https://seongonion.tistory.com/145 생..
개발자취
서론 입사 후 가장 많은 커밋을 남긴 프로젝트라고 한다면 역시 PHP 기반 레거시 코드를 Java + Spring Boot 기반 프로젝트로 마이그레이션 한 메일 API가 되겠다. 비슷한 시기에 개발된 모바일 애플리케이션에서만 선제적으로 배포되어 다소 시험적으로 운영되던 해당 프로젝트는 이제 정말 웹 환경에서의 본격적인 릴리즈를 앞두고 있다. (두근두근) 릴리즈가 얼마 남지 않은 현 시점에서, 프로젝트 중 가장 많은 트래픽을 받을 것으로 예측되는 엔드포인트의 쿼리가 어떤 식으로 개선되어왔는지 정리하고자 한다. 참고로 사내 메일 데이터는 MySQL 데이터베이스에서 관리되고 있으며, 본문에 작성되는 코드들은 모두 예시를 위해 임의로 작성되었음을 알린다. 문제상황 메일 API에서 가장 많은 트래픽을 받는 엔드포..
서론 최근에 사내에서 실시한 기술 세미나 이른바 테코톡에서 테스트 코드를 주제로 발표를 하게되었다. 언제부턴가 테스트 코드가 없으면 불안함을 많이 느끼는 터라 테스트를 잘 짜기 위해선 무엇이 중요할지, 테스트 코드가 가져올 수 있는 긍정적인 영향은 무엇일지에 대해 많은 고민을 해왔었다. 그 과정에서 테스트 코드 리팩토링을 통해 속도, 메모리 등과 관련해 테스트 환경도 개선해보고, 테스트 커버리지 100% 적용, ATDD 등 다양한 경험을 해볼 수 있었다. 하지만 그렇다보니 준비 과정에서 오히려 하고 싶은 말이 너무 많아져서 발표 주제의 방향성이 모호해지는 걸 느꼈다. 그러다가 2023 인프콘에서 이민우님께서 발표하신 "인프런에서는 수천 개의 테스트 코드를 이렇게 다루고 있어요"를 보고 깊은 인상을 받아서..
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가 낮아 매번 새로운 컨텍스트..
어느 날 CI 파이프라인 중 테스트 실행 단계에서 지속적으로 OOM 에러가 나며 빌드에 실패하는 현상을 발견했다. 확인을 위해 로컬 환경에서 테스트 실행 시 현상이 재현되진 않았으나, 신기하게도 swagger를 업데이트 해주는 openapi3 task 중 현상이 발생했다. (왜 그런지 아시는 분? ㅠ) 처음에는 테스트코드에서 Mocking을 위해 읽어들인 파일 쪽에 문제가 생겨 발생한 것으로 추측하였으나, 확인 결과 해당 코드는 큰 문제가 없음을 확인했다. (byte로 직접 쓰는 부분이 없었다) 다행스럽게도 로컬환경에서 재현이 되었기 때문에 Heap Dump를 떠서 누수 원인을 분석해볼 수 있었다. Heap Dump 확인 결과, org.hibernate.metamodel.internal.Metamodel..