Home
kimcno3
Cancel

[soldout] 즉시 구매 기능 구현시 책임 분리 문제

# 문제점 판매 입찰 최고가에 대한 즉시 구매 기능을 구현하던 중, 클래스 별 책임 분리가 애매한 상황에 마주하게 되었습니다. 수정 전 코드는 다음과 같습니다. OrderServiceImpl @Service @RequiredArgsConstructor public class OrderServiceImpl implements OrderServic...

[soldout] 로그인 회원 정보 조회를 위한 Resolver 구현

# 문제점 로그인한 회원이 구매나 판매 서비스에 대한 요청을 보낼 경우, 특정 메소드들은 UserId 정보를 필요로 하는 경우가 존재합니다. 예를 들면 즉시 구매 요청을 보낸 경우, 판매 입찰가와 거래 체결을 진행하기 위해선 구매자의 정보도 필요하기 때문에 userId를 필요로 하게 됩니다. 하지만 이를 위해 모든 Service 객체에 세션에 ...

[soldout] MyBatis 연결을 위한 유연한 구조 변경

# 문제점 DB 연결을 위해 MyBatis를 활용하기로 결정했고 이를 위한 구현을 진행하던 중 Mapper 인터페이스를 주입할 대상에 대한 고민을 하게 되었습니다. MyBatis의 경우, Service 레이어에 Mapper 인터페이스를 주입시켜 쿼리문을 날려 DB를 사용할 수 있도록 구현이 가능하지만 기존에 의존성 주입이 되어 있든 Reposit...

[soldout] 로그인 검증 기능 구현

# 문제점 회원가입 및 로그인, 로그아웃 기능을 구현한 다음, 요청을 보낸 클라이언트가 현재 로그인한 상태인지 아닌지에 대한 검증을 거치고 로그인된 클라이언트의 요청일 경우 이를 처리해줄 수 있도록 해줘야 할 필요가 생겼습니다. # 해결방안 1) AOP 이를 구현하기 위해 가장 먼저 적용해본 개념은 AOP(Aspect Oriented Prog...

[soldout] 예외 처리에 대한 책임 할당의 고민

# 문제점 필요한 기능들을 구현하면서 발생할 수 있는 예외 상황에 대한 처리 로직을 추가하게 되는 경우가 생겨났습니다. 이때 예외 처리 로직을 어떤 레이어에 책임을 주어야 할지에 대한 고민을 하게 되었습니다. 예를 들면 회원가입 로직을 진행하기 위해 Request로 넘어온 email과 password가 양식에 맞게 입력이 되었는지 확인하거나 이미...

[soldout] Layer 의존성 방향에 대한 고민

# 문제점 회원가입을 진행하기 위해선 꽤 많은 값을 Controller에서 request로 받아와 Service로 넘겨줘야 하는 소요가 발생했습니다. 여기서 문제는 많은 숫자의 변수를 각각의 매개변수로 넘겨주는 것이 합리적인 선택인지 의문이 생겼습니다. SignUpRequest @Getter @NoArgsConstructor @AllArgsCon...

[soldout] 유연한 로그인 인증 방식 변경 설계

# 요구사항 로그인 인증 방식으로 선택한 세션 방식과 Jwt 토큰 방식을 함께 구현하더라도 객체지향 스러운 설계로 구성한다면 두 방식을 다른 코드의 영향을 주지않고 유연하게 변경할 수 있는 설계가 가능할 것이라 생각했습니다. 자바에선 이와 같은 유연한 설계를 구현할 다형성의 장점을 활용한 디자인 패턴인 전략 패턴을 적용해보자 했습니다. # 해결...

[soldout] 로그인 인증 방식 선정

# 문제점 회원가입 API를 구현한 뒤 가입된 사용자에 대해서 로그인 요청을 받고 가입이 된 사용자에 한해 사용자에 대한 정보를 저장하고 관리할 방법이 필요하다고 판단했습니다. 이를 구현할 수 있는 방법은 크게 세션/쿠키 방식 과 JWT 방식을 생각해봤고 각 방식에 대한 기본 설명은 아래와 같습니다. # 해결방안 1) 세션 / 쿠키 방식 세...

[soldout] Flyway를 활용한 DB 스키마 버전 관리

# 문제점 처음 DB와의 연결을 위해 설계한 테이블 구성은 어플리케이션 확장이나 리팩토링 과정에서 변경될 가능성이 높았고 실제로 많은 변경 소요를 발생시켰습니다. 이 과정에서 프로젝트 진행 과정에 따른 스키마에 대한 버저닝을 위한 관리 툴이 필요하다고 생각했습니다. # 해결방안 Flyway Flyway는 오픈소스 DB 마이그레이션 도구로, D...

[soldout] Elasticsearch 사용한 APM 환경 구성

# 문제점 어플리케이션이 처리하는 비즈니스 로직들은 Spring 내에서는 여러 객체들의 의사소통을 통해 동작하고 그 외에 MySql, Redis처럼 다른 플랫폼에 요청을 보내기도 합니다. 이렇게 하나의 추상적인 로직은 여러 단계로 나뉘어 처리가 되기때문에 처리과정에서 발생할 수 있는 에러의 발생 지점이나 로직의 처리 속도의 최적화를 위해서는 각 단...