스프링 MVC 2편 - 백엔드 웹 개발 핵심 기술 [ 목차 ]

문지원(JiwonMoon)·2022년 9월 12일
0
post-thumbnail

전체 목차

스프링 MVC의 다양한 활용 기술을 학습합니다.
2편은 타임리프, 메시지, 국제화, 검증(Validation), 쿠키, 세션, 필터, 인터셉터, 예외 처리와 공통 기능, 확장 포인트 등 하나의 예제를 점진적으로 발전시키면서, 스프링 MVC의 다양한 활용 기술을 코드로 학습합니다.

1. 타임리프 - 기본 기능

목적 : 타임리프(Thymeleaf)는 백엔드 개발자를 위한 서버 사이드 뷰(Server-Side View) 템플릿입니다. 타임리프를 사용하면 별도의 프론트엔드 개발자가 없어도 백엔드 개발자 만으로 쉽고 빠르게 동적인 HTML을 만들 수 있습니다.

강의에서는 타임리프의 기본 기능부터, 스프링과 통합, 체크 박스, 라디오 버튼, 셀렉트 박스와 같은 복잡한 폼 관리 기능까지 모든 것을 예제를 통해서 만들어가며 학습합니다.

  • 프로젝트 생성
  • 타임리프 소개
  • 텍스트 - text, utext
  • 변수 - SpringEL
  • 기본 객체들
  • 유틸리티 객체와 날짜
  • URL 링크
  • 리터럴
  • 연산
  • 속성 값 설정
  • 반복
  • 조건부 평가
  • 주석
  • 블록
  • 자바스크립트 인라인
  • 템플릿 조각
  • 템플릿 레이아웃1
  • 템플릿 레이아웃2
  • 정리

2. 타임리프 - 스프링 통합과 폼

  • 프로젝트 설정
  • 타임리프 스프링 통합
  • 입력 폼 처리
  • 요구사항 추가
  • 체크 박스 - 단일1
  • 체크 박스 - 단일2
  • 체크 박스 - 멀티
  • 라디오 버튼
  • 정리

3. 메시지, 국제화

목적 : 웹 애플리케이션이 크고 복잡해질수록, 사용하는 다양한 메시지들을 일관성 있게 한 곳에서 관리해야 합니다. 예를 들어서 “상품명”이라는 단어를 “상품 이름”이라는 단어로 고치려면 수많은 파일의 소스코드를 수정해야 합니다. 스프링이 제공하는 메시지 기능을 사용하면 이런 것을 한번에 관리하고 수정할 수 있습니다.

국제화는 영어를 사용하는 사람에게는 사이트가 영어로 나오고, 한국어를 사용하는 사람에게는 사이트가 한국어로 나오는 기능입니다. 스프링은 이미 이러한 국제화 기능을 제공합니다. 강의에서는 스프링이 제공하는 메시지와 국제화 기능을 실제 예제를 통해서 단계적으로 학습합니다.

  • 프로젝트 설정
  • 메시지, 국제화 소개
  • 스프링 메시지 소스 설정
  • 스프링 메시지 소스 사용
  • 웹 애플리케이션에 메시지 적용하기
  • 웹 애플리케이션에 국제화 적용하기
  • 정리

4. 검증1 - Validation

목적 : 고객이 회원 가입을 할 때 입력 폼에 잘못된 값을 입력해서 서버에 전송한다면, 서버는 그 값을 검증하고 고객에게 다시 입력 폼을 보여주면서 어떤 부분이 잘못 입력되었는지 친절하게 안내해야 합니다. 이런 방식은 모든 웹 서비스에 꼭 필요한 기능입니다.

강의에서는 먼저 이러한 검증 기능을 직접 개발해 봅니다. 그리고 스프링이 제공하는 검증 기능도 사용해보고, 더 나아가서 어노테이션(Annotation) 하나로 매우 편리하게 검증 기능을 수행하는 Bean Validation 기능까지 예제를 통해 단계적으로 학습합니다.

  • 검증 요구사항
  • 프로젝트 설정 V1
  • 검증 직접 처리 - 소개
  • 검증 직접 처리 - 개발
  • 프로젝트 준비 V2
  • BindingResult1
  • BindingResult2
  • FieldError, ObjectError
  • 오류 코드와 메시지 처리1
  • 오류 코드와 메시지 처리2
  • 오류 코드와 메시지 처리3
  • 오류 코드와 메시지 처리4
  • 오류 코드와 메시지 처리5
  • 오류 코드와 메시지 처리6
  • Validator 분리1
  • Validator 분리2
  • 정리

5. 검증2 - Bean Validation

  • Bean Validation - 소개
  • Bean Validation - 시작
  • Bean Validation - 프로젝트 준비 V3
  • Bean Validation - 스프링 적용
  • Bean Validation - 에러 코드
  • Bean Validation - 오브젝트 오류
  • Bean Validation - 수정에 적용
  • Bean Validation - 한계
  • Bean Validation - groups
  • Form 전송 객체 분리 - 프로젝트 준비 V4
  • Form 전송 객체 분리 - 소개
  • Form 전송 객체 분리 - 개발
  • Bean Validation - HTTP 메시지 컨버터
  • 정리

6. 로그인 처리1 - 쿠키, 세션

목적 : HTTP는 무상태 프로토콜입니다. 따라서 로그인 기능을 유지하려면 쿠키와 세션과 같은 개념이 필요합니다. 강의에서는 먼저 쿠키만으로 로그인 기능을 만들어봅니다. 그리고 어떤 보안 문제점들이 있는지 확인한 다음에 세션을 직접 만들고 적용해봅니다.

이렇게 세션을 직접 만드는 과정을 통해서 쿠키와 세션의 동작 방식을 깊이있게 이해할 수 있습니다. 그리고 추가로 서블릿이 제공하는 세션을 학습하고 적용해봅니다.

  • 로그인 요구사항
  • 프로젝트 생성
  • 홈 화면
  • 회원 가입
  • 로그인 기능
  • 로그인 처리하기 - 쿠키 사용
  • 쿠키와 보안 문제
  • 로그인 처리하기 - 세션 동작 방식
  • 로그인 처리하기 - 세션 직접 만들기
  • 로그인 처리하기 - 직접 만든 세션 적용
  • 로그인 처리하기 - 서블릿 HTTP 세션1
  • 로그인 처리하기 - 서블릿 HTTP 세션2
  • 세션 정보와 타임아웃 설정
  • 정리

7. 로그인 처리2 - 필터, 인터셉터

목적 : 서블릿이 제공하는 필터(Filter)와 스프링이 제공하는 인터셉터(Interceptor)를 예제를 통해서 학습합니다.

먼저 가장 단순한 모든 HTTP 요청을 로그로 남기는 기능을 필터와 인터셉터로 만들어보고, 이후 인증 처리를 위한 기능도 필터와 인터셉터로 만들어봅니다. 이렇게 둘을 함께 사용해보면서 각각의 장단점을 명확히 이해할 수 있습니다.

  • 서블릿 필터 - 소개
  • 서블릿 필터 - 요청 로그
  • 서블릿 필터 - 인증 체크
  • 스프링 인터셉터 - 소개
  • 스프링 인터셉터 - 요청 로그
  • 스프링 인터셉터 - 인증 체크
  • ArgumentResolver 활용
  • 정리

8. 예외 처리와 오류 페이지

목적 : 웹 애플리케이션을 학습할 때 가장 이해하기 어려운 부분이 바로 이 예외 처리(Exception Handling)입니다. 왜냐하면 서블릿 컨테이너(WAS)와 스프링 MVC가 각각 나름의 예외 처리 방법을 제공하기 때문입니다. 그리고 실제로는 이 둘이 섞여서 복잡하게 예외 처리 메커니즘이 동작합니다. 그래서 컨트롤러에서 예외가 발생했을 때 스프링과 서블릿 컨테이너가 각각 내부에서 어떻게 동작하는지 개발자가 정확하게 이해하고 사용하기는 매우 어렵습니다.

강의에서는 서블릿 컨테이너의 예외 처리부터 스프링 MVC의 예외 처리까지 하나씩 단계적으로 풀어서 설명해 드립니다. 그래서 강의를 듣고 나면 실제 예외가 발생했을 때 서버 내부에서 어떻게 동작하고, 어떤 지점을 변경해야 할지 명확히 이해할 수 있습니다. 추가로 API를 사용할 때의 예외 처리도 함께 설명합니다.

  • 프로젝트 생성
  • 서블릿 예외 처리 - 시작
  • 서블릿 예외 처리 - 오류 화면 제공
  • 서블릿 예외 처리 - 오류 페이지 작동 원리
  • 서블릿 예외 처리 - 필터
  • 서블릿 예외 처리 - 인터셉터
  • 스프링 부트 - 오류 페이지1
  • 스프링 부트 - 오류 페이지2
  • 정리

9. API 예외 처리

  • 시작
  • 스프링 부트 기본 오류 처리
  • HandlerExceptionResolver 시작
  • HandlerExceptionResolver 활용
  • 스프링이 제공하는 ExceptionResolver1
  • 스프링이 제공하는 ExceptionResolver2
  • @ExceptionHandler
  • @ControllerAdvice
  • 정리

10. 스프링 타입 컨버터

목적 : 문자를 숫자로 변환하거나, 반대로 숫자를 문자로 변환해야 하는 것 처럼 애플리케이션을 개발하다 보면 타입을 변환해야 하는 경우가 많습니다. 예를 들어서 HTTP 요청에서 문자 "10"이 전달되어도 스프링에서는 @RequestParam으로 Integer 타입인 숫자 10으로 받을 수 있습니다. 스프링은 타입 컨버터라는 기능을 제공해서 일관성 있는 타입 변환을 지원합니다.

타입 컨버터는 스프링을 학습하면 많이 언급되는 내용이지만, 실제 어떻게 작동하는지 깊이있게 이해하기는 쉽지 않습니다. 강의를 통해 타입 컨버터의 기본에서 활용까지 예제를 통해 단계적으로 이해할 수 있습니다.

  • 프로젝트 생성
  • 스프링 타입 컨버터 소개
  • 타입 컨버터 - Converter
  • 컨버전 서비스 - ConversionService
  • 스프링에 Converter 적용하기
  • 뷰 템플릿에 컨버터 적용하기
  • 포맷터 - Formatter
  • 포맷터를 지원하는 컨버전 서비스
  • 포맷터 적용하기
  • 스프링이 제공하는 기본 포맷터
  • 정리

11. 파일 업로드

목적 : 인터넷에는 수많은 파일 업로드 예제들이 있습니다. 강의에서는 단순히 파일 업로드의 기능을 설명하는 것을 넘어서, 파일 업로드를 위해 사용하는 프로토콜을 깊이있게 설명하고 어떤 원리로 HTTP에서 파일 업로드가 가능한지 설명합니다. 그리고 파일 업로드 기능을 서블릿부터 시작해서 스프링이 제공하는 편리한 방식의 파일 업로드까지 예제를 통해 단계적으로 학습합니다.

  • 파일 업로드 소개
  • 프로젝트 생성
  • 서블릿과 파일 업로드1
  • 서블릿과 파일 업로드2
  • 스프링과 파일 업로드
  • 예제로 구현하는 파일 업로드, 다운로드
  • 정리

References (참고 자료)

0개의 댓글