반응형 프로젝트10 트랜잭션 수행 코드에 포함된 네트워크 통신 코드 분리하기 현재 프로젝트에서 관리자 권한을 가진 유저가 다수의 유저에게 초대 이메일을 보내는 비즈니스 로직이 존재합니다. 해당 로직을 수행하는 메서드에 트랜잭션이 걸리고, 메일 서버에 메일 전송 요청도 보내고 있습니다. 트랜잭션을 수행하는 중에 네트워크 통신을 진행하면 굉장히 안 좋다는 글을 본 적이 있습니다.(Real MySQL) 따라서 트랜잭션 수행 코드와 네트워크 통신 코드가 결합된 비즈니스 로직 코드를 개선한 과정을 포스팅으로 작성하려고 합니다. 시작하겠습니다. 비즈니스 로직 정리 멤버와 프로젝트 멤버 프로젝트는 M:N 관계이다. 비즈니스 로직을 수행하는 메서드의 로직은 다음과 같다. 로그인에서 사용하는 JWT 토큰에서 멤버 id를 얻는다. 트랜잭션 시작 멤버 id를 사용해 데이터베이스에서 멤버 엔티티를 조.. 프로젝트 2023. 7. 1. 동시성 문제 해결하기 현재 프로젝트의 재고 도메인 코드에 문제가 있다는 것을 알아차렸다. 문제는 여러 명의 사용자가 동시에 재고 감소 로직을 실행한다면 동시성 이슈가 발생하는 것이다. 마침 동시성 관련 강의를 인프런에서 발견했고 이를 적용해보았다. 프로젝트 테이블 이해 재고 모델과 옵션 모델은 N:M 관계이다. 따라서 중간 테이블이 존재한다. 중간 테이블의 옵션 id 외래키를 in 절로 사용해 재고 엔티티를 찾는다. 테스트할 데이터는 사전에 DB에 미리 넣어놓았다. (id가 9L인 재고 테이블 Row) 먼저 문제 상황을 테스트 코드로 작성해보았다. @Test void 재고_감소() throws InterruptedException { //given int threadCount = 100; ExecutorService exec.. 프로젝트 2023. 6. 22. 도메인과 테이블을 설계하고 개선하기 백엔드 파트는 혼자인 이커머스 개발 프로젝트를 진행하고 있습니다. 이번 포스팅에서는 도메인, 테이블을 설계하고 개선한 부분에 대한 글을 쓰겠습니다. 혼자 생각하고 여러 자료를 참고하며 진행했으므로 미흡한 부분이 있습니다. 도메인 설계 현재 요구사항에 따르면 도메인은 다음과 같다. 회원 도메인 상품 도메인 장바구니 도메인 주문 도메인 설계 과정을 살펴보고 상위 도메인에 포함된 하위 도메인도 살펴보겠다. 회원 도메인 회원 도메인은 회원과 이메일로 이루어진다. 회원은 일반 회원과 판매자 회원으로 구분된다. 테이블을 살펴보면 1:1 관계다. 상품 도메인 상품 도메인은 상점, 상품, 상품 옵션 그룹, 상품 옵션, 재고로 이루어진다. 상점은 상품과 1:N 관계다. 상품은 상품 옵션 그룹과 1:N 관계다. 예시를 들.. 프로젝트 2023. 6. 21. 졸업 프로젝트 세팅 시작하기(aws, ec2, gabia, rds, docker, spring) 다음주면 슬프게도 벌써 개강이다. 필자의 학교는 3학년 2학기에 졸업 프로젝트를 하는데, 12주 동안만 진행한다. 짧으므로 개강전에 미리 사용할 서버 환경을 조금이나마 구축하려고 한다. 먼저 할 일은 다음과 같다. (계속 수정할 여지가 있다) 새로운 AWS 프리티어 계정 생성 ec2 인스턴스 생성 후 탄력적 IP 할당 가비아에서 도메인 구매 rds 세팅. docker 세팅: 스프링 컨테이너 + nginx + redis(추후에 추가, 다른 컨테이너도 추가할 예정) ssl를 사용해 https 적용하기 도커와 깃허브 액션을 통합해 CI CD 파이프 라인 구축하기. 일단 이번 포스팅에서는 5번 스프링 컨테이너까지 띄워보겠습니다. 1. 새로운 AWS 프리티어 계정 생성 프리티어 계정으로 가입을 진행했다. http.. 프로젝트 2022. 8. 25. NextStep 자바 플레이 그라운드 with TDD, 클린코드 part 3 자바지기 박재성님이 운영하시는 NextStep 교육 웹사이트에서 수강한 자바 플레이 그라운드 with TDD, 클린코드에 대한 공부 기록을 남기려고 합니다. 이번 포스팅은 자바의 상속, 인터페이스에 관련된 좌표 계산기 미션에 관한 포스팅입니다. 강의를 통해 느낀 점 (피드백을 보기 전) 프로그래밍 요구사항에는 이전 미션과 크게 차이가 없었다. 기능요구사항도 좌표 입력 형식, 좌표 입력 값 범위 등 크게 특별하다고 느낀 부분은 없었다. 기억할 부분은 좌표가 2개면 직선 거리 계산, 좌표가 3개면 삼각형 넓이 계산, 좌표가 4개면 직사각형으로 계산하는 것이다. 직사각형인 경우에는 직사각형인지 validation을 해줘야 한다. 먼저 미션에서 필자는 enum을 적극적으로 사용하자는 생각을 했다. 도형의 좌표 .. 프로젝트 2022. 8. 14. NextStep 자바 플레이 그라운드 with TDD, 클린코드 part 2 자바지기 박재성님이 운영하시는 NextStep 교육 웹사이트에서 수강한 자바 플레이 그라운드 with TDD, 클린코드에 대한 공부 기록을 남기려고 합니다. 이번 포스팅은 TDD를 사용해 자동차 경주 게임 구현 미션에 관한 포스팅입니다. 강의를 통해 느낀 점 (피드백을 보기 전) 우선 해당 단원에서 제시한 프로그래밍 요구사항은 다음과 같다. 자바 코드 컨벤션을 지키면서 프로그래밍한다. 기본적으로 Google Java Style Guide을 원칙으로 한다. 단, 들여쓰기는 '2 spaces'가 아닌 '4 spaces'로 한다. indent(인덴트, 들여쓰기) depth를 3이 넘지 않도록 구현한다. 2까지만 허용한다. 예를 들어 while문 안에 if문이 있으면 들여쓰기는 2이다. 힌트: indent(인덴.. 프로젝트 2022. 7. 31. NextStep 자바 플레이 그라운드 with TDD, 클린코드 part 1 한동안 포스팅에는 자바지기 박재성님이 운영하시는 NextStep 교육 웹사이트에서 수강한 자바 플레이 그라운드 with TDD, 클린코드에 대한 공부 기록을 남기려고 합니다. 이번 포스팅은 제일 기초 부분인 단위 테스트를 이용한 숫자야구게임에 관한 포스팅입니다. 강의를 수강하게 된 계기 본인은 어렸을 때 부터 눈팅하는 것을 좋아했다. 인터넷 카페에서도 눈팅을 많이 했고, 같이 게임하는 사람들 톡방에서도 종종 눈팅을 했다. 현재 진행하고 있는 연합 동아리 수다방에서도 꽤나 눈팅을 자주 하는 편이다. 필자는 흥미로운 얘기를 보는 것을 좋아하지만, 참여하는 것은 조금 부끄럽다.ㅎㅎ 개발에 대한 흥미도 가지면서 코딩에 몰입하다보니 자연스럽게 개발 커뮤니티도 많이 살펴보고 개발 관련 오픈 톡방에서도 눈팅을 많이 .. 프로젝트 2022. 7. 16. 개인 프로젝트 API 디자인 API 디자인 책을 본격적으로 읽기 전에 본인이 생각한 API를 디자인해보려고 합니다. 먼저 HTTP 메소드와 URI를 정하겠습니다. 더 자세한 API 명세서는 차후에 더 자세히 작성하겠습니다. 사용자 입장에서 생각하면서 디자인! User 관련 API HTTP Method URI 경로 설명 GET /users/:userId 유저를 조회 POST /users 유저를 생성 PUT /users/:userId 유저 정보를 수정 PATCH /users/:userId 논리적 유저 삭제 Post 관련 API HTTP Method URI 경로 설명 GET /posts 게시글 조회, 페이징을 사용할 예정 POST /posts 게시글 생성 PUT /posts/:postId 게시글 수정 PATCH /posts/:postId.. 프로젝트 2022. 5. 7. 프로젝트 기본 ERD 다이어그램 설계 우선 프로젝트를 시작하면서 제일 먼저 구현할 기능을 게시판으로 정했습니다. 이에 따라 게시판을 먼저 구현하고 추가적인 기능을 더해가려고 합니다. 툴은 Aquery Tool을 사용했으며, 아래와 같은 엔티티(테이블)를 4개 작성했습니다. M : N 관계를 풀기 위한 중간 테이블도 하나 작성했습니다. Member - 게시판을 사용할 유저들의 정보를 저장할 테이블입니다. Post - 게시판을 사용할 때 게시글을 작성하면 그에 대한 정보를 저장할 테이블입니다. Comment - 게시글이 있으면 댓글을 달아야 소통이 이루어지므로, 댓글에 관련된 데이터를 저장할 테이블입니다. Alarm - 개인적으로 고민을 정말 많이 한 테이블입니다. 결국 소통을 하기 위해서는 게시글에 댓글이 달리거나, 댓글에 대댓글이 달려야하는.. 프로젝트 2022. 5. 3. 개인 프로젝트 시작 이번에 개인 프로젝트를 시작하려고 합니다. 일단은 게시판을 구체적으로 만들어보고 본인이 생각해 둔 프로젝트 기능이 있는데 그것을 구현해보려고 합니다. 전체적인 기술 스택 클라우드 - AWS EC2, RDS 프론트엔드 - React 백엔드 - Spring Boot, Spring JPA(ORM) DB - h2 database, MySQL 현재 수준과 목표 React : 거의 반년만에 만지는데.. 그래도 노마드 코더 React 챌린지를 통과한 짬이 있으니 잘 해결할 수 있으리라고 믿습니다 ㅎㅎ.. AWS는 새 프리티어 계정을 만들어서 EC2 인스턴스를 생성하고, 우선 Nginx를 이용해 프론트 웹 서버와 백엔드 웹 애플리케이션 서버를 띄우려고 합니다. 프론트에 S3를 사용하는 것도 생각해두고 있습니다. RDS.. 프로젝트 2022. 5. 2. 이전 1 다음 반응형