스프링 MVC 12

[Spring] 예외 처리와 오류 페이지

사용자가 잘못된 URL로 접근하거나 서버 내부에서 문제가 발생하는 경우 사용자는 404 Not Found와 같은 오류 페이지를 만나게 된다. 아무래도 일반적인 사용자 입장에서 알 수 없는 오류가 가득 적힌 페이지를 마주하게 된다면 무슨 문제 때문인지 파악하기 어려울 것이다. 실제 이런 오류 페이지가 잘 설계된 웹 사이트를 보면 오류 페이지도 깔끔하고 무슨 문제가 있는지 잘 보여준다. 이런 예외 상황들을 어떻게 처리하고 오류 페이지를 사용자에게 보여주는 방법들에 대해서 알아보자. 예외 처리는 스프링 기술을 사용하지 않은 순수 서블릿 컨테이너에서의 예외 처리, 스프링이 지원하는 예외 처리 두 가지 방식에 대해서 알아볼 것이다. - 서블릿의 예외 처리 서블릿은 다음 두 가지 방식으로 예외 처리를 지원한다. X..

Spring 2023.07.28

[Spring] 로그인 처리 - 쿠키, 세션

- 요구사항 홈 화면 요구사항 홈 화면은 로그인 전과 후로 구분되어야 한다. 로그인 전 로그인 후 보안 요구사항 로그인 사용자만 상품관리에 접근하고, 관리할 수 있어야 한다. 로그인 하지 않은 사용자가 상품관리에 접근하면 로그인 화면으로 이동해야 한다. - 메인 홈 화면 로그인 하지 않았을 때 기본적으로 보여줄 홈 화면과 로그인 시 보여줄 홈 화면, 2개의 뷰를 따로 개발한다. - 회원가입 검증기능을 포함한 Member 도메인 클래스를 만든다. MemberRepository에 회원 저장, 조회기능을 개발한다. 이전에 상품 도메인을 개발한 것과 매우 유사한 형태이다. 이제 MemberController를 개발한다. @GetMapping 요청이 들어오면 회원가입 폼을 반환해준다. @PostMapping 요청..

Spring 2023.07.26

[Spring] 애노테이션 기반의 Bean Validation

지난 포스팅 : https://dong-woo.tistory.com/94 [Spring] 유효성 검증 - Validation 지금까지 만든 웹 애플리케이션은 폼 입력 시 바인딩 오류가 발생하면 400 Bad Request 화면으로 이동했다. 아마 사용자 입장에서 이런 오류 페이지를 만난다면 당황할 것이다. 또한 입력값을 공백 dong-woo.tistory.com 지난 포스팅에서 유효성 검증, Validation 방식에 대해 점진적인 발전을 거치며 살펴봤다. 하지만 코드가 복잡하다. 자바는 Bean Validation이라는 애노테이션 기반의 검증 방식을 지원해 보다 간단한 코드로 검증 로직을 구현할 수 있다. Bean Validation에 대해 알아보자. - Bean Validation 이란 @NotNul..

Spring 2023.07.25

[Spring] 유효성 검증 - Validation

지금까지 만든 웹 애플리케이션은 폼 입력 시 바인딩 오류가 발생하면 400 Bad Request 화면으로 이동했다. 아마 사용자 입장에서 이런 오류 페이지를 만난다면 당황할 것이다. 또한 입력값을 공백으로 비워놔도 정상처리가 됐다. 웹 서비스는 폼 입력 시 오류가 발생하면, 고객이 입력한 데이터를 유지한 상태로 어떤 오류가 발생했는지 알려주는 것이 기본이다. 입력값의 유효성을 검증하고 처리하는 기능을 추가해보자. 순수 자바 코드로 검증 로직을 처리하는 것을 시작으로, 스프링이 지원하는 검증 기능을 적용하는 단계까지 점진적으로 발전시켜 나가볼 것이다. - 요구사항 추가 상품 관리 웹 애플리케이션에 새로운 요구사항이 추가되었다. 아래의 사진과 같이 유효성 검사를 해야한다. 타입 검증 가격, 수량은 Integ..

Spring 2023.07.21

[Spring] 메시지, 국제화 기능

- 메시지 기능 소개 웹 애플리케이션 개발을 거의 완성하던 중, 한 기획자가 말을 걸어온다. "개발자님~ 모든 웹 페이지에 상품명이라고 보이는 단어를 전부 상품이름으로 바꿔주세요~ 금방 가능하죠?" 정말 당황스럽다. 상품명이 들어가는 화면만 수십개 이상인데.. 수십개의 HTML파일을 모두 고쳐야하나? 만약 단순하게 HTML 파일에 메시지가 하드코딩 되어 있다면 정말 하나하나 고쳐야한다. 이러한 상황을 대비해, 메시지 기능이란 것을 활용한다면 정말 단순하게 모든 파일을 고칠 수 있다! 메시지 기능이란, 다양한 메시지를 한 곳에서 관리하도록 하는 기능이다. 아래 예시를 보자. item=상품 item.id=상품 ID item.itemName=상품명 item.price=가격 item.quantity=수량 이렇게..

Spring 2023.07.19

[Spring] 타임리프(Thymeleaf)와 스프링의 통합

지난 포스팅에서 개발해본 간단한 상품 관리 웹 애플리케이션을 조금 더 고도화 해볼 것이다. 스프링과 타임리프는 입력 폼을 매우 효율적으로 처리하기 위한 기능들을 제공한다. 해당 기능을 알아보고 프로젝트에 추가된 요구사항에 맞춰 애플리케이션을 개선해보자. 지난 포스팅 : https://dong-woo.tistory.com/86 - 입력 폼 처리 (th:object, th:field) HTML의 폼을 통해 데이터를 전송할 때 보면 다음과 같은 구조를 갖는다. 상품명 input 타입으로 데이터를 넘길 때 보면 id, name과 같은 속성들이 있다. 무엇을 의미할까? id : HTML 안에서 식별하는 고유한 id name : 서버로 데이터가 전송될 때, 서버에서 식별하기 위한 이름 value : 서버로 데이터가..

Spring 2023.07.19

[Spring] 스프링 MVC로 웹 페이지 만들기

- 요구사항 분석 상품을 관리할 수 있는 서비스를 만들어볼 것이다. 스프링 MVC와 타임리프를 사용해 만들어보자. 상품 도메인 모델 상품 ID 상품명 가격 수량 상품 관리 기능 상품 목록 상품 상세 상품 등록 상품 수정 서비스 제공 흐름 현재 상황은 웹 퍼블리셔가 HTML, CSS를 만들어 제공한 상황이이다. 핵심 비지니스 로직을 개발하고 뷰 템플릿을 통해 동적인 HTML을 제공하도록 해보자! - 타임리프 타임리프의 핵심은 th:xxx 가 붙은 부분은 서버사이드에서 렌더링 되고, 기존것을 대체한다는 점이다. th:xxx 이 없으면 기존 HTML의 xxx 속성이 그대로 사용된다. HTML을 파일로 직접 열었을 때, JSP 같은 뷰 템플릿 엔진의 경우 자바 코드가 섞여있어 깨지는 상황이 많지만 타임리프에서 ..

Spring 2023.07.15

[Spring] 스프링 MVC 기본 기능 - HTTP 요청, 응답 처리하기

지난 포스팅에서는 스프링 MVC 프레임워크의 전체적인 구조, 아키텍쳐에 대해서 알아봤다. 이번 포스팅에서는 본격적으로 스프링 MVC를 다루는 방법에 대해서 알아보자! 지난 포스팅 : https://dong-woo.tistory.com/83 [Spring] 스프링 MVC 구조 이해하기 이전 포스팅에서는 프론트 컨트롤러 패턴을 도입한 MVC 프레임워크를 버전 1부터 5까지, 점진적으로 발전시키며 개발해봤다. 결과적으로 V5에서는 어댑터 패턴을 도입해, 보다 유연한 MVC 프레임 dong-woo.tistory.com - 로깅 운영 시스템에서는 System.out.println()과 같은 시스템 콘솔을 사용해서 필요한 정보를 출력하지 않는다. 별도의 로깅 라이브러리를 사용해 로그를 출력한다. 로그 라이브러리는 ..

Spring 2023.07.14

[Spring] 스프링 MVC 구조 이해하기

이전 포스팅에서는 프론트 컨트롤러 패턴을 도입한 MVC 프레임워크를 버전 1부터 5까지, 점진적으로 발전시키며 개발해봤다. 결과적으로 V5에서는 어댑터 패턴을 도입해, 보다 유연한 MVC 프레임워크를 만들 수 있었다. 지속적인 개선과 발전으로 만들어진 프레임워크 V5는 스프링 MVC와 매우 유사한 형태까지 도달했다. 사용하던 용어들이 어떻게 매칭되는지, 스프링 MVC는 어떻게 동작하는지 알아보고 직접 프레임워크 V5를 스프링 MVC 구조로 만들어보자. 이전 포스팅 : https://dong-woo.tistory.com/80 [Spring] 프론트 컨트롤러를 도입한 MVC 프레임워크 만들기 이전 포스팅에서 서블릿 + JSP를 활용한 MVC 패턴으로 웹 애플리케이션을 설계해봤다. 컨트롤러와 뷰의 역할을 나누..

Spring 2023.07.11

[Spring] 프론트 컨트롤러를 도입한 MVC 프레임워크 만들기

이전 포스팅에서 서블릿 + JSP를 활용한 MVC 패턴으로 웹 애플리케이션을 설계해봤다. 컨트롤러와 뷰의 역할을 나누어 설계함으로써. JSP파일에서는 오직 뷰 렌더링에만 집중할 수 있었다. 하지만 각종 컨트롤러(new-form, save, list)를 보면 중복되는 코드들이 있었다. 심지어 모두 서블릿으로 작성되었는데, response 객체는 사용하지도 않는 컨트롤러도 있다. 이러한 점들을 개선하기 위해 프론트 컨트롤러(Front-Controller)를 도입한 MVC 패턴으로 다시 만들어보고자 한다. 총 5가지의 버전을 통해 점진적으로 발전시켜 나갈 것이다! 이전 포스팅 : https://dong-woo.tistory.com/79 [Spring] 서블릿, JSP, MVC 패턴으로 회원 관리 웹 애플리케이..

Spring 2023.07.09