Skip to content

KSWA-SWEEP/jaksim31-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

main : main branch
develop : develop branch

๐Ÿ“– ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

โ–ถ๏ธ Jaksim31 Project Documentation(Notion)

๐ŸŒฑย ๊ฐœ์š”

์ž‘์‹ฌ์‚ผ์ผ ๋‹ค์ด์–ด๋ฆฌ ์„œ๋น„์Šค api ์„œ๋ฒ„ ๊ฐœ๋ฐœ

  • ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„ : 22.12.8 ~ 23.02.12
  • Version
    • Java 11
    • Spring boot 2.5.3
    • Mongodb 4.2
  • ์ฃผ์š” ๊ธฐ๋Šฅ
    • Spring security, JWT๋ฅผ ์ด์šฉํ•œ ํšŒ์› ์ธ์ฆ ๊ด€๋ฆฌ
    • ํšŒ์›, ์ผ๊ธฐ, ํ† ํฐ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ
    • Redis๋ฅผ ์ด์šฉํ•œ Remote ์บ์‹œ ์ ์šฉ
    • Openfeign์„ ์ด์šฉํ•œ ์™ธ๋ถ€ API ํ˜ธ์ถœ
    • OpenAPI๋ฅผ ์ด์šฉํ•œ api ๋ฌธ์„œํ™” ๋ฐ ํ…Œ์ŠคํŠธ
    • Exception Handler๋ฅผ ์ด์šฉํ•œ ํ†ตํ•ฉ ๋ฐ ๊ฐœ๋ณ„ ์˜ˆ์™ธ์ฒ˜๋ฆฌ
    • Spring-boot-validation์„ ์ด์šฉํ•œ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ์ฒ˜๋ฆฌ
    • JUnit์„ ์ด์šฉํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
    • Spring-boot-test-starter๋ฅผ ์ด์šฉํ•œ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ

๐ŸŒฑย Architecture

image

๐ŸŒฑย License

image


๐ŸŒฑDependency

[development]

  • Spring-boot
    • spring-boot-starter-web
    • spring-boot-starter-validation:3.0.1
    • spring-boot-starter-security
    • spring-boot-devtools
    • spring-boot-maven-plugin
    • spring-boot-starter-actuator
    • spring-boot-starter-aop
  • Spring-security
    • spring-security-test
  • Spring-cloud
    • spring-cloud-openfeign:3.0.3
  • Springdoc
    • springdoc-openapi:1.6.14
  • lombok
  • Serialization
    • jackson-databind
    • jackson-modules-java8
    • gson:2.10
    • json-simple:1.1.1
  • JWT
    • jjwt-api:0.11.5
    • jjwt-impl:0.11.5
    • jjwt-jackson:0.11.5
  • datasource
    • spring-boot-starter-data-elasticsearch
    • spring-boot-starter-data-mongodb
    • spring-boot-starter-data-redis
    • de.flapdoodle.embed.mongo
    • embedded-redis:0.7.2

[test]

  • Spring-boot-starter-test
  • sonar-maven-plugin:3.4.0
  • jacoco-maven-plugin:0.8.5
  • junit
  • mockito-inline

๐ŸŒฑDirectory

๐Ÿ“ฆjaksim31-backend-main
 โ”ฃ ๐Ÿ“‚.github // ๊นƒํ—ˆ๋ธŒ ์•ก์…˜ ์›Œํฌํ”Œ๋กœ์šฐ
 โ”ƒ โ”— ๐Ÿ“‚workflows
 โ”ฃ ๐Ÿ“‚.mvn
 โ”ƒ โ”— ๐Ÿ“‚wrapper
 โ”ฃ ๐Ÿ“‚jaksim31-properties
 โ”ฃ ๐Ÿ“‚scripts
 โ”ฃ ๐Ÿ“‚src
 โ”ƒ โ”ฃ ๐Ÿ“‚main
 โ”ƒ โ”ƒ โ”— ๐Ÿ“‚java
 โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚com
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚sweep
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚jaksim31
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚adapter
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚cache // ์บ์‹œ Adapter ๋ฐ Serializer ํด๋ž˜์Šค
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚aop // aop ํด๋ž˜์Šค
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚auth // jwt ์ธ์ฆ ๊ด€๋ จ ํด๋ž˜์Šค
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚config // ์„ค์ • ํด๋ž˜์Šค
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚cache // ์บ์‹œ ์„ค์ • ํด๋ž˜์Šค
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚controller // ์ปจํŠธ๋กค๋Ÿฌ ํด๋ž˜์Šค
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚feign // ์™ธ๋ถ€ api์š”์ฒญ์„ ์œ„ํ•œ ํด๋ž˜์Šค
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚config // api ์š”์ฒญ ๊ด€๋ จ ์„ค์ • ํด๋ž˜์Šค
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚domain // ์—”ํ‹ฐํ‹ฐ & ๋ ˆํฌ์ง€ํ† ๋ฆฌ ํด๋ž˜์Šค
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚auth // ์ธ์ฆ ๊ด€๋ จ
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚diary // ๋‹ค์ด์–ด๋ฆฌ ๊ด€๋ จ
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚members // ํšŒ์›์ •๋ณด ๊ด€๋ จ
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚token // ํ† ํฐ ๊ด€๋ จ
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚dto // DTO ํด๋ž˜์Šค
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚diary // ๋‹ค์ด์–ด๋ฆฌ ๊ด€๋ จ
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚extractkeyword // ํ‚ค์›Œ๋“œ ์ถ”์ถœ ๊ด€๋ จ
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚validator // ๋‹ค์ด์–ด๋ฆฌ ๋ฐ์ดํ„ฐ Validator
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚login // ๋กœ๊ทธ์ธ ๊ด€๋ จ
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚validator // ๋กœ๊ทธ์ธ ๋ฐ์ดํ„ฐ Validator
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚member // ํšŒ์› ๊ด€๋ จ
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚validator // ํšŒ์› ๋ฐ์ดํ„ฐ Validator
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚tokakao // ์นด์นด์˜ค api ๊ด€๋ จ
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚enums // enum ๋ชจ์Œ
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚exception // exception ํด๋ž˜์Šค
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚handler // exception handler
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚service // Service ํด๋ž˜์Šค
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚impl // Service ๊ตฌํ˜„ ํด๋ž˜์Šค
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚utils // ์œ ํ‹ธ ํด๋ž˜์Šค
 โ”ƒ โ”— ๐Ÿ“‚test
 โ”ƒ โ”ƒ โ”— ๐Ÿ“‚java
 โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚com
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚sweep
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚jaksim31
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚auth // ํ† ํฐ ๊ด€๋ จ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚config // ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ์„ค์ •
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚controller // ์ปจํŠธ๋กค๋Ÿฌ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚domain // ๋ ˆํฌ์ง€ํ„ฐ๋ฆฌ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚diary
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚members
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚token
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚integration // ํ†ตํ•ฉํ…Œ์ŠคํŠธ
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ฃ ๐Ÿ“‚service // ์„œ๋น„์Šค ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚impl
 โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”ƒ โ”— ๐Ÿ“‚util // ํ…Œ์ŠคํŠธ ์‹œ๊ฐ„ ์ธก์ •์„ ์œ„ํ•œ ์œ ํ‹ธ
 โ”ฃ ๐Ÿ“œ.gitignore
 โ”ฃ ๐Ÿ“œ.gitmodules // git submodule ์ •๋ณด
 โ”ฃ ๐Ÿ“œDockerfile
 โ”ฃ ๐Ÿ“œLICENSE
 โ”ฃ ๐Ÿ“œREADME.md
 โ”ฃ ๐Ÿ“œdocker-compose.yml
 โ”ฃ ๐Ÿ“œlombok.config
 โ”ฃ ๐Ÿ“œmvnw
 โ”ฃ ๐Ÿ“œmvnw.cmd
 โ”— ๐Ÿ“œpom.xml

๐ŸŒฑย ์‹คํ–‰๋ฐฉ๋ฒ•

  • local
./mvnw clean install -dspring.profiles.active=local -P local # ๋นŒ๋“œ
java -jar -Dspring.profiles.active=local -Duser.timezone=Asia/Seoul ./target/jaksim31-0.0.1.jar # ๊ตฌ๋™
  • production
./mvnw clean install -dspring.profiles.active=prod -P prod # ๋นŒ๋“œ
java -jar -Dspring.profiles.active=prod -Duser.timezone=Asia/Seoul ./target/jaksim31-0.0.1.jar # ๊ตฌ๋™

๐ŸŒฑย ์ฝ”๋“œ ์ฃผ์„ ์ปจ๋ฒค์…˜

  1. ๋ณ€๊ฒฝ์ด๋ ฅ ์‚ฌํ•ญ(ํด๋ž˜์Šค ์ƒ๋‹จ)

    image

  2. ๋ฉ”์†Œ๋“œ ์ฃผ์„ (๋ฉ”์†Œ๋“œ ์ƒ๋‹จ)

    image

๐ŸŒฑย ์ธ์ฆ ์ฒ˜๋ฆฌ ๊ตฌํ˜„

  1. ์ปค์Šคํ…€ํ•œ ๋ณด์•ˆ ์„ค์ •์„ ์œ„ํ•ด SecurityFilterChain Bean ์ƒ์„ฑ

    image

  2. OncePerRequestFilter๋ฅผ ์ƒ์†๋ฐ›์•„ ์ปค์Šคํ…€ filter ์ƒ์„ฑ

    • ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด filter๋ฅผ ๊ฑฐ์น˜๋„๋ก ์„ค์ •

    image

๐ŸŒฑย ์š”์ฒญ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ Validator ๊ตฌํ˜„

  • Spring validator ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  Request body์— ๋Œ€ํ•ด ๊ฒ€์ฆ ๋กœ์ง ๊ตฌํ˜„
  1. ์ปค์Šคํ…€ Validator ๊ตฌํ˜„

    image

  2. ์ปจํŠธ๋กค๋Ÿฌ์— ์ ์šฉ

    image

๐ŸŒฑย ํ†ตํ•ฉ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

  • ์œ ์ง€๋ณด์ˆ˜ ๊ณ ๋ ค Exception Hanlder๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•œ ๊ณณ์—์„œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ

    image

  • ์œ ์ง€๋ณด์ˆ˜ ๊ณ ๋ ค ์‘๋‹ต๋ฉ”์„ธ์ง€, ์‘๋‹ต์ฝ”๋“œ, Http ์ƒํƒœ์ฝ”๋“œ ํ†ตํ•ฉ ๊ด€๋ฆฌ

    image

    image

๐ŸŒฑย Redis๋ฅผ ์ด์šฉํ•œ ์บ์‹œ ์ ์šฉ

  • Write/Update์— ๋น„ํ•ด Read ์ž‘์—…์ด ๋งŽ์ด ๋ฐœ์ƒํ•  ๊ฒƒ ๊ฐ™์€ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์บ์‹ฑ ์ ์šฉ, ๊ฐ ์บ์‹œ ๋ฐ์ดํ„ฐ์— Expire time ์ ์šฉ
  • Write/Update/Delete์— ์ž‘์—… ๋ฐœ์ƒ ์‹œ ์บ์‹œ ์‚ญ์ œ, Read ์ž‘์—… ๋ฐœ์ƒ ์‹œ ์บ์‹œ ์กฐํšŒ
  1. ํ™˜๊ฒฝ๋ณ„ ๋ ˆ๋””์Šค ์•„ํ‚คํ…์ฒ˜์— ๋”ฐ๋ฅธ ์บ์‹œ ์„ค์ • ๋ฉ”์†Œ๋“œ ์ž‘์„ฑ (Local - Standalone, Prod-Master/Slave)

    image

  2. Cache ์ž‘์—…์„ ์œ„ํ•œ CacheAdapter ์ž‘์„ฑ

    • ์บ์‹œ ๋ฐ์ดํ„ฐ ๋ณ„ ์ž‘์„ฑ

    image

     adapter/cache/DiaryPagingCacheAdapter.java
    
    • put: ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ๋ฐ ๊ฐฑ์‹ 
    • get: ๋ฐ์ดํ„ฐ ์กฐํšŒ
    • delete: ๋ฐ์ดํ„ฐ ์‚ญ์ œ
    • findAndDelete: ํ•ด๋‹น key๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์€ ํ›„ ์‚ญ์ œ (์ž‘์—… ์‹œ๊ฐ„ ๊ณ ๋ คํ•˜์—ฌ 10๊ฐœ์”ฉ ๋Š์–ด์„œ ์Šค์บ”ํ•˜๋„๋ก ์„ค์ •)
  3. ์„œ๋น„์Šค ๋กœ์ง์— ์บ์‹œ ์ ์šฉ

    • ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์— ๋”ฐ๋ผ Annotation ๋˜๋Š” RedisTemplate ์‚ฌ์šฉ

    image

    service/DiaryServiceImple.java ์ผ๋ถ€ ๋ฐœ์ทŒ

๐ŸŒฑย Mongodb Aggregation์„ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ผ๊ธฐ์˜ ๊ฐ์ • ํ†ต๊ณ„ api ๊ตฌํ˜„

  • spring.data.mongodb ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ
  1. ํ•ด๋‹น ์‚ฌ์šฉ์ž์˜ ์ผ๊ธฐ ๊ฒ€์ƒ‰

  2. ๊ฐ์ •๋ณ„๋กœ ์ผ๊ธฐ ๋ฐ์ดํ„ฐ Grouping ๋ฐ ์นด์šดํŠธ ์‘๋‹ต

    image

๐ŸŒฑย ElasticSerach์™€ ์—ฐ๋™ํ•˜์—ฌ ์ผ๊ธฐ ๊ฒ€์ƒ‰ ๊ตฌํ˜„

  • Spring-boot-elasticsearch ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ
  1. Elastic Search์™€ ์—ฐ๋™

    image

    config/ElasticSearchConfig.java

  2. ๊ฒ€์ƒ‰ ์กฐ๊ฑด ์„ค์ • ๋ฐ elastic search ๊ฒ€์ƒ‰ api ํ˜ธ์ถœ

    • ๊ฒ€์ƒ‰์–ด, ๋‚ ์งœ, ๊ฐ์ •์— ๋Œ€ํ•œ ์กฐ๊ฑด ์„ค์ •

    image

    domain/diary/DiarySearchQueryRepository.java

๐ŸŒฑย OpenApi๋ฅผ ์ด์šฉํ•œ api ํ˜ธ์ถœ ํ…Œ์ŠคํŠธ ๋ฐ ๊ด€๋ฆฌ

image

โ–ถ๏ธ Swagger UI

๐ŸŒฑย ์„ค์ • ํŒŒ์ผ ๊ด€๋ฆฌ

  • ๋ณด์•ˆ ๊ณ ๋ ค git submodule์„ ์ด์šฉํ•˜์—ฌ private repository์— ๋ณ„๋„๋กœ ๊ด€๋ฆฌ

    image

    Jaksim31 ๋ฐฑ์—”๋“œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ (Public)

    image

    Jaksim31 ์„ค์ •์ •๋ณด ๋ ˆํฌ์ง€ํ† ๋ฆฌ (Private)

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages