프로젝트

프로젝트

트랜잭션 수행 코드에 포함된 네트워크 통신 코드 분리하기

현재 프로젝트에서 관리자 권한을 가진 유저가 다수의 유저에게 초대 이메일을 보내는 비즈니스 로직이 존재합니다. 해당 로직을 수행하는 메서드에 트랜잭션이 걸리고, 메일 서버에 메일 전송 요청도 보내고 있습니다. 트랜잭션을 수행하는 중에 네트워크 통신을 진행하면 굉장히 안 좋다는 글을 본 적이 있습니다.(Real MySQL) 따라서 트랜잭션 수행 코드와 네트워크 통신 코드가 결합된 비즈니스 로직 코드를 개선한 과정을 포스팅으로 작성하려고 합니다. 시작하겠습니다. 비즈니스 로직 정리 멤버와 프로젝트 멤버 프로젝트는 M:N 관계이다. 비즈니스 로직을 수행하는 메서드의 로직은 다음과 같다. 로그인에서 사용하는 JWT 토큰에서 멤버 id를 얻는다. 트랜잭션 시작 멤버 id를 사용해 데이터베이스에서 멤버 엔티티를 조..

프로젝트

동시성 문제 해결하기

현재 프로젝트의 재고 도메인 코드에 문제가 있다는 것을 알아차렸다. 문제는 여러 명의 사용자가 동시에 재고 감소 로직을 실행한다면 동시성 이슈가 발생하는 것이다. 마침 동시성 관련 강의를 인프런에서 발견했고 이를 적용해보았다. 프로젝트 테이블 이해 재고 모델과 옵션 모델은 N:M 관계이다. 따라서 중간 테이블이 존재한다. 중간 테이블의 옵션 id 외래키를 in 절로 사용해 재고 엔티티를 찾는다. 테스트할 데이터는 사전에 DB에 미리 넣어놓았다. (id가 9L인 재고 테이블 Row) 먼저 문제 상황을 테스트 코드로 작성해보았다. @Test void 재고_감소() throws InterruptedException { //given int threadCount = 100; ExecutorService exec..

프로젝트

도메인과 테이블을 설계하고 개선하기

백엔드 파트는 혼자인 이커머스 개발 프로젝트를 진행하고 있습니다. 이번 포스팅에서는 도메인, 테이블을 설계하고 개선한 부분에 대한 글을 쓰겠습니다. 혼자 생각하고 여러 자료를 참고하며 진행했으므로 미흡한 부분이 있습니다. 도메인 설계 현재 요구사항에 따르면 도메인은 다음과 같다. 회원 도메인 상품 도메인 장바구니 도메인 주문 도메인 설계 과정을 살펴보고 상위 도메인에 포함된 하위 도메인도 살펴보겠다. 회원 도메인 회원 도메인은 회원과 이메일로 이루어진다. 회원은 일반 회원과 판매자 회원으로 구분된다. 테이블을 살펴보면 1:1 관계다. 상품 도메인 상품 도메인은 상점, 상품, 상품 옵션 그룹, 상품 옵션, 재고로 이루어진다. 상점은 상품과 1:N 관계다. 상품은 상품 옵션 그룹과 1:N 관계다. 예시를 들..

프로젝트

졸업 프로젝트 세팅 시작하기(aws, ec2, gabia, rds, docker, spring)

다음주면 슬프게도 벌써 개강이다. 필자의 학교는 3학년 2학기에 졸업 프로젝트를 하는데, 12주 동안만 진행한다. 짧으므로 개강전에 미리 사용할 서버 환경을 조금이나마 구축하려고 한다. 먼저 할 일은 다음과 같다. (계속 수정할 여지가 있다) 새로운 AWS 프리티어 계정 생성 ec2 인스턴스 생성 후 탄력적 IP 할당 가비아에서 도메인 구매 rds 세팅. docker 세팅: 스프링 컨테이너 + nginx + redis(추후에 추가, 다른 컨테이너도 추가할 예정) ssl를 사용해 https 적용하기 도커와 깃허브 액션을 통합해 CI CD 파이프 라인 구축하기. 일단 이번 포스팅에서는 5번 스프링 컨테이너까지 띄워보겠습니다. 1. 새로운 AWS 프리티어 계정 생성 프리티어 계정으로 가입을 진행했다. http..

Debin
'프로젝트' 카테고리의 글 목록