본문 바로가기

Spring/MVC

(41)
[Spring MVC] 로그인 처리 - 서블릿 필터 이번 장에서는 서블릿 필터를 사용하는 방법에 대해서 알아본다. 모든 코드는 깃허브(링크) 에 올려두었다. 소개 이번 장에서는 서블릿의 필터 기능을 사용하는 방법에 대해서 알아본다. 비슷한 기능으로는 스프링의 인터셉터 기능이 있다. 우리는 이전에 쿠키와 세션을 사용하여 로그인 기능을 구현하였다. 해당 기능을 사용하여 로그인을 하는 경우 사용자가 로그인을 하지 않아도 URL 주소만 알고 있으면 원하는 페이지에 접근할 수 있다는 치명적인 단점이 있다. 모든 컨트롤러에서 로그인 여부를 확인하는 로직을 작성하면 되지만 모든 컨트롤러에서 주로직이 아닌 로그인 유무를 확인하는 부로직을 다루어야 한다는 치명적인 단점이 있다. 또한, 추후 로그인 관련 로직이 변경되면 모든 컨트롤러의 코드가 변경되어야 한다. 이는 확장에..
[Spring MVC] 로그인 처리 - 쿠키 & 세션 이번 장에서는 스프링의 쿠키와 세션을 사용하여 로그인을 구현하는 방법에 대해서 알아본다. 모든 코드는 깃허브(링크) 에 올려두었다. 화면을 구현하는 방법은 다루지 않으므로 깃허브의 소스코드를 참고한다. 패키지 구조 프로젝트를 생성하고 패키지 구조를 잡는 것은 생각보다 중요한 작업이다. 핵심 비즈니스 로직이 수정되었다고 해서 프론트엔드 코드가 변경되어서는 안되고 프론트엔드 코드가 변경되었다고 해서 핵심 비즈니스 로직이 있는 부분의 코드가 수정되어서는 안된다. 핵심 비즈니스 로직을 담고 있는 부분을 도메인(domain)이라고 하며 프론트엔드 코드와 격리하여 패키지 구조를 잡아야 한다. root domain item member login web item member login 이렇게 패키지 구조를 잡게 되면..
[Spring MVC] 요청 검증 - Bean Validation 이전 장(링크) 에서는 스프링의 메시지 기능을 사용하여 체계적인 오류 코드와 메시지 처리 방법에 대해서 알아보았다. 이번 장에서는 스프링의 Bean Validation을 사용한 검증 방법에 대해서 알아본다. 모든 코드는 깃 허브(링크) 에 올려두었다. Bean Validation 우리는 자바 코드를 작성하여 데이터의 유효성 검사를 진행하였다. 특정 필드의 값에 대한 검증 로직은 대부분 유사한 검증이기 때문에 간단한 애노테이션 작성을 통해서도 가능하다. 이렇게 검증 로직을 모든 프로젝트에 적용할 수 있도록 공통화하고 표준화한 것을 Bean Validation이라고 한다. Bean Validation은 특정 구현체가 아니라 Bean Validation 2.0(JSR-380)이라는 기술 표준이다. 검증 애노테..
[Spring MVC] 요청 검증 - 코드 & 메시지 이전 장(링크) 에서는 기본적인 방법으로 파라미터의 유효성을 검사하는 방법에 대해서 알아보았다. 이번 장에서는 스프링의 메시지 기능을 사용하여 체계적인 오류 코드와 메시지 처리 방법에 대해서 알아본다. 모든 코드는 깃허브(링크) 에 올려두었다. 메시지 사용 message.properties 파일과 errors.properties 파일을 추가하고 스프링 부트가 해당 메시지 파일을 인식할 수 있게 application.properties 파일을 수정한다. application.properties spring.messages.basename=messages,errorserrors.properties required.item.itemName=상품 이름은 필수입니다. range.item.price=가격은 {0} ..
[Spring MVC] 요청 검증 이번 장에서는 클라이언트가 전달한 파라미터의 유효성을 검사하는 방법에 대해서 알아본다. 모든 코드는 깃허브(링크) 에 올려두었다. Validation(유효성 검사) 컨트롤러의 중요한 역할중 하나는 HTTP 요청이 정상인지 검증하는 것이다. 그리고 정상 로직보다 이런 검증 로직을 잘 개발하는 것이 더 어려울 수 있다. 참고로 클라이언트에서 파라미터를 검증하는 것과 서버에서 파라미터를 검증하는 차이는 아래와 같다. 클라이언트 검증은 조작할 수 있으므로 보안에 취약하다. 예를 들어 API 요청에 필요한 정보를 직접 포스트 맨이나 curl로 요청하는 경우가 있다. 서버만에서만 검증하면, 즉각적인 고객 사용성이 부족해진다. 예를 들어 비밀번호 유효성의 경우 요청버튼을 클릭 하였을 때가 아니라 입력하는 즉시 화면에..
[Spring MVC] 메시지, 국제화 - 활용 이전 장(링크) 에서는 메시지, 국제화를 적용하고 테스트하는 방법에 대해서 알아보았다. 이번 장에서는 하드코딩 되어 있는 HTML파일을 메시지, 국제화를 적용하는 방법에 대해서 알아보도록 한다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 내용은 강의나 공식문서에서 확인한다. 모든 코드는 깃 허브(링크) 에 올려두었다. Legacy 예시에서는 상품 ID, 상품명, 가격, 수량에만 적용한다. 다른 곳에도 적용하는 방법이 궁금하다면 필자의 깃허브에 있는 mvc 리포지토리를 확인하도록 한다. 먼저 하드코딩되어 유지보수가 어려운 코드를 확인해본다. 상품 ID 상품명 가격 수량 properties 추가 메시지 국제화를 적용시키기 위해 /resources경로에 messages.properti..
[Spring MVC] 메시지, 국제화 - 적용 이번 장에서는 메시지, 국제화를 적용하고 테스트하는 방법에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 내용은 강의나 공식문서에서 확인한다. 모든 코드는 깃 허브(링크) 에 올려두었다. 메시지 기능의 필요성 아래와 같은 방식으로 상품명, 가격이라는 문구가 하드코딩 되어있다고 가정해본다. 상품명 가격 상품명이라는 문구를 상품이름이라는 문구로 변경해달라는 요청이 들어오면 우리는 상품명이라는 모든 문구를 찾아서 변경해주어야 한다. 만약 우리가 HTML코드에 상품명 문구를 직접 입력하여 사용한 것이 아니라 한 곳에서 관리하고 관리되는 메시지를 가져다 쓴 것이라면 우리는 관리되는 한 곳만 수정하면 된다. 이렇게 메시지가 한 곳에서 관리되도록 하는 기능을 메시지 기능이라고 ..
[Spring MVC] Thymeleaf - Radio & Select 이전 장(링크) 에서는 타임리프의 스프링 통합 기능 중 체크박스에 대해서 알아보았다. 이번 장에서는 통합 기능 중 라디오 버튼과 셀렉트 박스에 대해서 알아본다. 모든 코드는 깃 허브(링크) 에 올려두었다. Radio Button 라디오 버튼은 여러 선택지 중에서 하나를 선택할 때 사용할 수 있다. 이번에는 라디오 버튼을 자바 Enum을 사용하여 활용하는 방법에 대해서 알아본다. ItemType @Getter @RequiredArgsConstructor public enum ItemType { BOOK("도서"), FOOD("음식"), ETC("기타"); private final String description; } @ModelAttribute("itemTypes") public ItemType[] it..