이런 걸 배울 수 있어요

  • 스프링 부트와 JPA를 활용해서 API를 개발하는 올바른 방법을 이해합니다.
  • 스프링 부트와 JPA를 활용해서 API 조회 성능을 튜닝하는 방법을 이해합니다.
  • 스프링 부트와 JPA를 활용해서 실무 성능 최적화 방법을 이해합니다.

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

자바 진영에서는 스프링 부트와 JPA를 활용해서 웹 애플리케이션을 개발하는 것이 세계적인 추세입니다. 그래서 많은 개발자들이 이 두 기술을 학습하고 사용합니다. 하지만 실무의 다양하고 복잡한 상황에 성능까지 고려하면서, 이 기술들을 재대로 활용하는 것은 생각만큼 쉽지 않습니다.

실무에서는 기능을 개발할 줄 아는 단계를 넘어서 기술 문제를 해결할 수 있어야 합니다. 복잡하고, 데이터도 많은 상황에서 성능을 최적화하고, 동시에 유지보수하기 쉬운 애플리케이션을 개발해야 합니다.

강의 목표


1편에서는 웹 애플리케이션을 개발하면서 기능 구현에 초점을 맞추었다면, 2편은 기능 개발을 넘어서 기술 문제를 해결하는데 초점을 맞추었습니다. 재대로 구현하는 방법은 무엇인지, 실무에서 주로 어떤 성능 문제가 있고, 어떻게 해결해야 하는지, 기술 문제를 해결할 수 있게 도와드립니다.

 API 재대로 구현

API 하나를 개발해도 JPA를 사용하면, 엔티티라는 개념이 들어가면서 고민할 거리가 많아집니다. 엔티티를 API에 직접 노출해야 하나? 아니면 별도의 객체를 별도로 만들어서 반환해야 하나? 엔티티를 반환하면 지연 로딩은 어떻게 처리해야 하나? 등등 수 많은 고민을 하게 됩니다. 실무에서 어떻게 구현하는 것이 안전하고, 유지보수하기 좋은 방법인지 실전 노하우를 알려드립니다.

 JPA 극한의 조회 성능 최적화 이해

실무에서는 여러 테이블을 조인해서, 빠르게 데이터를 조회해야 하는 복잡한 상황이 자주 발생합니다. 그런데 여기에 일대다 관계인 컬렉션 데이터도 함께 조회해야 하고, 추가로 페이징까지 처리해야 할 수 있습니다. 그러면 문제가 매우 복잡해져서 단순히 테이블 조인만으로는 문제 해결이 어렵습니다. 이런 복잡한 조회 성능 문제들을 JPA로 어떻게 최적화 하는지, 그리고 한계는 어디까지인지 실전 노하우를 알려드립니다.

 복잡한 예제를 코딩으로 6단계로 나누어 성능 튜닝

성능이 안나오는 API를 직접 개발해보고, 왜 성능이 안나오는지 분석하고, 6단계로 나누어서 단계별로 직접 코딩하면서 튜닝할 수 있게 준비했습니다. 이런 내용을 따라하다 보면 자연스럽게 실무의 복잡한 성능 이슈를 어떻게 대처해야 할지 알 수 있습니다.

 실무 JPA 성능 문제의 90% 해결

이번 강의는 여러분이 실무 JPA 성능 문제의 90%를 해결할 수 있도록 실무에서 정말 자주 발생하는 다양한 성능 문제를 담았습니다. 스프링 부트와 JPA로 진행하는 실무 프로젝트를 보면 기능 구현은 잘하는데, 프로젝트 마지막에 성능이 안나와서 고생하는 개발자 분들을 정말 많이 봤습니다. 그래서 도와드리러 가보면 JPA 성능 최적화를 어떻게 해야 하는지 모르는 분들이 많았습니다.

몇일 밤을 새면서 어떻게든 해결하려고 하는 분 부터, 방법을 모르니 JPA 대신에 SQL을 직접 한땀한땀 작성해서 수 많은 코드를 SQL로 변경하시는 분 까지 정말 다양한 상황을 보았습니다. 그런데 막상 도와드리러 가서 실제 성능이 잘 나오도록 튜닝하는데는 5분이 걸리지 않았습니다. JPA 쿼리 옵션을 조절하고, 약간의 코드만 수정했는데, 몇일 고생을 해도 1시간씩 걸리던 쿼리가 수십초로 줄어드는 것을 본 개발자 분의 표정이 아직도 생생합니다. JPA는 그 이미 그 자체로 다양한 성능 튜닝 옵션을 제공합니다. 따라서 약간의 옵션과 코드 수정만으로 다양한 성능 최적화를 시도할 수 있습니다.

여러분도 이 강의에서 설명하는 내용을 이해하면 90%의 실무 성능 문제를 해결할 수 있습니다.

주요 목차

최근에는 뷰 템플릿을 사용해서 직접 서버에서 HTML을 만들어서 응답하기 보다는, API에 JSON 데이터를 실어서 반환하는 경우가 많습니다. 스프링 부트와 JPA를 사용해서 API를 개발할 때 주의할 점과 올바른 설계 방향을 이해하고, 성능까지 고려해서 API를 완성하는 것이 이번 편의 목표입니다.

2편은 1편에서 만든 도메인을 기반으로 REST API를 개발합니다. 그리고 단계적으로 조회용 API의 성능을 최적화 합니다. 이 과정을 통해 실무에서 꼭 필요한 JPA의 조회 쿼리 튜닝과 관련된 부분을 속 시원하게 풀어드립니다.

  • API 개발 기본: 기본적인 등록, 수정, 조회용 REST API를 개발합니다.
  • API 개발 고급: 실무에서 JPA로 조회용 API를 개발할 때, 주의점과 올바른 설계 방향을 알려드립니다. JPA 지연 로딩 이슈를 해결하고, 단계별로 다양한 성능 최적화 방안을 설명합니다.
  • 실무 필수 최적화: 스프링 부트와 JPA를 사용할 때 주의해서 사용하지 않으면 실무에서 장애로 이어질 수 있는 OSIV 내용을 다룹니다.

학습 방법

이 강의는 대부분 실습으로 이루어져 있습니다. 따라서 처음부터 끝까지 본인이 직접 코딩을 하면서 강의를 따라가야 가장 많은 것을 얻을 수 있습니다.

참고로 이 강의는 스프링 부트와 JPA를 어느정도 알고, 간단한 웹 애플리케이션 정도는 개발 할 수 있는 분이 대상입니다. 이 분들이 기능 구현을 넘어서 기술적으로 깊이있는 이해를 할 수 있게 도와드리는 것이 목표입니다. 따라서 스프링 부트와 JPA에 대한 이해가 부족하면 1편 강의를 먼저 듣는 것을 권장합니다.

주의!

1편에서 설계한 도메인 모델을 기반으로 API를 개발하고, 다양한 성능 최적화 기법을 보여드립니다. 따라서 1편 강의를 듣고 2편 강의를 듣는 것을 권장합니다.

연관된 강좌

자바 ORM 표준 JPA 프로그래밍 - 기본편
JPA 기반 기술을 이해하는데 필요한 선수 강좌입니다.

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

스프링 부트와 JPA로 실제 웹 애플리케이션을 설계하고 개발합니다.

실전! 스프링 데이터 JPA

기초부터 실무까지 스프링 데이터 JPA를 학습합니다.

참고 도서

책은 더 깊은 내용을 공부하고 싶은 분들을 위한 참고서로 생각하시면 됩니다. 
(책이 없어도 강의를 위한 별도의 자료가 제공됩니다.)

수강 대상

  • 실무에서 스프링 부트와 JPA를 사용하지만 해당 기술을 더 잘 활용하고 싶은 분
  • 스프링 부트와 JPA는 알지만, 올바른 API 개발 방법을 이해하고 싶은 분
  • 스프링 부트와 JPA는 알지만, 실무에 필요한 성능 최적화 기법을 이해하고 싶은 분
  • 스프링 부트와 JPA는 알지만, 실무에서 꼭 알아야 할 깊이 있는 내용을 이해하고 싶은 분

선수 지식

  • JAVA 언어
  • 스프링 프레임워크
  • 관계형 데이터베이스 기초 지식
  • JPA

교육과정

모두 펼치기 23 강의 6시간 38분
섹션 0. 강좌 소개
3 강의 05 : 25
강좌 소개
05 : 25
수업 자료
2편 추가 자료
섹션 1. API 개발 기본
3 강의 54 : 06
회원 등록 API
25 : 45
회원 수정 API
11 : 29
회원 조회 API
16 : 52
섹션 2. API 개발 고급 - 준비
2 강의 21 : 19
API 개발 고급 소개
05 : 11
조회용 샘플 데이터 입력
16 : 08
섹션 3. API 개발 고급 - 지연 로딩과 조회 성능 최적화
4 강의 81 : 00
간단한 주문 조회 V1: 엔티티를 직접 노출
27 : 54
간단한 주문 조회 V2: 엔티티를 DTO로 변환
21 : 29
간단한 주문 조회 V3: 엔티티를 DTO로 변환 - 페치 조인 최적화
09 : 13
간단한 주문 조회 V4: JPA에서 DTO로 바로 조회
22 : 24
섹션 4. API 개발 고급 - 컬렉션 조회 최적화
8 강의 164 : 28
주문 조회 V1: 엔티티 직접 노출
11 : 12
주문 조회 V2: 엔티티를 DTO로 변환
16 : 27
주문 조회 V3: 엔티티를 DTO로 변환 - 페치 조인 최적화
25 : 20
주문 조회 V3.1: 엔티티를 DTO로 변환 - 페이징과 한계 돌파
42 : 41
주문 조회 V4: JPA에서 DTO 직접 조회
20 : 30
주문 조회 V5: JPA에서 DTO 직접 조회 - 컬렉션 조회 최적화
11 : 09
주문 조회 V6: JPA에서 DTO로 직접 조회, 플랫 데이터 최적화
15 : 04
API 개발 고급 정리
22 : 05
섹션 5. API 개발 고급 - 실무 필수 최적화
1 강의 31 : 19
OSIV와 성능 최적화
31 : 19
섹션 6. 다음으로
2 강의 40 : 40
스프링 데이터 JPA 소개
18 : 03
QueryDSL 소개
22 : 37

공개 일자

2019년 10월 31일 (마지막 업데이트 일자 : 2019년 12월 6일)

수강 후기

4.9
15개의 수강평
kingbbode 1달 전
다 알려주면 어떻게 하나요 팀장님! 실무에서 많은 도움이 되었던 노하우들이 가득한 강의입니다. 좋은 강의 제작해주셔서 감사합니다 :)
MoonHyuck Song 1일 전
도움이 많이 되었습니다. 실무에서는 이거는 아예 고려하지말고 이걸 쓰는게 좋다라고 더 명확하게 설명되면 좋을 것 같습니다. 감사합니다.
김영한 프로필

김영한 50분 전
MoonHyuck Song님 소중한 수강평 감사합니다^^ 제가 강의 앞부분에서는 명확하게 이 부분은 사용하면 안됩니다. 라고 말씀 드린 부분이 제법 있는데 이 부분은 정말 고려하지 말고 사용하지 않으면 됩니다^^ 반면에 강의 뒷 부분의 내용들은 실무의 상황에 따라서 여러 방식 중에 하나를 선택해야 하는 부분이 많습니다. 성능과 코드 유지보수 사이에 트레이드 오프 때문이지요. 그래서 뒷 부분의 내용들은 실무에서 다양한 선택지를 함께 고려하면서 지금 상황에 맞는 적정한 선택을 하는게 필요합니다. 이렇게 상황이라는 문맥 때문에 다양한 고려가 필요합니다. 강의 중간에 궁금한 내용은 언제든지 편하게 문의주세요^^

지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스