
이번에는 TDD로 멤버십 등록 API를 구현해보도록 하겠습니다. 첫 API를 개발하는 것이므로 다른 로직에서 사용되는 공통 로직들도 많이 있어서 작업이 적지는 않을 것 같은데, 열심히 첫 API를 개발해보도록 하겠습니다. 1. 멤버십 등록 API 구현 [ 요구사항 확인 ] 나의 멤버십 등록 API 기능: 나의 멤버십을 등록합니다. 요청: 사용자 식별값, 멤버십 이름, 포인트 응답: 멤버십 ID, 멤버십 이름 [ Repository 계층 개발 ] 앞선 포스팅에서 살펴봤던 것처럼 Repository의 메소드 중에서 멤버십을 DB에 추가하는 테스트 코드를 먼저 작성해보고자 한다. MembershipRepository에 대한 테스트 클래스를 작성하면 다음과 같다. public class MembershipRep..

이번에는 TDD로 구현해볼 연습 문제에 대해 소개하고, 프로젝트 생성까지 한 후에 마무리하도록 하겠습니다. 1. TDD 연습문제 소개와 요구사항 분석 [ 문제 설명 ] 이번 연습 문제의 주제는 멤버십 적립 서비스입니다. 현재 지원중인 멤버십에는 네이버, 카카오, 라인 3가지 멤버십이 있으며, 사용자는 원하는 멤버십을 등록할 수 있습니다. 포인트 적립비율은 결제금액의 1%로 고정되며, 추후에 고정 금액(1000원)으로 확장하여 적립될 수 있어야 합니다. 이번 연습문제에서는 위의 문제 설명과 아래의 요구사항을 만족하는 REST API를 자유롭게 정의하고, TDD 방식으로 구현하는 것입니다. [ 기능 요구 사항 ] 멤버십 연결하기, 나의 멤버십 조회, 멤버십 연결끊기, 포인트 적립 API 를 구현합니다. 사용..

이번에는 디스패처 서블릿(Dispatcher Servlert)이 HTTP 요청을 처리하는 방법에 대해서 알아보도록 하자 1. 디스패처 서블릿(Dispatcher Servlert)이 HTTP 요청을 처리하는 방법과 핸들러 메소드(HandlerMethod) [ 핸들러 메소드(HandlerMethod)란? ] HandlerMethod는 @RequestMapping과 그 하위 어노테이션(@GetMapping, @PostMapping 등)이 붙은 메소드의 정보를 추상화한 객체이다. HandlerMethod는 그 자체가 실행가능한 객체가 아니라 메소드를 실행하기 위해 필요한 참조 정보를 담고 있는 객체로써 다음과 같은 정보들을 가지고 있다. 빈 객체 메소드 메타정보 메소드 파라미터 메타정보 메소드 어노테이션 메타정..
Spring은 캐시 관련 기능을 추상화하여 편리하게 개발할 수 있도록 지원하고 있다. 이번에는 Spring이 제공하는 캐시와 관련된 기능들에 대해 알아보도록 하자. 1. Spring이 제공하는 캐시(Cache) 추상화 [ 캐시의 사용 ] 캐시는 서버의 부담을 줄이고, 성능을 높이기 위해 사용되는 기술이다. 예를 들어 어떤 요청을 처리하는데 계산이 복잡하거나 혹은 DB에서 조회하는게 오래 걸리는 등에 적용하여 결과를 저장해두고 가져옴으로써 빠르게 처리할 수 있다. 캐시는 값을 저장해두고 불러오기 때문에 반복적으로 동일한 결과를 반환하는 경우에 용이하다. 만약 매번 다른 결과를 돌려줘야 하는 상황에 캐시를 적용한다면 오히려 성능이 떨어지게 된다. 오히려 캐시에 저장하거나 캐시를 확인하는 작업 때문에 부하가 ..
개발을 하다 보면 서로 다른 환경을 운영해야 한다. 이번에는 이와 관련되어 Spring이 지원해주는 기술들에 대해 알아보도록 하자. 1. 활성 프로파일과 @Profile, @ActiveProfiles [ 환경의 분리 ] 개발을 하다 보면 여러 개의 환경을 관리해야 한다. 예를 들어 테스트 코드를 위한 테스트 환경, 개발을 하고 테스트를 하기 위한 알파 환경, 실제 운영 환경과 동일하게 맞춰두고 QA 등을 진행하는 스테이지 환경, 실제 서비스가 운영되는 운영 환경 등이 있다. 그렇기 때문에 각각의 환경들에 맞게 서로 다르게 빈 또는 프로퍼티들을 정의해야 할 수 있다. 예를 들어 개발을 위해서는 로컬 또는 내장 캐시를 이용할 수 있지만 실제 운영을 위해서는 외부 캐시를 이용하는 것이 대표적인 경우이다. Sp..