일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 티스토리챌린지
- UXUI챌린지
- 디자인교육
- 환급챌린지
- Be
- 백엔드 부트캠프
- 내일배움카드
- Spring
- 오블완
- baekjoon
- 오픈챌린지
- 국비지원취업
- 오픈패스
- UXUIPrimary
- 국비지원
- 백준
- 부트캠프
- KDT
- 백엔드
- Java
- OPENPATH
- UXUI기초정복
- 백엔드개발자
- 디자인강의
- mysql
- 패스트캠퍼스
- 디자인챌린지
- 국비지원교육
- 객체지향
- 내일배움캠프
- Today
- Total
군만두의 IT 공부 일지
[2주차] 내일배움캠프 Spring Java - AI 활용 비즈니스 프로젝트 DAY1 - S.A 작성하기 본문
오늘부터 스프링 프로젝트를 시작한다. 프로젝트 주제는 다음과 같다.
❓ What to do : 음식 주문 관리 플랫폼 개발
- 음식 주문 관리 플랫폼 이란?
- 00의 민족, 00 이츠, 00요 등 음식점들의 배달 및 포장 주문 관리, 결제, 그리고 주문 내역 관리 기능을 제공
- 식당에서 음식 정보 등록 >> 사용자는 원하는 음식을 주문 >> 할당된 라이더가 음식을 배달
- 해당 프로젝트에서는 ‘배달(라이더 할당, 배송상태 관리 등)’ 기능 제외
본격적으로 개발을 시작하기 전에 해야 할 일이 있는데, 바로 S.A를 작성해서 제출하는 것이다.
✏️ S.A (Starting Assignments) : 프로젝트 시작 전 작성할 문서입니다 !
- 제출 기한 : 2월 13일(목) 오전 11:00까지
- 제출할 내용 : 아래 항목을 블로그에 정리 후 제출해주세요.
- API 명세서
- 테이블 명세서
- ERD 명세서
- 인프라 설계서
정리하자면 오늘까지 API 명세서, 테이블 명세서, ERD 명세서, 인프라 설계서를 작성해야 한다. 24시간 내에 작업을 완료해야 하기 때문에 일정이 빠듯할 것 같다.
1. ERD 명세서
처음에는 ERD를 설계했다. ERD Cloud에서 진행하다가 문득, 팀원들이 Domain 위치에 필드명을 입력하고 있는 것을 발견했다. 관련해서 잘 정리되어 있는 블로그를 보여주고 다시 수정하면서 ERD에 대해서 더 확실히 알 수 있었다.
그리고 팀원 간 서로 의견이 달라서 정하기 어려운 부분은 튜터님에게 질문해서 해결했다. ERD 설계 단계에서 시간이 정말 오래 걸렸던 것 같다.
튜터님에게 질문한 점
1. 리뷰를 어디에서 참조 받는 것이 좋은지, 가게에서 하는지? 주문에서 하는지?
연관관계를 설정하는 것이 헷갈렸는데, 이런 경우에 현명하게 결정할 수 있는 방법은 라이프 사이클을 따라가는 곳이 좋다고 답변해주셨다. 리뷰가 생성되는 시점이 어느 데이터를 기준으로 생성되는지 고민하면, 가게가 생성될 때가 아닌 주문 하나당 리뷰 하나를 작성하는 것이 일반적이라고 한다.
2. 연관관계 설정 vs. id 필드로 접근
참조로 인해 발생하는 N+1 문제가 나중에 문제가 될 수도 있기 때문에 연관관계를 최대한 붙이는지, 최대한 안 붙이는지 의견이 갈렸었다. 튜터님은 JPA에는 연관관계를 설정함으로써 얻는 장점이 많다고 하셨다. 영속성 컨텍스트를 활용해서 더티 체킹을 사용할 수 있고, 트랜잭션 전파에 대한 일관성을 지킬 수 있고, 도메인 설계 단계에서 캡슐화도 지킬 수 있다. 보통 JPA를 잘 모르는 사람들이 연관관계 적용을 잘 안 한다고 하셨다. 그리고 패치 조인으로 N+1 문제를 해결할 수 있다.
3. 결제 테이블 vs. 필드에 결제 상태 추가
결제 테이블에 어떤 값이 들어가면 좋을지, 아니면 주문 필드에 결제 상태만 추가하는 게 나을지 고민됐다. 실무에서는 보통 주문 테이블을 만들어 결제, 결제 히스토리까지 구성한다고 하셨다. 그리고 결제는 PG사라는 외무 결제 모듈을 계약해서 사용하기 때문에, 결제에 들어가는 카드 정보 등은 외부 PG사라고 보면 된다. 결제 테이블에는 결제 수단, 금액, 주문 아이디, 결제 일자, 가격 등이 있을 수 있다.
최종적으로 작성한 ERD는 다음과 같다. API 명세서를 작성하고 개발하면서 수정될 수도 있을 것 같다.
2. API 명세서
노션과 구글 스프레드시트 중에 고민하다가 팀원들에게 더 친숙한 구글 스프레드시트로 하기로 했다. 회원, 가게, 주문, 메뉴로 도메인을 나누어 각자 관련된 API를 맡았다. 나는 가게 CRUD와 그 외 요구사항에 맞춰 API 명세서를 작성했다.
늦게까지 작성하고 나서 팀원들과 함께 검토했는데 삭제 API의 경우, 과제 요구사항 대로 나중에 Soft delete로 바꿔야겠다. 시간이 없어 마무리했지만, API 명세서도 나중에 수정해야 할 것 같다.
3. 테이블 명세서
테이블 명세서는 ERD Cloud에 작성한 내용을 바탕으로 금방 만들었다. 마찬가지로 구글 스프레드시트에 작성했다.
4. 인프라 명세서
인프라 명세서는 draw.io를 사용했다. 구글 스프레드시트에 다음과 같이 추가해 두었다.
'개발일지 > 스파르타코딩클럽' 카테고리의 다른 글
[2주차] 내일배움캠프 Spring Java - AI 활용 비즈니스 프로젝트 DAY3 - Issues & PR Template 설정하기 (0) | 2025.02.14 |
---|---|
[2주차] 내일배움캠프 Spring Java - AI 활용 비즈니스 프로젝트 DAY2 - postgreSQL 설치하기 (0) | 2025.02.13 |
[2주차] 내일배움캠프 Spring Java 심화 부트캠프 3기 - MSA (0) | 2025.02.11 |
[2주차] 내일배움캠프 Spring Java 심화 부트캠프 3기 - JPA 심화 (1) | 2025.02.10 |
[1주차] 내일배움캠프 Spring Java 심화 부트캠프 3기 - JWT (1) | 2025.02.07 |