사이드로 진행하고 있는 프로젝트에서 직렬화/역직렬화 시 ObjectMapper를 사용하고 있습니다. 이때 JSON에서 자바 객체로 역직렬화 시 LocalDateTime 필드가 정상적으로 변환되지 않고 오류가 발생하였는데 이를 정리하고자 글을 작성하게 되었습니다. 문제 유저가 북마크 한 게시글 목록의 썸네일 경로를 조회하고자 할 때 위와 같은 응답을 반환합니다. 응답 데이터에는 북마크 ID, 북마크 한 게시글 ID, 게시글의 썸네일 경로, 게시글 작성 일자의 리스트가 담겨있습니다. MockMvc의 응답 body에 담겨 있는 JSON 정보를 추출하여 객체로 변환 후 예상했던 데이터와 일치하는지 여부를 확인하기 위해 위와 같은 코드를 작성하였습니다. ObjectMapper에 의해 역직렬화가 올바르게 수행될 것..
Spring IoC 컨테이너 학습 도중 BeanFactory, ApplicationContext에 대해 알게 되어 이를 정리해 보고자 글을 작성하게 되었습니다. BeanFactory BeanFactory는 빈 컨테이너에 접근하기 위한 루트 인터페이스로 스프링에서 IoC 컨테이너의 가장 기본적인 형태이다. 스프링에서 관리되는 객체인 Bean들의 생성, 관리, 조회 등의 역할을 담당한다. 빈 객체들의 라이프사이클을 관리하며 싱글톤 객체들을 캐싱하여 동일한 객체들을 재사용한다. 빈 스코프에 따라 반환하는 빈들이 달라질 수 있다. 다양한 구현체를 가질 수 있는데 스프링에서는 XmlBeanFactory, DefaultListableBeanFactory 등의 구현체를 제공한다. XmlBeanFactory : XML..
스프링은 어노테이션을 기반으로 구성되어 있습니다. 어노테이션이란 무엇이고 스프링에서는 왜 어노테이션을 기반으로 구성하게 되었는지 정리해 보고자 글을 작성하게 되었습니다. 어노테이션 어노테이션은 사전적 의미로 주석이라는 뜻을 가지고 있다. 자바에서 어노테이션은 소스 코드에 추가해서 사용할 수 있는 메타 데이터의 일종이다. 메타 데이터란 애플리케이션이 처리해야 할 데이터가 아니라 컴파일 및 런타임 과정에서 코드를 어떻게 처리해야 할지 알려주기 위한 추가 정보이다. 자바 어노테이션은 JDK 1.5 버전 이상에서부터 사용가능하며, 자바 어노테이션은 클래스 파일에 임베드되어 컴파일러에 의해 생성된 이후 JVM에 포함되어 동작한다. 어노테이션이 나오기 이전에는 XML 및 마커 인터페이스를 통해 추가적인 정보를 제공..

@Controller의 반환값이 문자열로 뷰 이름을 반환하는 것이 아닌 다른 타입의 반환값을 가지게 된다면 어떻게 될까? 클라이언트 요청 및 응답 과정 클라이언트의 요청은 크게 아래와 같은 흐름으로 진행된다. 요청이 DispatcherServlet으로 들어온다. 요청 정보를 바탕으로 HandlerMapping을 통해 핸들러를 찾는다. 핸들러 정보를 바탕으로 HandlerAdapter를 통해 핸들러 어댑터를 찾는다. 핸들러 어댑터가 핸들러(컨트롤러)로 요청을 위임한다. 핸들러 메서드 실행 후 Model과 View를 반환한다. 뷰 이름을 ViewResolver에 전달하고 뷰 리졸버는 해당하는 뷰를 반환한다. 디스패처 서블릿은 뷰에게 모델을 전달하고 모델 데이터를 뷰에 렌더링 한다. 최종적인 뷰를 클라이언트 ..

Spring 프레임워크에서는 외부 API와 통신을 위해 RestTemplate을 구현해 두었습니다. RestTemplate이 무엇이고 어떤 동작을 수행하는지 정리해보고자 합니다. RestTemplate RestTemplate는 스프링 3.0부터 지원하는 HTTP 요청을 수행하는 동기식 클라이언트이다. HTTP 통신을 단순화하고 RESTful 원칙을 지킨 HTTP 메서드(GET, POST, DELETE, PUT)에 적합한 여러 메서드들을 제공하고 있기 때문에 HTTP 통신에 있어 유용하게 사용할 수 있다. RestTemplate는 Blocking과 동기 방식이라는 특징이 존재한다. Blocking과 동기, Non-blocking과 비동기를 같은 개념으로 헷갈리는 경우가 많다. 하지만 두 개념은 구분 짓는 ..