본문 바로가기

Spring/MVC 211

11. 파일 업로드 HTML 폼 전송 방식1) application/x-www-form-urlencoded2) multipart/form-data 파일을 업로드 할 때, 파일은 문자가 아니라 바이너리 데이터로 전송해야 한다.HTML 폼 데이터를 HTTP Body에 문자로 담아, 서버로 전송하는 1) 방법으로는 전송할 수가 없다. 이 문제를 해결하기 위해 HTTP는 2) multipart/form-data 전송 방식을 제공한다.   1. multipart/form-datamultipart/form-data에 대해 가볍게 짚고 넘어가자. 일단 이 전송 방식을 사용하기 위해서는 Form 태그에 별도의 enctype="multipart/form-data"를 지정해야 한다.그러면 Form의 입력 결과로 생성된 HTTP 메시지를 보면.. 2024. 5. 7.
10. 스프링 타입 컨버터 복습하는데 있어 중요한 내용이 있다. 메시지 컨버터(HttpMessageConverter)에는 컨버전 서비스가 적용되지 않는다.잊고 있을 수 있어 메시지 컨버터의 기능에 대해 간략히 설명하자면 Jackson 라이브러리를 사용해 "JSON ↔️ 객체"를 컨버팅 해주는 역할을 한다. JSON 객체는 HTTP Message Body에 담겨있는데, JSON 결과로 만들어지는 숫자나 날짜 포맷을 변경하고 싶으면 Jackson 라이브러리가 제공하는 설정을 통해서 포맷을 지정해야 한다. 결과적으로 컨버전 서비스는 Url 파라미터로 제공되는 @RequestParam, @ModelAttribute, @PathVariable 과 같은 것에서 사용이 되며, @RequestBody, ResponseEntity() 같은 경우.. 2024. 5. 6.
9. API 예외 처리 HTML 페이지와 다르게, API의 경우는 각 오류 상황에 맞는 오류 응답 스펙을 정하고 JSON으로 데이터를 보내주어야 한다.이 장에서 배운 Response Http Body에 JSON으로 오류 데이터를 반환하는 방법은 2가지가 있다. (나머지는 View, ModelView 반환) 1) BasicErrorController : ResponseEntity- view를 기준으로 JSON으로 반환을 한다.- ResponseEntity에 에러 메시지를 넣어주는 것이 불편하다. 2) HandlerExceptionResolver : response.getWriter().println("...")- 반환 타입인 ModelAndView는 Api 응답에는 필요하지 않다.- 동일한 (Runtime)Exception 예외.. 2024. 5. 6.
8. 예외 처리와 오류 페이지 오류를 JSON이 아니라 HTML 화면으로 제공할 때, 단순히 4xx / 5xx 관련된 오류 화면만 보여주면 되기 때문에이를 모두 구현해놓은 BasicErrorController를 사용하는 것이 편하다.  1. 서블릿 예외 처리1) 자바 예외public static void main(String[] args) 가 프로그램의 시작점으로, 'main' 이라는 이름의 쓰레드가 생성되어 실행된다.이러한 main 쓰레드에서 예외가 발생하면, main 메서드를 넘어서 JVM까지 도달한다.이 경우 JVM은 예외를 출력하고 main 쓰레드를 종료시킨다.   2) 웹 애플리케이션 예외사용자의 각 요청은 별도의 쓰레드로 처리되고, 서블릿 컨테이너(Tomcat..)에서 관리된다.예외가 발생했을 때, 애플리케이션 내에서 적.. 2024. 5. 5.
7. 로그인 처리2 - 필터, 인터셉터 앞서 코드에서 세션을 이용해 로그인 기능을 구현하였다.하지만 url을 통해 로그인을 하지 않는 사용자도 상품 관리 화면에 접근할 수 있는 문제가 있다. 각 컨트롤러에서 로그인 여부를 체크할 수도 있겠지만, 이 경우 로그인과 관련된 로직이 변경될 때 유지 보수성이 매우 어려워진다.따라서 로그인 인증에 관한 '공통 관심사(cross-cutting concern)'를 설정하여 한 번에 처리하는 방법이 좋다.→ AOP, 서블릿 필터, 스프링 인터셉터   1. 서블릿 필터 필터 흐름.HTTP 요청 → WAS → 필터 → 서블릿(Dispatcher) → 컨트롤러 필터 체인으로 구성되며, 중간에 필터를 자유롭게 추가할 수 있다. ( LogFilter → LoginCheckFilter )필터에 적절하지 않은 요청이 오.. 2024. 5. 4.
6. 로그인 처리1 - 쿠키, 세션 로그인 요구사항1) 로그인 사용자만 상품에 접근하고, 관리할 수 있다.2) 로그인 하지 않은 사용자가 상품 관리에 접근하면 로그인 화면으로 이동한다.  1. 로그인 V1 - new Cookie()로그인 시 response에 쿠키를 같이 담아 반환하면서,이후 사용자가 재방문 시, 쿠키 정보를 통해 유효한 사용자인지 판별할 수 있다.  문제점.- 쿠키 값 임의 변경 가능 - 쿠키 값 유추 가능     → request에서 쿠키 정보를 조작해서 보낼 시, 타 유저의 데이터가 노출될 수 있다. - 쿠키에 보관된 정보 탈취     → 웹 브라우저 / 네트워크 요청 과정에서 해킹의 위험이 있다. - 쿠키 유효 시간 없음  [LoginController]// 로그인 성공 시: 클라이언트에 new Cookie("mem.. 2024. 5. 2.