이번에는 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..
Spring을 이용해 개발을 하다 보면 빈팩토리 후처리기(BeanFactoryPostProcessor)의 구현체를 빈으로 등록해주어야 하는 경우가 있다. 해당 타입의 빈을 등록하기 위해서는 static 메소드로 선언해주어야 하는데, 이번에는 그 이유를 예시와 함께 알아보고자 한다. 1. BeanFactoryPostProcessor 타입의 빈 메소드를 static으로 해야 하는 이유 [ 빈팩토리 후처리기(BeanFactoryPostProcessor)와 PropertySourcesPlaceholderConfigurer ] Spring은 기본적으로 객체로 만들 빈 설정정보(BeanDefinitino)를 만들어둔 다음에 이를 바탕으로 객체를 생성한다. 이때 빈 설정정보(BeanDefinition)를 불러오고 조..
