본문 바로가기

Spring

(9)
[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..
[Spring MVC] Thymeleaf - 체크박스 이전 장(링크) 에서는 타임리프의 스프링 통합 기능 중 입력 폼에 대해서 알아보았다. 이번 장에서는 통합 기능 중 체크박스에 대해서 알아본다. 모든 코드는 깃 허브(링크) 에 올려두었다. Checkbox Java Files 예제를 만들기 위한 Class, Enum 파일들을 살펴본다. ItemType @Getter @RequiredArgsConstructor public enum ItemType { BOOK("도서"), FOOD("음식"), ETC("기타"); private final String description; } DeliveryCode @Data @AllArgsConstructor public class DeliveryCode { private String code; private String ..
[Spring MVC] Thymeleaf - 입력 폼 이번 장에서는 타임리프의 스프링 통합 기능 중 입력 폼에 대해서 알아본다. 모든 코드는 깃 허브(링크) 에 올려두었다. 개요 타임리프는 크게 기본 메뉴얼과 스프링 통합 메뉴얼 2가지 메뉴얼을 제공한다. 타임리프는 스프링 없이도 동작하지만, 스프링과 통합을 위해 다양한 기능을 제공하며 이러한 이유로 많은 백엔드 개발자가 타임리프를 선택하고 있다. 스프링 통합으로 인해 추가되는 기능은 아래와 같다. 스프링의 SpringEL 문법 ${@myBean.doSomething()}처럼 스프링 빈 호출 지원 편리한 폼 관리를 위한 추가 속성 th:object th:field, th:errors, th:errorclass 폼 컴포넌트 기능 checkbox, radio button, List등을 편리하게 사용할 수 있는 ..
[Spring MVC] Thymeleaf - Fragment & Layout 이번 장에서는 타임리프의 템플릿 조각과 레이아웃 기능에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 내용은 강의나 공식문서에서 확인한다. 모든 코드는 깃 허브(링크) 에 올려두었다. 개요 웹 페이지를 개발할 때 페이지마다 중복되는 공통 영역들이 많이 있다. 상단 영역이나 하단 영역등등 여러 페이지에서 함께 사용하는 영역들이 있다. 이런 부분을 코드를 복사해서 사용한다면 변경 시 여러 페이지를 다 수정해야 하므로 비효율 적이다. 타임리프는 이러한 문제를 해결하기 위해 템플릿 조각(Template Fragment)과 레이아웃(Layout)기능을 지원한다. Fragment 예시 Controller @GetMapping("/fragment") public String f..
[Spring MVC] Thymeleaf - Other Function 이전 장(링크) 에서는 타임리프의 텍스트와 표준 표현식 구문에 대해서 알아보았다. 이번 장에서는 그 이외의 기능들에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 내용은 강의나 공식문서에서 확인한다. 모든 코드는 깃 허브(링크) 에 올려두었다. Attribute 타임리프는 주로 HTML 태그에 th:* 속성을 지정하는 방식으로 동작한다. th:*로 속성을 적용하면 기존 속성을 대체하며 기존 속성이 없는 경우 새로 만든다. 예제 Controller @GetMapping("/attribute") public String attribute() { return "basic/attribute"; } attribute.html 속성 설정 속성 추가 - th:attrappend..
[Spring MVC] Thymeleaf - Text & Expression 이번 장에서는 타임리프의 텍스트와 표준 표현식 구문에 대해서 알아본다. 글의 하단부에 참고한 강의와 공식문서의 경로를 첨부하였으므로 자세한 내용은 강의나 공식문서에서 확인한다. 모든 코드는 깃 허브(링크) 에 올려두었다. 개요 타임리프는 서버에서 HTML 파일을 동적으로 렌더링해주는 SSR(Server Side Rendering) 용도로 사용된다. 네츄럴 템플릿으로 순수 HTML을 최대한 유지하는 특징이 있다. 순수하다는 의미는 타임리프로 작성한 파일이 HTML을 유지하기 때문에 웹 브라우저에서 파일을 직접 열어도 내용을 확인할 수 있다는 의미이다. 또한 서버를 통해 뷰 템플릿을 거치면 동적으로 변경된 결과를 확인할 수 있다. JSP와 유사한 템플릿은 생성된 웹 브라우저를 통해 소스코드를 확인해보면 HT..