HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
♥️
2기 최종 프로젝트 팀별 공간
/
🔖
강력3팀 : 링북(LinkBook)
/
LINKBOOK 소개
LINKBOOK 소개
/
README.md (Back-End)
README.md (Back-End)
README.md (Back-End)

README.md (Back-End)

 
 
  • 완성도 높이기 : 기술적 도전, 안쓰는 주석 깔끔하게
  • 개선할 사항 찾아서 리팩토링 : 책임분리, 테스트, 아키텍처.. , change log에 태그와 남겨두기, github release기능
  • README 잘 작성하기 : 아키텍쳐, CICD, branch전략, test, 실행방법
  • 린터/포매터를 이용한 코드 컨벤션 유지 : pre-commit, pre-push
  • 테스트 코드 작성하기
  • 개발/운영 환경관리 : DB, API, 환경변수…
  • 자동화 : CI, CD 도구들 선택
  • 릴리즈 : 버저닝(시멘팅), 태그, 도커와 함께쓸때 고민
 
# 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 ![linkbook](https://user-images.githubusercontent.com/76257508/184297672-e47e57d2-3686-4581-ba27-91ce10c966dd.png) <br> ## 💬 Branch, 커밋 메시지, PR 규칙 ### Branch - `develop` , `main` , `feature/*` ``` • develop : 개발용 • main : 배포용 • feature/* : 작업용 ``` ### 커밋 메시지 > Type - 깃모지 사용 - 인텔리제이에서 다음 플러그인으로 커밋에 쉽게 사용할 수 있음 > ![https://velog.velcdn.com/images/pppp0722/post/d9e5d256-3a25-4878-b071-148ed217f1ae/image.png](https://velog.velcdn.com/images/pppp0722/post/d9e5d256-3a25-4878-b071-148ed217f1ae/image.png) - 아이콘은 [여기](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파일} ```