Home
kimcno3
Cancel

[football] Redis Cluster와 Replication 구조를 통한 분산 저장이 가능한 설계 구현

# 문제점 Redis를 구성할 때, 하나의 서버로만 구성하다 보니 다음과 같은 문제점이 발생할 수 있는 가능성이 높았습니다. 서버 과부화 서버 다운시 발생하는 치명적인 서비스 장애 그래서 이러한 문제점을 해결하기 위해 다중 서버를 통해 요청에 대한 분산 처리가 가능한 구조로 구현하면서 Redis 또한 이와 같은 구조로 리팩토링할 필요...

[football] N+1 쿼리 문제 해결을 위한 고민

# 문제점 발견된 문제점 JPA를 활용하면 테이블 구조에 대한 고민을 자바 코드에선 하지 않고 객체간의 관계로써만 코드를 작성할 수 있도록 기능을 지원해준다는 장점이 있습니다. 저는 JPA를 가지고 연관관계를 가진 엔티티 객체들이 필요에 따라 쿼리문에 대한 고민 없이 연관관계 객체의 정보를 조회될 수 있도록 구현해보고자 했습니다. 하지만 이로 ...

[football] JPA를 활용한 객체 지향적인 설계를 위한 고민

# 문제점 아무리 MyBatis를 통해 DB연동에 필요한 부수적인 코드를 숨기고, 쿼리문과 자바코드를 분리해 작성하고 관리하면서 결합도를 낮춘 구성이 가능해졌다 문제점을 존재했습니다. 일단 쿼리문을 개발자가 직접 작성해 관리하면서 메소드의 동작에 이상이 생기거나 에러가 발생하면 자바코드가 아닌 쿼리문을 수정하면서 에러를 해결하거나 성능 최적화를 ...

[football] @AuthenticationPrincipal을 활용한 로그인 회원 정보 조회

# 문제점 프로젝트 진행시 빈도수가 높게 필요한 기능이 컨트롤러 레이어에서 파라미터로 로그인한 user의 정보를 가져오는 기능입니다. 이를 구현하기 위해 이전 프로젝트에선 Custom Resolver 클래스를 생성해 직접 회원 정보를 가져오는 로직을 구현해야 하는 소요가 발생했었습니다. 또한 회원정보를 조회하는 로직을 실행하는 경우 필연적으로 D...

[football] Jwt Token에 담길 사용자 정보에 대한 결정과 표준에 대한 이해

# 문제점 쿠키/세션 인증 방식을 사용할 경우, API 서버로 요청을 보낸 사용자에 대한 정보를 조회하기 위해 헤더에 담겨온 세션 ID로 세션을 조회를 해야만 합니다. 이는 결국 session에 대한 접근을 해야 하는 소요가 발생해 트래픽이 집중되는 경우 성능에 영향을 미칠 수 있는 가능성이 높다고 생각했습니다. 그러나 이러한 문제는 Jwt 토큰...

[football] Spring Security를 활용한 인증, 인가 처리 로직 구현

# 문제점 이전 프로젝트에선 세션/쿠키 인증 방식으로 로그인 기능을 구현했고, 이를 위한 로직을 직접 코드로 작성했었습니다. 그로 인해 제가 직접 구현된 로직 내에서 발생할 수 있는 에러의 위험은 높았고, 보안성에 대한 완성도도 높지 못해 핵심 정보에 대한 노출 위험도 높았다고 볼 수 있습니다. 이를 발전시키기 위해 Spring에서 오직 인증, ...

[soldout] JUnit5, Mockito를 활용한 효율적인 단위 테스트

# 문제점 애플리케이션 개발에서 작성한 코드에 대한 테스트는 필수적인 절차지만, 항상 실제 서버에 JSON 요청을 보내는 테스트를 통해서 비즈니스 로직의 문제점을 확인하기 위해서 테스트 시간도 오래걸릴 뿐만 아니라 발생된 문제를 야기하는 지점을 찾기도 매우 힘들 수 있습니다. 이러한 문제를 발생시키지 않기 위해서는 비즈니스 로직을 구현하는 과정에서...

[soldout] 스키마 변경을 최소화하는 데이터 모델링에 대한 고민

# 문제점 DB를 연동하기 위해 테이블 스키마를 구성하는 경우에도 변경을 최소화하고 확장이 가능한 스키마 구조로 구성하기 위해서, 그리고 스키마에 의존하지 않는 형태로 애플리케이션의 엔티티 객체를 구성하기 위한 고민을 필요로 했습니다. # 해결방안 데이터 모델링 데이터를 모델링한다는 것은 데이터를 이해하고 유형화, 구조화하는 과정을 의미합니다...

[soldout] 내부 생성 객체에 대한 테스트 방법 구성

# 문제점 UserServiceImpl @Service @RequiredArgsConstructor public class UserServiceImpl implements UserService { private final UserRepository userRepository; private final PasswordEncoder pass...

[soldout] DB Replication 적용

# 문제점 DB에 접근하는 로직은 크기 쓰기에 대한 요청과 읽기에 대한 요청이 많습니다. 그렇기 때문에 @Transactional 어노테이션을 선언하는 경우에도 읽기만을 위한 메소드엔 @Transactional(readOnly = true)로 선언해 의도치 않은 데이터 수정에 대해 방지하는 구조로 설계합니다. 또한 DB의 입장에선 쓰기에 대한 ...