목록Spring (36)
Rootable의 개발일기
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/JGzCz/btspxbYoMqT/GYFMn3Y04tkveI1BjKUVQk/img.png)
📌 BasicErrorController의 한계 🔎 BasicErrorController 코드 errorHtml() : 클라이언트 요청의 Accept 헤더 값이 text/html인 경우, error 디렉터리의 뷰를 반환 error() : 그 외 경우에 호출되고 ResponseEntity로 HTTP body에 JSON 데이터를 반환 스프링 부트는 BasicErrorController가 제공하는 기본 정보들을 활용해서 오류 API를 생성해 준다. 🔎 한계 스프링 부트가 제공하는 BasicErrorController는 HTML 응답을 하는 경우에는 매우 편리한 방법이다. 하지만 API 오류 처리는 매우 세밀하고 복잡하다. 각각의 컨트롤러마다 또는 예외마다 API 오류 스펙을 정의해야 할 수도 있다. 예를 들어..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cVfrhT/btsppIujZQB/d4Rz7zIqaIZCURExSnoeEk/img.png)
📌 서블릿의 2가지 예외 처리 방식 서블릿 컨테이너에 예외를 전달하는 경우는 다음 2가지가 있다. 🔎 Exception(예외) ✔ 자바 직접 실행 자바의 메인 메서드를 직접 실행하는 경우 main이라는 이름의 쓰레드가 실행된다. 예외는 바로 try ~ catch로 처리하거나 실행 도중에 예외를 잡지 못하고 처음 실행한 main() 메서드를 넘어서 예외가 던져지면, 예외 정보를 남기고 해당 쓰레드는 종료된다. ✔ 웹 애플리케이션 애플리케이션에서 예외가 발생했는데, 애플리케이션에서 예외를 잡지 못하고 서블릿 밖으로 예외가 전달될 경우 다음과 같이 동작한다. WAS(여기까지 전파) ⬅ 필터 ⬅ 서블릿 ⬅ 인터셉터 ⬅ 컨트롤러(예외 발생) 🔎 response.sendError HttpServletResponse..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Uq28x/btspnkzu7y5/qbDKWKPcLrI6H6EzovBhLk/img.png)
📌 필요성 웹 애플리케이션에서 모든 컨트롤러에서 공통으로 관심이 있는 것, 즉 공통으로 적용하고자 하는 로직을 '공통 관심사'라고 한다. 필터와 인터셉터는 모두 컨트롤러 실행 전에 실행되고, 적용 대상도 지정할 수 있다. 대표적인 예시로 로그인을 들 수 있다. 로그인 대상만 진입 가능한 페이지가 있다면 뷰를 호출하는 컨트롤러가 실행되기 전에 인증 여부를 확인해야 한다. 이때, 컨트롤러 앞단에서 필터나 인터셉터를 사용하면 문제를 해결할 수 있다. 웹과 관련된 공통 관심사를 처리할 때는 HTTP의 헤더나 URL의 정보들이 필요한데, 서블릿 필터나 스프링 인터셉터는 HttpServeltRequest를 제공한다. 📌 서블릿 필터(Servlet Filter) 🔎 필터 흐름 HTTP 요청 ➡ WAS ➡ 필터..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ctykns/btspdJTOcOs/TaiakwEJ5i4mzyjAoBarsK/img.png)
📌 세션이 필요한 이유 1. HTTP는 비연결성 특성을 갖고 있어 사용자를 식별하지 못한다. 즉, 별도 처리 없이 사용자의 정보를 유지하지 않는다. 2. 1번 문제점을 해결하기 위해 쿠키를 선택할 수 있다. 하지만 쿠키는 다음과 같은 문제점이 있다. 쿠키 값은 클라이언트에서 임의로 변경할 수 있다. 쿠키에 보관된 정보는 훔쳐갈 수 있고, 한번 훔쳐가면 평생 사용할 수 있다. 쿠키 값은 단순하고 규칙성이 있어 보안면에서 취약하다. 🔎 대안 클라이언트와 서버가 서로를 식별하기 위해 쿠키를 써야 하는 점은 동일하다. 하지만 다음과 같은 조건을 충족시킨다면 보안 측면에서 안전하게 통신할 수 있다. 쿠키에 중요한 정보를 담지 않는다. 쿠키로 전달되는 세션 ID(식별자)는 사용자 별로 예측 불가능한 임의의 토큰(랜..