개발/🖤 UMC 프로젝트 - 커플 🖤

🖤 UMC '커플' 앱 개발 프로젝트 - ERD 설계 🖤

정소은 2024. 1. 4. 09:26

 

 

첫 미팅 이후 2번째 백엔드 미팅을 가졌다

'커플' 서비스를 전체적으로 리뷰하면서 필요한 기술들에 대해 의견을 나눴다

 

우선 로그인, 데이트 장소 후기 커뮤니티, 마이페이지, 문의하기 기능은 

타앱에서도 자주 보이는 보편적인 기능이기 때문에 구현에 대한 고민은 크지 않았지만

( 물론 나는 아는 게 없어서 걱정이 산더미였다..... )

구체적인 운영 정책에 대한 설명을 듣고 싶어서 PM분께 요청을 드리기로 했다

 

가장 고민이 많았던 부분은 핵심 기능인 유저가 설정한 옵션에 따른 데이트 장소 랜덤 추천 기능이었는데

데이트 장소에 대한 DB를 어떻게 생성하고 탐색할 것인가에 대한 부분이었다

 

지도 탐색에 대해 승연님이 찾아주신 우버의 그리드 탐색 방식이다

https://www.uber.com/en-KR/blog/h3/

아직 열심히 안 읽어봐서 나중에 다시 꼼꼼하게 읽어봐야겠다

 

이 외에도 데이트 장소 정보를 어떻게 끌고 와야하는가에 대한 부분은 

추후에 다른 팀원분들과도 함께 고민해봐야 될 듯하다

 

우선 전체적인 서비스 리뷰는 이렇게 마쳤고

다음 미팅까지 유저 메타 정보, 유저 약관, 유저, 데이트 장소에 대한 ERD 설계를 해오기로 했다

 

 


 

 

내가 설계한 초기 ERD - Spring Entity

UMC 워크북을 참고해가면서 나름 열심히 만들었다 우히

다음 미팅까지 PM 분이 제공해주신 와이어프레임을 참고해서 ERD 설계를 맡게 되었다

 

+ ) Intellj에서 코드로 작성한 ERD 시각화해주는 버튼

아무 엔티티 코드나 들어가서 요 DB 모양 버튼을 눌러주면

위의 왼쪽 사진처럼 ERD를 보여준다 싱기방기

 

 

ERD 완성본

 

💭 수정 과정, 고민들

1.  포인트 기록 기능을 위한 point history table 추가
2.  문의 사항 table 추가
3.  member_image table를 삭제하는 대신 member table에 profile Url 추가
4.  추천 장소 table 추가
  -  추후에 review 장소 후보에 쓰임
  -  어떤 유저가 어떤 장소를 추천 받았는지 저장
5.  review가 data_spot 바라보지 않도록
  - review table에 spot1,spot2,spot3을 넣고 여기에 가게 이름을 기입
6.  유저가 설정한 장소 옵션 정보 저장 table 추가
  - date_spot_category, date_spot_region, date_spot_costBand table 분리해서 생성
  - ageBand, in_out은 date_spot table에 통합

 

 

🔧 JAVA convention 관련 Refactoring

<JAVA Convention>
-  Class명과 field명은 카멜 케이스를 따른다 ex) CamelCase / camelCase
-  Class명은 대문자로 시작한다
-  field명은 소문자로 시작한다

이때, DB는 테이블과 열을 주로 스네이크케이스(ex. snake_case)로 짓는다

그래서 DB와 통신할 때 이 명명법 때문에 문제가 발생할 수 있는데
Springboot에서 camelcasetounderscoresnamingstrategy 설정을 따로 해주면
자동으로 변환해준다고 한다

< 참고 >
https://www.inflearn.com/questions/376293/persistence-xml-을-통한-camelcase-snake-case-설정은-어떻게-하나요

 

 

🔩 오류 수정

연관 관계 매핑 코딩에서 오류가 있었다 ( 나의 어마무시한 오개념으로 인해... )

@JoinColumn(name=" ")에서 " " 에 들어가야 하는 건
내가 연결하고자 하는 엔티티의 PK(primary key) 이름인데

두가지의 실수를 해버렸다
1.  모든 엔티티의 PK 이름을 Id라고 지은 것
-> 이렇게 되면 table을 봤을 때 어떤 엔티티와 연결된 것인지 직관적으로 확인하기가 어렵다
2.  @JoinColumn의 'name=' 뒤에 멋대로 PK 이름을 바꿔서 넣었다
ex ) Member의 PK를 'Id'라고 지어놓고 연관 관계를 주입하고자 한
       Coupon에서 @JoinColumn(name="memberId") 라고 쓴 것이다

이 두가지를 수정해주었다
엔티티의 PK 이름을 "엔티티이름Id"로 수정하고
@JoinColumn(name="")에 올바른 PK 이름을 넣어주었다

그랬더니 연결한 DB에서 드디어 table이 제대로 떴다....휴

 

 

+ ) 깃허브 사용 흐름

이슈 생성하기  
>  이슈에 해당하는 branch 생성하기  
>  개발 환경에서 해당 branch를 checkout하고 update
>  개발하기  
> Pull Request

Pull Request 확인
>  Merge  

 

branch 생성

branch 생성할 때 특정 branch에 저장되어 있는 정보를 모두 받아서 생성하고 싶다면

저 Change branch source를 누르고 Branch source에서 특정 branch를 설정해주면 된다

 

+ ) Intellij 환경에서 커밋하는 방법

왼쪽에 있는 찍동그라미찍 저 버튼을 누르고

Changes 아래에 변경 사항이 저장되어 있는데 커밋하고 싶은 내용을 선택해주고

Comment를 쓴 뒤 Commit and Push 버튼을 눌러준다

 

 

 

우와 깃허브 하나도 모르겠어서 밤에 백엔드 단톡방에 구조 요청을 보냈는데

✨승연님✨이 화상 통화로 거의 아바타처럼 알려주셨다 감사합니다ㅠㅠ

구조 요청 안 했으면 진짜 큰일 날 뻔..........