Skip to content

chogh824/pplog-backend

ย 
ย 

Repository files navigation

๐Ÿ˜บ PPLOGโ— Backend

ํŒ€ MYAONG์˜ ํ”„๋กœ์ ํŠธ PPLOG ๋ฐฑ์—”๋“œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค.

์„œ๋น„์Šค ์†Œ๊ฐœ ๋ฐ ๊ณตํ†ต ๋ฌธ์„œ๋Š” organization ํŽ˜์ด์ง€์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ micro service๋ณ„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋Š” ์•„๋ž˜์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ๋ณ„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ

blog service โ€” ํฌ์ŠคํŠธ ๋ฐ ํ”„๋กœํ•„ ๊ด€๋ฆฌ, ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜

face expression service โ€” ๋ชจ์˜ ๋ฉด์ ‘ ํ‘œ์ • ๋ถ„์„

member service โ€” ํšŒ์› ๊ฐ€์ž…, ๊ณ„์ • ์ธ์ฆ/์ธ๊ฐ€

personal statement service โ€” ์ž๊ธฐ์†Œ๊ฐœ์„œ ๊ด€๋ฆฌ ๋ฐ ์ฒจ์‚ญ

portfolio service โ€” ํฌํŠธํด๋ฆฌ์˜ค ๊ด€๋ฆฌ

preferred job service โ€” ๊ด€์‹ฌ ์ง๊ตฐ ์„ค์ • ๋ฐ ๊ด€๋ฆฌ

inquiry service โ€” ๋ฌธ์˜์‚ฌํ•ญ

interview service โ€” AI ๋ชจ์˜๋ฉด์ ‘

notification service โ€” ์•Œ๋ฆผ ์ฒ˜๋ฆฌ

kafka streams โ€” Kafka Streams (post table CDC)

์„œ๋น„์Šค ๋ฉ”์‹œ

api gateway โ€” API Gateway

config โ€” ์„œ๋น„์Šค๋ณ„ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ค‘์•™ ๊ด€๋ฆฌ

discovery โ€” ๋กœ์ปฌ ๋ฐ ์˜จํ”„๋ ˆ๋ฏธ์Šค ํ™˜๊ฒฝ์—์„œ discovery

๐Ÿ“ ์„ค๊ณ„

ERD

  • ์ „์ฒด

    ์ƒ‰์ด ๋‹ค๋ฅธ ๊ฒƒ๋ผ๋ฆฌ๋Š” ์‹ค์ œ๋กœ๋Š” FK๋กœ ์„ค์ •๋˜์–ด ์žˆ์ง€ ์•Š์Œ

    ๊ณต์ง€์‚ฌํ•ญ ์„œ๋น„์Šค๋Š” ํ›„์ˆœ์œ„ ๊ธฐ๋Šฅ์œผ๋กœ, ๊ฐœ๋ฐœ๋˜์ง€ ์•Š์Œ

    ๋ธ”๋กœ๊ทธ(์ฒญ๋ก), ๋ฌธ์˜(๋…ธ๋ž‘) ์„œ๋น„์Šค๋Š” ํšŒ์› ์ •๋ณด๋ฅผ ์ž์ฃผ ์ฐธ์กฐํ•  ํ•„์š”๊ฐ€ ์žˆ์–ด ๋ณ„๋„๋กœ ํšŒ์› ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ํ…Œ์ด๋ธ”์„ ์ถ”๊ฐ€ ๊ตฌ์„ฑ

    ์ „์ฒดERD

  • ์„œ๋น„์Šค๋ณ„

    • ํšŒ์› ์„œ๋น„์Šค

      ํšŒ์›ERD

    • ๊ด€์‹ฌ ์ง๊ตฐ ์„œ๋น„์Šค

      ๊ด€์‹ฌ์ง๊ตฐERD

    • ๋ธ”๋กœ๊ทธ ์„œ๋น„์Šค

      ๋ธ”๋กœ๊ทธERD

    • ๋ชจ์˜ ๋ฉด์ ‘ ์„œ๋น„์Šค, ํฌํŠธํด๋ฆฌ์˜ค ์„œ๋น„์Šค

      ๋ชจ์˜๋ฉด์ ‘ํฌํดERD

    • ์•Œ๋ฆผ ์„œ๋น„์Šค, ์ž๊ธฐ์†Œ๊ฐœ์„œ ์„œ๋น„์Šค

      ์•Œ๋ฆผ์ž์†Œ์„œERD

    • ๋ฌธ์˜ ์„œ๋น„์Šค

      ๋ฌธ์˜ERD

Architecture

MSA๋ฅผ ์ฑ„ํƒ

ํ‘œ์ • ๋ถ„์„ ์„œ๋ฒ„๋Š” Fast API๋กœ ๋ณ„๋„ ๊ตฌ์„ฑ

์•„ํ‚คํ…์ฒ˜

CI/CD Pipeline

Dev

CICD_dev

Prod

CICD_prod

๐Ÿง‘โ€๐Ÿ’ป ์—ญํ•  ๋ถ„๋ฐฐ

  • ๊ฐ•์ˆ˜์ง„
    • CDC ๊ตฌํ˜„(MySQL post ํ…Œ์ด๋ธ” โ†’ Elasticsearch)
    • DB ์„ค๊ณ„, ๋„๋ฉ”์ธ ๋งคํ•‘, API ๊ตฌํ˜„(๋ธ”๋กœ๊ทธ ํ™ˆ, ํฌํŠธํด๋ฆฌ์˜ค), ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ๊ด€๋ จ ๋กœ์ง ๊ตฌํ˜„
  • ๊น€๋ฏผํ˜•
    • CI/CD ํŒŒ์ดํ”„๋ผ์ธ, K8s ํด๋Ÿฌ์Šคํ„ฐ, ๋ชจ๋‹ˆํ„ฐ๋ง ๋“ฑ ์ธํ”„๋ผ ๊ตฌ์„ฑ
    • DB ์„ค๊ณ„, Spring Cloud ์„œ๋น„์Šค ๋ฉ”์‹œ ๊ตฌ์„ฑ, Spring Security ๊ตฌ์„ฑ, API ๊ตฌํ˜„(ํšŒ์›(์‚ฌ์šฉ์ž, ๊ด€๋ฆฌ์ž)), Feign Client ์—ฐ๊ฒฐ (ํšŒ์›)
  • ์–‘์‹œํ›ˆ
    • API ๊ตฌํ˜„(๊ด€์‹ฌ ์ง๊ตฐ, ์ž๊ธฐ์†Œ๊ฐœ์„œ, ๋ฌธ์˜, ๋ธ”๋กœ๊ทธ(๊ด€๋ฆฌ์ž))
  • ์กฐ๊ธฐํ—Œ
    • API ๊ตฌํ˜„(๋ธ”๋กœ๊ทธ(์‚ฌ์šฉ์ž), ๋ชจ์˜ ๋ฉด์ ‘, ์•Œ๋ฆผ), Feign Client ์—ฐ๊ฒฐ(์•Œ๋ฆผ), AI ์—ฐ๋™, GPT ์—ฐ๋™
  • ์ตœํ˜„์ค€
    • AI ๊ฐœ๋ฐœ(๋ชจ์˜ ๋ฉด์ ‘ ์งˆ๋ฌธ ์ƒ์„ฑ, ํ‘œ์ • ๋ถ„์„)
    • API ๊ตฌํ˜„(ํ‘œ์ • ๋ถ„์„)

๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ

Server

  • Java 17, Spring Boot 3.3.4
  • Spring Web MVC
  • Spring Security, jjwt 0.11.3
  • Spring Cloud, Spring Cloud Config, Spring Cloud Netflix(Eureka), Spring Cloud Kubernetes
  • AWS SDK(S3 API)
  • Swagger

Data

  • Spring Data JPA, QueryDSL 5.0.0, Spring Data Redis
  • MySQL, H2 (local), Redis, Elasticsearch, Kafka

Build

  • Gradle 8.10.2

CI/CD, Infra

  • Jenkins
  • Docker, Kubernetes
  • Prometheus, Grafana
  • Kakao Cloud
  • Oracle Cloud Infrastructure (Kakao Cloud ์‚ฌ์šฉ ์ œํ•œ์œผ๋กœ ์ธํ•ด ์‚ฌ์šฉ)

Communication

  • Discord, Slack, Github

โœ๏ธ Convention

Git Convention

  • Git Flow ์‚ฌ์šฉ

  • ๊ฐœ๋ฐœ ์ ˆ์ฐจ

    1. Github Repository์—์„œ issue ์ƒ์„ฑ
    2. Jira์—์„œ issue ์ƒ์„ฑ ํ›„ branch ์ƒ์„ฑ
    3. add โ†’ commit โ†’ push โ†’ pull request
    4. code review
    5. pull request๋ฅผ develop branch๋กœ merge
    6. ์ข…๋ฃŒ๋œ issue close ๋ฐ delete branch
  • Branch : <prefix>/#<Issue_Number>-<description>/<Jira_label_Number>

  • Issue Naming : [<PREFIX>] <Description>

  • Commit Message : :gitmoji:[#<Issue_Number>] <prefix> <Description>

  • Gitmoji

    prefix gitmoji ์˜๋ฏธ
    feature (FEAT) :sparkles: (โœจ) ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ตฌํ˜„
    fix :hammer: (๐Ÿ”จ) ์ˆ˜์ •
    refactor(REFAC) :recycle: (โ™ป๏ธ) ๋ฆฌํŒฉํ† ๋ง
    chore :wrench: (๐Ÿ”ง) ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ์ˆ˜์ •, code์™€ ๋ฌด๊ด€ํ•œ ๋ถ€๋ถ„๋“ค (.gitignore, build.gradle ๊ฐ™์€) ์ˆ˜์ •
    docs :memo: (๐Ÿ“) ๋ฌธ์„œ ์ˆ˜์ •
    comment :memo: (๐Ÿ“) ์ฃผ์„ ์ถ”๊ฐ€
    test :white_check_mark: (โœ…) ํ…Œ์ŠคํŠธ ์ฝ”๋“œ, ๋ฆฌํŽ™ํ† ๋ง ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€
    rename :truck: (๐Ÿšš) ํŒจํ‚ค์ง€๋‚˜ ํด๋ž˜์Šค๋ช… ์ˆ˜์ •
    remove :fire: (๐Ÿ”ฅ) ํŒจํ‚ค์ง€๋‚˜ ํด๋ž˜์Šค ์‚ญ์ œ

Code

Naming

  • ํด๋ž˜์Šค : PascalCase, andยทor์™€ ๊ฐ™์€ ์ ‘์†์‚ฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  25์ž ๋‚ด์™ธ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฐ ํŒจํ‚ค์ง€๋ช…์„ ์ ‘๋ฏธ์‚ฌ์— ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.
    • ๊ตฌํ˜„์ฒด์˜ ๊ฒฝ์šฐ ~Impl๋ฅผ ์ ‘๋ฏธ์‚ฌ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. (ex. UserServiceImpl, UserRepositoryImpl)
  • ํ•จ์ˆ˜ : camelCase
    • ๋ฉ”์†Œ๋“œ ์ž‘์„ฑ ์ˆœ์„œ๋Š” public ๋ฐ‘์— private์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  public ๋ฉ”์†Œ๋“œ ๋ฐ‘์—์„œ๋ถ€ํ„ฐ ๋ชจ๋“  private ๋ฉ”์†Œ๋“œ๊ฐ€ ์ •์˜๋ฉ๋‹ˆ๋‹ค.
    • event, design๊ณผ ๊ฐ™์€ ์ด์ค‘์ ์ธ ๋‹จ์–ด๋ฅผ ๊ฐ€์ง€๋Š” ๋‹จ์–ด๋Š” ์ง€์–‘ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฉ”์†Œ๋“œ์˜ ๋ถ€์ˆ˜ํšจ๊ณผ๋ฅผ ๊ตฌ์ฒด์ ์œผ๋กœ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
    • ์˜๋„๊ฐ€ ์ „๋‹ฌ๋˜๋„๋ก ์ตœ๋Œ€ํ•œ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฉ”์†Œ๋“œ์˜ ๋ชฉ์ ์„ ๋™์‚ฌ๋กœ ํ‘œํ˜„ํ•ด ๋ฉ”์†Œ๋“œ์˜ ์•ž์— ๋ถ™์ž…๋‹ˆ๋‹ค.
  • ๋ณ€์ˆ˜ : camelCase
  • DB ํ…Œ์ด๋ธ” : snake_case
  • ์ƒ์ˆ˜ : SCREAMING_SNAKE_CASE
  • ์ปฌ๋ ‰์…˜(Collection) : ๋ณต์ˆ˜ํ˜•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (Ex. users, userList)

Package

microservice
โ”œโ”€common
โ”‚ โ””โ”€advice
โ”œโ”€config
โ”œโ”€controller
โ”œโ”€dto
โ”‚ โ”œโ”€request
โ”‚ โ””โ”€response
โ”œโ”€entity
โ”œโ”€enums
โ”œโ”€repository
โ””โ”€service

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Java 100.0%