본문 바로가기

반응형

개발/Spring&JPA

(15) GITHUB 방명록
[JPA] N+1 문제와 Query 성능 개선 (Fetch Join) 개발/Spring&JPA / 2023. 5. 11. 안녕하세요😎 백엔드 개발자 제임스입니다 :) 오늘은 JPA에서 발생하는 N+1 문제에 대해서 알아보도록 하겠습니다. 이 문제는 JPA를 사용할 때 데이터베이스 쿼리를 최적화하지 않아서 발생하는 성능 이슈입니다. 아마 우리는 자주 겪었을 텐데요. 인지하지 못한 채 지나쳤을 수도 있습니다. 한 가지 질문을 해보겠습니다. :) 웹 애플리케이션을 구현하면서, 콘솔에 SQL 쿼리가 본인 생각과 다르게 많은 양이 나간 적이 있을까요? 가령 하나의 데이터를 요청했지만, 2~3개 그 이상의 SQL 쿼리가 던져지는 것처럼 말입니다. (아니면 의문을 가져본 적이 없었나요? 🤣) 이 질문은 N+1 문제와 관련이 있습니다. 이제 이 문제가 무엇이며, 어떠한 해결 방법이 있는지 알아보겠습니다. N+1 문제란? JPA에서 N+1..
[JPA] 도메인 클래스 컨버터 사용하기 개발/Spring&JPA / 2023. 4. 20. 안녕하세요😎 백엔드 개발자 제임스입니다 :) 오늘은 Spring Data JPA에서 제공하는 도메인 클래스 컨버터에 대해서 알아보겠습니다. 도메인 클래스 컨버터란? 도메인 클래스 컨버터는 Spring Data JPA에서 제공하는 클래스입니다. 해당 클래스는 엔티티의 ID를 엔티티로 변환하는 기능을 수행합니다. 따라서 컨트롤러에서 파라미터로 받는 ID를 엔티티로 바인딩하여 바로 객체로 받아 사용할 수 있습니다. 도메인 클래스 컨버터 사용 전 아래 이미지의 코드는 회원 Rest 컨트롤러입니다. 그 안에는 Get 메서드의 회원 관련된 API가 있습니다. 이 API는 Path 파라미터로 사용자의 ID를 받고, 해당 사용자의 닉네임을 변경한 뒤 응답 메시지를 전송합니다. (보통 트랜잭션은 서비스 계층에서 처리되지..
[JPA] @Transactional과 JPA의 플러시와 변경 감지(Dirty Checking) 개발/Spring&JPA / 2023. 4. 8. 안녕하세요😎 백엔드 개발자 제임스입니다 :) 오늘 다룰 주제는 스프링과 JPA를 다루는 개발자 혹은 백엔드 개발자에게 중요한 내용이 될 수 있겠다고 예상합니다. 그 이유는 실제로 개발을 진행하면서 많이 접하게 되는 개념이기 때문입니다. 저는 이번 내용에 대해서 분석하다 보니, JPA와 트랜잭션에 대해서 보다 더 알게 된 것 같아 굉장히 즐거웠습니다. 오늘 내용을 이해하고, 함께 성장하는 개발자가 되면 좋겠습니다. 설명 전에 가볍게 돌발 퀴즈로 시작하도록 하겠습니다. 내용이 다소 길더라도 천천히 끝까지 읽어주세요! 현재 철수는 [모임 관리 서비스] 개발을 진행하던 중, 모임 생성 기능을 구현하려고 합니다. 해당 기능의 요구사항은 아래와 같습니다. * 모임 생성 기능 요구사항 1) 서비스의 회원이 모임에 필..
[스프링] 'JavaMailSender'를 통한 이메일 발송 기능 구현 (Gmail SMPT) 개발/Spring&JPA / 2023. 3. 23. 지난 포스팅 해당 포스팅에서는 Gmail SMPT를 활용합니다. 아직 Gmail SMPT 설정 방법을 모르신다면, 아래 게시글을 읽어주세요. 2023.03.21 - [DEVELOPER/Programming] - [SMTP] 메일 전송을 위한, Google Gmail SMTP 설정 [SMTP] 메일 전송을 위한, Google Gmail SMTP 설정 안녕하세요😎 백엔드 개발자 제임스입니다 :) 최근에 스프링 부트로 웹을 개발하던 중 인증 메일 전송 기능을 구현하게 되었습니다. 항상 웹에서 회원가입을 진행할 때마다 받게 되는 인증 메 kang-james.tistory.com 안녕하세요😎 백엔드 개발자 제임스입니다 :) 오늘은 [스프링 부트에서 Email 전송 기능을 구현하는 방법]을 알아보도록 하겠습니다. ..
[스프링] @Controller와 @RestController의 차이를 알고 있나요? 개발/Spring&JPA / 2023. 3. 20. 안녕하세요😎 백엔드 개발자 제임스입니다 :) 스프링 프레임워크를 사용하여 개발을 한다면, @Controller와 @RestController를 빈번하게 사용하게 됩니다. 가령 프론트엔드 개발자들과 협업을 하기 위해 API를 개발한다면, @RestContoller를 많이 접할 것입니다. 그렇다면 두 어노테이션의 차이를 알고 계신가요? 오늘은 두 어노테이션의 차이에 대해서 알아보도록 하겠습니다. @Controller와 @RestContoller는 무엇인가요? 간단하게 @Controller와 @RestController에 대해서 알아보도록 하겠습니다. 두 어노테이션은 스프링에서 컨틀로러 역할을 수행할 객체에 지정해 주는 어노테이션입니다. 먼저 @Controller는 주로 Spring MVC 컨트롤러에 지정합니..
[스프링 시큐리티] 비인증 사용자를 위한 '익명 사용자' 알아보기 개발/Spring&JPA / 2023. 3. 15. 안녕하세요😎 백엔드 개발자 제임스입니다 :) 오늘 포스팅할 내용은 스프링 시큐리티와 관련된 내용입니다. 제가 프로젝트를 진행하면서 인증과 관련된 기능을 구현하던 중이었습니다. 해당 기능의 요구사항은 인증된 회원과 비인증 회원에게 서로 다른 데이터를 제공하는 역할을 하는 것이었습니다. 따라서 Security Context Holder에 인증 정보가 있는지 체크를 해야 했습니다. 여기서 저는 비인증 회원이라면, Security Context에 당연히 인증 정보가 없을 것이라고 이분법적인 사고를 했습니다. 만약 저의 논리에 따른다면, 비인증 회원의 요청에 해당 메서드는Null을 리턴하겠죠? 하지만 문제는! Null 체크를 진행한다면, Null 이 아닌 결과가 나옵니다. 제 생각과는 완전히 달랐습니다. 위에..

반응형