목록Programing/Spring (73)
T_era
API 개발 시, 특정 비즈니스 로직 실패나 예외 상황에 대한 맞춤형 처리는 매우 중요하다. Spring Boot에서 Custom Exception을 효과적으로 구현하기 위해 Exception 구조, HttpStatus, 그리고 이를 조합한 Custom Exception 생성 및 처리 과정을 상세히 알아보자.1. Exception의 구조Java의 모든 예외는 java.lang.Throwable 클래스를 상속받는다. java.lang.Exception 클래스는 Throwable을 상속받아 checked exception의 기본 구조를 제공한다.public class Exception extends Throwable { @java.io.Serial static final long serialVer..
Client에서 Server로 데이터 전달 방식 (3가지)GET - Query Param, Query String: URL에 파라미터와 값을 명시하여 전달한다.사용 어노테이션: @RequestParam, @ModelAttribute예시: http://localhost:8080/tutor?name=wonuk&age=100POST - HTML Form (x-www-form-urlencoded): HTTP 요청 본문에 Key-Value 쌍 형태로 데이터를 인코딩하여 전달한다.사용 어노테이션: @RequestParam, @ModelAttribute예시:POST /form-datacontent-type: application/x-www-form-urlencodedkey1=value1&key2=value2HTTP ..
REST API 구축 시, Server에서 Client로 HTML 대신 데이터를 HTTP Message Body에 JSON 형식으로 담아 전달하는 것이 일반적이다. 정적 HTML이나 View Template 역시 HTTP Message Body에 담겨 전송될 수 있지만, 여기서는 직접 HTTP Response Message를 생성하여 전달하는 경우를 설명한다.1. HttpServletResponse 사용@Controllerpublic class ResponseBodyController { @GetMapping("/v1/response-body") public void responseBodyV1( HttpServletResponse response ) throws IOE..
Spring Framework에서는 Thymeleaf, JSP 등의 템플릿 엔진을 활용하여 View Template을 작성할 수 있다. View Template은 서버에서 전달받은 데이터를 HTML 구조에 맞게 삽입하여 최종적으로 클라이언트에게 전송될 HTML 문서로 변환된다. 이를 통해 사용자에게 동적으로 생성된 웹 페이지를 제공한다.View Template은 Model에 담긴 데이터를 참조하여 HTML 등의 결과물을 동적으로 생성하고 클라이언트에게 응답한다.Spring Boot는 기본적으로 View Template 경로를 src/main/resources/templates로 설정한다.build.gradle에 Thymeleaf 의존성을 추가하면 ThymeleafViewResolver와 필요한 Sprin..
Spring Boot 애플리케이션에서 특정 경로에 위치한 정적 리소스(HTML, CSS, JS, 이미지 등)는 별도의 서버 측 처리 없이 Client 요청에 따라 그대로 반환된다. Spring Boot는 기본적으로 다음 경로들을 정적 리소스 탐색 경로로 설정한다./static/public/META-INF/resourcessrc/main/resources/static예를 들어, src/main/resources/static/hello/world.html과 같은 디렉토리 구조로 정적 리소스가 위치한다면, Client는 http://localhost:8080/hello/world.html URL을 통해 해당 리소스에 접근할 수 있다./static 대신 /public 또는 /META-INF/resources 경..
Server에서 Client로 데이터를 전달하는 방식은 크게 세 가지로 분류된다.1. 정적 리소스 (Static Resources)변경 없이 그대로 반환되는 파일들을 의미한다.예시: HTML, CSS, JavaScript 파일, 이미지 (JPG, PNG 등)2. View Template서버 측 렌더링 (SSR, Server Side Rendering) 방식에서 활용된다.서버에서 데이터를 기반으로 HTML을 동적으로 생성하여 Client에게 반환한다.3. HTTP Message Body응답 데이터를 HTTP Message Body에 직접 담아 Client에게 반환한다.주로 REST API에서 JSON, XML 등의 형식으로 데이터를 전송하는 데 사용된다.
HttpMessageConverter는 Spring Framework에서 HTTP 요청과 응답을 변환하는 인터페이스이다. 클라이언트와 서버 간 데이터 교환 시, 요청 데이터를 자바 객체로 변환하거나 자바 객체를 응답 본문으로 변환하는 역할을 담당한다.MappingJackson2HttpMessageConverterMappingJackson2HttpMessageConverter는 JSON 데이터 처리를 위한 대표적인 HttpMessageConverter 구현체이다.HttpMessageConverter의 역할데이터를 Object로 변환한다. 대표적인 예시로 JSON을 자바 객체로 변환하는 작업을 수행한다.@RequestBody@RequestBody 어노테이션은 요청 데이터와 Request Header를 참고하..
1. View 렌더링과 REST API 혼합:일부 요청은 View를 통해 HTML 페이지를 제공하고, 다른 요청은 REST API처럼 JSON이나 XML 데이터를 제공해야 하는 경우에 유용하다.클래스 레벨에 @Controller를 적용하면 기본적으로 메서드들이 View 이름을 반환하여 ViewResolver를 통해 렌더링되지만API 엔드포인트에 해당하는 특정 메서드에만 @ResponseBody를 적용하여 해당 메서드의 반환 값은 HTTP 응답 본문으로 직접 전송하도록 설정할 수 있다.예시@Controllerpublic class UserController { @GetMapping("/users") public String getUserListPage(Model model) { //..
JSON은 @RestController에서 가장 널리 사용되는 데이터 형식이며, 현재 대부분의 API는 Request와 Response 모두 JSON 형태로 통신한다.HttpServletRequest 사용@Datapublic class Tutor { private String name; private int age;}@RestControllerpublic class JsonController { private ObjectMapper objectMapper = new ObjectMapper(); @PostMapping("/v1/request-body-json") public void requestBodyJsonV1( HttpServletRequest r..
HttpEntity 역할HTTP Request Body Message를 직접 조회한다.Request 뿐만 아니라 Response에서도 사용 가능하다.Response Header 또한 활용할 수 있다.Request Parameter 조회 기능과는 관련이 없다.View를 반환하지 않는다.HttpEntity 상속 객체RequestEntity: HTTP Request Method, URL 정보를 추가적으로 제공한다.ResponseEntity: HTTP Response 상태 코드 설정을 가능하게 한다.HttpEntity 특징HttpEntity는 HTTP Header와 Body 정보를 편리하게 조회하도록 지원한다.예시@Controllerpublic class RequestBodyStringController { ..