스프링 MVC

파일 업로드HTML Form을 전송하는 방식application/x-www-form-urlencodedmultipart/form-data application/x-www-form-urlencoded 방식 application/x-www-form-urlencoded 방식 : Form 태그에 별도의 enctype 옵션이 없는 경우의 Content-TypeForm에 입력한 전송할 항목을 HTTP Body에 문자로 전송해주며 &로 구분한다.파일 업로드의 경우 문자가 아닌 바이너리 데이터를 전송해야하기에 이 방식은 적절하지 않다.Multipart/form-data 방식multipart/form-data 방식 : Form 태그에 별도의 enctype="multipart/form-data"를 지정하는 경우다른 종류..
스프링 타입 컨버터기본적으로 HTTP 요청 파라미터(HTTP 쿼리 스트링)는 모두 문자로 처리된다.다른 타입으로 변환해서 사용하고 싶으면 변환 과정을 거쳐야 한다.문자를 정수로 변환 ex) Integer.valueOf(data)스프링이 제공하는 @RequestParam, @ModelAttribute, @PathVariable 등을 사용하면 편리하게 타입 변환을 할 수 있다.ex) public String hello(@ReqeustParam("data") Integer data){} 스프링에 추가적인 타입 변환이 필요한 경우 스프링에서 제공하는 확장 가능한 org.springframework.core.convert.Converter 인터페이스를 구현해서 등록하면 된다.컨버터 인터페이스는 모든 타입에 적용할..
API 예외 처리API는 각 오류 상황에 맞는 오류 응답 스펙을 정하고 JSON으로 데이터를 내려줘야 한다.API 요청 시 정상 요청이든 오류 요청이든 JSON이 반환되어야 한다. //컨트롤러@RequestMapping("/error-page/500")public String errorPage500(HttpServletRequest request) { log.info("errorPage 500"); printErrorInfo(request); return "error-page/500";}@RequestMapping(value = "/error-page/500", produces = MediaType.APPLICATION_JSON_VALUE)public ResponseEntity> erro..
예외 처리서블릿 예외 처리서블릿에서 지원하는 예외 처리 방식Exception (예외)response.sendError (HTTP 상태 코드, 오류 메시지) Exception (예외)자바 직접 실행자바 main() 메소드를 직접 실행하는 경우 main 쓰레드가 실행된다.실행 도중 예외를 잡지 못하고 main()을 넘어서 예외가 던져지면 예외 정보를 남기고 쓰레드가 종료된다.웹 애플리케이션사용자 요청별로 별도의 쓰레드가 할당되고 서블릿 컨테이너 안에서 실행된다.애플리케이션에서 예외 발생 시 try~catch로 예외를 처리하지 못하고 서블릿 밖으로 예외가 전달되면WAS (여기까지 전달) WAS는 예외가 발생하면 내부에서 문제가 발생한 것으로 인지하고 HTTP 상태 코드 500을 반환한다.리소스 자체가 없을 경..
로그인 처리 - 필터, 인터셉터만약 로그인을 한 사용자에게만 어떤 기능(상품 관리, 마이페이지 등...)을 제공한다고 할 때 해당 URL을 알면 로그인을 하지 않아도 해당 화면에 들어갈 수 있다.그렇기에 로그인 사용자에게만 제공하는 기능 관련 로직에서 로그인 여부를 체크해야 한다.이때 1~2개의 기능이 아닌 수 많은 기능들에서 로그인 여부를 체크해야 하는데 애플리케이션 여러 로직에서 공통으로 관심있는 것을 공통 관심사(cross-cutting concern)라고 한다.ex) 상품 등록, 수정, 조회 등 여러 로직에서 공통으로 인증에 대한 관심을 가지고 있다. 공통 관심사는 스프링 AOP로도 해결할 수 있지만 서블릿 필터 또는 스프링 인터셉터를 사용하는 것이 좋다.웹과 관련된 공통 관심사를 처리할 때는 H..
로그인 처리 - 쿠키, 세션인텔리제이 기본 설정 및 트러블 슈팅Trouble Shooting문제 : 강의 소스 파일을 열었더니 Cause: zip END header not found 에러 발생해결 : Java와 Spring 버전과 호환되는 Gradle 버전을 사용해야한다gradle/gradle-wrapper.properties 파일에서 호환되는 gradle 버전으로 변경1번 방법으로 해결되지 않는 경우 gradle-wrapper.properties 파일에서 distributionUrl 내용 중 service부터 끝까지 복사 후 웹 브라우저에 붙여넣기사용자폴더\.gradle\wrapper\dists\해당gradle버전\고유값\에 해당 버전 gradle 파일을 넣어준다. 문제 : 파일 내 한글이 깨지는 경..
검증 - Bean Validation검증 로직은 대부분 빈 값인지 아닌지, 특정 크기를 넘는지 아닌지와 같이 매우 일반적인 로직이다. Bean Validation : 일반적인 검증 로직들을 모든 프로젝트에 적용할 수 있게 공통화하고 표준화한 것어노테이션 하나로 검증 로직을 매우 편리하게 적용할 수 있다.구현체가 아닌 검증 어노테이션과 여러 인터페이스의 모음이다.일반적으로 사용하는 구현체는 하이버네이트 Validator implementation 'org.springframework.boot:spring-boot-starter-validation'Bean Validation을 사용하기 위한 build.gradle에 라이브러리 추가해당 라이브러리가 추가되면 스프링 부트가 자동으로 Bean Validator를..
Validation검증 요구사항검증 로직 예시타입 검증 - 가격, 수량에 문자가 들어가면 검증 오류 처리필드 검증 - 상품명(필수, 공백x), 가격(1,000원이상, 100만원 이하), 수량(최대 9999개)특정 필드의 범위를 넘어서는 검증 - 가격 * 수량은 10,000원 이상 컨트롤러의 중요한 역할중 하나는 HTTP 요청이 정상인지 검증하는 것 클라이언트 검증 vs 서버 검증클라이언트 검증은 조작할 수 있기에 보안에 취약서버 검증은 즉각적인 고객 사용성이 부족둘을 적절히 섞어서 사용하되 최종적인 서버 검증 필수! //검증 오류 결과를 보관Map errors = new HashMap();//검증 로직if (!StringUtils.hasText(item.getItemName())) { errors...
메시지, 국제화스프링에서 메시지, 국제화 기능을 제공한다.타임리프에서도 스프링이 제공하는 기능을 통합해서 제공한다.국제화국제화 : 특정 지역, 국가에 맞게 언어를 지원해주는 등과 같은 기능ex) 웹 브라우저를 영어로 세팅하거나 영어를 사용하는 나라에서 서비스를 이용하면 영어로 보이는 것메시지 파일을 각 나라별로 별도로 관리하면 서비스를 국제화할 수 있다. 어디 지역(국가)에서 접근한 것인지 인식하는 방법은 HTTP accept-language 헤더 값을 사용하면 된다.사용자가 직접 선택하게 하고 쿠키 등을 사용해서 처리하는 방법도 있다.메시지메시지 기능 : 다양한 메시지를 한 곳에서 관리하도록 하는 기능만약 모든 "상품명" 이라는 단어를 "상품이름" 으로 고쳐야 한다면?모든 파일에 메시지가 하드 코딩되어..
타임리프 스프링 통합과 폼타임리프 스프링 통합타임리프는 스프링 없이도 동작하지만 스프링 통합을 위한 다양한 기능을 제공한다. 스프링 통합으로 추가되는 기능들스프링의 SpringEL 문법 통합${@myBean.doSomething()}처럼 스프링 빈 호출 지원편리한 폼 관리를 위한 추가 속성th:objectth:field, th:errors, th:errorclass폼 컴포넌트 가능checkbox, radio button, List 등 편리하게 사용할 수 있는 기능 지원스프링 메시지, 국제화 기능의 편리한 통합스프링 검증, 오류 처리 통합스프링 변환 서비스 통합 (ConversionService)입력 폼 처리 상품명 가격 ..
h2boom
'스프링 MVC' 태그의 글 목록