[Spring] JVM 웜업
·
Project/Spring
문제 상황현재 백엔드 개발자로 참여하고 있는 서비스에서 JVM 웜업 문제를 해결하는 작업을 맡았다.먼저 Data Dog으로 배포 시간대의 Latency graph를 확인했다. 9시 40분 경에 배포를 했는데 그 시간대에 몇몇 api의 응답속도가 눈에 띄게 느려진 것을 확인할 수 있었다.이렇게 배포 직후 응답 속도가 느려지는 것을 JVM의 'cold start' 라고 한다. 정확히는 JVM의 JIT 컴파일러 때문에 발생하는 것이다.JIT 컴파일러JVM은 처음 실행된 메서드를 인터프리터로 돌리다가, 충분히 실행되면 JIT 컴파일을 통해 최적화한다. 이런식으로 최적화 하는 이유는 JVM의 특징과 관련이 있는데 Java는 자체적인 byte code를 사용하기 때문에 byte code를 기계어로 변환하는 과정이..
DTO 변환의 책임은 누구에게 있는가
·
Project/Spring
이 글을 쓰게된 배경프로젝트를 진행하다보니 문득 서비스 계층의 절반이 엔티티를 DTO로 변환하는 코드인 것이 보여서 이걸 이대로 두는 것이 맞는지 다른 사람들은 어떻게 하고 있는건지 더 좋은 방법은 없는건지 궁금해 져서 알아보는 겸 이 글을 작성했습니다. 컨트롤러 vs 서비스인터넷 검색을 해본 결과 사람들은 주로 DTO 변환을 컨트롤러 계층 vs 서비스 계층 으로 두고 의견이 많이 갈렸습니다.저는 컨트롤러 계층에서 DTO 변환을 한다는 건 생각도 못했기 때문에 신선했습니다.DDD 4계층에 따르면 컨트롤러는 사용자에게 UI를 제공하는 역할이 컨트롤러의 역할입니다. DTO가 사용자에게 어떤 데이터를 보여줄 지 결정하는 것이기 때문에 위 원칙에 따르면 컨트롤러에 있는 것이 더 바람직해 보입니다. 서비스 계층은..
커넥션 풀 vs 복잡한 로직 비용 비교
·
Project/Spring
이 글을 쓰게 된 배경최근에 팀원들과 테이블 설계 과정에서 의견 갈등이 생겨 긴 시간 회의를 했습니다. 테이블 설계를 위해 여러가지 의견을 나눴는데 그 중에 서로 다른 견해를 가지고 있었던 것이 있었습니다. 그것은 바로 하나의 커넥션 비용과 여러개의 복잡한 로직 중 어느것이 비용이 더 큰가 에 대한 내용이었습니다. 저는 그래도 복잡한 로직이 100개 1000개가 넘어가면 복잡한 로직의 비용이 더 비쌀 것이라는 입장이었지만 팀원의 의견은 달랐습니다. 회의에서는 유지보수성의 이유로 결정을 내렸지만 저는 개인적으로 이 것이 궁금해서 이 글을 작성하게 되었습니다. 다룰 내용커넥션 처리 과정복잡합 로직 계산 비용결론실제 테스트커넥션 처리 과정커넥션 비용 계산에 앞서 커넥션이 어떻게 처리되는지 알고 있어야 어느 부..
연관관계 매핑이 꼭 필요한가
·
Project/Spring
이 글을 쓰게 된 배경최근에 현업에서는 연관관계 매핑을 지양한다는 말을 들었습니다. 저는 처음 백엔드 공부를 시작할 때 JPA부터 시작했기 때문에 당연히 모든 사람들이 연관관계 매핑을 사용한다고 생각했고, 다른 방법에 대해서 생각해본 적이 없었습니다. 지금까지 아무런 의심없이 연관관계 매핑을 사용하고 있었던 제 과거를 반성하는 의미에서 이 글을 쓰며 연관관계 매핑의 트레이드오프에 대해서 알아보겠습니다.추후에 프로젝트에서 어떤 방법을 채택했는지에 대해서도 적겠습니다.다룰 내용연관관계 매핑이란연관관계 매핑의 장점연관관계 매핑의 문제점연관관계를 사용하지 않을 때채택 과정연관관계 매핑이란?연관관계 매핑이란 객체와 객체 간의 연결이 필요할 때 두 객체간의 관계에 맞게 매핑해 주는 것을 말합니다. 객체지향에서는 두..