목록분류 전체보기 (155)
Rootable의 개발일기
📌 HTML 폼 전송 방식 🔎 application/x-www-form-urlencoded 방식 HTML 폼 데이터를 서버에 전송하는 가장 기본적인 방법이다. Form 태그에 별도의 enctype 옵션이 없으면 웹 브라우저는 요청 HTTP 메시지의 헤더에 Content-Type으로 application/x-www-form-urlencoded를 추가한다. 폼에 입력한 전송할 항목을 HTTP body에 문자로 "username=kim&age=20"과 같이 &로 구분해서 전송한다. ✔ 문제점 파일은 문자가 아니라 Binary 데이터를 전송해야 하므로, 해당 방식으로는 전송이 어렵다. 또한, 보통 폼을 전송할 때 파일뿐만 아니라 다른 데이터도 함께 전달한다. 따라서, Binary 데이터와 문자 데이터를 동시에 ..
📌 BasicErrorController의 한계 🔎 BasicErrorController 코드 errorHtml() : 클라이언트 요청의 Accept 헤더 값이 text/html인 경우, error 디렉터리의 뷰를 반환 error() : 그 외 경우에 호출되고 ResponseEntity로 HTTP body에 JSON 데이터를 반환 스프링 부트는 BasicErrorController가 제공하는 기본 정보들을 활용해서 오류 API를 생성해 준다. 🔎 한계 스프링 부트가 제공하는 BasicErrorController는 HTML 응답을 하는 경우에는 매우 편리한 방법이다. 하지만 API 오류 처리는 매우 세밀하고 복잡하다. 각각의 컨트롤러마다 또는 예외마다 API 오류 스펙을 정의해야 할 수도 있다. 예를 들어..
📌 서블릿의 2가지 예외 처리 방식 서블릿 컨테이너에 예외를 전달하는 경우는 다음 2가지가 있다. 🔎 Exception(예외) ✔ 자바 직접 실행 자바의 메인 메서드를 직접 실행하는 경우 main이라는 이름의 쓰레드가 실행된다. 예외는 바로 try ~ catch로 처리하거나 실행 도중에 예외를 잡지 못하고 처음 실행한 main() 메서드를 넘어서 예외가 던져지면, 예외 정보를 남기고 해당 쓰레드는 종료된다. ✔ 웹 애플리케이션 애플리케이션에서 예외가 발생했는데, 애플리케이션에서 예외를 잡지 못하고 서블릿 밖으로 예외가 전달될 경우 다음과 같이 동작한다. WAS(여기까지 전파) ⬅ 필터 ⬅ 서블릿 ⬅ 인터셉터 ⬅ 컨트롤러(예외 발생) 🔎 response.sendError HttpServletResponse..
📌 필요성 웹 애플리케이션에서 모든 컨트롤러에서 공통으로 관심이 있는 것, 즉 공통으로 적용하고자 하는 로직을 '공통 관심사'라고 한다. 필터와 인터셉터는 모두 컨트롤러 실행 전에 실행되고, 적용 대상도 지정할 수 있다. 대표적인 예시로 로그인을 들 수 있다. 로그인 대상만 진입 가능한 페이지가 있다면 뷰를 호출하는 컨트롤러가 실행되기 전에 인증 여부를 확인해야 한다. 이때, 컨트롤러 앞단에서 필터나 인터셉터를 사용하면 문제를 해결할 수 있다. 웹과 관련된 공통 관심사를 처리할 때는 HTTP의 헤더나 URL의 정보들이 필요한데, 서블릿 필터나 스프링 인터셉터는 HttpServeltRequest를 제공한다. 📌 서블릿 필터(Servlet Filter) 🔎 필터 흐름 HTTP 요청 ➡ WAS ➡ 필터..