☑️ 프로젝트 개요 및 기능 정리
프로젝트명 : Date Maze (한글로 줄여서 데메즈)
팀명 : datee
소개 : 데이트를 함께 찾아가는 여정
- 커플끼리 연동하여 캘린더를 공유하는 것
- 공유 캘린더에 데이트 일정을 추가할 수 있음
- 공유 캘린더에 각자 개인 일정을 추가할 수 있음
- 서로의 일정을 파악하여 만날 수 있는 날을 파악하기 쉬움
- 공유 캘린더에 데이트 일정을 추가할 수 있음
- 둘다 추가, 수정, 삭제가 가능하며 댓글을 통해 의견을 제시할 수 있음
- 기념일, 생일 등 저장되어 있어 캘린더에 자동 표시
- 즐거운 요소를 주기 위해 회원의 mbti 별로 일정 색 정해짐
- 커플이 같은 mbti인 경우 색은 랜덤
- 커플 일정은 빨간색, 둘다 일정이 있는 경우 검정색
- 커플 일정, 개인 일정 모두 있는 경우 커플 일정이 우선적으로 표시됨
회원
회원가입
로그인
커플 연동
비밀번호 찾기
비밀번호 변경
프로필 수정
커플 연동 해제
회원 탈퇴
캘린더
공유 캘린더 보기
개인 일정
개인 일정 추가
개인 일정 수정
개인 일정 삭제
커플 일정
커플 일정 추가
커플 일정 수정
커플 일정 삭제
댓글 추가
댓글 삭제
도메인으로 나누면 기능 구성은 대강 이렇게 정했다.
☑️ 와이어프레임 제작

먼저 사용할 색상표이다.
그리고 아래는 와이어프레임!


☑️ erd 제작

기념일 entity는 변하지 않는 데이터이기 때문에 현재 어떻게 처리할 지 고민중이다 ..
일단 커플 연동이 되는 즉시 데이터를 모두 추가하고, 캘린더에 해당하는 연도와 월의 기념일 목록을 가져오는 것이 계획.
☑️ 스프링 부트 프로젝트 생성

기본적으로 사용할 spring, jpa, lombok, validation을 추가했다.
데이터베이스는 mysql을 사용할 예정이기 때문에 mysql을 추가했다.
회원 보안을 강화하기 위해 Spring Security를 사용해보기로 해서 추가했다.
☑️ 깃 Organizations 생성 및 repository 추가


터미널로 깃에 push 하려고 했으나 토큰값이 올바르지 않아 rejected 됐다.
토큰을 재발급 받고 다시 pull.

레포지토리에 프로젝트를 push 하는 것이 성공적으로 이루어졌다.
☑️ mysql db 생성
CREATE USER 'datee'@'localhost' IDENTIFIED BY '***';
GRANT ALL PRIVILEGES ON *.* TO 'datee'@'localhost';
팀명으로 user를 생성했다.
CREATE DATABASE datemaze;
프로젝트명으로 database를 생성했다.
show databases; 쿼리를 날렸을 때 datemaze를 확인할 수 있었다.
☑️ .gitignore 설정
HELP.md
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/
### MacOS ###
.DS_Store
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/
### IntelliJ IDEA ###
application.yml
.idea
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
### VS Code ###
.vscode/
application.yml을 쓰기로 했고, gitignore에 추가했다.
그리고 맥을 쓰면 .DS_Store이라는 빈 파일이 자꾸 추가돼서 이것도 gitignore에 추가했다.
gitignore에 먼저 이걸 생성해놓으면 괜찮은데, 만약 application 설정을 먼저 git에 올리면 gitignore에 추가해도 먹히지 않는다..
(나는 그랬다..^^ㅜ)
이 경우에는 git에서 파일을 지워야 하기 때문에 터미널을 켜서 아래와 같이 실행해주어야 한다.
git rm --cached src/main/resources/application.yml
문제는 이랬다가 파일이 아예 증발해버린다는 것 (?? 이유가 뭘까..
그래서 다시 파일을 생성해주기 위해 아래와 같은 명령어를 입력한다.
git add src/main/resources/application.yml
git commit -m "Revert src/main/resources/application.yml from .gitignore"
이러면 해결된다. 👍🏻
☑️ application 설정
server:
port: 8080
spring:
output:
ansi:
enabled: always
datasource:
url: jdbc:mysql://localhost:3306/datemaze
username: datee
password: ***
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
show-sql: true
open-in-view: true
database-platform: org.hibernate.dialect.MySQL8Dialect
database: mysql
hibernate:
ddl-auto: update
naming:
strategy: org.hibernate.cfg.ImplicitNamingStrategy
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
properties:
hibernate:
format_sql: true
enable_lazy_load_no_trans: false
logging.level:
org.hibernate.SQL: debug
root: info
db를 연결하고, jpa 설정을 적었다.
ddl-auto는 update로 설정.
네이밍 전략은 hibernate5 이전에서 ImprovedNamingStrategy
를 썼던 것으로 알고 있다.
우리 프로젝트는 hibernate 8.0.1이기 때문에 ImplicitNamingStrategy, PhysicalNamingStrategy를 사용해주었다.
굳이 추가하지 않아도 된다고도 하지만 일단 추가해두었다. ^^..! (yml 작성 연습이랄까)
show-sql, format_sql은 true로 해두었다. show는 sql을 보여주는 것, format은 예쁘게 하는 것이다.
enable_lazy_load_no_trans는 true를 권장하지 않는 것으로 알고있다. 지연로딩이 트랜잭션 밖에서도 사용 가능한 것이다.
false로 두었다.
logging을 했는데, 내 프로젝트가 실행되면 로그들이 No color로 나왔다 (!!!??)
그래서 추가해준 것은 spring.output.ansi.enabled를 always로 하는 것.
사실 로그는 무조건 색깔이 있게 나온다고 생각했는데 여태껏 이 설정을 해서 나왔던거구나.. 라고 느끼게 되었다.
컬러의 소중함.. 지켜. 앞으로는 꼭 알아두어야겠다.
☑️ intelliJ 설정
1. google-java-format
해당 플러그인을 설치하고 프로젝트를 연 후 해당 인텔리제이 Setting에서 적용시켜주면 된다.
2. Gradle
gradle로 돌아가는 이 프로젝트를 intelliJ IDEA로 돌아가도록 해준다.
이건 사실 이유는 잘 모르고, 이전에 프로젝트를 할 때 나빼고 다른 팀원들이 gradle로 돌리면 오류가 나서 바꾼 경험이 있었는데
혹시 몰라 이후로는 쭉 intelliJ IDEA로 돌리고 있다.
주의점은 intelliJ IDEA로 돌릴 시, pathVariable, requestParam 같은 것들을 지정할때 value를 무조건 입력해주어야 한다는 점.
3. 저장 시 액션
저장할때 자동으로 코드가 재정렬되도록 해주는 좋은 기능이다. 굿굿
이걸 사용하면 팀원끼리 코드 정렬 문제 발생할 일 감소!
☑️ git workflow 추가
name: google-java-format
on: [ pull_request ]
jobs:
formatting:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.ref }}
- uses: axel-op/googlejavaformat-action@v3
with:
args: "--replace --aosp"
commit-message: "format: Google Java Format"
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: 17
distribution: 'temurin'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
with:
arguments: build
cache-read-only: ${{ github.ref != 'refs/heads/main' && github.ref != 'refs/heads/develop' }}
- name: Upload Jacoco Report
if: ${{ failure() }}
uses: actions/upload-artifact@v3
with:
name: jacoco-report
path: build/reports/jacoco/test/html
formatting과 build 작업을 진행했다.
formatting workflow를 통해 코드의 형식을 일관되게 유지하도록 했다.
저장하면서 정렬은 하지만 한 번 더 google-java-format 형식으로 유지되도록 해주는 작업!
formatting job에서 수행하는 것은 이렇다.
- pull request의 변경 내용 가져오기
- google-java-format을 사용하여 코드 형식화하기
- 형식화된 코드로 기존 코드 대체 (--replace 옵션)
- 커밋 메시지에 "format: Google Java Format"을 추가
build 작업은 자동화된 빌드 및 테스트를 실행하여 코드의 품질을 유지할 수 있도록 한다.
build job에서 수행하는 것은 이렇다.
- JDK 17 설치
- Gradle 설정 후 빌드
- if build fail -> 빌드된 Jacoco 보고서를 업로드
Jacoco 보고서는 테스트 커버리지 및 코드 품질에 대한 중요한 정보를 제공한다.
빌드를 실패하면 업로드된다.
☑️ branch rules 생성

dev, main에 필요한 rules을 만들었다.
먼저 dev branch rules.

기본적으로 리뷰가 1개 이상 달리지 않는 이상 dev로 merge 불가.
코멘트 solve는 하려다가 설정하지 않았다.
대신 merge 전 최신 코드 테스트를 해야 하도록 설정했다.
main branch 같은 경우, 아예 lock을 해버렸다. 마지막에 최종적으로 사용할건데, 아직 사용할 일이 없기 때문이다.
또한 현재 default branch를 dev로 해두었다.
3일 동안 백엔드 서비스 개발 전 프로젝트 준비를 완료했다.
다음은 entity, dto 파일에 관한 내용을 포스팅해야겠다.
'🐾 개발' 카테고리의 다른 글
| 프로젝트 : 짜툴 (5) 테스트 조회 페이지 (0) | 2024.04.11 |
|---|---|
| 프로젝트 : 짜툴 (4) 마이페이지 (0) | 2024.04.10 |
| 프로젝트 : 짜툴 (3) 240330 ~ 240331 (2) | 2024.04.02 |
| 프로젝트 : 짜툴 (2) 240320 ~ 240325 (0) | 2024.03.31 |
| [MacOS M2] MySQL 설치하기 (feat. homebrew) (0) | 2024.03.20 |