Spring

Spring

검증 - Validation

입력 타입이 잘못되어서 오류가 나는 경우를 처리 해주어야한다. 잘못된 입력으로 검증 오류가 발생하면 오류 화면으로 바로 이동하게 되면, 고객 입장에서는 입력 해놓은 것들이 날라가서 다시 입력하는 것이 비효율적이어서 고객이탈의 원인이 될 수 있다. 따라서 웹 서비스는 폼 입력시 오류가 발생하면, 고객이 입력한 데이터를 유지한 상태로 어떤 오류가 발생했는지 친절하게 알려주어야 한다. 컨트롤러의 중요한 역할중 하나는 HTTP 요청이 정상인지 검증하는 것이다. 클라이언트 검증은 조작할 수 있으므로 보안에 취약하다. 서버만으로 검증하면, 즉각적인 고객 사용성이 부족해진다. 둘을 적절히 섞어서 사용하되, 최종적으로 서버 검증은 필수 API 방식을 사용하면 API 스펙을 잘 정의해서 검증 오류를 API 응답 결과에 ..

Spring

웹 애플리케이션에 메시지+국제화 적용

messages.properties label.item=상품 label.item.id=상품 ID label.item.itemName=상품명 label.item.price=가격 label.item.quantity=수량 page.items=상품 목록 page.item=상품 상세 page.addItem=상품 등록 page.updateItem=상품 수정 button.save=저장 button.cancel=취소 타임리프 메시지 적용 타임리프의 메시지 표현식 #{...} 를 사용하면 스프링의 메시지를 편리하게 조회할 수 있다. 예를 들어서 방금 등록한 상품이라는 이름을 조회하려면 #{label.item} 이라고 하면 된다. 렌더링 전 렌더링 후 상품 페이지 이름에 적용 상품 등록 폼 상품 등록 레이블에 적용 상품명..

Spring

메시지와 국제화

여러 화면에 보이는 상품명, 가격, 수량 등, label에 있는 단어를 변경하려면 다음 화면들을 다 찾아가면서 모두 변경해야 한다. 화면 수가 적으면 문제가 되지 않지만 화면이 수십개 이상이라면 수십개의 파일을 모두 고쳐야 한다. 이런 다양한 메시지를 한 곳에서 관리하도록 하는 기능을 메시지 기능이라 한다. 예를 들어서 messages.properties 라는 메시지 관리용 파일을 만들고 item=상품 item.id=상품 ID item.itemName=상품명 item.price=가격 item.quantity=수량 각 HTML들은 다음과 같이 해당 데이터를 key 값으로 불러서 사용하는 것이다. 이러한 메시지 관리를 한 발 더 나가서 나라별로 별도로 관리하면 서비스를 국제화 할 수 있다. 예를 들어 영어권..

Spring

타임리프 라디오 버튼

class="form-check-input"> BOOK 라디오 버튼은 여러 선택지 중에 하나를 선택할 때 사용할 수 있다. ENUM 클래스를 활용해서 해보자. - 상품 종류 도서, 식품, 기타 라디오 버튼으로 하나만 선택할 수 있다. @ModelAttribute("itemTypes") public ItemType[] itemTypes() { return ItemType.values(); } ItemType.values() 를 사용하면 해당 ENUM의 모든 정보를 배열로 반환한다. 예) [BOOK, FOOD, ETC] 상품 종류 BOOK 체크 박스는 수정시 체크를 해제하면 아무 값도 넘어가지 않기 때문에, 별도의 히든 필드로 이런 문제를 해결했다. 라디오 버튼은 이미 선택이 되어 있다면, 수정시에도 항상 ..

Spring

타임리프 멀티 체크박스

@ModelAttribute("regions") public Map regions(){ Map regions = new LinkedHashMap(); regions.put("SEOUL","서울"); regions.put("BUSAN","부산"); regions.put("JEJU","제주"); return regions; } @ModelAttribute 는 컨트롤러에 있는 별도의 메서드에 적용할 수 있다. 이렇게하면 해당 컨트롤러를 요청할 때 regions 에서 반환한 값이 자동으로 모델( model )에 담기게 된다. 물론 이렇게 사용하지 않고, 각각의 컨트롤러 메서드에서 모델에 직접 데이터를 담아서 처리해도 된다. 등록 지역 서울 th:for="${#ids.prev('regions')}" 멀티 체크박스..

Spring

타임리프 활용

th:object - 커맨드 객체를 지정한다. *{...} - 선택 변수 식이라고 한다. th:object에서 선택한 객체에 접근한다. th:field - HTML 태그의 id, name, value속성을 자동으로 처리해준다. 렌더링 전 렌더링 후 등록 폼 th:object를 적용하려면 먼저 해당 오브젝트 정보를 넘겨주어야 한다. 등록 폼이기 때문에 데이터가 비어있는 오브젝트를 뷰에 전달한다. @GetMapping("/add") public String addForm(Model model){ model.addAttribute("item",new Item()); return "form/addForm"; } 등록 폼 예제 상품명 가격 수량 th:object="${item}":에서 사용할 객체를 지정한다. 선..

Spring

타임리프 주석사용법

주석의 사용법을 알아보기 위해 준비 작업을 먼저 해본다. 컨트롤러에 우선 아래와 같은 맵핑을 해주고, comments라는 html파일을 생성해준다. @GetMapping("/comments") public String comments(Model model){ model.addAttribute("data","Spring!"); return "basic/comments"; } comments의 내용은 아래와 같다. 예시 html data 1. 표준 HTML 주석 2. 타임리프 파서 주석 html data 3. 타임리프 프로토타입 주석 먼저 표준 HTML 주석은 우리가 아는 그냥 주석이다. 그래서 따로 처리없이 주석으로 소스 코드에 그대로 나온다. 그 다음으로 타임리프 파서 주석을 보자. html data 타..

Spring

HTTP 에 대하여

HTTP는 모든 것을 전송한다. HTML,TEXT IMAGE, 음성, 영상, 파일 JSON, XML(API) 거의 모든 형태의 데이터 전송 가능 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용 그렇다면 웹 서버와 웹 애플리케이션 서버(WAS)는? 웹 서버 HTTP 기반으로 동작 정적 리소스 제공, 기타 부가기능 정적(파일)HTML, CSS, JS, 이미지, 영상 예)NGINX, APACHE 웹 애플리케이션 서버 HTTP 기반으로 동작 웹 서버 기능 포함 + (정적 리소스 제공 가능) 프로그램 코드를 실행해서 애플리케이션 로직 수행 동적 HTML, HTTP API(JSON) 서블릿, JSP, 스프링 MVC 예)톰캣(Tomcat) Jetty Undertow 웹 서버, 웹 애플리케이션 서버(WAS)의 ..

potatoo
'Spring' 카테고리의 글 목록 (3 Page)