/Team-03-LinkBook-BE

강력3팀 북마크 공유 프로젝트(백엔드)

Primary LanguageHTML






🔖 북마크 공유 사이트

🖋️ 링북 (Link-Book)


🤲🏻 프로젝트 소개

✨ 북마크를 손쉽게 관리하고, 사람들과 공유하며, 내가 관심있을만한 북마크를 추천받을 수 있는 서비스

구현 기능

  • access-token, refresh-token 을 통한 로그인, 자동로그인
  • 북마크 폴더 생성, 수정, 삭제
  • 폴더 댓글, 좋아요.
  • 다른 사용자의 북마크 폴더 스크랩
  • 폴더 제목,본문 검색
  • 태그 검색
  • 인기순, 최신순, 오래된순 필터링

👬 팀 소개

이창호 이수연 이일환 최연호 김수미
Product Owner Developer Developer Developer Developer

🛠 기술 스택

BackEnd

Java 11 Gradle Spring Spring Boot Spring Data JPA Spring Security MySQL

TestingTool

JUnit Mockito Jacoco

Infra

Docker Github Action AWS EC2 AWS RDS AWS S3 Nginx

문서/협업

Notion Slack Git GitHub RestDocs AsciiDocs

☀️ ARCHITECTURE

infra_structure

🖼 ERD

erd


💬 Branch 전략, 프로젝트 형상 관리, CI/CD 파이프라인

Branch 전략

  • GitHub flow 사용
    • 트렁크 기반 개발(Trunk-Based Development)
  • 이슈 발행브랜치 생성commitPR 발행main 브랜치 merge자동 배포

프로젝트 형상 관리


CI/CD 파이프라인

  • Github Action 사용
  • PR 이 발행되는 경우
    • AWS RDS DB 연결 기반
    • gradle build 에 성공하는 경우 Github Action 통과
  • PR 이 main 브랜치에 merge 되는 경우
    • AWS RDS DB 연결 기반
    • EC2 서버에 main 브랜치 코드 자동 배포
    • gradle buildDocker image build + compose up(deploy 과정) 성공하는 경우 Github Action 통과

📄 커밋 메시지, PR 규칙

커밋 메시지

  • 깃모지 사용

  • 인텔리제이에서 다음 플러그인으로 커밋에 쉽게 사용할 수 있음

  • gitmoji

  • 아이콘은 여기를 참고하여 작성

  • 깃모지와 제목 사이에 띄어쓰기 하지 않음

[ 예시 ]
• ✨ 로컬 로그인 기능 추가
• (생략 가능) 부연 설명
• (생략 가능) 해결: #123 / 참고: #456, #789
  • Subject
길어지지 않도록 작성 ("~ 추가", "~ 수정", "~ 리팩토링", ...)
  • Body
부연설명이 필요한 경우 선택하여 작성
  • Footer
부가적으로 issue tracker id를 작성할 때 작성

PR 규칙

  • feat/i{issue number}에서 기능 개발 후 main에 PR
  • PR 제목은 브랜치에서 작업한 단위
  • 본문에는 리뷰어들이 알아야 될 사항 명시
  • PR 작성자는 PR 후 포인트 되는 부분을 셀프 코드 리뷰로 명시
  • 나머지 팀원들은 PR 발생 시 코드 리뷰
  • 코드 리뷰 반영된 부분은 Resolve conversation
  • 모든 리뷰 반영 완료 후 Merge pull request 하거나 추가적인 코드 리뷰가 필요하면 Re-request review

✅ 실행방법

application-database.yaml

spring:
  jpa:
    properties:
      hibernate:
        default_batch_fetch_size: 1000
        format_sql: true
    show-sql: true
    generate-ddl: true
    hibernate:
      ddl-auto: update
  datasource:
    url: {url}
    username: {username}
    password: {password}
    hikari:
      maximum-pool-size: 10

application-jwt.yaml

jwt:
  access-header : Access-Token
  refresh-header : Refresh-Token
  issuer: prgrms
  client-secret:
  access-token-expiry-seconds: 3600
  refresh-token-expiry-seconds: 1209600

application-mail.yaml

spring:
  mail:
    host: smtp.gmail.com
    port: 587
    protocol: smtp
    default-encoding: UTF-8
    username: devcourse.linkbook@gmail.com
    password:
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true

빌드하고 실행하기

# 빌드하기
./gradlew bootJar
# 빌드 후 실행
./gradlew bootRun
# 또는 
java -jar {jar파일}