# Team-03-LinkBook-BE
## 🤲🏻 프로젝트 소개
```
북마크 공유 프로젝트
```
> 구현 기능
- JWT을 이용한 로컬 로그인
<br>
## 👬 팀 소개
<table>
<tr>
<td>
<a href="https://github.com/Nnagman">
<img src="https://avatars.githubusercontent.com/u/16336810?v=4" width="100px" />
</a>
</td>
<td>
<a href="https://github.com/suy2on">
<img src="https://avatars.githubusercontent.com/u/62363580?v=4" width="100px" />
</a>
</td>
<td>
<a href="https://github.com/pppp0722">
<img src="https://avatars.githubusercontent.com/u/60428537?v=4" width="100px" />
</a>
</td>
<td>
<a href="https://github.com/ChoiYeonho0903">
<img src="https://avatars.githubusercontent.com/u/76257508?v=4" width="100px" />
</a>
</td>
<td>
<a href="https://github.com/su-pernova">
<img src="https://avatars.githubusercontent.com/u/48689213?v=4" width="100px" />
</a>
</td>
</tr>
<tr>
<td><b>이창호</b></td>
<td><b>이수연</b></td>
<td><b>이일환</b></td>
<td><b>최연호</b></td>
<td><b>김수미</b></td>
</tr>
<tr>
<td><b>Product Owner</b></td>
<td><b>Developer</b></td>
<td><b>Developer</b></td>
<td><b>Developer</b></td>
<td><b>Developer</b></td>
</tr>
</table>
<br>
## 🛠 기술 스택
### BackEnd
<table>
<tr>
<td>
<img src="https://static.codenary.co.kr/framework_logo/java.png" width="100px" />
</td>
<td>
<img src="https://images.velog.io/images/leeseojune53/post/b6527e64-30c9-40d4-a955-ddbc647edec1/Gradle_logo.png" width="100px" />
</td>
<td>
<img src="https://static.codenary.co.kr/framework_logo/springboot.png" width="100px" />
</td>
<td>
<img src="https://static.codenary.co.kr/framework_logo/mysql.png" width="100px" />
</td>
<td>
<img src="https://i0.wp.com/codegym.vn/wp-content/uploads/2020/06/spring-jpa-query-5.png?fit=400%2C400&ssl=1" width="100px" />
</td>
<td>
<img src="https://automated-testing.info/uploads/default/original/2X/7/760cbf21278280fd7d4980c577d64da634c9fc42.png" width="100px" />
</td>
</tr>
<tr>
<td><b>Java 11</b></td>
<td><b>Gradle</b></td>
<td><b>Spring Boot</b></td>
<td><b>MySQL</b></td>
<td><b>Srping Data JPA</b></td>
<td><b>JUnit5 / Mockito</b></td>
</tr>
</table>
### 문서/협업
<table>
<tr>
<td>
<img src="https://user-images.githubusercontent.com/103566826/177922764-354c44a9-05e9-4d5c-a10c-0da6676a80a0.png" width="100px" />
</td>
<td>
<img src="https://user-images.githubusercontent.com/103566826/177922777-83956929-35f0-4746-a51b-98c116da2651.png" width="100px" />
</td>
<td>
<img src="https://user-images.githubusercontent.com/103566826/177922791-263bc0f1-bebc-4eee-bdb5-9954af5bbaf9.png" width="100px" />
</td>
<td>
<img src="https://user-images.githubusercontent.com/103566826/177922794-5a47df94-fc97-4beb-a6f4-16b24e315757.png" width="100px" />
</td>
<td>
<img src="https://user-images.githubusercontent.com/103566826/177922809-866718e0-fb19-4840-9caa-111da31795d1.png" width="100px" />
</td>
<td>
<img src="https://user-images.githubusercontent.com/103566826/177922816-6888632c-b218-4635-98d5-189addb835ca.png" width="100px" />
</td>
</tr>
<tr>
<td><b>Notion</b></td>
<td><b>Slack</b></td>
<td><b>Git</b></td>
<td><b>GitHub</b></td>
<td><b>RestDocs</b></td>
<td><b>AsciiDocs</b></td>
</tr>
</table>
<br>
## ☀️ ARCHITECTURE
<img width="1049" alt="infra_structure" src="https://user-images.githubusercontent.com/76257508/184298185-698ea509-3ba0-4144-9d53-070faadc5cd0.png">
## 🖼 ERD

<br>
## 💬 Branch, 커밋 메시지, PR 규칙
### Branch
- `develop` , `main` , `feature/*`
```
• develop : 개발용
• main : 배포용
• feature/* : 작업용
```
### 커밋 메시지
> Type
- 깃모지 사용
- 인텔리제이에서 다음 플러그인으로 커밋에 쉽게 사용할 수 있음
> 
- 아이콘은 [여기](https://gitmoji.dev)를 참고하여 작성
- 깃모지와 제목 사이에 띄어쓰기 하지 않음
```
[ 예시 ]
• ✨ 로컬 로그인 기능 추가
• (생략 가능) 부연 설명
• (생략 가능) 해결: #123 / 참고: #456, #789
```
> Subject
```
• 길어지지 않도록 작성
• "~ 추가", "~ 수정", "~ 리팩토링", ...
```
> Body
```
• 부연설명이 필요한 경우 선택하여 작성
```
> Footer
```
• 부가적으로 issue tracker id를 작성할 때 작성
```
### PR 규칙
- `feature/작업`에서 기능 개발 후 `develop`에 PR
- PR 제목은 브랜치에서 작업한 단위 → Jira 참고
- 본문에는 리뷰어들이 알아야 될 사항 명시
- PR 작성자는 PR 후 포인트 되는 부분을 셀프 코드 리뷰로 명시
- 나머지 팀원들은 PR 발생 시 코드 리뷰
- 코드 리뷰 반영된 부분은 `Resolve conversation`
- 모든 리뷰 반영 완료 후 `Merge pull request` 하거나 추가적인 코드 리뷰가 필요하면 `Re-request review`
<br>
## ✅ 실행방법
### application-database.yaml
``` YAML
spring:
jpa:
show-sql: true
generate-ddl: true
hibernate:
ddl-auto: update
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL8Dialect
datasource:
url: jdbc:mysql://localhost:3306/kokoa
username:
password:
hikari:
maximum-pool-size: 20
```
### application-jwt.yaml
``` YAML
jwt:
header: Authorization
client-secret:
expire-seconds:
```
### 테스트 패키지 application-database.yaml
``` YAML
spring:
datasource:
url: jdbc:h2:mem:test
# url: jdbc:h2:tcp://localhost/~/kokoa
username:
password:
driver-class-name: org.h2.Driver
jpa:
generate-ddl: true
open-in-view: false
show-sql: true
hibernate:
ddl-auto: create
properties:
hibernate:
format_sql: true
dialect: org.hibernate.dialect.H2Dialect
```
### 테스트 패키지 application-jwt.yaml
``` YAML
jwt:
header: Authorization
client-secret:
expire-seconds:
```
### 빌드하고 실행하기
``` SHELL
# 빌드하기
./gradlew bootJar
# 빌드 후 실행
./gradlew bootRun
# 또는
java -jar {jar파일}
```
- 완성도 높이기 : 기술적 도전, 안쓰는 주석 깔끔하게
- 개선할 사항 찾아서 리팩토링 : 책임분리, 테스트, 아키텍처.. , change log에 태그와 남겨두기, github release기능
- README 잘 작성하기 : 아키텍쳐, CICD, branch전략, test, 실행방법
- 린터/포매터를 이용한 코드 컨벤션 유지 : pre-commit, pre-push
- 개발/운영 환경관리 : DB, API, 환경변수…
- 릴리즈 : 버저닝(시멘팅), 태그, 도커와 함께쓸때 고민