Giter Site home page Giter Site logo

dnd-7th-1-backend's Introduction

๐Ÿƒ ๋•…๋”ฐ๋จน๊ธฐ ๊ธฐ๋ฐ˜ ์šด๋™ ์žฅ๋ ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ NEMODU

DND 7๊ธฐ ํ”„๋กœ์ ํŠธ (2022.08~)

ํ”„๋กœ์ ํŠธ ์„ค๋ช…

์‹œ์—ฐ ์˜์ƒ ๐Ÿ“บ

image
02
03 04 05 06 07 08 09 10 11 12 13

๐Ÿ“ƒ ๊ธฐ๋Šฅ ๋ฆฌ์ŠคํŠธ

  • ํšŒ์›
    • ํ”„๋กœํ•„ ์กฐํšŒ ๋ฐ ์ˆ˜์ •
    • ๋งˆ์ด ํŽ˜์ด์ง€ ์กฐํšŒ (์šด๋™ ๊ธฐ๋ก ์ •๋ณด, ํšŒ์› ์ •๋ณด ๋“ฑ)
    • ์šด๋™ ๊ธฐ๋ก ํ•„ํ„ฐ ๊ด€๋ฆฌ (๋‚ด ๊ธฐ๋ก ๋ณด๊ธฐ, ์นœ๊ตฌ ๊ธฐ๋ก ๋ณด๊ธฐ ๋“ฑ)
    • ์šด๋™ ๊ธฐ๋ก ๋ฉ”์‹œ์ง€ ์ˆ˜์ •
    • ๋ฉ”์ธ ํ™”๋ฉด ์กฐํšŒ (๋‚ด ์˜์—ญ, ์ด๋ฒˆ ์ฃผ ์˜์—ญ, ์นœ๊ตฌ ์˜์—ญ, ์ฑŒ๋ฆฐ์ง€ ์ •๋ณด, ์ฑŒ๋ฆฐ์ง€ ๋ฉค๋ฒ„ ์˜์—ญ ๋“ฑ)
  • ์ฑŒ๋ฆฐ์ง€ (์ง€์ธ๊ณผ ํ•จ๊ป˜ ์ผ์ • ๊ธฐ๊ฐ„๋™์•ˆ ์šด๋™ ๊ธฐ๋ก์„ ๊ณต์œ ํ•˜๋ฉฐ ๊ฒฝ์Ÿํ•˜๋Š” ๊ธฐ๋Šฅ)
    • ์ฑŒ๋ฆฐ์ง€ ์ƒ์„ฑ ๋ฐ ์ดˆ๋Œ€
    • ์ฑŒ๋ฆฐ์ง€ ์ˆ˜๋ฝ, ๊ฑฐ์ ˆ
    • ์ฑŒ๋ฆฐ์ง€ ์ƒํƒœ ๊ด€๋ฆฌ
      • ์ฑŒ๋ฆฐ์ง€ ์‹œ์ž‘๋‚ ์งœ์— ๋งž์ถฐ ์ง„ํ–‰
      • ์›”์š”์ผ 00์‹œ ์ฑŒ๋ฆฐ์ง€ ์ข…๋ฃŒ
      • ์ฑŒ๋ฆฐ์ง€ ์ฐธ์—ฌํ•˜๋Š” ์‚ฌ๋žŒ(์ฑŒ๋ฆฐ์ง€ ๋ฉค๋ฒ„)์— ๋Œ€ํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ์ฃผ์ตœ์ž ๊ด€๋ฆฌ
    • ์ฑŒ๋ฆฐ์ง€ ์ƒ‰๊น” ๊ณ„์‚ฐ
    • ์ƒํƒœ ๋ณ„ ์ฑŒ๋ฆฐ์ง€ ๋ชฉ๋ก ์กฐํšŒ
    • ์ƒํƒœ ๋ณ„ ์ฑŒ๋ฆฐ์ง€ ์ƒ์„ธ ๋ชฉ๋ก ์กฐํšŒ
    • ์ฑŒ๋ฆฐ์ง€ ์ง„ํ–‰ ๊ธฐ๊ฐ„๋™์•ˆ ๊ธฐ๋ก๋œ ์˜์—ญ ์กฐํšŒ
    • ์ฑŒ๋ฆฐ์ง€ ์‚ญ์ œ
  • ์šด๋™ ๊ธฐ๋ก
    • ์šด๋™ ๊ธฐ๋ก ์ƒ์„ฑ
    • ์šด๋™ ๊ธฐ๋ก ์กฐํšŒ
  • ๋žญํ‚น
    • ์—ญ๋Œ€ ๋ˆ„์  ์นธ ์ˆ˜ ๋žญํ‚น ๊ณ„์‚ฐ
    • ์ด๋ฒˆ ์ฃผ ์˜์—ญ ์ˆ˜ ๋žญํ‚น ๊ณ„์‚ฐ
    • ๊ฑธ์Œ ์ˆ˜ ๋žญํ‚น ๊ณ„์‚ฐ
  • ์นœ๊ตฌ
    • ์นœ๊ตฌ ์‹ ์ฒญ ๋ฐ ์‘๋‹ต
    • ์นด์นด์˜ค ์นœ๊ตฌ ๋ชฉ๋ก ์กฐํšŒ
    • ์นด์นด์˜ค ์นœ๊ตฌ ์ดˆ๋Œ€ ๋ฉ”์‹œ์ง€ ์ „์†ก
    • ์นœ๊ตฌ ์‚ญ์ œ
    • ์œ„์น˜ ๊ธฐ๋ฐ˜ ์นœ๊ตฌ ์ถ”์ฒœ
  • ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ
    • ์นด์นด์˜ค, ์• ํ”Œ ์†Œ์…œ ๋กœ๊ทธ์ธ ์ง€์›
    • JWT ๊ธฐ๋ฐ˜ ํ† ํฐ ์ธ์ฆ
    • ์นด์นด์˜ค ํšŒ์› ์ •๋ณด ์กฐํšŒ
    • ๋กœ๊ทธ์•„์›ƒ
    • ํšŒ์› ํƒˆํ‡ด
  • ํ‘ธ์‹œ ์•Œ๋žŒ
    • FCM ํ† ํฐ ๊ด€๋ฆฌ
    • ํŠน์ • ์ƒํ™ฉ์—์„œ ํ‘ธ์‹œ ์•Œ๋žŒ ์š”์ฒญ ๋ฐ ์•Œ๋žŒ ๊ด€๋ฆฌ
  • HTTPS ์ง€์›

๐Ÿ”ท Architecture

image

๐Ÿ”ถ ER-MODEL

image

โš”๏ธ ๊ธฐ์ˆ  ์Šคํƒ

๐Ÿ”ฅ SERVER

  • Java 11 (OpenJDK 11)
  • Spring boot 2.7.1
    • ์˜์กด์„ฑ ๊ด€๋ฆฌ
    • Auto Configuration
  • Spring Security
    • JWT ๊ธฐ๋ฐ˜ ํ† ํฐ์„ ํ™œ์šฉํ•œ ์ธ์ฆ
    • ExceptionEntryPoint๋ฅผ ํ™œ์šฉํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
  • Spring Data JPA
    • ๊ฐ์ฒด ์ค‘์‹ฌ์˜ ORM ์ฟผ๋ฆฌ ํ™œ์šฉ
  • QueryDSL
    • ์ปดํŒŒ์ผ ๋‹จ๊ฒŒ์—์„œ ์ฟผ๋ฆฌ ์—๋Ÿฌ ๊ฒ€์ถœ
    • ์ค‘๋ณต ์ฟผ๋ฆฌ ์žฌํ™œ์šฉ์„ ํ†ตํ•ด ์œ ์ง€๋ณด์ˆ˜์— ์šฉ์ดํ•˜๋„๋ก ํ•จ
    • ๋™์  ์ฟผ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ž‘์„ฑ
    • No Offset์„ ํ™œ์šฉํ•œ ํŽ˜์ด์ง• ์ฟผ๋ฆฌ ๊ฐœ์„ 
  • Spring Batch
    • ์ฒด๊ณ„์ ์ธ ๋ฐฐ์น˜ ์ž‘์—…: Chunk ๋‹จ์œ„๋กœ ํŠธ๋žœ์žญ์…˜์„ ๊ด€๋ฆฌํ•ด ๋ฉ”๋ชจ๋ฆฌ์— ํ•œ ๋ฒˆ์— ์ ์žฌํ•˜์ง€ ์•Š๋„๋ก ํ•ด ์„œ๋ฒ„์˜ ๋ถ€๋‹ด ์ตœ์†Œํ™”
    • Challenge์˜ ์ƒํƒœ ๋ณ€๊ฒฝ ์‹œ ๋ฐฐํƒ€ ๋ฝ ์„ค์ • -> Chunk ๋‹จ์œ„ ์ž‘์—… ํ•„์š”
    • AbstractPagingItemReader, JpaItemWriter๋ฅผ ์ƒ์†๋ฐ›์•„ ๋„ค๋ชจ๋‘์˜ ์—”ํ‹ฐํ‹ฐ ๊ตฌ์„ฑ์— ๋งž๊ฒŒ ๊ตฌ์„ฑ

๐ŸŽ DB

  • MySQL 8.0.30
    • ํ…Œ์ด๋ธ”์˜ ์„ฑ๊ฒฉ์„ ๊ณ ๋ คํ•œ ๊ฐ์ฒด ์ค‘์‹ฌ์˜ ์—”ํ‹ฐํ‹ฐ ์„ค๊ณ„
    • N:M ๊ด€๊ณ„๋ฅผ ์กฐ์ธ ํ…Œ์ด๋ธ”์„ ํ™œ์šฉํ•ด 1:N, M:1๋กœ ํ’€์–ด๋‚ด ๊ฐœ๋ฐœ ๋ณต์žก๋„ ์ €ํ•˜
    • N-gram Parser๋ฅผ ํ™œ์šฉํ•œ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ๊ฒ€์ƒ‰ (FullText-index)

๐ŸŒ‰ Infra

  • Nginx
    • SSL ์ธ์ฆ์„œ๋ฅผ ํ™œ์šฉํ•œ ์•”ํ˜ธํ™”/๋ณตํ˜ธํ™”
    • ๋ฐœ๊ธ‰๋ฐ›์€ ๋„๋ฉ”์ธ(nemodu.site)์— ๋Œ€ํ•œ ํ”„๋ก์‹œ ์—ญํ• 

โ˜๏ธ Cloud

  • AWS EC2
    • ํ•„์š”ํ•œ ๋งŒํผ ์ปดํ“จํŒ… ์ž์› ์‚ฌ์šฉ(์˜จ๋””๋งจ๋“œ)
    • ์ธ์Šคํ„ด์Šค ๋ชจ๋‹ˆํ„ฐ๋ง
  • AWS RDS
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๊ด€๋ฆฌ
  • AWS S3
    • ํšŒ์› ํ”„๋กœํ•„ ์‚ฌ์ง„์„ ๋น„๋กฏํ•œ ํŒŒ์ผ ์ €์žฅ
    • ์ •์  ํŽ˜์ด์ง€ ์ €์žฅ ๋ฐ ์ „๋‹ฌ (์•ฝ๊ด€ ํŽ˜์ด์ง€)
  • AWS ElastiCache
    • Redis๋ฅผ ํ™œ์šฉํ•ด ๋ฐ์ดํ„ฐ ์บ์‹ฑ
    • ๋น ๋ฅธ ์กฐํšŒ ๋ฐ ์„œ๋ฒ„ ๋ถ€ํ•˜ ๊ฐ์†Œ
    • Expire Event ๊ตฌ๋…: ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœํ–‰๋˜๋Š” ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ (FCM ํ† ํฐ ์žฌ๋ฐœ๊ธ‰ ์š”์ฒญ)

๐Ÿ‹ ๊ฐœ์„  ๊ณผ์ •

1๏ธโƒฃ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ฐœ์„ 

์ถ”ํ›„ ๋ฐœ์ƒํ•  ๋‹ค์–‘ํ•œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์œ ์—ฐํ•œ ๊ตฌ์กฐ ํ•„์š”

  • ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ์— ๋Œ€ํ•œ ์ฝ”๋“œ ์ •์˜ (ExceptionCodeSet.java)
  • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์˜ˆ์™ธ ํด๋ž˜์Šค์˜ ์—ญํ•  ์ •์˜ (BaseException.java)
  • ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•ด ์˜ˆ์™ธ ํด๋ž˜์Šค์˜ ์ค‘๋ณต ์ฝ”๋“œ ์ตœ์†Œํ™” (BaseExceptionAbs.java)
  • @RestControllerAdvice๋ฅผ ํ™œ์šฉํ•ด ์ปจํŠธ๋กค๋Ÿฌ ๋ ˆ๋ฒจ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ ๊ณตํ†ต ์ฒ˜๋ฆฌ
  • ํ•„ํ„ฐ ๋ ˆ๋ฒจ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด, AuthenticationException์„ ์ƒ์† ๋ฐ›์€ ์˜ˆ์™ธ ํด๋ž˜์Šค ์ƒ์„ฑ
  • ๊ธฐ์กด์— ์ •์˜ํ•œ ์˜ˆ์™ธ ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•ด AuthenticationEntryPoint๋ฅผ ์ƒ์†๋ฐ›์€ ํ•ธ๋“ค๋Ÿฌ์—์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
  • ์ผ€์ด์Šค๋ณ„ ์˜ˆ์™ธ ํด๋ž˜์Šค ์ƒ์„ฑ ๋ฐ ๊ฐ ์˜ˆ์™ธ์— ๋Œ€ํ•œ ๊ฐœ๋ณ„ ์ฒ˜๋ฆฌ
    (Ex:FilterException.java, ํ•„ํ„ฐ ๋ ˆ๋ฒจ์—์„œ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด AuthenticationException ์ƒ์†)

2๏ธโƒฃ ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ ๊ฐœ์„ 

์นด์นด์˜ค, ์• ํ”Œ 2๊ฐ€์ง€ ์†Œ์…œ ๋กœ๊ทธ์ธ์„ ์ง€์›. ๋‚˜์ค‘์— ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ํšŒ์›๊ฐ€์ž… ํ˜•ํƒœ์— ๋Œ€ํ•œ ๋Œ€๋น„

  • Resource Server(ํ˜„ ์‹œ์ ์—์„œ ์นด์นด์˜ค, ์• ํ”Œ)์— ๋งž์ถฐ ๊ฐœ๋ฐœํ•ด ๊ตฌ์กฐ ๋ณ€๊ฒฝ์ด ํž˜๋“ค๋‹ค๊ณ  ํŒ๋‹จ -> Resource Server ์˜์กด์„ฑ ์ตœ์†Œํ™”
  • ๋กœ๊ทธ์ธ ํ›„ Redirect ๋ฐ›๋Š” ํ˜•ํƒœ๊ฐ€ ์•„๋‹Œ, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋กœ๊ทธ์ธ ํ›„ ํ† ํฐ๊นŒ์ง€ ๋ฐœ๊ธ‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์—ญํ•  ๋ถ„๋ฆฌ.
  • ์†Œ์…œ ๋กœ๊ทธ์ธ์— ๋Œ€ํ•œ ๊ณตํ†ต API๋ฅผ ์ œ๊ณตํ•ด ์„œ๋ฒ„์—์„œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋ฐ›์•„ ํšŒ์› ์ •๋ณด ๊ด€๋ฆฌ

3๏ธโƒฃ ๋ฉ”์ธ ํ™”๋ฉด API ๊ฐœ์„ 

๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ๋ฉ”์ธ ํ™”๋ฉด API ์„ฑ๋Šฅ์ด ๊ธ‰๊ฒฉํžˆ ์ €ํ•˜๋จ

  • 1:N ํ˜•ํƒœ๋กœ ์„ค๊ณ„๋œ '์šด๋™ ๊ธฐ๋ก<->์˜์—ญ'์„ ์กฐํšŒํ•  ๋•Œ, 2๋ฒˆ์— ๊ฑธ์ณ ์กฐํšŒํ•˜๋˜ ๊ฒƒ์„ Join์„ ํ™œ์šฉํ•ด ํ•œ ๋ฒˆ์œผ๋กœ ์ค„์ž„ (DB I/O ์ตœ์†Œํ™”)
  • ํšŒ์› ์ค‘์‹ฌ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๋กœ์ง -> ์˜์—ญ์„ ์ค‘์‹ฌ์œผ๋กœ ๋ฐ์ดํ„ฐ ์กฐํšŒ. ์ฆ‰, ํ•œ ๋ฒˆ์— ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋„๋ก ๋กœ์ง ๊ฐœ์„ 
  • ์˜ฌ๋ฐ”๋ฅธ ์ธ๋ฑ์Šค ์„ค๊ณ„๋ฅผ ํ†ตํ•ด ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ๊ฐœ์„ 
    • ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ: ์‹คํ–‰ ์†๋„ 81.95% ํ–ฅ์ƒ
  • ํด๋ผ์ด์–ธํŠธ์˜ ์ง€๋„ ์ถ•์ฒ™ ์ •๋ณด๋ฅผ ํ™œ์šฉํ•ด MBR(Minimum Bounding Rectangle) ๊ณ„์‚ฐ -> ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์ตœ์†Œํ™”
  • MySQL์˜ MBR_CONTAINS() ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•ด MBR ๋‚ด ์˜์—ญ๋งŒ ์กฐํšŒํ•˜๋„๋ก ๊ฐœ์„ 
    • ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ: ์‹คํ–‰ ์†๋„ 42.86% ํ–ฅ์ƒ

4๏ธโƒฃ ๋žญํ‚น ๊ฐœ์„ 

๋žญํ‚น ๊ณ„์‚ฐ์— ํ™œ์šฉ๋˜๋˜ QueryDSL์˜ Tupleํด๋ž˜์Šค์˜ ์˜์กด์„ฑ์ด ์ „์—ญ์— ํผ์ ธ์žˆ์Œ.

  • ๋žญํ‚น ๊ณ„์‚ฐ์— ํ•„์š”ํ•œ ๊ณตํ†ต DTO ์ƒ์„ฑ
  • DTO๋ฅผ ํ™œ์šฉํ•ด ์กฐํšŒํ•จ์œผ๋กœ์จ, Tuple์— ๋Œ€ํ•œ ์˜์กด์„ฑ ์ œ๊ฑฐ
  • ์ž˜๋ชป๋œ Join ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ณต์žกํ•ด์ง„ ๋žญํ‚น ๊ณ„์‚ฐ ๋กœ์ง์„ Outer Join์„ ํ™œ์šฉํ•ด ๊ฐ„์†Œํ™”
  • ๋žญํ‚น ๊ณ„์‚ฐ์„ ๊ณตํ†ต ๋ชจ๋“ˆ๋กœ์„œ ํ™œ์šฉํ•ด ์ถ”ํ›„ ๋‹ค์–‘ํ•œ ๊ณณ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๋„๋ก ํ•จ

5๏ธโƒฃ ๋ฐฐ์น˜ ์ž‘์—… ๊ฐœ์„ 

์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์•„์กŒ์„ ๋•Œ, ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌํ•˜๋Š” ๊ฒƒ์€ ๋ถ€๋‹ด

  • ์ผ์ • ๋‹จ์œ„๋งŒํผ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ด ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•จ -> ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํž˜๋“ค ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ
  • ํŠนํžˆ, ์ฑŒ๋ฆฐ์ง€ ์ƒํƒœ ๋ณ€๊ฒฝ ๋ฐฐ์น˜์˜ ๊ฒฝ์šฐ, ๋ณ€๊ฒฝ ์ „ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์—†๋„๋ก ๋ฐฐํƒ€ ๋ฝ์„ ์ ์šฉํ•จ -> ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ.
  • Spring Batch๋ฅผ ๋„์ž…ํ•ด Job, Step ๊ฐ ๋‹จ๊ณ„ ๋ณ„ ์ž‘์—…์„ Chunk๋กœ ๋‹จ์œ„๋กœ ์ˆ˜ํ–‰
  • Postman์œผ๋กœ ์ง์ ‘ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ํž˜๋“ค๊ธฐ ๋•Œ๋ฌธ์—, ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ

6๏ธโƒฃ ํ‘ธ์‹œ ์•Œ๋žŒ์„ ์œ„ํ•œ FCM ํ† ํฐ ์‹ ์„ ๋„ ์œ ์ง€

๊ฐ ์‚ฌ์šฉ์ž์˜ FCM ํ† ํฐ์ด 2๋‹ฌ์ด ๊ฒฝ๊ณผํ•œ ๊ฒฝ์šฐ, ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์žฌ๋ฐœ๊ธ‰์„ ์š”์ฒญํ•ด์•ผ ํ•จ.

  • ์‚ฌ์šฉ์ž๋งˆ๋‹ค ๋งŒ๋ฃŒ ์‹œ๊ฐ„์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์—, ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ํ†ตํ•ด ์ง์ ‘ ํ™•์ธํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ 
  • FCM ํ† ํฐ์„ Redis์— ์ €์žฅํ•˜๊ณ , TTL์„ 2๋‹ฌ(60์ผ)๋กœ ์„ค์ •
  • ํ† ํฐ์ด ๋งŒ๋ฃŒ๋˜๋Š” ๊ฒฝ์šฐ Expire Event๋ฅผ ๋ฐœํ–‰ํ•ด ์„œ๋ฒ„๋กœ ์ „๋‹ฌ -> ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•˜๋ฉด key ์ •๋ณด์— ๋งž์ถฐ ํ† ํฐ ์žฌ๋ฐœ๊ธ‰ ์š”์ฒญ
  • Apns(iOS์˜ ํ‘ธ์‹œ ์•Œ๋žŒ ์„œ๋น„์Šค)์˜ Silent Message๋ฅผ ํ™œ์šฉํ•ด ์žฌ๋ฐœ๊ธ‰ ์š”์ฒญ

7๏ธโƒฃ ๋กœ๊ทธ ์ „๋žต ๊ฐœ์„ 

์„œ๋ฒ„ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋น ๋ฅธ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…์„ ์œ„ํ•œ ๋กœ๊ทธ ์ „๋žต ๊ฐœ์„  ํ•„์š”

  • ํ‘ธ์‹œ ์•Œ๋žŒ, ๋ฐฐ์น˜ ๋“ฑ ํŠน์ • ์„œ๋น„์Šค์— ๋”ฐ๋ฅธ Logger ๋ถ„๋ฆฌ
  • ๋กœ๊ทธ ๋ ˆ๋ฒจ์— ๋”ฐ๋ฅธ ๋กœ๊ทธ ์ˆ˜์ง‘
  • ์‹œ๊ฐ„, ์šฉ๋Ÿ‰ ๋ณ„ Rolling ์ „๋žต ์ˆ˜๋ฆฝ
  • Logger ํด๋ž˜์Šค๋ฅผ Request Scope Bean์œผ๋กœ ์ƒ์„ฑํ•ด ์‰ฝ๊ฒŒ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ์„ 
    -> @Qualifer๋ฅผ ํ†ตํ•ด ํŠน์ • Logger๋ฅผ ์ฃผ์ž…ํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์€ ๊ฐœ์„  ํ•„์š”

8๏ธโƒฃ Prometheus, Grapana๋ฅผ ํ™œ์šฉํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง (์ง„ํ–‰ ์ค‘)

์šด์˜์„ ์œ„ํ•ด JVM ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๋ฐ GC ๋ชจ๋‹ˆํ„ฐ๋ง์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จ

dnd-7th-1-backend's People

Contributors

chanopark avatar seheon-park avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

dnd-7th-1-backend's Issues

[FEAT] ์นด์นด์˜ค ๋กœ๊ทธ์ธ ๊ฐœ๋ฐœ

- ์ œ๋ชฉ

์นด์นด์˜ค ๋กœ๊ทธ์ธ ๊ฐœ๋ฐœ

- ๊ฐœ๋ฐœ ์˜๋„

์†Œ์…œ ๋กœ๊ทธ์ธ(์นด์นด์˜ค) ๊ธฐ๋Šฅ ๊ตฌํ˜„

- ๊ธฐ๋Šฅ ๋ฆฌ์ŠคํŠธ

  • Redirect URL์— ์ „๋‹ฌ๋ฐ›์€ ์ธ๊ฐ€์ฝ”๋“œ๋ฅผ ํ†ตํ•œ ์นด์นด์˜ค ์—‘์„ธ์Šค ํ† ํฐ ๋ฐœ๊ธ‰
  • ์—‘์„ธ์Šค ํ† ํฐ์„ ํ™œ์šฉํ•œ ์‚ฌ์šฉ์ž ์ •๋ณด ์กฐํšŒ
  • ์‹ ๊ทœ/๊ธฐ์กด ์œ ์ €๋ฅผ ๊ตฌ๋ถ„ ๋ฐ ์ ์ ˆํ•œ Response

- ๋น„๊ณ 

-

[FEAT] ์‹œ๊ฐ„์— ๋”ฐ๋ผ ์•Œ๋งž๋Š” ์šด๋™ ๊ธฐ๋ก ์ถ”์ถœ ๋กœ์ง ๊ตฌํ˜„

- ์ œ๋ชฉ

์‹œ๊ฐ„์— ๋”ฐ๋ผ ์•Œ๋งž๋Š” ์šด๋™ ๊ธฐ๋ก ์ถ”์ถœ ๋กœ์ง ๊ตฌํ˜„

- ๊ฐœ๋ฐœ ์˜๋„

ํ™ˆํ™”๋ฉด, ๊ฐœ์ธ๊ธฐ๋ก, ์นœ๊ตฌ๊ธฐ๋ก, ๋žญํ‚น, ์ฑŒ๋ฆฐ์ง€ ๊ธฐ๋ก ๋“ฑ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์—์„œ ํ•„์š”ํ•œ ๋กœ์ง

- ๊ธฐ๋Šฅ ๋ฆฌ์ŠคํŠธ

  • ์ด๋ฒˆ์ฃผ ๊ฐœ์ธ ๊ธฐ๋ก ์ถ”์ถœ (findRecordOfThisWeek)
  • ๊ณผ๊ฑฐ ๊ฐœ์ธ ๊ธฐ๋ก ์ถ”์ถœ(์ผ) (findRecordOfPastByDay)
  • ๊ณผ๊ฑฐ ๊ฐœ์ธ ๊ธฐ๋ก ์ถ”์ถœ(์ฃผ) (findRecordOfPastByWeek)
  • ์ด๋ฒˆ์ฃผ ์ฑŒ๋ฆฐ์ง€ ๊ธฐ๋ก ์ถ”์ถœ (findChallengeRecordOfThisWeek)
  • ๊ณผ๊ฑฐ ์ฑŒ๋ฆฐ์ง€ ๊ธฐ๋ก ์ถ”์ถœ (findChallengeRecordOfPast)

- ๋น„๊ณ 

queryDsl์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐ„์— ๋”ฐ๋ผ(start์™€ end์‚ฌ์ด) ์šด๋™ ๊ธฐ๋ก์„ ์ถ”์ถœํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  
์„œ๋น„์Šค ๋‹จ์—์„œ ํ•„์š”ํ•œ ๋กœ์ง ์ž‘์„ฑ 

[FEAT] ์šด๋™๊ธฐ๋ก ๊ด€๋ จ ๋ฉ”์†Œ๋“œ ๊ตฌํ˜„

- ์ œ๋ชฉ

์šด๋™๊ธฐ๋ก ๊ด€๋ จ ๋ฉ”์†Œ๋“œ ๊ตฌํ˜„

- ๊ฐœ๋ฐœ ์˜๋„

๋žญํ‚น ์‹œ์Šคํ…œ, ๊ธฐ๋ก์‹œ์ž‘, ํ™œ๋™ ๊ธฐ๋ก ์—์„œ ํ•„์š”ํ•œ ํ•จ์ˆ˜

- ๊ธฐ๋Šฅ ๋ฆฌ์ŠคํŠธ

  • ํŠน์ • ๋‚ ์งœ์‚ฌ์ด ๋ˆ„์  ์นธ์˜ ์ˆ˜ ์กฐํšŒ
  • ํŠน์ • ๋‚ ์งœ์‚ฌ์ด ๋ˆ„์  ์˜์—ญ์˜ ์ˆ˜ ์กฐํšŒ
  • ์˜์—ญ ํ˜น์€ ์นธ์˜ ์ˆ˜์— ๋”ฐ๋ผ ์ •๋ ฌํ•˜์—ฌ ์œ ์ €๋ฅผ ์กฐํšŒ

- ๋น„๊ณ 

๋กœ์ง ์„ค๋ช…
- ํŽ˜์ด์ง•์„ ํ•ด์„œ ๋ณด๋‚ผ๊ฑด์ง€ ๋…ผ์˜ ํ•„์š”
- ๋ˆ„์  ๋žญํ‚น์€ ๊ณ„์‚ฐ์ด ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ๋…ผ์˜ ํ•„์š”

์ถ”ํ›„ ๊ณ ๋ ค ์‚ฌํ•ญ ๋ฆฌ์ŠคํŠธ

- ์ œ๋ชฉ

๊ฐœ๋ฐœ ์ค‘ ๋ฐœ๊ฒฌ๋œ ๊ณ ๋ ค ์‚ฌํ•ญ ๊ธฐ์ˆ 

- ๋ชฉ์ 

์ถ”ํ›„ ๊ธฐ์ˆ  ๋ถ€์ฑ„ ํ•ด์†Œ

- ๋‚ด์šฉ

  • (22๋…„10์›”01์ผ) ํšŒ์› ์‚ญ์ œ ์‹œ, ์ฑŒ๋ฆฐ์ง€๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ ํ•  ์ง€(์‚ญ์ œ๋˜๋Š” ํšŒ์›์ด ์ฃผ์ตœ์ž๋ผ๋ฉด?)

[FEAT] ๋งˆ์ด ํŽ˜์ด์ง€ ๊ด€๋ จ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ

- ์ œ๋ชฉ

๋งˆ์ด ํŽ˜์ด์ง€ ๊ด€๋ จ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ

- ๊ฐœ๋ฐœ ์˜๋„

๋งˆ์ดํŽ˜์ด์ง€ ๋ฐ ํ”„๋กœํ•„์—์„œ ํ™œ์šฉ๋  ์†Œ๊ฐœ ๋ฉ”์‹œ์ง€ ๊ด€๋ จ ๊ธฐ๋Šฅ ๊ตฌํ˜„

- ๊ธฐ๋Šฅ ๋ฆฌ์ŠคํŠธ

  • ํšŒ์› ์—”ํ‹ฐํ‹ฐ ์ˆ˜์ •
  • ํšŒ์› ์ •๋ณด ์กฐํšŒ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ํšŒ์› ์ •๋ณด ์ˆ˜์ • ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ๊ธฐ๋ก์ด ์žˆ๋Š” ๋‚ ์งœ ์กฐํšŒ api ๊ตฌํ˜„

- ๋น„๊ณ 

๊ธฐ์กด ์นผ๋กœ๋ฆฌ ๊ด€๋ จ ๋ถ€๋ถ„์€ ์‚ญ์ œ ํ›„, ๊ฑธ์Œ ์ˆ˜๋กœ ๋Œ€์ฒด
์†Œ๊ฐœ ๋ฉ”์‹œ์ง€ ๊ด€๋ จ ๊ธฐ๋Šฅ ๊ตฌํ˜„ 

[FEAT] ํ™ˆํ™”๋ฉด ๋ฐ ๊ธฐ๋ก api ๊ฐœ๋ฐœ

- ์ œ๋ชฉ

ํ™ˆ ํ™”๋ฉด ๋ฐ ๊ธฐ๋ก api ๊ฐœ๋ฐœ

- ๊ฐœ๋ฐœ ์˜๋„

ํ™ˆ ํ™”๋ฉด, ๊ธฐ๋ก ์‹œ์ž‘-๋ ๊ธฐ๋Šฅ ๊ตฌํ˜„

- ๊ธฐ๋Šฅ ๋ฆฌ์ŠคํŠธ

  • ํ™ˆ ํ™”๋ฉด api
  • ๊ธฐ๋ก api

- ๋น„๊ณ 

- ํ™ˆํ™”๋ฉด HomeReponseDto ๋ฐ˜ํ™˜
- ๊ธฐ๋ก ์‹œ์ž‘: ์šด๋™ ๊ธฐ๋ก ๊ฐ์ฒด ์ƒ์„ฑ, StartResponseDto ๋ฐ˜ํ™˜
- ๊ธฐ๋ก ๋: EndRequestDto, ๊ธฐ๋ก ์ €์žฅ

[FEAT] JWTํ† ํฐ์œผ๋กœ ๋ณด์•ˆ ๊ฐ•ํ™”

- ์ œ๋ชฉ

JWTํ† ํฐ์œผ๋กœ ๋ณด์•ˆ ๊ฐ•ํ™”

- ๊ฐœ๋ฐœ ์˜๋„

ํ† ํฐ์„ ์ด์šฉํ•ด statelessํ•œ ์ƒํƒœ ์œ ์ง€

- ๊ธฐ๋Šฅ ๋ฆฌ์ŠคํŠธ

  • ํšŒ์› ๊ฐ€์ž…, ์žฌ ๋กœ๊ทธ์ธ์‹œ ํ† ํฐ ๋ฐœ๊ธ‰
  • ๋งค request๋งˆ๋‹ค ํ† ํฐ ๊ฒ€์ฆ
  • ๊ธฐ์กด ์œ ์ €๊ฐ€ ์ ‘์†์‹œ ์ž๋™ ๋กœ๊ทธ์ธ ๊ตฌํ˜„

- ๋น„๊ณ 

์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ์‚ฌ์šฉ

[FEAT] ์ฑŒ๋ฆฐ์ง€ ์ƒํƒœ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ ๊ตฌํ˜„

- ์ œ๋ชฉ

์ฑŒ๋ฆฐ์ง€ ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐ ์กฐํšŒ ๊ด€๋ จ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ

- ๊ฐœ๋ฐœ ์˜๋„

์ฑŒ๋ฆฐ์ง€๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด, ์ˆ˜๋ฝ/๊ฑฐ์ ˆ ์š”์ฒญ์„ ๋ฐ˜์˜ํ•˜๊ณ  ์ฑŒ๋ฆฐ์ง€ ์ง„ํ–‰ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •.

- ๊ธฐ๋Šฅ ๋ฆฌ์ŠคํŠธ

  • ๊ฐ ํšŒ์›์€ ์š”์ฒญ์— ๋”ฐ๋ผ ์ˆ˜๋ฝ/๊ฑฐ์ ˆํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„(Accept, Reject)
  • ์ฑŒ๋ฆฐ์ง€๋Š” ๊ฐ ์‹œ์ž‘์ผ์˜ ์ž์ •์— "Progress" ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ
  • ์ฑŒ๋ฆฐ์ง€๊ฐ€ ์‹œ์ž‘๋œ ์ดํ›„, ์ˆ˜๋ฝํ•œ ํšŒ์›์œผ๋กœ๋งŒ ์ฑŒ๋ฆฐ์ง€ ์ง„ํ–‰ (๋‚˜๋จธ์ง€ ์‚ญ์ œ)
  • ์ˆ˜๋ฝํ•œ ํšŒ์›์ด ์—†์œผ๋ฉด ์ฑŒ๋ฆฐ์ง€ ์‚ญ์ œ

- ๋น„๊ณ 

ํšŒ์›์ด ์ฑŒ๋ฆฐ์ง€๋ฅผ ์ˆ˜๋ฝํ•˜๋Š” ์ง€์˜ ์—ฌ๋ถ€๋Š” UserChallenge ํ…Œ์ด๋ธ”์—์„œ ๊ด€๋ฆฌํ•œ๋‹ค.
์ฑŒ๋ฆฐ์ง€ ์ž์ฒด๊ฐ€ ์ง„ํ–‰๋˜๋Š”์ง€์˜ ์—ฌ๋ถ€๋Š” Challenge ํ…Œ์ด๋ธ”์—์„œ ๊ด€๋ฆฌํ•œ๋‹ค.
๋‘ ํ…Œ์ด๋ธ” ๋ชจ๋‘ ์ƒํƒœ ๊ด€๋ฆฌ๋Š” ChallengeStatus๋กœ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•œ๋‹ค.(ENUM)

[BUG] ํ…Œ์ŠคํŠธ ๊ฐ„ ๋ฐœ๊ฒฌ๋œ ์—๋Ÿฌ ๋ฆฌ์ŠคํŠธ

- ๋ฐœ๊ฒฌ ๋‚ ์งœ

2022-08-25~2022-08-26

- ์ œ๋ชฉ

ํ…Œ์ŠคํŠธ ๊ฐ„ ๋ฐœ๊ฒฌ๋œ ์—๋Ÿฌ ๋ฆฌ์ŠคํŠธ

- ๊ฐœ๋ฐœ ์˜๋„

- ์˜์—ญ ๊ด€๋ จ๋œ ๋žญํ‚น ๊ณ„์‚ฐ
- ๊ฑธ์Œ์ˆ˜ ๋žญํ‚น ๊ด€๋ จ ์˜ค๋ฅ˜
- ํ”„๋กœํ•„ ์กฐํšŒ ์‹œ ๋ˆ„์  ์˜์—ญ ๊ณ„์‚ฐ

- ์‹ค์ œ ๊ฒฐ๊ณผ

๊ฑธ์Œ์ˆ˜ ๋žญํ‚น ์กฐํšŒ์‹œ OutOfBoundsException
Accumulate ํƒ€์ž… ์ฑŒ๋ฆฐ์ง€ ์ง„ํ–‰ ์‹œ ๋žญํ‚น ๊ณ„์‚ฐ์ด ์ž˜ ์•ˆ๋˜๋Š” ์ƒํ™ฉ 
๋ˆ„์  ์˜์—ญ ๊ณ„์‚ฐ ์‹œ ์˜ˆ์™ธ ๋ฐœ์ƒ
โ†’ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€? ๋กœ์ง์ด ์—๋Ÿฌ๊ฐ€ ์žˆ๋Š”์ง€?

- ๊ด€๋ จ๋œ ํŒŒ์ผ

  • ExerciseRecordRepository
  • UserServiceImpl.java
  • ExerciseRecordServiceImpl.java

[FEAT] ๋ฉ”์ธํ™”๋ฉด ํ•„ํ„ฐ ๊ตฌํ˜„, ์ฑŒ๋ฆฐ์ง€ ์กฐํšŒ ๊ธฐ๋Šฅ ์ˆ˜์ • ๋“ฑ

- ์ œ๋ชฉ

๋ฉ”์ธํ™”๋ฉด ํ•„ํ„ฐ ๊ตฌํ˜„, ์ฑŒ๋ฆฐ์ง€ ์กฐํšŒ ๊ธฐ๋Šฅ ์ˆ˜์ • ๋“ฑ

- ๊ฐœ๋ฐœ ์˜๋„

๋ฉ”์ธํ™”๋ฉด ํ•„ํ„ฐ ๊ตฌํ˜„
์ฑŒ๋ฆฐ์ง€ ์กฐํšŒํ•  ๋•Œ, ์ฑŒ๋ฆฐ์ง€ ์ข…๋ฅ˜์— ๋”ฐ๋ฅธ ๋žญํ‚น ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋„๋ก ์ˆ˜์ •

- ๊ธฐ๋Šฅ ๋ฆฌ์ŠคํŠธ

  • ๋ฉ”์ธ ํ™”๋ฉด ํ•„ํ„ฐ(๋‚˜์˜ ๊ธฐ๋ก ๋ณด๊ธฐ, ์นœ๊ตฌ ๋ณด๊ธฐ) ๊ตฌํ˜„
  • ์ฑŒ๋ฆฐ์ง€ ์ข…๋ฅ˜์— ๋”ฐ๋ฅธ ๋žญํ‚น ์ •๋ณด ์กฐํšŒ]
  • ํ•„ํ„ฐ ON/OFF ๊ธฐ๋Šฅ ๊ตฌํ˜„

- ๋น„๊ณ 

-

[CHORE] ์„ค์ • ํŒŒ์ผ ์ˆ˜์ •, CORS ์„ค์ • ์ถ”๊ฐ€

- ์ œ๋ชฉ

 ์„ค์ • ํŒŒ์ผ ์ˆ˜์ •, CORS ์„ค์ • ์ถ”๊ฐ€

- ๋ชฉ์ 

1. ๊ฐ์ž ํ™˜๊ฒฝ์ด ๋‹ค๋ฅด๋ฏ€๋กœ, application.yml์— DB์™€ ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ์ง์ ‘์ ์œผ๋กœ ๋„ฃ์ง€ ์•Š๊ธฐ ์œ„ํ•จ.
2. JavaScript๋กœ๋ถ€ํ„ฐ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ.

- ๋‚ด์šฉ

  • ์›ํ™œํ•œ ํ˜‘์—…์„ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ username๊ณผ password๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•˜์ง€ ์•Š๊ณ , ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์ฃผ์ž…
  • ํ”„๋ก ํŠธ์—”๋“œ์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•œ CORS ์„ค์ • ์ถ”๊ฐ€

[FEAT] ๋žญํ‚น ์ˆœ์œ„ ์ถ”๊ฐ€ ๋ฐ ๋งˆ์ด, ์นœ๊ตฌ ํŽ˜์ด์ง€ ๊ฐœ๋ฐœ

- ์ œ๋ชฉ

๋žญํ‚น ์ˆœ์œ„ ์ถ”๊ฐ€ ๋ฐ ๋งˆ์ดํŽ˜์ด์ง€ ๊ฐœ๋ฐœ

- ๊ฐœ๋ฐœ ์˜๋„

๋žญํ‚น ๋ฐ ์šด๋™ ๊ธฐ๋ก ๊ด€๋ฆฌ ๊ตฌ์ฒดํ™”

- ๊ธฐ๋Šฅ ๋ฆฌ์ŠคํŠธ

  • ๋žญํ‚น์— ์ˆœ์œ„ ์ถ”๊ฐ€
  • ๊ธฐ๋ก ์ค‘์ง€ api ๊ฐœ๋ฐœ
  • ์นœ๊ตฌ ํ”„๋กœํ•„ api ๊ฐœ๋ฐœ
  • ๋งˆ์ดํŽ˜์ด์ง€ api ๊ฐœ๋ฐœ

- ๋น„๊ณ 

1. ๋žญํ‚น์ด ๋™์ ์ผ ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ ๋กœ์ง
2. ๊ธฐ๋ก ๊ฒฐ๊ณผ์—์„œ ์นธ์„ ์–ด๋–ป๊ฒŒ ์ €์žฅํ•˜๋Š”์ง€๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๊ฐœ๋ฐœ ์ง„ํ–‰ ์˜ˆ์ • (์‚ฌ์ง„, ์ขŒํ‘œ)

[FEAT] ์ผ์ฃผ์ผ ์ฑŒ๋ฆฐ์ง€ ์ƒ์„ฑ ๊ธฐ๋Šฅ ๊ตฌํ˜„

- ์ œ๋ชฉ

์ผ์ฃผ์ผ ์ฑŒ๋ฆฐ์ง€ ์ƒ์„ฑ ๊ตฌํ˜„

- ๊ฐœ๋ฐœ ์˜๋„

์ผ์ฃผ์ผ ์ฑŒ๋ฆฐ์ง€ ๊ธฐ๋Šฅ ๊ตฌํ˜„(1) - ์ผ์ฃผ์ผ ์ฑŒ๋ฆฐ์ง€ ์ƒ์„ฑ

- ๊ธฐ๋Šฅ ๋ฆฌ์ŠคํŠธ

  • ์นœ๊ตฌ ๋ชฉ๋ก ์กฐํšŒ
  • ์ฑŒ๋ฆฐ์ง€ ์ƒ์„ฑ ๋ฐ ์ƒํƒœ ๊ด€๋ฆฌ

- ๋น„๊ณ 

1. ์ฑŒ๋ฆฐ์ง€ ์ƒ์„ฑ์„ ์œ„ํ•ด ์นœ๊ตฌ ๋ชฉ๋ก์„ ์กฐํšŒํ•œ๋‹ค. (ํ˜„์žฌ, ํšŒ์› ๊ด€๋ จ ๊ธฐ๋Šฅ์ด ์—†์œผ๋ฏ€๋กœ ์ž„์˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด ๊ตฌํ˜„ํ•œ๋‹ค.)
   ์นœ๊ตฌ ๋ชฉ๋ก์ด Response๋กœ ์ฃผ์–ด์ง€๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค.
2. ์ฑŒ๋ฆฐ์ง€์™€ ๊ด€๋ จ๋œ ์ •๋ณด์™€ ์ƒํƒœ๊ฐ€ DB์— ์ƒ์„ฑยท์ ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค.

[DOCS] ER ๋‹ค์ด์–ด๊ทธ๋žจ ์ž‘์„ฑ

- ์ œ๋ชฉ

ER ๋‹ค์ด์–ด๊ทธ๋žจ ์ž‘์„ฑ

- ๋ชฉ์ 

์›ํ™œํ•œ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์„ค๊ณ„

- ๊ธฐํ•œ

์ดˆ์•ˆ: ~2022-07-25

- ๋น„๊ณ 

  • ๊ฒฐ๊ณผ๋ฌผ: ER ๋‹ค์ด์–ด๊ทธ๋žจ
  • ์ž‘์„ฑ์ž: ๋ฐ•์ฐฌํ˜ธ, ๋ฐ•์„ธํ—Œ

[FEAT] ํšŒ์› ์—”ํ‹ฐํ‹ฐ ์ž‘์„ฑ

- ์ œ๋ชฉ

ํšŒ์› ์—”ํ‹ฐํ‹ฐ ์ž‘์„ฑ

- ๊ฐœ๋ฐœ ์˜๋„

๊ฐ์ž ์—ญํ• ์— ๋”ฐ๋ฅธ ๋ถ„์—…์— ์•ž์„œ ๊ณตํ†ต์œผ๋กœ ํ•„์š”ํ•œ ํšŒ์› ์—”ํ‹ฐํ‹ฐ ์ž‘์„ฑ

- ๊ธฐ๋Šฅ ๋ฆฌ์ŠคํŠธ

  • ํšŒ์› ์—”ํ‹ฐํ‹ฐ ์ž‘์„ฑ

- ๋น„๊ณ 

ํšŒ์› ์—”ํ‹ฐํ‹ฐ ์ž‘์„ฑ ํ›„, ๊ฐ ์—ญํ• ์— ๋”ฐ๋ฅธ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ ๋ฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์˜ˆ์ •
๋ฐ•์ฐฌํ˜ธ: ์ฑŒ๋ฆฐ์ง€
๋ฐ•์„ธํ—Œ: ๊ฐœ์ธ ์šด๋™ ๊ธฐ๋ก ๊ด€๋ฆฌ

[REFACTOR] ์นธ, ์˜์—ญ, ๋žญํ‚น ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง

- ์ œ๋ชฉ

์นธ, ์˜์—ญ, ๋žญํ‚น ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง

- ๊ฐœ๋ฐœ ์˜๋„

๊ฐ€๋…์„ฑ ํ–ฅ์ƒ ๋ฐ ๋” ํšจ์œจ ์ ์ธ ๋ฐฉ์•ˆ ๋ชจ์ƒ‰

- ๋ณ€๊ฒฝ ์ „

1. ์ž๋ฐ” ๋ฌธ๋ฒ• ์ŠคํŠธ๋ฆผ์„ ํ†ตํ•ด ์นธ์˜ ์ •๋ณด ์กฐํšŒ
2. equals, hashCode๋ฅผ ์นธ์˜ ์ค‘๋ณต ์ œ๊ฑฐ

- ๋ณ€๊ฒฝ ํ›„

1. Matrix Repository๋‹จ์—์„œ MatrixDto๋กœ ์ง์ ‘ ์กฐํšŒ
2. distinct๋ฅผ ํ†ตํ•ด์„œ ์ค‘๋ณต ์ œ๊ฑฐ

- ๊ด€๋ จ๋œ ํŒŒ์ผ

๋น„๊ณ 

  • ์นธ ๋žญํ‚น์€ ์ฟผ๋ฆฌ๋กœ ์กฐํšŒ ํ•˜์˜€์ง€๋งŒ ์˜์—ญ ๋žญํ‚น์€ ๋ถˆ๊ฐ€๋Šฅํ•˜์˜€์Œ
  • ์ฟผ๋ฆฌ๋กœ ์กฐํšŒํ•˜๋Š” ๋ฐฉ์‹์ด ์‹œ๊ฐ„์ด 2๋ฐฐ์ •๋„ ๋น ๋ฆ„

[FEAT] DTO ๋ฐ ์œ ์ € ์šด๋™ ๊ธฐ๋ก ๊ด€๋ฆฌ

- ์ œ๋ชฉ

ํ™ˆํ™”๋ฉด๊ณผ ๊ธฐ๋ก ์‹œ์ž‘-๋ ๊ตฌํ˜„

- ๊ฐœ๋ฐœ ์˜๋„

ํ™ˆํ™”๋ฉด ๋ฐ ๊ธฐ๋ก ์‹œ ํ†ต์‹  ๋ฐ์ดํ„ฐ ํŒŒ์•…

- ๊ธฐ๋Šฅ ๋ฆฌ์ŠคํŠธ

  • ํ™ˆํ™”๋ฉด DTO ๊ตฌ์„ฑ
  • ์šด๋™ ๊ธฐ๋ก DTO ๊ตฌ์„ฑ
  • ์œ ์ € ์šด๋™ ๊ธฐ๋ก ๋ฐ ๊ด€๋ฆฌ

- ๋น„๊ณ 

Dto๋ฅผ ๊ตฌ์„ฑํ•ด service๋‹จ์—์„œ ๋กœ์ง์„ ์ƒˆ๋กญ๊ฒŒ ์ž‘์„ฑ

[ADD] ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐ˜์˜

- ์ œ๋ชฉ

์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐ˜์˜

- ๊ฐœ๋ฐœ ์˜๋„

ํ”„๋กœ๊ทธ๋žจ ์™„์„ฑ๋„๋ฅผ ์œ„ํ•ด ๋ฏธ๋ค„๋†จ๋˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐ˜์˜

- ๋ณ€๊ฒฝ ์ „

Optional<> ~ .orElseThrow(); ์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ์—†์Œ.
์ฑŒ๋ฆฐ์ง€ 3๊ฐœ ์ด์ƒ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์™€ ๊ฐ™์€ ์œ ํšจํ•˜์ง€ ์•Š์€ ์š”์ฒญ์— ๋Œ€ํ•œ ๋Œ€์ฒ˜๊ฐ€ ๋ฏธํกํ•จ.

- ๋ณ€๊ฒฝ ํ›„

ControllerAdvice๋ฅผ ํ†ตํ•œ ์ „์—ญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐ ๊ฐ ์ƒํ™ฉ์— ๋Œ€ํ•œ ๋Œ€์ฒ˜.
Response ๋ฉ”์‹œ์ง€ ํ˜•์‹ ํ†ต์ผ

- ๊ด€๋ จ๋œ ํŒŒ์ผ

  • config/exception/*
  • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ Service๋‹จ ํŒŒ์ผ

[FEAT] MySQL Point ์ ์šฉ

- ์ œ๋ชฉ

MySQL Point ์ ์šฉ ๋ฐ ํŽ˜์ด์ง• ์ ์šฉ

- ๊ฐœ๋ฐœ ์˜๋„

๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ์ „๋‹ฌํ•˜๋ฉด์„œ ์ฆ๊ฐ€ํ•˜๋Š” ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰๊ณผ ํ”„๋ก ํŠธ์˜ ๋ถ€๋‹ด์„ ์ค„์ด๊ธฐ ์œ„ํ•œ ํŽ˜์ด์ง• ์ ์šฉ

- ๊ธฐ๋Šฅ ๋ฆฌ์ŠคํŠธ

  • ์œ„๋„, ๊ฒฝ๋„๋ฅผ Point๋ฅผ ์ ์šฉํ•ด ๊ด€๋ฆฌ(๋กœ์ง ์ˆ˜์ •)
  • Haversine์„ ์ ์šฉํ•œ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ ๋ฐ ๋ฐ์ดํ„ฐ ์ •์ œ

- ๋น„๊ณ 

์ถ”ํ›„ MVP2 ์ง„ํ–‰ ์ „ ๋ฆฌํŒฉํ† ๋ง ๊ณ ๋ ค ํ•„์š”

[FEAT] ๋ฉ”์ธํ™”๋ฉด ๋งˆ๋ฌด๋ฆฌ

- ์ œ๋ชฉ

๋ฉ”์ธ ํ™”๋ฉด ๋งˆ๋ฌด๋ฆฌ

- ๊ฐœ๋ฐœ ์˜๋„

API๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์ธํ™”๋ฉด ๋งˆ๋ฌด๋ฆฌ

- ๊ธฐ๋Šฅ ๋ฆฌ์ŠคํŠธ

  • ์ฑŒ๋ฆฐ์ง€ ๊ฐœ์ˆ˜ ๋ฐ˜ํ™˜
  • ์œ ์ € ๋งˆ์ง€๋ง‰ ์œ„์น˜ ๋ฐ˜ํ™˜

- ๋น„๊ณ 

๊ธฐ๋ก ์ข…๋ฃŒํ•  ๋•Œ ์œ ์ €์˜ ๋งˆ์ง€๋ง‰ ์œ„์น˜ ์ตœ์‹ ํ™” โ†’ ๋ฉ”์ธํ™”๋ฉด ์ ‘์† ์‹œ ์œ„์น˜ ๋ฐ˜ํ™˜

[FEAT] ์ฑŒ๋ฆฐ์ง€ ๋ฆฌ์ŠคํŠธ ๊ด€๋ จ ์กฐํšŒ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ

- ์ œ๋ชฉ

์ฑŒ๋ฆฐ์ง€ ๋ฆฌ์ŠคํŠธ ๊ด€๋ จ ์กฐํšŒ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ

- ๊ฐœ๋ฐœ ์˜๋„

์ฑŒ๋ฆฐ์ง€ ๋ชฉ๋ก ์กฐํšŒ์šฉ API ๊ฐœ๋ฐœ

- ๊ธฐ๋Šฅ ๋ฆฌ์ŠคํŠธ

  • ์ง„ํ–‰ ๋Œ€๊ธฐ์ค‘์ธ ์ฑŒ๋ฆฐ์ง€ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ
  • ์ง„ํ–‰ ์ค‘์ธ ์ฑŒ๋ฆฐ์ง€ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ
  • ์ง„ํ–‰ ์™„๋ฃŒ ์ƒํƒœ์˜ ์ฑŒ๋ฆฐ์ง€ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ
  • ์ดˆ๋Œ€ ๋ฐ›์€ ์ฑŒ๋ฆฐ์ง€ ๋ฆฌ์ŠคํŠธ ์กฐํšŒ

- ๋น„๊ณ 

์ง„ํ–‰ ๋Œ€๊ธฐ์ค‘: ์ฑŒ๋ฆฐ์ง€ ๊ธฐ๊ฐ„ ๋ฐ ํ˜„์žฌ ์ง„ํ–‰ ์ƒํ™ฉ ํฌํ•จ 
์ง„ํ–‰ ์ค‘: ํ˜„์žฌ ์ˆœ์œ„ ํฌํ•จ
์ง„ํ–‰ ์™„๋ฃŒ: ๊ธฐ๊ฐ„ ๋ฐ ์ˆœ์œ„๋ฅผ ํฌํ•จ

[FEAT] ์ฑŒ๋ฆฐ์ง€ ๊ด€๋ จ ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€

- ์ œ๋ชฉ

์ฑŒ๋ฆฐ์ง€ ๊ด€๋ จ ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€

- ๊ฐœ๋ฐœ ์˜๋„

๋ฉ”์ธํ™”๋ฉด์—์„œ ์‚ฌ์šฉํ•  ์ฑŒ๋ฆฐ์ง€ ๊ด€๋ จ ๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€

- ๊ธฐ๋Šฅ ๋ฆฌ์ŠคํŠธ

  • ์ฑŒ๋ฆฐ์ง€๋ฅผ ํ•˜๊ณ  ์žˆ์ง€ ์•Š์€ ์œ ์ € ์กฐํšŒ
  • ์ฑŒ๋ฆฐ์ง€ ์ง„ํ–‰ ์ค‘์ธ ์œ ์ € ์กฐํšŒ ๋ฐ ์ฑŒ๋ฆฐ์ง€ ์ƒ‰์ƒ ์กฐํšŒ

- ๋น„๊ณ 

๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ ํ•˜๊ธฐ ์œ„ํ•ด Service ๋‹จ์— ์ž‘์„ฑํ•จ.
์ถ”ํ›„, ํด๋ผ์ด์–ธํŠธ์—์„œ๋„ ํ•„์š” ์‹œ Controller์™€ ๋งคํ•‘ ์˜ˆ์ •

[FEAT] ํ•„์š”ํ•œ ์—”ํ‹ฐํ‹ฐ ์ƒ์„ฑ ๋ฐ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘

- ์ œ๋ชฉ

ํ•„์š”ํ•œ ์—”ํ‹ฐํ‹ฐ ์ƒ์„ฑ ๋ฐ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘

- ๊ฐœ๋ฐœ ์˜๋„

์„ค๊ณ„๋œ ER-Model์— ๋”ฐ๋ฅธ ์—”ํ‹ฐํ‹ฐ ์ƒ์„ฑ ๋ฐ ์—ฐ๊ด€ ๊ด€๊ณ„ ๋งคํ•‘

- ์—”ํ‹ฐํ‹ฐ ๋ฆฌ์ŠคํŠธ

  • ์šด๋™ ๊ธฐ๋ก
  • ์˜์—ญ
  • ์ฑŒ๋ฆฐ์ง€ ์ •๋ณด
  • ํšŒ์›-์ฑŒ๋ฆฐ์ง€
  • ํšŒ์›-์นœ๊ตฌ๊ด€๊ณ„

- ๋น„๊ณ 

ํšŒ์›๊ณผ ์ฑŒ๋ฆฐ์ง€๋Š” N:M ๊ด€๊ณ„์ด๋ฏ€๋กœ, ์ด๋ฅผ 1:N, M:1๋กœ ํ’€์–ด์„œ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๋งคํ•‘ํ•œ๋‹ค.
ํšŒ์›(N) : ์ฑŒ๋ฆฐ์ง€(M) โ†’ ํšŒ์›(1) : ํšŒ์›-์ฑŒ๋ฆฐ์ง€(N) | ํšŒ์› -์ฑŒ๋ฆฐ์ง€(N) : ์ฑŒ๋ฆฐ์ง€(1)

ํšŒ์›(1) : ์šด๋™๊ธฐ๋ก(N)
์šด๋™๊ธฐ๋ก(1) : ์˜์—ญ(N)

์ฑŒ๋ฆฐ์ง€ ์ง„ํ–‰ ์ค‘์— ์ƒ์„ฑ๋œ ์˜์—ญ์€ ์˜์—ญ ํ…Œ์ด๋ธ”์—์„œ ๊ด€๋ฆฌํ•˜๊ณ , ์ฑŒ๋ฆฐ์ง€ ์ •๋ณด์—์„œ ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ์กฐ์ธํ•ด์„œ ์กฐํšŒํ•œ๋‹ค.

[CHORE] Logger, Swagger ์„ค์ • ์ถ”๊ฐ€

- ์ œ๋ชฉ

 Logger, Swagger ์„ค์ • ์ถ”๊ฐ€

- ๋ชฉ์ 

Logger: ๋กœ๊ทธ๋ฅผ ํŒŒ์ผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ Logger์™€ ๊ด€๋ จ๋œ ์„ค์ • ์ถ”๊ฐ€
Swagger: API ๋ฌธ์„œ ์ž๋™ํ™”๋ฅผ ์œ„ํ•œ Swagger์™€ ๊ด€๋ จ๋œ ์„ค์ • ์ถ”๊ฐ€

- ๋‚ด์šฉ

  • Swagger ์‚ฌ์šฉ์„ ์œ„ํ•ด, Springfox 3.0 ๋ฒ„์ „ ์ข…์†์„ฑ ์ถ”๊ฐ€
  • Log4j2 ์ข…์†์„ฑ ์ถ”๊ฐ€ ๋ฐ ๊ธฐ์กด Logback ์ข…์†์„ฑ ์ œ๊ฑฐ

[FEAT] ํ”„๋กœํ•„ ์‚ฌ์ง„ ๊ด€๋ จ ๊ธฐ๋Šฅ ๊ตฌํ˜„

- ์ œ๋ชฉ

ํ”„๋กœํ•„ ์‚ฌ์ง„ ๊ด€๋ จ ๊ธฐ๋Šฅ ๊ตฌํ˜„

- ๊ฐœ๋ฐœ ์˜๋„

์ตœ์ข… ๋ฐœํ‘œ ์ „๊นŒ์ง€ ํšŒ์›์˜ ํ”„๋กœํ•„ ์‚ฌ์ง„์„ ๋„์šฐ๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ ๊ตฌํ˜„

- ๊ธฐ๋Šฅ ๋ฆฌ์ŠคํŠธ

  • ํšŒ์› ์—”ํ‹ฐํ‹ฐ์— ํ”„๋กœํ•„ ์‚ฌ์ง„๊ณผ ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ ๊ตฌํ˜„
  • ํ”„๋กœํ•„ ์‚ฌ์ง„์ด ํ•„์š”ํ•œ ๊ธฐ์กด ๊ธฐ๋Šฅ ์ˆ˜์ •

- ๋น„๊ณ 

S3๋ฅผ ํ™œ์šฉํ•ด์„œ ํŒŒ์ผ ์—…๋กœ๋“œ
๊ธฐ์กด ๊ธฐ๋Šฅ ์ค‘, ํ”„๋กœํ•„ ์‚ฌ์ง„์ด ํ•„์š”ํ•œ ๊ณณ์—๋Š” ๋‹ค ์ถ”๊ฐ€ํ•ด์•ผ ํ•จ.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.