JAXB 란? JAXB(Java Architecture for XML Binding)는 자바 객체와 XML 문서 간의 매핑을 쉽게 처리하기 위한 자바 API입니다. JAXB는 XML 스키마를 기반으로 자동으로 자바 클래스를 생성하고, 자바 클래스와 XML 문서 간의 양방향 매핑을 지원합니다. JAXB에서 제공하는 Marshaller와 UnMarshaller를 사용해서 HTTP POST 요청에 대한 XML 데이터를 자바 객체로 변환하고, 응답하는 예제를 만들어볼게요. Marshaller과 UnMarshaller Marshaller는 자바 객체를 XML 문서로 변환, Unmarshaller는 XML 문서를 자바 객체로 변환해 줍니다. 먼저 XML 예제는 다음과 같습니다. Noida Sector-88 2013..
@RestControllerAdvice + @ExceptionHandler 란? Spring에서 예외 처리를 할 때 Global 영역에서 관리해 주는 기능으로 @ControllerAdvice, @RestControllerAdvice를 사용합니다. 먼저 각 어노테이션 별로 간단하게 짚고 넘어가겠습니다. @ControllerAdvice vs @RestControllerAdvice ControllerAdvice 어노테이션을 살펴보면, 대상을 지정하지 않은 모든 컨트롤러에 @ExceptionHandler와 @InitBinder의 기능을 적용해 준다고 합니다. // 패키지 하위 모두 적용 @ControllerAdvice("org.bot.controllers") public class Advice1{} // 특정 ..
Heroku 란? Heroku에 대해 간단하게 알아보자. Heroku는 클라우드 서비스 중 하나로, dynos라는 리눅스 런타임 애플리케이션 관리 컨테이너를 통해 사용자가 직접 서버를 관리하지 않아도 되는 PaaS 형 플랫폼을 제공해 준다. (Node, Java, Python, Go 등 거의 대부분의 언어 지원) 사용자가 github에 푸시를 하면 해당 애플리케이션을 빌드하고 slug 타입으로 배포해 주어 AWS 등과 비교해 봤을 때 편하게 배포할 수 있다는 장점이 있다. 단, 버전 설정과 같은 인프라 설정은 제공하지 않기 때문에 디테일한 설정이 필요한 경우엔 불편한 점이 있어 장단점이 존재한다. 작년 11월까지는 무료로 dynos 컨테이너를 제공해왔지만 현재는 유료버전으로 변경되어 구독 방식으로 월 $..
RestTemplate 이란? RestTemplate은 스프링 3.0 버전부터 지원하는 라이브러리로, REST 방식의 API를 요청하고 json, xml, String 등 응답받을 수 있다. Spring 5부턴 WebFlux와 함께 WebClient를 도입하여 동기식 방식 및 비동기 접근을 지원하고 있다. RestTemplate 동작 과정 RestTemplate restTemplate = new RestTemplate(); 애플리케이션에서 Http Rest API 요청을 위한 RestTemplate을 생성한다. private final List
@Transactional 란? @Transactional 어노테이션은 스프링에서 많이 사용되는 선언적 트랜잭션 방식이다. 해당 어노테이션은 getConnection(), setAutoCommit(false), 예외 발생 시 롤백, 정상 종료 시 커밋 등의 필요한 코드를 삽입해준다. @Transactional 사용 방법 레거시 스프링에선 해당 어노테이션을 사용하기 위해선 PlatformTransactionManager 와 어노테이션 활성화 설정이 필요하다. 스프링 부트에선 @EnableTransactionManagement 설정이 되어 있어서 자동으로 사용할 수 있으며 입맛에 맞게 클래스 또는 메서드에 @Transactional 어노테이션을 적용하면 된다. PlatformTransactionManager..
컨트롤러 테스트 Mocking 테스트를 위해 실제 객체를 사용하는 것처럼 테스트를 위해 만든 모형(가짜 객체)를 만들어서 사용하는 것을 Mocking이라고 한다. 모킹한 객체를 이용하면 의존성을 단절시킬 수 있어 테스트하기 좋다. Mocking은 @MockMvc를 주입 받아 사용하며, 같이 사용하는 어노테이션으로는 @WebMvcTest 와 @AutoConfigureMockMvc가 있다. MockMvc perform() 해당 메서드를 사용하면, 브라우저에서 서버에 URL을 요청(GET, POST 등)하듯 컨트롤러를 실행시킬 수 있다. 요청을 통해 MockMvcHttpServletRequestBuilder 객체를 리턴하면서 HTTP 요청 프로토콜에 관련 정보(파라미터, 헤더, 쿠키 등)을 설정할 수 있다. ..
스프링 핵심 원리 이해 - 예제 프로젝트 생성 https://start.spring.io/ 에서 별도의 Dependency 없이 프로젝트를 생성하자. 비즈니스 요구사항 회원 회원 가입 및 조회 회원 등급 (일반, VIP) 자체 DB를 사용하며, 외부 DB 연동 가능성 존재 주문과 할인 정책 회원은 상품 주문 가능 회원 등급에 따라 할인 정책 적용 모든 VIP는 1000원 할인해주는 고정 할인 금액 적용 (할인 내용 변경 가능성 존재) 요구사항을 보면 회원 데이터, 할인 정책 등 당장 결정하기 어려운 부분이 있다. 앞에서 배운 객체지향 설계 방법을 통해 인터페이스만 만들고 구현체를 갈아끼울 수 있도록 설계해보자. 우선 스프링의 기능을 사용하지 않고 이후에 변경해보자. 도메인 설계 회원 도메인 협력 관계는 ..
회원 관리 예제 웹 애플리케이션 계층 구조를 보고 백엔드 관점에서 회원 관리 예제를 적용해보자. 컨트롤러 : 웹 MVC의 컨트롤러 역할 서비스 : 핵심 비즈니스 로직 구현 리포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 도메인 : 비즈니스 도메인 객체 (회원, 주문, 쿠폰 등 데이터베이스에서 저장하고 관리되는 모델) 비즈니스 요구사항 정리 데이터 : 회원 ID, 이름 기능 : 회원 등록, 조회 데이터 저장소가 아직 선정되지 않음 클래스 의존 관계는 데이터베이스가 선정되지 않았다는 가정이므로, 우선 인터페이스로 구현 클래스를 변경할 수 있도록 설계하자. 개발을 진행하기 위해서 초기 개발 단계에서는 구현체로 가벼운 메모리 기반의 데이터 저장소 사용 회원 도메인과 리포지토리 만들기 pu..