채널톡 아이콘
BEST

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

스프링 부트와 JPA를 활용해서 API를 개발합니다. 그리고 JPA 극한의 성능 최적화 방법을 학습할 수 있습니다.

먼저 경험한 수강생들의 후기

이런 걸 배울 수 있어요

  • 스프링 부트와 JPA를 활용해서 API를 개발하는 올바른 방법을 이해합니다.

  • 스프링 부트와 JPA를 활용해서 API 조회 성능을 튜닝하는 방법을 이해합니다.

  • 스프링 부트와 JPA를 활용해서 실무 성능 최적화 방법을 이해합니다.

스프링 부트, 실무에서 잘 쓰고 싶다면? 
복잡한 문제까지 해결하는 힘을 길러보세요.

🚩 본 강의는 로드맵 과정입니다.

  • 본 강의는 자바 백엔드 개발의 실전 코스의 2번째 강의입니다. 스프링 부트와 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를 학습합니다.

실전! Querydsl
Querydsl을 통해 복잡한 쿼리와 동적 쿼리 문제를 해결합니다.

참고 도서

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


이런 분들께
추천드려요

학습 대상은
누구일까요?

  • 실무에서 스프링 부트와 JPA를 사용하지만 해당 기술을 더 잘 활용하고 싶은 분

  • 스프링 부트와 JPA는 알지만, 올바른 API 개발 방법을 이해하고 싶은 분

  • 스프링 부트와 JPA는 알지만, 실무에 필요한 성능 최적화 기법을 이해하고 싶은 분

  • 스프링 부트와 JPA는 알지만, 실무에서 꼭 알아야 할 깊이 있는 내용을 이해하고 싶은 분

선수 지식,
필요할까요?

  • JAVA 언어

  • 스프링 프레임워크

  • 관계형 데이터베이스 기초 지식

  • JPA

안녕하세요
김영한입니다.

547,440

수강생

35,208

수강평

8,921

답변

5.0

강의 평점

24

강의

진짜 실무에 필요한 제대로 된 개발자가 될 수 있도록, 교육하는 것이 저의 목표입니다.

 

저의 개발 인생 이야기

EO 인터뷰 영상

개발바닥 - 시골 청년 개발왕 되다

취업과 이직에 대한 고민 해결

 

더보기

김영한님과 함께 하는 학습 커뮤니티

프로젝트 폴더 구조와 강의 일정에 관하여 질문이 있습니다.

김영한

지식공유자

안녕하세요 하치령님^^ 좋은 질문입니다. 먼저 1번부터 말씀드릴께요. 1. 실무에서 프로젝트 구현시 보통 폴더 구조를 어떤식으로 하시나요? -> 뭔가 약팔이 처럼 실무에서는 이렇게 하는게 정석입니다. 라고 말씀드리면 좋겠지만... 솔직하게 말씀드려서 저는 지금도 프로젝트를 진행할 때 마다 패키지 구조를 고민합니다. 왜냐하면 이 부분은 딱 정해진 정답이 있다기 보다는. 현재 프로젝트의 상황과 규모에 따라서, 거기에 맞는 유지보수하고 확장하기 쉬운 구조가 있기 때문입니다. 예를들어서 블로그 프로젝트가 정말 너무 작아서 단순하게 API 하나를 처리하면 끝난다고 하면, 그냥 패키지 하나에 다 몰아 넣고, 최대한 단순하게 처리하는 것이 좋다 생각합니다. project 그런데 프로젝트에 요구사항이 추가되면서 기능이 증가하면 이제 컨트롤러, dto, entity, 비즈니스로직을 처리하는 serivce 등으로 패키지를 분할하는게 의미를 가지겠지요. project - controller - dto - entity - serivce 여기서 프로젝트가 정말 더 커져서 여러 도메인이 추가되면 도메인 단위로 상위 패키지 개념을 더 추가할 수 있습니다. 예를 들어서 단순히 블로그 API 만 제공하다가, 회원 기능이 추가되면 다음과 같이 될 수 있겠지요. project - blog - controller - dto - entity - service - member - controller - dto - entity - service 그런데 이렇게 구성해보니까, 블로그 컨트롤러에서 회원과 관련된 서비스를 자주 사용합니다. 엔티티들도 서로 연관관계가 생깁니다. 그래서 다음과 같은 구조로 변경합니다. project - controller - blog - member - service - blog - member - entity - blog - member 여기서 더 나아가면 패키지 구조를 넘어서 멀티모듈 프로젝트로 가면서 프로젝트 자체를 여러개로 구성할 수도 있습니다. 제가 이 과정을 통해서 말씀드리고 싶은 진짜 핵심은! 프로젝트가 성장함에 따라 프로젝트 구조도 현재 상황에 맞추어 성장하고 변경할 수 있어야 합니다. 결국 이 부분은 진지한 고민과 학습 그리고 다양한 경험을 통해서 길러질 수 있는 아키텍트의 중요한 기본기라 생각합니다. 단순한 질문을 제가 좀 길게 답변을 드린 것 같네요 ㅎㅎ 다시 질문으로 돌아오면^^;; 질문: 강의와 같이 api 패키지를 하나 만들고 Controller 클래스 안에 static 클래스로 dto를 만드시나요? 아니면 api 패키지 안에서 다시 패키지들로 나누시나요? -> 이 부분은 해당 컨트롤러만 사용하는 DTO면 그 안에 만들고, 여러 클래스가 공유해야 하면 외부에 별도로 생성합니다. 패키지는 프로젝트가 복잡해지면 추가하고, 프로젝트가 단순하면 별도의 패키지를 만들지 않고 같이 둡니다. 2. 별도 강의들에 대한 일정이 혹시 있으신가요? 있으시다면 언제쯤 강의를 들을 수 있을까요? -> 조만간 공지를 할 예정이기는 합니다. 다음 강의는 실무용 스프링 데이터 JPA 그리고, QueryDSL 관련 강의를 준비하고 있습니다. 이 두 강의를 완성하면 제가 처음에 기획한 실무 강의의 큰 축이 완성됩니다. 목표는 순서대로 11월말, 12월말을 목표로 하고 있습니다. 올해까지 두 강의를 완성하고, 좀 쉬어야 겠네요 ㅎㅎ 강의를 좋게 봐주셔서 진심으로 고맙습니다. 다음 강의도 좋은 강의로 보답할께요^^!!

조회수

17,185

답변 전문보기

커리큘럼

전체

24개 ∙ (6시간 35분)

해당 강의에서 제공:

수업자료
강의 게시일: 
마지막 업데이트일: 

수강평

전체

1,252개

5.0

1,252개의 수강평

  • ckdals123456782875님의 프로필 이미지
    ckdals123456782875

    수강평 2

    평균 평점 5.0

    5

    67% 수강 후 작성

    Đó là một vấn đề lớn. Younghan càng ngày càng đẹp trai. Đây có phải là tình yêu?

    • yh
      지식공유자

      Hahaha Lee Changmin, cảm ơn bạn đã chăm chú lắng nghe. Anh yêu em haha

  • kingbbode0570님의 프로필 이미지
    kingbbode0570

    수강평 3

    평균 평점 5.0

    5

    79% 수강 후 작성

    Nếu tôi kể cho anh mọi chuyện thì sao, trưởng nhóm? Bài giảng này chứa đầy những bí quyết rất hữu ích trong thực tế. Cảm ơn bạn đã tạo ra một bài giảng tuyệt vời :)

    • yh
      지식공유자

      Haha cảm ơn bạn luôn là kingbbode tốt nhất!

  • khjvvv70387님의 프로필 이미지
    khjvvv70387

    수강평 2

    평균 평점 5.0

    5

    100% 수강 후 작성

    Tôi đã hoàn thành phần cơ bản và cách sử dụng JPA phần 1 và 2. Có nhiều bài giảng nhàm chán đến mức khó nghe nếu không bật tốc độ gấp đôi, nhưng tôi không thể mở bài giảng của Younghan ở tốc độ gấp đôi. Nội dung rất phong phú và độ căng thẳng của bài giảng tốt đến nỗi tôi có thể tập trung và nghe hết tất cả các bài giảng. Cảm ơn bạn vì bài giảng tuyệt vời~!~!

    • yh
      지식공유자

      Đẹp! Cảm ơn. Jeongwon. Thực ra tôi cũng nghĩ sự căng thẳng rất quan trọng nên tôi quay phim lại khi bớt căng thẳng haha ​​tôi đã bỏ rất nhiều công sức vào phần này và cảm thấy rất vui khi nhận được phản hồi tốt.

  • deeplyrooted님의 프로필 이미지
    deeplyrooted

    수강평 5

    평균 평점 5.0

    5

    100% 수강 후 작성

    * Bạn đã được hướng dẫn những phương pháp hay nhất nhưng bạn cũng giải thích những phương pháp chưa tốt, nhờ đó tôi có thể hiểu tại sao những phương pháp cải tiến lại trở thành phương pháp hay nhất. * Vui lòng giải thích chi tiết những sự đánh đổi như sự thuận tiện trong phát triển, hiệu suất và bảo trì. Mặc dù chúng tôi chưa gặp nhiều lưu lượng truy cập nhưng chúng tôi đã có thể biết các nhà phát triển phụ trợ cần xem xét những gì để cải thiện hiệu suất khi dịch vụ phát triển và lưu lượng truy cập tăng. * Khi nỗ lực cải thiện hiệu suất, chúng tôi hiển thị từng truy vấn SQL một và cho bạn biết hiệu suất được tối ưu hóa như thế nào và loại tối ưu hóa hiệu suất này không phải lúc nào cũng là giải pháp hiệu quả. Sau khi nghe giải thích về Spring Data JPA và QueryDSL, tôi thấy mình muốn củng cố kiến ​​thức cơ bản về DB và JPA. Cảm ơn bạn đã chia sẻ kinh nghiệm thực tế của mình trong một bài giảng tuyệt vời :)

    • yh
      지식공유자

      Bạn thực sự đã học bài giảng rất tốt ^^! Đối với tôi, việc học chuyên sâu sẽ bổ ích hơn là nhận được một bài giảng hay. Tôi sẽ luôn ủng hộ bạn.

  • wnstn0154님의 프로필 이미지
    wnstn0154

    수강평 6

    평균 평점 5.0

    5

    100% 수강 후 작성

    Nhờ có rất nhiều Q&A được đăng bởi các sinh viên cùng học Spring và JPA, nếu có thắc mắc gì về bài giảng, 90% sẽ được giải đáp bằng cách tham khảo Q&A. Đó là bởi vì Vua Younghwan luôn chú ý đến phần Hỏi đáp... Tôi thực sự kiếm tiền chỉ bằng cách trả tiền và nghe giảng.

    • yh
      지식공유자

      Tallulah, tôi nghĩ bạn càng làm việc chăm chỉ thì bạn sẽ càng nhận được nhiều hơn. ^^ Cảm ơn bạn.

김영한님의 다른 강의

지식공유자님의 다른 강의를 만나보세요!

비슷한 강의

같은 분야의 다른 강의를 만나보세요!

월 ₩279,781

5개월 할부 시

24%

₩88,000

₩1,398,904