foodage / server

나만의 맛집 발자취, Foodage (2023.08.~)
1 stars 1 forks source link

Server


![Java 17](https://img.shields.io/badge/Java_17-007396?style=for-the-badge&logo=OpenJDK&logoColor=white) ![Spring Boot](https://img.shields.io/badge/Spring_Boot__3.1.3-6DB33F?style=for-the-badge&logo=html5&logoColor=white) ![Swagger](https://img.shields.io/badge/Swagger_|_Spring_Doc-85EA2D?style=for-the-badge&logo=html5&logoColor=white)
![Jasypt](https://img.shields.io/badge/Jasypt__3.0.4-00bfb3?style=for-the-badge&logo=html5&logoColor=white) ![AWS S3](https://img.shields.io/badge/AWS_S3-527FFF?style=for-the-badge&logo=amazons3&logoColor=white)
![Docker](https://img.shields.io/badge/Docker-2496ED?style=for-the-badge&logo=html5&logoColor=white)

Foodage 메인 서버 매뉴얼입니다.
- 메인 스택: Java 17, Spring Boot 3, Spring Security 6, JPA
- API 문서: Spring Docs
- 브랜치 전략: Git-flow
- 패키지 구조: CQRS 기반, 도메인 지향 패키지 구조

✦ㅤㅤ-ㅤㅤ✦ㅤㅤ-ㅤㅤ✦

## 🕳 목차 1. [🪟 Convention (개발 세팅)](#-convention-개발-세팅) * [**코딩 컨벤션**ㅤ``#java``](#코딩-컨벤션%E3%85%A4java) * [**커밋 컨벤션**ㅤ``#git_hooks``](#커밋-컨벤션%E3%85%A4git_hooks) 2. [📦 Packaging (jar)](#-packaging-jar) + [common (shell)](#common-shell) + [mac](#mac) + [window](#window) 3. [▶️ Run (jar)](#%EF%B8%8F-run-jar) + [mac](#mac-1) 4. [🗄 Database](#-database) 5. [🚪 Docker 배포](#-docker-배포) 5. [📝 Etc](#-etc) + [❗️ Versioning 규칙](#%EF%B8%8F-versioning-규칙) 6. [Version History](#version-history)

## 🪟 Convention (개발 세팅) ### **코딩 컨벤션**ㅤ``#java`` > **Note** > IntelliJ IDEA를 기준으로 작성된 설명입니다. #### 📗 NAVER IntelliJ formatter 사용 1. Preferences > Editor > Code Style > Schema 우측의 ⋮ 클릭
> Import Schema - IntelliJ IDEA code... > ./share/naver-intellij-formatter.xml 추가 2. Preferences - Tools - Actions On Save -> Reformat Code, Optimize imports 체크 후 적용
### **커밋 컨벤션**ㅤ``#git_hooks`` #### 📔 Git Hooks 설정 커밋 컨벤션을 통일하기 위한 세팅입니다.
커밋 시, 컨벤션에 맞춰 자동으로 메시지가 검사·변환된 후에 커밋이 완료됩니다. - use: Gitmoji - ⚠️ header에 포함되는 영문자는 반드시 소문자로 작성해야 합니다. - ⚠️ 단, 클래스 명은 예외적으로 PascalCase 표기를 허용합니다. (ex. refactor: ExampleClass 메소드 수정) ``` $ cp share/commit-msg.sh .git/hooks/commit-msg $ chmod +x .git/hooks ```

## 📦 Packaging (jar) #### common (shell) ``` 프로젝트 루트 경로에서 ./build.sh 실행 후 배포 환경에 맞는 jar 파일 생성 ``` #### mac ``` ./gradlew clean bootjar [-Pprofile={env}] ex) ./gradlew clean bootjar -Pprofile=local ``` #### window ``` ./gradlew.bat clean bootjar [-Pprofile={env}] ex) ./gradlew.bat clean bootjar -Pprofile=local ```

## ▶️ Run (jar) #### mac ``` java -jar 경로/foodage-1.0.0.jar [--spring.profiles.active={env}] ex1) java -jar ./build/libs/foodage-1.0.0.jar --spring.profiles.active=dev ex2) java -jar ./build/libs/foodage-1.0.0.jar # 생략시 local 환경으로 실행 ```

## 🗄 Database ``application.yml``의 datasource-url 설정 변경 - local: 본인 local에서 실행중인 mariadb port와 연결하여 개발 ``` spring: datasource: driver-class-name: org.mariadb.jdbc.Driver url: jdbc:mariadb://localhost:3306/foodage_test username: root password: ${USER_MARIA_DB_PASSWORD} ``` - develop: 원격 환경 개발 or 테스트 필요할 경우
[서버 배포 정보 공유](https://watebin.notion.site/4f782d484eb8493d87fcb9762ac0b4fd?pvs=4) 내용 참조하여 ec2 인스턴스 <-> 로컬 터널링 후,
링크에 기재된 정보로 datasource 세팅

## 🚪 Docker 배포 - 원격 서버(ec2) 연결
[서버 배포 정보 공유](https://watebin.notion.site/4f782d484eb8493d87fcb9762ac0b4fd?pvs=4) 내용 참조하여 세팅 진행 #### 0) 원격 서버에 파일 업로드 ``` [업로드 파일 리스트] - ./build/lib/foodage-버전.jar - ./src/main/resources/application-배포환경.yml (원격서버에 최초 1회 업로드가 필요한 파일, 이후 수정 필요 X) - ./Dockerfile - ./share/docker-start.sh - ./share/docker-stop.sh ``` #### 1) (실행되고 있다면) 현재 실행중인 서버 중지 ``` ./docker_stop.sh ``` #### 2) Dockerfile에서 버전 확인 ``` vi Dockerfile ... WORKDIR /builder COPY . . COPY foodage-1.0.0.jar /app.jar # ⬆️ 이 부분의 버전 확인후, 현재 실행하려는 jar 파일의 버전으로 수정 # ex. COPY foodage-1.0.8.jar /app.jar COPY application-local.yml /application.yml # ⬆️ 이 부분의 버전 확인후, 현재 실행하려는 원격 서버의 환경으로 수정 # ex. COPY application-dev.yml /application.yml ... ``` #### 3) 최신 버전의 서버 jar 파일을 docker로 실행 ``` ./docker_start.sh jasypt key는 서버 담당자(@jjh, @keb)에게 요청 ```

## 📝 Etc #### ❗️ Versioning 규칙 - Semantic Versioning 사용 (major.minor.patch) - 메이저 버전 (Major): 주요 기능이 변경되거나 큰 변경사항이 있는 경우 등, 대규모 업데이트 시에 증가됩니다. - 마이너 버전 (Minor): 새로운 기능이 하위 호환을 유지하면서 추가될 때(=> 기존 API와 호환되면서 새로운 기능이 추가됐을 경우에) 증가됩니다. - 패치 버전 (Patch): 버그가 수정되거나 기존 기능의 로직이 수정되는 등, 작은 수정사항이 존재할 때 증가됩니다.

✦ㅤㅤ-ㅤㅤ✦ㅤㅤ-ㅤㅤ✦

## Version History > _Last Updated: 24-09-09_ #### v1.0.5 24-09-09 📍 - 리뷰 목록 조회 기능 추가 - 캘린더 리뷰 조회 - 전체 리뷰 조회 - 리뷰 상세 조회 - 리뷰와 연관된 엔티티들의 구조 일괄 변경 - tag, menu, image 구조 변경 (1:1 -> 1:n) - 태그 사용 랭킹 조회 기능 추가 - 회원 탈퇴 - 회원 탈퇴 기능 추가 - 탈퇴 진행 중 30일 내 계정 복구 기능 추가 - 회원 상태 추가 - 업데이트 가능한 캐릭터 종류 추가 (default / hidden으로 분리) - '휴면, 탈퇴 진행중' 회원 상태 추가 - 로그인 내 휴면, 탈퇴 계정 처리 로직 추가 - 마이페이지 프로필 조회, 수정 기능 추가 #### v1.0.4 24-05-27 - 홈 화면 내 리뷰 관련 api 추가 - 위클리 푸디지 조회 - 최근 작성한 푸디지 조회 - 리뷰 이미지 테이블 추가 - 태그 테이블 추가 - oauth, member 클래스 간 구조 전면 리팩토링 #### v1.0.3 24-02-27 - 네이버 로그인 기능 추가 - 로그인, 회원가입 api에 jwt 관련 기능 추가 - refresh token 추가 - redis 추가 - 회원가입 절차 변경 (임시 회원가입 -> 추가 정보 입력 후 회원가입 완료) - oauth 애플리케이션 개발 / 배포 환경 분리 #### v1.0.2 24-01-16 - 카카오 로그인 기능 추가 - Spring Security 설정 추가 - JWT 인증 관련 클래스 추가 - 패키지 구조 리팩토링 #### v1.0.1 23-10-27 - JPA 추가 - 유저 도메인 클래스 및 CR(U)D API 추가 - Exception 처리 관련 클래스 추가 - CQRS 기반 패키지 구조 정의 #### v1.0.0 23-08-30 - 히스토리 최초 등록