Thymeleaf (타임리프) ? 타임리프는 Spring Framework를 사용하는 개발자들에게 JSP 대신 쓰이는 템플릿 엔진입니다. HTML 5를 준수하는 형태로 기술할 수 있기 때문에 타임리프는 웹 어플리케이션에 적합한 템플릿 엔진입니다. 요즘 서비스에서는 JSP와 타임리프는 잘 쓰이진 않습니다. 백엔드에서는 데이터를 JSON으로 전달하고 프론트엔드에서는 리액트나 뷰로 전달받은 데이터를 가공하기 때문입니다. 타임리프가 최근 자주 쓰이는 용도로는 백엔드에서 간단히 관리자(Admin) 페이지를 만드는 경우입니다. 같이 협업해서 결과를 산출하는 실무에서는 잘 쓰이진 않지만 공부하는 차원에서 포스팅하도록 하겠습니다. Thymeleaf 사용 설정 dependencies { implementation 'or..
ResponseEntity REST 방식으로 호출하는 경우 데이터 자체를 전송하기 때문에 데이터를 요청한 쪽에서는 정상적인 데이터인지 비정상적인 데이터인지 구분할 수 있는 방법이 필요합니다. 이를 위해 RESTful 웹 서비스를 개발할 때 `ResponseEntity`를 사용합니다. `ResponseEntity`는 HTTP 응답의 상태 코드, 본문 데이터, 헤더 등을 명시적으로 설정하여 클라이언트와의 통신을 할 수 있습니다. 상태 코드 설정: HTTP 응답의 상태 코드를 명시적으로 설정 가능합니다. 응답 본문 설정: HTTP 응답의 본문 데이터를 설정할 수 있습니다. JSON, XML , 문자열 등 다양한 데이터 형식을 지원합니다. 제네릭 타입을 사용하여 데이터 타입을 명시할 수도 있습니다. 응답 헤더 ..
Redirect Redirect는 현재 요청에 대한 응답을 뷰로 생성해서 보내는 대신 브라우저에게 새로운 URL로 요청을 다시 보내라고 지시하는 응답 방식입니다. Redirect의 사용 이유는 다음과 같습니다. 페이지 이동 사용자가 한 페이지에서 다른 페이지로 이동해야 할 때 리다이렉트를 사용할 수 있습니다. 예를 들어, 로그인이 성공하면 로그인 페이지에서 메인 페이지로 리다이렉트할 수 있습니다. SEO (Search Engine Optimization) URL 구조를 변경하거나 구형 URL을 새로운 URL로 대체할 때 리다이렉트를 사용하면 검색 엔진이 새로운 URL을 인식하고 새로운 페이지를 색인할 수 있습니다. 이는 검색 엔진 최적화를 향상시키는 데 도움이 됩니다. 중복 제출 방지 폼 처리 후 리다이..
`비동기 처리`는 작업을 별도의 스레드에서 실행하고 결과를 나중에 처리하는 방식입니다. 이를 통해 특정 로직의 실행이 끝날 때 까지 기다리지 않고 다음 코드를 실행할 수 있으며, 결과가 준비되면 이벤트를 받거나 콜백을 통해 처리합니다. Spring Framework 비동기 처리 방식 `Callable`과 `DeferredResult` Spring Framework에서 스레드 기반의 비동기 처리를 지원합니다. `Callable`: 비동기 작업을 `Callable`로 감싸고 `AsyncTaskExecutor`를 통해 별도의 스레드에서 실행합니다. 작업이 완료되면 `Callable`을 반환합니다. `DeferredResult`: 비동기 작업의 결과를 나중에 처리할 수 있는 `DeferredResult`를 반환..
Spring Framework에서 파일 업로드를 처리하는 가장 일반적인 방식은 `Multipart 파일 업로드`를 지원하는 기능을 활용하는 것입니다. 사용하는 방식은 다음과 같습니다. 1. 의존성 추가 `MultipartResolver` 인터페이스를 구현하는 대표적인 구현체로는 `StandardServletMultipartResolver`과 `CommonsMultipartResolver`가 있습니다. `CommonsMultipartResolver Apacher Commons FileUpload 라이브러리를 사용하여 Multipart 요청을 처리합니다. 이 구현체는 Spring MVC 이전 버전에서 주로 사용되었으며 의존성을 추가해주어야 합니다. dependencies { implementation 'co..
HTTP 요청에 의해 동작하는 Servlet은 기본적으로 상태를 유지하지 않아 매 요청이 독립적으로 처리됩니다. `@SessionAttributes` 어노테이션은 컨트롤러 클래스나 메서드에 적용하여 세션에 데이터를 유지하고자 할 때 사용합니다. 이 어노테이션은 특정 Model 속성을 세션에 저장하고 세션에서 해당 속성을 유지하는 역할을 합니다. Session에 데이터를 넣어 유지하는 상황은 다음과 같습니다. 로그인 정보 유지, 장바구니, 여러 페이지에 걸쳐 단계적으로 정보 입력하는 경우 등 @SessionAttributes 속성명 지정 @Controller @SessionAttributes("user") public class UserController { @GetMapping("/user") publi..