Spring 46

[SpringBoot] API 예외처리

개요 기존에 정리한 HTML 예외처리(https://jaimemin.tistory.com/1888)와 달리 API 예외처리는 고려해야 할 요소가 상당히 많습니다. HTML 예외처리 같은 경우 적절한 예외 페이지만 있으면 대부분의 문제를 해결할 수 있지만, API 예외처리 같은 경우 각 API마다 정해진 규약이 다르므로 각 에러 상황에 맞는 에러 응답 스펙을 정의해야 하고 JSON으로 데이터를 내려주어야 합니다. 이처럼 API마다 정해진 규약이 다르기 때문에 실무 개발을 진행하다 보면 각 프로젝트마다 API 규격 정의서를 작성해야 하는데, 규격도 양방향으로 합의한 후 정해야하기 때문에 해당 프로세스에 상당히 많은 시간을 투자해야 합니다. API 규격은 회사마다 상이하고 심지어 팀 마다도 다를 수 있으므로 ..

Spring 2021.08.08

[SpringBoot] HTML 예외처리와 예외 페이지

개요 실무 개발을 경험해보면 실제 개발하는 시간보다 예외처리 및 테스트 코드 작성하는데 시간이 더 많이 걸립니다. 따라서, 이번에는 예외처리와 예외 페이지에 대해 정리해보겠습니다. 1. 서블릿의 예외처리 과정 서블릿은 크게 두 가지 방식으로 예외처리 지원함 Exception을 던지거나 response.sendError(HTTP 상태 코드, 에러 메시지) 메서드 호출 1.1 Exception 자바의 메인 메서드를 직접 실행할 경우 main이라는 쓰레드가 실행되며 실행 도중 예외를 잡지 못하고 실행한 main() 메서드를 넘어서 예외가 던져지면, 예외 정보를 남기고 해당 쓰레드 종료 웹 애플리케이션의 경우 사용자 요청 별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행 애플리케이션에서 excepti..

Spring 2021.08.03

[SpringBoot] Filter, Interceptor 개념 정리 및 로그인 처리

개요 기존 게시글에서는 쿠키와 세션 개념을 정리하면서 이 두 개념을 이용하여 로그인 관련 코드 적용도 해봤습니다. (https://jaimemin.tistory.com/1885, https://jaimemin.tistory.com/1886) 하지만, 로그인 처리를 할 때 쿠키와 세션만으로는 해결 안 되는 점이 있습니다. 예를 들자면, 로그인을 해야지만 접근 가능한 페이지들이 있을 때 쿠키와 세션만 적용했을 때는 해당 페이지 url을 직접 쳐서 들어갈 경우 그대로 화면이 노출된다는 문제점이 있습니다. 사실 시스템 요구사항에서는 로그인하지 않은 상태에서 해당 페이지들에 접근할 경우 우선 로그인 페이지로 리다이렉트 한 후 다시 그 페이지로 리다이렉트 하는 방식을 원할 것입니다. 여기서 필터와 인터셉터가 쓰이는..

Spring 2021.08.01

[SpringBoot] 쿠키, 세션을 이용한 로그인 처리

개요 지난번 게시글에서는 쿠키, 세션, 그리고 쿠키와 세션을 이용한 로그인에 대한 개념을 정리해봤습니다. (https://jaimemin.tistory.com/1885) [SpringBoot] 쿠키, 세션 개념 정리 개요 이번 포스팅에서는 로그인 기능을 구현할 때 꼭 필요한 개념인 쿠키와 세션에 대해 정리해보겠습니다. 실제 로그인과 관련된 코드 및 설명은 다음 글에서 정리하겠습니다. 쿠키 서버에서 jaimemin.tistory.com 이번 게시글에서는 코드와 함께 지난번 게시글에 대한 부가 설명을 진행하겠습니다. 1. 쿠키를 이용한 로그인 처리 지난 게시글 복습 서버는 로그인 요청이 성공할 경우 응답 헤더 내 Set-Cookie 필드에 사용자 정보 전달 쿠키를 전달받은 클라이언트는 이후 모든 HTTP 요..

Spring 2021.07.31

[SpringBoot] 쿠키, 세션 개념 정리

개요 이번 포스팅에서는 로그인 기능을 구현할 때 꼭 필요한 개념인 쿠키와 세션에 대해 정리해보겠습니다. 실제 로그인과 관련된 코드 및 설명은 다음 글에서 정리하겠습니다. 쿠키 서버에서 요청에 대한 응답으로 클라이언트로 전달해주는 정보 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청 시 서버로 전달하는 정보 위 두 정보는 HTTP Header에 저장이 됨 Set-Cookie: 서버에서 클라이언트로 쿠키 전달 Cookie: 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청 시 서버로 전달하는 정보 쿠키 - 생명주기 Set-Cookie 내 expires라는 필드를 참고하면 쿠키 만료 날짜 및 시간을 알 수 있음 (GMT 기준) Set-Cookie 내 max-age 필드는 마지막 요청으로부터..

Spring 2021.07.29

[SpringBoot] Validation 간단 정리 - 2 (Bean Validation)

개요 기존에 공유한 Validtor의 경우 간단한 검증 기능조차도 코드로 작성했기 때문에 복잡하다고 느껴질 수 있습니다. (https://jaimemin.tistory.com/1874) 이에 따라 스프링에서는 애노테이션 하나로 검증 로직을 매우 편리하게 적용할 수 있는 Bean Validation을 제공하며 오늘은 이에 대해 정리해보고자 합니다. 1. Bean Validation 특정한 구현체가 아닌 Bean Validation 2.0(JSR-380)이라는 기술 표준 JPA가 표준 기술이고 그 구현체로 hibernate가 있는 것처럼 Bean Validation 또한 검증 애노테이션과 여러 인터페이스의 모음 대표적인 구현체로 hibernate validator가 있으며 보다 자세한 내용은 http://h..

Spring 2021.07.25

[SpringBoot] Validation 간단 정리 - 1 (BindingResult, Validator)

개요 실무 프로젝트를 경험하신 분들은 다들 공감하시겠지만 프로젝트 개발 과정에서 실제 개발에 투자하는 시간만큼 예외처리 및 validation을 진행합니다. 해당 게시글은 PRG 패턴을 예시로 들어 내용을 정리할 예정이며 PRG 패턴에 관해서는 아래 게시글을 참고해주세요. (https://jaimemin.tistory.com/1825) 게시글에서 다룰 케이스는 아래와 같습니다. (위에는 PRG 패턴 정상 케이스, 아래는 게시글에서 다룰 케이스) 회원가입 제약 조건 우선, 검증 및 예외처리를 하기 위해서는 회원가입을 진행할 때 제약 조건이 있어야 합니다. 따라서, Member 즉 회원 클래스에는 id, password, 그리고 생년을 나타내는 year 필드가 있다고 가정합니다. 각 필드에 대한 제약조건은 ..

Spring 2021.07.16

[Spring Boot] 메시지, 국제화 간단 정리

개요 HTML에 문구를 하드 코딩해버리면 기존 문구를 일괄적으로 변경해야 할 때 혹은 한글을 모르는 외국인들에게도 서비스를 제공하고 싶을 때 일일이 변경해야 하기 때문에 상당히 곤란한 상황에 직면하게 됩니다. 따라서, HTML에 하드코딩하는 대신 다양한 메시지를 한 곳에서 관리하는 메시지 기능을 익혀놓으면 실무에서 유용하게 사용할 수 있습니다. 메시지 기능 설정 메시지 기능을 사용하기 위해서는 MessageSource라는 스프링 빈을 등록해주면 되고 이는 인터페이스이기 때문에 구현체인 ResourceBundleMessageSource 빈을 등록해주면 됩니다. (스프링 부트에서는 자동으로 등록) @Bean public MessageSource messageSource() { ResourceBundleMes..

Spring 2021.07.10

HttpMessageConverter 간단 정리

1. HttpMessageConverter 용도 HTTP API처럼 JSON 데이터를 HTTP 메시지 바디 내 직접 읽거나 쓰는 경우 사용 @ResponseBody 어노테이션을 사용할 때 HTTP Body 내 문자 내용을 직접 반환하므로 HttpMessageConverter가 동작 String 문자 처리에는 StringHttpMessageConverter, 객체 처리에는 MappingJackson2HttpMessageConverter 사용 이외에도 다양한 HttpMessageConverter가 존재 * 응답의 경우 클라이언트의 HTTP Accept 헤더와 서버 컨트롤러의 반환 타입을 조합해 MessageConverter가 선택됨 (하단에 추가 설명) 2. 스프링 MVC의 HttpMessageConvert..

Spring 2021.06.11

Spring MVC 구조 정리

복습 기존에 작성한 Front Controller 패턴 게시물을 보고 오면 이해하는데 도움이 될 것입니다! (https://jaimemin.tistory.com/1817) Spring MVC 구조 Front Controller 패턴과 동일한 구조 Front Controller 역할을 Spring MVC 구조에서는 Dispatcher Servlet이 맡음 전체적인 플로우는 아래와 같음 HTTP 요청 Handler 조회 Handler를 처리할 수 있는 HandlerAdapter 조회 Handler 어댑터에서 Handler 호출 ModelAndView 반환 ViewResolver 호출 (JSP의 경우 InternalResourceViewResolver, 타임리프의 경우 ThymeleafViewResolver)..

Spring 2021.06.09