본문 바로가기

전체 글

JPA n+1 문제는 왜 생기는걸까? Java ORM 기술인 JPA를 사용하다보면 필수적으로 n+1문제를 맞닫뜨리게 됩니다. 내가 의도 하지않는 쿼리가 나가고 거기다 여러번 나간다면 정말 무섭겠죠. 왜 발생하고 어떻게 해결해 나가야 정리하면 좋을 것 같아 작성하려고 합니다. 해당 글은 JPA에 대한 기본적인 내용을 숙지하셔야 합니다.. 🙃 1. JPA n+1 문제가 무엇? 흔히 n+1문제라고 하는 것은 연관관계로 매핑된 엔티티를 조회할 때 의도치 않게 첫번째 쿼리로 날린 결과만큼 n번의 쿼리가 더 나가는 것을 말합니다. 간단히 코드를 짜보겠습니다. 여러명의 Member는 하나의 Team에 소속될 수 있는 엔티티 구조가 있다고 했을 때 Member 엔티티 @Entity @Getter @Setter public class Member { @Id.. 더보기
서블릿(Servlet)이 뭔지 궁금해? 자바 웹기술 역사는 서블릿 → JSP → (서블릿 + JSP) MVC 패턴 → 스트럿츠, 웹워크 -> 스프링 MVC 요런식으로 발전해왔어요. 요즘은 Spring WebFlux라는 서블릿 기반이 아닌 Web Reactive 기반을 이용하기도 하죠. 이번 글은 자바 웹 기술의 핵심이면서 기본인 서블릿에 대해서 알아보려고해요. 같이 공부해보면 좋겠습니다. 🙃 요즘 흥하는 ChatGPT한테 서블릿에 대해 물어볼게요 ㅎㅎ 서블릿에 대해 알아보기에 앞서 먼저 HTTP 프로토콜과 웹에서 데이터를 어떻게 주고 받고 있는지에 대해서 알면 좋습니다. 웹 HTTP는 무엇일까요? 클라이언트와 서버가 데이터를 주고 받을 때 사용하는 인터넷 규약으로 서버와 서버가 데이터를 주고 받을 때도 쓰이고, HTML, TEXT, 이미지, .. 더보기
의존관계주입 or 의존성주입 with spring #3 이전 포스팅에서 자바의 다형성 만으로는 SOLID 원칙을 모두 지키기 어렵다고 했었죠? 그래서 스프링이 나왔고, 어떻게 객체지향을 지키기 위해 설계 되었는지 보시면 좋을 것 같네요. 🙃 그럼 스프링은 어떻게 이문제를 해결하려고 하는거야 ? 다형성 만으로는 SOLID 원칙을 모두 지키면서 개발하려면 할일이 너무 많아져 버렸어요. 역시 귀찮은 것을 병적으로 싫어하는 개발자는 이것을 한방에 해결할 수 있는 툴을 만들어버렸습니다. 이게 바로 스프링 프레임워크 ㅎㅎ 클라이언트 코드의 변경없이 확장할 수 있도록 구현체를 의존하지 않고 역할만 의존하도록, 그래서 다형성을 지키며 OCP, DIP를 쉽게 피할 수 있도록, 결국 스프링의 태생은 객체지향 원칙을 지킬 수 있도록 도와주기 위해 생겨 난 것입니다. 그것도 아주.. 더보기
SOLID에 대해서 쉽게 알려줄게 with spring #2 다들 설 명절은 가족과 함께 행복하게 보내셨나요? 저번 포스팅에 이어서 객체 지향 설계의 5가지 원칙의 진짜 의미와 자바의 다형성만으로 해결하지 못하는 문제를 스프링은 어떻게 도와주는 지에 대해서 열심히 적어볼게요. 함께 가시죵 ㅎㅎ 🙃 SOLID가 뭐야 ? SOLID는 클린코드의 밥아저씨로 유명한 로버트 마틴이 객체지향 프로그래밍을 설계하기 위해서 필요한 5가지 원칙을 소개했는데 앞글자 만 따서 SOLID라고 불리게 되었어요. 말그대로 시간이 지나도 유지보수와 확장이 쉽게 만들게 하기 위한 원칙이에요. 기술면접 하게되면 간혹 물어볼 수도 있는데, 내용을 완전히 이해하지 못햇다면 어? 그거 아는데 뭐였지 하는 바로 그거에요. ㅎㅎ 위키백과에서 써져있는 그대로 옮겨 볼게요. SRP (Single respo.. 더보기
좋은 객체 지향 설계란? with spring #1 다들 잘 지내시나요? 저는 요즘 인프런의 Spring을 주제로 주말마다 스터디를 하게되어서 너무나도 바쁘게 지내고 있는데요. 🥲 매일 퇴근하고 공부하는게 어느새 일상이 되어가는 것 같아요. 좋은거겠죠? 🙃 김영한님 스프링 로드맵을 따라가며 왜 스프링을 사용하고 있는지 핵심이 무엇인지 저의 시각으로 정리해서 공유하고자 합니다. 잘부탁드려요. 스프링은 왜 만들어졌을까요? 스프링이 나오기 이전에 자바진영에서는 EJB(Enterprise Java Bean)를 사용했다고 해요. EJB는 규모가 큰 애플리케이션을 개발하는데 객체를 관리하는 컨테이너를 만들어서 필요할 때 자바 객체를 재사용할 수 있도록 도와주는 것이 목표였어요. 의도는 좋으나 객체들이 너무 복잡하게 의존되어있거나 무엇보다 객체를 직렬화하는 과정에서 .. 더보기
AWS 인프라 설계 정리 원래 책으로 공부하고 직접 손으로 써보면 공부하는 것을 좋아하는지라, 교육프로그램 같은 것은 잘 보지 않는데요. 주변에서 원티드에서 제공하는 프리온보딩 백엔드 챌린지라는 것이 있는데, 도움이 되는 내용이 많다고 신청을 권유해주시더라구요. 마침 AWS와 카프카 메시지큐 시스템이 관심이 많았던지라 좋은 교육내용을 듣게 되어서 즐거웠고 직접 써보고 싶다는 생각이 많이 들더라구요. 백엔드 AWS 인프라 설계 강의 내용을 정리 해봤어요. 요즘 AWS에서는 요런 서비스를 제공하는구나.!! 라고 생각하시고 가볍게 봐주시면 감사드립니다. 🙏 교육 제공해주신 원티드와 교육 진행해주시느라 고생하신 코드너리의 조준범님께 감사하다는 말씀 드립니다. 원티드 link 코드너리 link 왜 많은 회사들이 AWS 인프라를 이용할까?.. 더보기
NHN FORWARD 22 컨퍼런스 정리 #2 (11:00~11:40) 최대한 보고 들은 내용 그대로 정리하려고 노력했는데요. 뭔가 적다보니, 너무 불친절한가 싶기도 하네요. 😅 최근에 저도 회사에서 API 서버에 Kafka Producer가 여러개 붙으면서 서버가 갑자기 죽는 이슈가 발생했었는데요. Grafana 모니터링하고 Visual VM을 이용해서 원인을 찾아서 JVM heapMemory를 튜닝해서 GC가 더 자주 돌게끔 바꿔 해결한 기억이 있어서, 재미있게 들었던 세션이었던것 같아요. 이 글에서는 메일이다 보니 수신거부를 해서 처리한게 인상깊었어요. 이 세션을 보기전에는 요청은 무조건 처리해야해.!! 라는 생각을 가지고 있었는데 상황에 따라 요청을 거부하는 방법도 취할 수 있겠구나 싶더라구요. ㅎㅎ 기회가 된다면 서버에 문제가 생기면 HTTP Cache를 활용하는 .. 더보기
NHN FORWARD 22 컨퍼런스 정리 #1 2022.11.24 NHN FORWARD 22 컨퍼런스가 3년만에 오프라인으로 진행한다고 하더라구요. 잽싸게 참가신청 완료.!! 운좋게도 ㅎㅎㅎ 참가자로 선정되었어요. 오랜만에 컨퍼런스 참가여서 가서 보고 느낀것을 공유하고자 합니다. 컨퍼런스는 삼성역에 있는 그랜드 인터컨티넨탈 서울 파르나스에서 진행했는데요. 역시 회사가 커서 그런지 규모도 크네요.!! 부럽당 😄 10시에 도착해서 키오스크에 참가자 등록을 하니 WELCOM KIT와 신분증을 나누어 받습니다. 10시에 시작하는 키노트로 간단하게 NHN 컨퍼런스에 대한 설명을 듣고 NHN에서는 어떤 기술들을 활용해서 문제를 풀어나가고 있는지 알아보면 좋을 것 같네요. NHN은 2개층에서 TRACK1 ~ TRACK7 그리고 여러 회사들의 BOOTH.!! 자유.. 더보기