스프링 부트 3가 어떤 구조인지, 그리고 어떤 과정을 통해 실행되는지 코드와 함께 살펴봅니다.
여기를 공부하면 스프링 부트 3가 어떤 구조로 이루어져 있고, 앞으로 프로젝트를 진행할 때 어떤 구조로 진행해야 하는지에 대한 감을 잡을 수 있을 겁니다.
프레젠테이션 계증
비지니스 계층
퍼시스턴스 계층
1. 스프링 부트 3 구조 살펴보기
2. 스프링 부트 3 프로젝트 발전시키기
3. 스프링 부트 요청-응답 과정 한 방에 이해하기
스프링 부트 프로젝트의 계층
- 프레젠테이션 계층은 HTTP 요청을 받고 비즈니스 계층으로 전송
- 비즈니스 계층은 모든 비즈니스 로직을 처리하며 퍼시스턴스 계층에서 제공하는 서비스를 사용할 수도 있고, 권한을 부여하거나 유효성 검사를 진행
- 퍼시스턴스 계층은 모든 스토리지 관련 로직을 처리하며 이 과정에서 데이터베이스에 접근하기 위한 객체인 DAO 를 사용
스프링 부트 3에서 테스트 코드를 어떻게 작성하는지 알아보고 실습을 하며 이해합니다.
Junit
AssertJ
@Test
given-when-then
1. 테스트 코드 개념 익히기
2. 스프링 부트 3와 테스트
3. 제대로 테스트 코드 작성해보기
테스트 코드가 무엇인지를 알아보고 Junit 을 사용해서 스프링 부트에서 테스트 코드를 작성
- 테스트 코드를 작성하면 코드의 기능이 제대로 작동한다는 것을 검증할수 있으며 테스트 코드는 보통 테스트를 준비하는 given, 테스트를 실제로 진행하는 when, 텟트 결과를 검증하는 then 으로 구분
- JUnit 은 단위 테스트를 할 때 사용하는 자바 테스트 프레임워크이며 @BeforeAll 애너테이션으로 설정한 메서드가 실행되고, 그 이후에는 테스트 케이스 개수만큼 @BeforeEach -> @Test -> @AfterEach 의 생명주기를 가지고 실행. 모든 테스트가 완료되면 마지막으로 @AfterAll 애너테이션으로 설정한 메서드가 실행되고 종료
- AssertJ 는 JUnit 과 함께 사용해 검증문의 가독성을 높여주는 라이브러리
SQL 을 몰라도 데이터베이스를 조작할 수 있게 해주는 편리한 도구인 ORM 을 학습
스프링 부트의 ORM 기술 표준인 스프링 JPA 와 이를 구현하기 위한 하이버네트를 사용
DBMS
ORM
JPA
하이버네이트
엔티티
영속성 컨텍스트
스프링 데이터 JPA
데이터베이스와 ORM 의 개념을 알아보고 나서 자바의 ORM 기술 표준인 JPA 와 이를 구현하기 위한 하이버네이트 학습
1. 데이터베이스란?
2. ORM 이란?
3. JPA 와 하이버네이트?
4. 스프링 데이터와 스프링 데이터 JPA
5. 예제 코드 살펴보기
1. ORM 은 객체와 데이터베이스를 연결하는 프로그래밍 기법
2. JPA 는 자바에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
- 엔티티는 영속성을 가진 객체를 의미
- 엔티티 매니저는 엔티티를 관리하며 조회, 삭제, 수정, 생성하는 역할 수행
- 엔티티 매니저를 만드는 곳이 엔티티 매니저 팩토리
- 엔티티 매니저는 엔티티를 영속성 컨텍스트에 저장한다는 특징
- 영속성 컨텍스트는 1차 캐시, 쓰기 지연, 변경 감지, 지연 로딩의 특징
- 엔티티의 상태는 분리, 관리, 비영속, 삭제 상태로 구분
3. 하이버네이트는 JPA 의 구현체 중 대표적인 구현체로, 자바 언어를 위한 ORM 프레임워크
4. 스프링 데이터 JPA 는 JPA 를 쓰기 편하게 만들어 놓은 모듈
블로그 글을 만들고(create), 조회하고(read), 업데이트하고(update), 삭제하는(delete) RESTful API를 만들고 스프링 부트 3와 JPA를 어떻게 사용하는지 학습
REST API
CRUD
테스트 코드
롬복
1. 사전 지식: API와 RESTful API
2. 블로그 개발을 위한 엔티티 구성하기
3. 블로그 글 작성을 위한 API 구현하기
4. 블로그 글 목록 조회를 위한 API 구현하기
5. 블로그 글 조회 API 구현하기
6. 블로그 글 삭제 API 구현하기
7. 블로그 글 수정 API 구현하기
1. REST API 는 웹의 장점을 최대한 활용하는 API로,자원을 이름으로 구분해 지원의 상태를 주고받는 방식
2. JpaRepository 를 상속받으면 Spring Data JPA 에서 지원하는 여러 메서드를 간편하게 사용
3. 롬복을 사용하면 더 깔끔하게 코드를 작성
4. 테스트 코드를 작성하면 코드의 기능이 제대로 작동한다는 것을 검증
스프링 부트에서 제공하는 템플릿 엔진인 타임리프를 사용해서 블로그 화면을 개발
글 목록을 볼 수 있는 화면, 글 내용을 확인할 수 있는 상세 화면,수정이나 생성할 수 있는 수정 화면으로 구성
템플릿 엔진
타임리프
모델
1. 사전 지식: 타임리프
2. 블로그 글 목록 뷰 구현하기
3. 블로그 글 구현하기
4. 삭제 기능 추가하기
5. 수정/생성 기능 추가하기
6. 생성 기능 마무리하기
1. @Controller 는 반환값으로 뷰를 찾아 보여주는 애너테이션
2. 템플릿 엔진은 데이터를 넘겨받아 HTML 에 데이터를 넣어 동적인 웹페이지를 만들어주는 도구
3. 타임리프는 스프링의 대표적인 템플릿 엔진이며 컨트롤러에서 모델을 통해 데이터를 설정하면, 모델은 뷰에서 사용할 수 있게 데이터 전달
스프링 기반의 애플리케이션의 보안(인증, 인가)을 담당하는 스프링 하위 프레임워크인 스프링 시큐리티를 사용해서 회원 가입, 로그인, 로그아웃 기능 구현
인증
인가
스프링 시큐리티
SecirutyFilterChain
UserDetails
1. 사전 지식: 스프링 시큐리티
2. 회원 도메인 만들기
3. 시큐리티 설정하기
4. 회원 가입 구현하기
5. 회원 가입, 로그인 뷰 작성하기
6. 로그아웃 구현하기
7. 실행 테스트하기
1. 인증은 보호된 리소스에 접근하는 것을 허용하기 이전에 등록된 사용자의 신원을 입증하는 과정
2. 인가는 특정 부분에 접근할 수 있는지에 확인하는 작업
3. 스프링 시큐리티는 스프링 기반의 애플리케이션 보안(인증, 인가, 권한)을 담당하는 스프링 하위 프레임워크이며, 필터 기반으로 동작
각 필터에서 인증 인가와 관련된 작업을 처리하며, 기본적으로 세션 & 쿠키방식으로 인증 처리
토큰 기반 인증과 JWT, 리프레시 토큰의 개념을 이해하고 토큰 기반 인증인 JWT 토큰 서비스를 구현하고 적용
토큰 기반 인증
JWT
리프레시 토큰
필터
1. 사전 지식: 토큰 기반 인증
2. JWT 서비스 구현하기
3. 토큰 API 구현하기