728x90

WEB/Spring MVC 2 11

Spring MVC 2편 파일 업로드

html 폼 전송 방식 application/x-www-form-urlencoded 가장 기본적인 방법 , form 에 입력한 전송할 항목을 HTTP Body 에 문자로 username=kim&age20 처럼 & 으로 구분한다. 파일을 업로드 하려면 파일은 문자가 아니라 바이너리 데이터를 전송해야 한다. 문자를 전송하는 이 방식으로 파일을 전송하기는 어렵다. 그리고 또 한가지 문제가 더 있는데 , 보통 폼을 전송할 때 파일만 전송하는 것이 아니라는 점이다. 문자와 바이너리를 동시에 전송해야 하는 상황이 발생한다. mutipart/form-data form tag에 별도로 enctype에 지정을 해줘야한다. 이런 방식으로 헤더 , 바디 가 계속 반복되고 여러개의 다른 스타일의 데이터를 한번에 보낼 수 있게..

WEB/Spring MVC 2 2021.11.06

Spring MVC 2편 스프링 타입 컨버터

스프링 MVC 요청 파라미터 HTTP 요청 파라미터들은 모두 String으로 처리 된다. @RequestParam , @ModelAttribute , @PathVariable 기존 String으로 들어온것들을 알아서 integer나 알맞은 형식으로 변환해준다. 스프링은 확장 가능한 컨버터 인터페이스를 제공한다. org.springframework.core.convert.converter; 를 사용해야한다. @Slf4j public class IpPortToStringConverter implements Converter { @Override public String convert(IpPort source) { log.info("convert source={}", source); //IpPort 객체 ->..

WEB/Spring MVC 2 2021.10.31

Spring MVC 2편 API 예외 처리

API 예외처리는 어떻게 해야할까? html 페이지의 경우 지금까지 설명했던 것 처럼 4xx, 5xx 같은 오류 페이지만 있으면 대부분의 문제를 해결할 수 있다. (Spring 의 BasicErrorController에서 필요한 페이지들) 그런데 API의 경우에는 생각할 내용이 더많다. API는 각 오류 상황에 맞는 오류 응답 스펙을 정하고 , JSON으로 데이터를 내려주어야 한다. @RequestMapping("/error-page/500") public String errorPage500(HttpServletRequest request, HttpServletResponse response) { log.info("errorPage 500"); printErrorInfo(request); return "..

WEB/Spring MVC 2 2021.10.30

Spring MVC 2편 예외처리와 오류페이지

순수 서블릿 컨테이너의 경우 2가지 방식으로 예외처리를 한다. Exception , response.sendError(HTTP상태코드 , 오류메시지) 위 2가지 경우가 발생했을때 에러임을 인지하고 에러 처리 로직이 동작하는것이다. Exception 1. 자바에서 직접실행 자바의 메인 메서드를 직접 실행하는 경우 main 이라는 이름의 쓰레드가 실행된다. 실행 도중에 예외를 잡지 못하고 처음 실행한 main() 메서드를 넘어서 예외가 던져지면 , 예외 정보(stack trace)를 남기고 해당 쓰레드는 종료된다. 2. 웹앱에서 실행 웹 앱은 사용차 요청별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행된다. 앱에서 예외가 발생했는데, 어디선가 try ~ catch로 예외를 잡아서 처리하면 아무 문..

WEB/Spring MVC 2 2021.10.23

Spring MVC 2편 로그인 처리2 - 필터, 인터셉터

서블릿 필터 로그인 여부를 체크하는 로직을 하나하나 추가하는 것은 매우 번거로운 일. 이러한 공통 관심사는 spring aop 로 해결할 수 있지만, HTTP 헤더나 URL의 정보들이 필요한 웹 과 관련된 공통 관심사를 처리할 때는 서블릿 필터, 스프링 인터셉터를 이용하는 것이 좋다. aop랑 비교해서 서블릿 필터 , 스프링 인터셉터는 웹과 관련된 부가기능이 엄청많다. 필터 흐름 Http 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 스프링을 사용한다면 여거서 서블릿은 스프링의 디스패처 서블릿으로 생각하면 된다. 필터 제한 = 필터에서 적절하지 않은 요청이라 판단하면 거기에서 끝을 낼 수 도 있다. 필터체인 = 여러개의 필터를 구성할 수 있다. 필터 인터페이스의 메소드 init = 필터 초기화 ..

WEB/Spring MVC 2 2021.10.16

Spring MVC 2편 로그인 처리1 쿠키 세션

새로운 패키지 구조를 살펴보면 향후 web 을 다른 기술을 바꾸어도 도메인은 그대로 유지할 수 있어야한다. domain 은 web을 의존하지 않지만 web은 도메인을 의존해도 된다. Member Domain 과 Member Repository를 만들어준다. @Data public class Member { private Long id; @NotEmpty private String loginId; // 로그인 ID @NotEmpty private String name; @NotEmpty private String password; } @Slf4j @Repository public class MemberRepository { private static Map store = new HashMap(); //st..

WEB/Spring MVC 2 2021.10.10

Spring MVC 2편 검증2 - Bean Validation

Bean Validation은 검증 annotation+ interface의 모음 , 즉 그냥 스펙이다. 구현체는 여러 opensource나 다른 사용 vendor에서 구현이 가능하다. hibernate validator가 존재한다. package hello.itemservice.domain.item; import lombok.Data; import org.hibernate.validator.constraints.Range; import javax.validation.constraints.Max; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; @Data public class Item { ..

WEB/Spring MVC 2 2021.09.26

Spring MVC 2편 검증1 - Validation

클라이언트가 준 입력이 우리의 Validation Requirement와 맞지 않을 때는 Model 에 잘못된 데이터와 오류의 원인을 담아서 다시 addForm 페이지를 보여주면서 클라이언트에게 어떤게 잘못되었는지를 알려주어야한다. @PostMapping("/add") public String addItem(@ModelAttribute Item item, RedirectAttributes redirectAttributes, Model model) { //검증 오류 결과를 보관 Map errors = new HashMap(); //검증 로직 if (!StringUtils.hasText(item.getItemName())) { errors.put("itemName", "상품 이름은 필수입니다."); } if..

WEB/Spring MVC 2 2021.09.05

Spring MVC 2편 메시지, 국제화

메세지 messages.properties 같은 메시지 관리용 파일을 만들어서 여기서 다 관리를 한다. item=상품 item.id = 상품 ID item.price = 가격 이것들을 다른 페이지에 다 똑같이 적용시켜서 관리한다. 국제화 messages.properties 를 각 나라별로 관리하면 서비스를 국제화 할 수 있다. 예를 들면 message_en.properties, message_kr.properties 등등 item=Item item.id=Item ID item.itemName=Item Name 어느 나라에서 접근했는지 인식하는 방법은 HTTP accep-language 헤더 값을 사용하거나 사용자가 직접 언어를 선택하도록 하고 , 쿠키 등을 사용해서 처리하면 된다. BUT Spring은 ..

WEB/Spring MVC 2 2021.08.21

스프링 MVC 2편 - 스프링 통합과 폼

html 에서 id , name ,value(객체 안에있는 값을 출력) attribute 를 자동으로 생성하는 방법 @GetMapping("/add") public String addForm(Model model) { model.addAttribute("item",new Item()); return "form/addForm"; } 상품명 빈 객체를 넘겨주고 html 에서 th:object 로 받아온다. th:field 에서 받아온 객체는 * 로 표시가되고 그 안의 프로퍼티를 접근한다. th:field="${item.itemName}" 이렇게 써도 무방하다. 이렇게 하면 name 이 잘못되었을때도 오류페이지를 띄워준다. 체크박스 html에서 체크 박스를 선택하지 않고 폼을 전송하면 open 등등 필드 자체..

WEB/Spring MVC 2 2021.08.14
728x90