본문 바로가기

스프링

(36)
[Spring] 필터, 인터셉터 필터, 인터셉터란? 우리는 공통 비지니스 로직이 있다고 했을 때, 이 로직이 필요한 모든 클래스에 진행한다면 무수한 중복이 생길 것이고 책임이 커져 좋지 않은 상황이 발생할 것이다. 우리는 이를 해결하기 위해 공통 비지니스 로직을 따로 빼서 관리하는 방식으로 진행하면 좋을 것이다. 이를 할 수 있는 방법을 말하자면 필터, 인터셉터, AOP가 존재한다. AOP에 대해서는 다뤄본적이 있으니 필터, 인터셉터에 대해서 알아보고자 한다. 전체적인 구조를 그림으로 살펴보면 다음과 같다. 필터는 서블릿이 관리하고 Dispatcher Servlet 앞단에서 공통된 로직을 처리한다. 인터셉터는 스프링이 관리하고 필터가 진행된 후 Dispatcher Servlet 뒷단에서 공통된 로직을 처리한다. AOP는 인터셉터와 마찬..
[Spring] 세션(Session) 세션이란? 세션(Session)이란 일정 시간동안 같은 사용자(브라우저)로 부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술이다. 여기서, 일정 시간이란 사용자가 브라우저를 통해 웹 서버에 접속한 시점으로부터 브라우저를 종료할 때 까지의 시간을 말한다. 정리하자면, 사용자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 일정 시간동안 유지시키는 것을 세션이라고 말한다. 세션은 흔히 우리가 브라우저를 사용하면서 많이 듣게 되는 쿠키와 비교된다. 쿠키는 (Key, Value) 쌍으로 로컬에 저장되어 사용되는 작은 데이터 파일이다. 여기서 쿠키와 세션의 차이점에 대해서 간단하게 살펴보고 넘어가자. 이제는 세션에 대해서 잘 알겠는데 이를 어떤 경우에 사용할까? 우리가 브라우..
[Spring] 검증(Bean Validation) Bean Validation이란? 우리는 이전에 Validator를 통해 검증을 하는 것을 해보았다. 간단하게 Validator를 사용하고자 하는 컨트롤러에 등록하여 사용하기도 했지만 실제로 MainApplication에 Global Validator로 적용하여 사용하는 것도 가능하다. Spring에서는 이를 활용하여 간단하게 애노테이션으로 검증할 수 있는 기법을 제공한다. 이를 Bean Validation이라고 하며, Spring에서는 LocalValidatorFactoryBean을 Global Validator로 등록하여 검증을 진행한다. 우리가 실제로 객체의 속성위에 애노테이션을 적용함으로써 이를 간단하게 해결가능하다. 적용가능한 애노테이션은 @NotBlank, @Max, @Range등 다양한데 자..
[Spring] 검증(Validation) 검증이란? 검증(Validation)이란 어떤 데이터의 값이 유효한 값인지 혹은 타당한 값인지를 확인하는 것을 말한다. 이를 살펴보기 위해 Thymeleaf - Form에서 다뤘던 예제를 가지고 설명하려고 한다. 여기서, Form은 이름, 나이 등으로 구성되어 있었다. 개발자인 우리는 이름과 이메일이 필수로 들어가야하고 나이는 숫자로 입력받아야한다고 하자. 그렇다면 우리는 검증을 통해 사용자들이 입력한 값이 우리가 요구하는 사항과 일치하는 지를 확인한다. 만약, 우리의 요구사항과 맞지 않아 검증에 실패하게 된 경우에는 사용자가 이를 인식하고 다시 입력할 수 있게 만들어줘야 할 것이다. 그렇다면 우리는 스프링에서 검증을 어떻게 구현해야할까? 이에 대해서 알아보자. BindingResult 우리가 검증을 진..
메세지 소스, 국제화 메세지 소스 공통적으로 처리하는 메시지들을 처리하는데 사용한다. 기본적으로 MessageSource 인터페이스를 구현한 ResourceBundleMessageSource를 스프링 빈으로 등록하여 사용해야 하지만 스프링 부트에서는 자동으로 등록해준다. 이제 메세지 소스에 대해 자세히 살펴보자. ​ 메시지는 resources - messages - messages.properties(messages_kr.properties ...)에서 관리되어진다. 메시지는 다음과 같이 값을 부여하여 사용할 수 있도록한다. Thymeleaf에서 메세지 소스를 사용하려고 하려면 #{메세지코드}와 같이 사용하면 된다. 잘 나오는 모습을 확인할 수 있다. 국제화 우리는 메세지 소스를 활용하여 국제화 기능을 사용할 수 있다. 우리..
[Spring, Thymeleaf] Form 심화 Form 심화 우리는 Form 기본에 추가적으로 다양한 정보를 확인해보고자 한다. 싱글 체크박스 멀티 체크박스 라디오 박스 셀렉트 박스 우리는 이 4가지들을 간단한 예시를 통해 알아보려고 한다. 노트북 소유 유무, 사용 주 언어, 개발 환경, 이메일을 입력받으려고 한다. 노트북 소유 유무는 싱글 체크박스, 사용 주 언어는 멀티 체크 박스, 개발 환경은 라디오 박스, 이메일은 인풋박스와 셀렉트박스를 사용하여 구성하려고 한다. 구현 싱글 체크박스 private Boolean notebook; Person객체에 노트북 소유 여부를 저장할 변수이다. 노트북 소유 여부를 입력하세요. 노트북 소유 여부 th:field를 활용하여 Person객체의 notebook 변수의 값을 싱글 체크박스로 저장한다. 멀티 체크박스..
[Spring, Thymeleaf] Form 기본 Form 기본 간단한 예제로 폼을 완성하는 것을 해보자. 우리는 이름, 나이, 학과, 전공을 입력하는 인풋 박스를 만들고 값을 입력받아 서버에 전달하고 해당 값들에 대해 요약해주는 페이지로 이동하는 서비스를 구성해보자. @GetMapping("/home") public String home(Model model){ model.addAttribute("person", new Person()); return "home"; } 해당 URL로 요청시 person이라는 객체를 넘겨 데이터를 저장할 수 있도록 한다. 이름을 입력하세요. 나이를 입력하세요. 학과를 입력하세요. 전공을 입력하세요. 제출 th:object="${객체명}"을 통해 사용할 객체를 간단하게 지정할 수 있다. th:field="*{속성명}"을 ..
[Thymeleaf] 반복, 조건, 블럭 반복 @GetMapping("each") public String each(Model model) { List test = new ArrayList(); addTestData(test); model.addAttribute("people", test); return "each"; } private void addTestData(List test) { Person person1 = new Person("Gil", 25, "컴공", "백앤드"); Person person2 = new Person("SSang", 25, "컴공", "프론트앤드"); Person person3 = new Person("GilSSang", 25, "컴공", "풀스택"); test.add(person1); test.add(person..