본문 바로가기

Backend47

[SpringBoot] 예외 처리 - API 목차 서론 예외가 발생했을 때 HTML 페이지를 반환하는 경우 이외에 JSON으로 오류와 관련된 정보를 반환해야하는 경우가 있습니다. 오류 페이지의 경우 4xx, 5xx와 같은 오류 페이지를 단순히 고객에게 전달하면 끝이지만, API는 각 오류 상황에 맞는 오류 응답 스펙을 정의하고, 해당 데이터를 JSON으로 내려주어야 합니다. 지금부터 API의 경우 어떻게 예외를 처리하는지 알아보겠습니다. 먼저 서블릿이 어떻게 처리하는지 알아본 후, 스프링부트가 처리하는 방법에 대해 알아보겠습니다. 서블릿 - API 예외 처리 WebServerCustomizer - 에러 페이지 등록 @Component public class WebServerCustomizer implements WebServerFactoryCust.. 2023. 9. 30.
[SpringBoot] 예외 처리 - 오류 페이지 목차 서론 서블릿과 스프링에서 각각 예외를 처리하는 방법에 대해 알아보겠습니다. 예외 발생에는 다음과 같이 2가지 방식이 있습니다. Exception (예외) response.sendError(HTTP 상태 코드, 오류 메시지) Exception (예외) 웹 애플리케이션은 사용자 요청별로 쓰레드가 할당이 되고, 서블릿 컨테이너 안에서 실행이 됩니다. 만약, 애플리케이션에서 예외가 발생했을 때, try~catch로 예외를 잡아서 처리하지 않는다면 다음과 같은 방향으로 예외가 전파됩니다. WAS(여기까지 전파) ← 필터 ← 서블릿 ← 인터셉터 ← 컨트롤러 (예외발생) 우선 톰캣과 같은 WAS는 예외를 어떻게 처리할까요? 이를 확인하기 위해선 우선, 스프링 부트가 제공하는 기본 예외 페이지 설정을 false로.. 2023. 9. 26.
[SpringBoot] 필터와 인터셉터 (ArgumentResolver + @Login 활용) 목차 서론: 공통 관심 사항 애플리케이션을 만들면, 로그인한 사용자만 서비스를 이용하도록 접근 제한 요구사항이 있을 수 있습니다. 그럴려면 모든 HTTP 요청마다 로그인을 한 사용자인지 검증하는 로직이 들어가야 합니다. 로그인한 사용자에게만 서비스에 접근할 수 있는 버튼을 제공함으로써 해결했다고 할 수 있지만, 버튼 없이도 직접 URL 창에 다음과 같은 URL을 쳐서 해당 서비스를 이용할 수 있습니다. http://localhost:8080/items (상품 목록 조회 URL) 구현 방법으로 상품 관리 컨트롤러에서 로그인 여부를 체크하는 로직을 하나하나 작성할 수 있지만, 똑같은 작업을 반복해야 합니다. 더 큰 문제는 향후 로그인과 관련된 로직이 변경된다면 작성한 모든 로직을 하나하나 수정해야 합니다. .. 2023. 9. 21.
[SpringBoot] 쿠키와 세션(HttpSession) 목차 서론 현재 간단한 회원가입, 로그인, 상품 목록 관리 애플리케이션을 만들었다고 가정해 봅시다. 상품 목록 관리 같은 기능을 이용하기 위해선 반드시 그 전에 로그인을 해야 합니다. 하지만, HTTP는 비연결성(Connectionless)이기 때문에 클라이언트는 사용자의 아이디와 비밀번호를 요청 시마다 매번 서버에게 넘겨주어야 합니다. 이 번거로운 작업을 쿠키와 세션을 통해 해결할 수 있습니다. 화면 예시 쿠키? 어떻게 클라이언트에서 매번 일일이 아이디와 비밀번호를 넘겨주지 않아도 로그인한 사용자인 것을 판단하고 해당 정보를 가져올 수 있을까요? 로직은 간단합니다. 쿠키에 관련 정보를 저장하면, 웹 브라우저가 쿠키를 매 요청마다 지속적으로 보내줍니다. 쿠키 생성 사용자가 아이디와 비밀번호를 입력해 로그.. 2023. 9. 19.
[SpringBoot] HTTP 메시지 컨버터 (+ArugumentResolver, ReturnValueHandler) 목차 HTTP API처럼 뷰가 아닌 JSON 데이터를 HTTP 메시지 바디에서 직접 읽거나 쓰는 경우, HTTP 메시지 컨버터를 사용합니다. HttpMessageConverter @ResponseBody 사용 원리 HTTP의 Body에 문자 내용을 직접 반환합니다. viewResolver 대신 HttpMessageConverter가 동작합니다. 기본 문자 처리 : StringHttpMessageConverter 기본 객체 처리 : MappingJackson2HttpMessageConverter 이외에도, byte 처리 등 기타 여러 HttpMessageConverter가 등록되어 있습니다. 응답의 경우, 클라이언트의 Http Accept 헤더와 서버의 컨트롤러 반환 타입 둘을 조합해 HttpMessage.. 2023. 9. 1.
[SpringBoot] 로깅 간단히 알아보기 목차 로깅 운영 시스템에서는 System.out.println() 같은 시스템 콘솔을 사용해서 필요한 정보를 출력하지 않고, 별도의 로깅 라이브러리를 사용해서 로그를 출력합니다. 여기서는 최소한의 사용 방법만을 알아봅니다. 로깅 라이브러리 스프링부트 라이브러리를 사용하면, 스프링 부트 로깅 라이브러리(spring-boot-starter-logging)가 함께 포함됩니다. 스프링 부트 로깅 라이브러리는 기본적으로 다음 로깅 라이브러리를 사용합니다. SLF4J - https://www.slf4j.org/ Logback - https://logback.qos.ch/ SLF4J는 인터페이스입니다. 그 구현체로 Logback같은 로그 라이브러리를 선택하면 됩니다. 로그 라이브러리는 Logback, Log4J, L.. 2023. 8. 31.