목록2023/07 (26)
Rootable의 개발일기
📌 서블릿의 2가지 예외 처리 방식 서블릿 컨테이너에 예외를 전달하는 경우는 다음 2가지가 있다. 🔎 Exception(예외) ✔ 자바 직접 실행 자바의 메인 메서드를 직접 실행하는 경우 main이라는 이름의 쓰레드가 실행된다. 예외는 바로 try ~ catch로 처리하거나 실행 도중에 예외를 잡지 못하고 처음 실행한 main() 메서드를 넘어서 예외가 던져지면, 예외 정보를 남기고 해당 쓰레드는 종료된다. ✔ 웹 애플리케이션 애플리케이션에서 예외가 발생했는데, 애플리케이션에서 예외를 잡지 못하고 서블릿 밖으로 예외가 전달될 경우 다음과 같이 동작한다. WAS(여기까지 전파) ⬅ 필터 ⬅ 서블릿 ⬅ 인터셉터 ⬅ 컨트롤러(예외 발생) 🔎 response.sendError HttpServletResponse..
📌 필요성 웹 애플리케이션에서 모든 컨트롤러에서 공통으로 관심이 있는 것, 즉 공통으로 적용하고자 하는 로직을 '공통 관심사'라고 한다. 필터와 인터셉터는 모두 컨트롤러 실행 전에 실행되고, 적용 대상도 지정할 수 있다. 대표적인 예시로 로그인을 들 수 있다. 로그인 대상만 진입 가능한 페이지가 있다면 뷰를 호출하는 컨트롤러가 실행되기 전에 인증 여부를 확인해야 한다. 이때, 컨트롤러 앞단에서 필터나 인터셉터를 사용하면 문제를 해결할 수 있다. 웹과 관련된 공통 관심사를 처리할 때는 HTTP의 헤더나 URL의 정보들이 필요한데, 서블릿 필터나 스프링 인터셉터는 HttpServeltRequest를 제공한다. 📌 서블릿 필터(Servlet Filter) 🔎 필터 흐름 HTTP 요청 ➡ WAS ➡ 필터..
📌 세션이 필요한 이유 1. HTTP는 비연결성 특성을 갖고 있어 사용자를 식별하지 못한다. 즉, 별도 처리 없이 사용자의 정보를 유지하지 않는다. 2. 1번 문제점을 해결하기 위해 쿠키를 선택할 수 있다. 하지만 쿠키는 다음과 같은 문제점이 있다. 쿠키 값은 클라이언트에서 임의로 변경할 수 있다. 쿠키에 보관된 정보는 훔쳐갈 수 있고, 한번 훔쳐가면 평생 사용할 수 있다. 쿠키 값은 단순하고 규칙성이 있어 보안면에서 취약하다. 🔎 대안 클라이언트와 서버가 서로를 식별하기 위해 쿠키를 써야 하는 점은 동일하다. 하지만 다음과 같은 조건을 충족시킨다면 보안 측면에서 안전하게 통신할 수 있다. 쿠키에 중요한 정보를 담지 않는다. 쿠키로 전달되는 세션 ID(식별자)는 사용자 별로 예측 불가능한 임의의 토큰(랜..
📌 단순한 오류 메시지 vs 자세한 오류 메시지 🔎 단순한 오류 메시지 # 단순한 오류 메시지required : 필수 값입니다.range : 범위 오류입니다. 범용성이 좋아 여러 곳에서 사용할 수 있다.메시지를 세밀하게 작성하기 어렵다. 🔎 자세한 오류 메시지 # 자세한 오류 메시지required.item.itemName=상품 이름은 필수입니다.range.item.price=가격은 {0} ~ {1} 까지 허용합니다. 범용성이 떨어진다.메시지를 세밀하게 작성할 수 있다. 범용성을 사용하다가 필요한 경우에만 자세한 오류 메시지를 사용하도록 메시지 단계를 두자 자세한 메시지일수록 우선순위를 높게 준다. 스프링은 MessageCodesResolver라는 것으로 이러한 기능을 지원한다. 📌 MessageC..