Skip to content

kusitms-com/29th_Meetup_TeamC_Flipit_Front

Folders and files

NameName
Last commit message
Last commit date

Latest commit

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

Repository files navigation

๐ŸŒŸ flip-it (ํ”Œ๋ฆฌ๋น—): flipit.co.kr

Untitled

๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ R&R

๋ถ„์•ผ ์ด๋ฆ„ ํฌ์ง€์…˜
๊ธฐํš ๋ฐ•๊ฐ€์€ PM, ์„œ๋น„์Šค ๊ธฐํš, ์™€์ด์–ดํ”„๋ ˆ์ž„ ์„ค๊ณ„, ์„ธ๋ถ€ ๊ธฐ๋Šฅ ๊ธฐํš, ์œ ์ € ๋ฆฌ์„œ์น˜
๊ธฐํš ๋ฐฐ์Šน์šฐ ์„œ๋น„์Šค ๊ธฐํš, ์„ธ๋ถ€ ๊ธฐ๋Šฅ ๊ธฐํš, ๋น„์ฆˆ๋‹ˆ์Šค ๋ชจ๋ธ ์„ค๊ณ„, ์ •์ฑ… ์ž‘์„ฑ
๊ธฐํš ์œ ์ž์ธ ์„œ๋น„์Šค ๊ธฐํš, ์„ธ๋ถ€ ๊ธฐ๋Šฅ ๊ธฐํš, ๋ฐ์Šคํฌ ๋ฆฌ์„œ์น˜, ๋ณด๊ณ ์„œ ์ž‘์„ฑ
๋””์ž์ธ ๊ถŒ์˜ˆ์ธ ๋””์ž์ธ ๋ฆฌ๋“œ, ๋””์ž์ธ ์‹œ์Šคํ…œ ๊ตฌ์ถ•, GUI
๋””์ž์ธ ๊น€์Šน์€ ๋กœ๊ณ  ์ œ์ž‘, GUI
ํ”„๋ก ํŠธ์—”๋“œ ํ™ฉ์ฃผํฌ ํ”„๋ก ํŠธ์—”๋“œ ๋ฆฌ๋“œ, GUI ๊ตฌํ˜„, API ์—ฐ๋™
ํ”„๋ก ํŠธ์—”๋“œ ๋ฐ•์ค€ํ˜• GUI ๊ตฌํ˜„, API ์—ฐ๋™
๋ฐฑ์—”๋“œ ๊น€์˜ˆ์ฐฌ ๋ฐฑ์—”๋“œ ๋ฆฌ๋“œ, ERD ์ž‘์„ฑ, ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ ๊ตฌ์ถ•, ์„œ๋ฒ„ ๊ฐœ๋ฐœ
๋ฐฑ์—”๋“œ ์žฅ์ง€ํšจ ERD ์ž‘์„ฑ, ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ ๊ตฌ์ถ•, ์„œ๋ฒ„ ๊ฐœ๋ฐœ



์„œ๋น„์Šค ๊ฐœ์š”

ํ”Œ๋ฆฌ๋น—์€ ์‚ฌ์šฉ์ž๋“ค์ด ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€์„ ํ†ตํ•ด ์„œ๋กœ์˜ ์ทจํ–ฅ๊ณผ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๊ณต์œ ํ•˜๋ฉฐ ๊นŠ์ด ์žˆ๋Š” ์†Œํ†ต์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” Q&A ํ”Œ๋žซํผ์ด๋‹ค. ์ด ์„œ๋น„์Šค๋Š” ์งˆ๋ฌธํ•˜๊ธฐ, ๋‹ต๋ณ€ํ•˜๊ธฐ, ์•„์ด๋ดํ‹ฐํ‹ฐ ์นดํ…Œ๊ณ ๋ผ์ด์ง•, ๊ทธ๋ฆฌ๊ณ  ํŠน๋ณ„ํ•œ ํ”ผ๋“œ๋ฐฑ ๊ธฐ๋Šฅ์ธ 'ํ†ตํ–ˆ๋‹น'์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์ด‰์ง„ํ•˜๊ณ , ๊ฐœ์ธ์˜ ์•„์ด๋ดํ‹ฐํ‹ฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘๊ณ  ์žˆ๋‹ค.

[์งˆ๋ฌธํ•˜๊ธฐ] ์‚ฌ์šฉ์ž๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ทจํ–ฅ์ด๋‚˜ ๊ด€์‹ฌ์‚ฌ์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•œ ์ ์„ ์งˆ๋ฌธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋‹จ์ˆœํ™”๋œ ์†Œํ†ต ์‹œ๋„์™€ ํฅ๋ฏธ๋กœ์šด ์†Œํ†ต ์ฃผ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•œ๋‹ค.

[๋‹ต๋ณ€ํ•˜๊ธฐ] ์‚ฌ์šฉ์ž๋Š” ์‚ฌ์ง„, ํ…์ŠคํŠธ ์„ค๋ช…, ์Œ์•… ๋ฏธ๋ฆฌ๋“ฃ๊ธฐ, ๋งํฌ ๋“ฑ์„ ์ฒจ๋ถ€ํ•˜์—ฌ ์ž์‹ ์˜ ๋‹ต๋ณ€์„ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ž์‹ ์˜ ์•„์ด๋ดํ‹ฐํ‹ฐ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๋“œ๋Ÿฌ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

[์•„์ด๋ดํ‹ฐํ‹ฐ ์นดํ…Œ๊ณ ๋ผ์ด์ง•] ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์˜ ์•„์ด๋ดํ‹ฐํ‹ฐ์™€ ๊ด€์‹ฌ์‚ฌ๋ฅผ ์ง์ ‘ ๋ถ„๋ฅ˜ํ•˜์—ฌ ๊ทธ๋ฃน์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์ •๋ณด๋ฅผ ๊ฐ€์‹œ์ ์œผ๋กœ ์ œ๊ณตํ•˜๊ณ , ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ์ •๋ฆฌํ•˜๋Š” ํ”ผ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค€๋‹ค.

[ํ”ผ๋“œ๋ฐฑ ๊ธฐ๋Šฅ ('ํ†ตํ–ˆ๋‹น')] ์ผ๋ฐ˜์ ์ธ ์ข‹์•„์š” ๊ธฐ๋Šฅ์— ๋”ํ•ด, 'ํ†ตํ–ˆ๋‹น' ๊ธฐ๋Šฅ์€ ๊ณ„์ •์ฃผ์™€ ๋ฐฉ๋ฌธ์ž๊ฐ€ ์„œ๋กœ์— ๋Œ€ํ•œ ๊ธ์ •์ ์ธ ๋ฐ˜์‘์„ ์ง์ ‘์ ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ๋•๋Š”๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์–‘๋ฐฉํ–ฅ ์†Œํ†ต์˜ ๋งŒ์กฑ๋„๋ฅผ ๋†’์ธ๋‹ค.


๐Ÿ’ก ์„œ๋น„์Šค ์ฐจ๋ณ„์„ฑ

ํ”Œ๋ฆฌ๋น—(Flipit)์€ Q&A๋ฅผ ํ†ตํ•ด ๋Šฅ๋™์ ์ด๊ณ ๋„ ์ƒํ˜ธ์ ์ธ ์†Œํ†ต์„ ๋•๋Š”๋‹ค. ๋™์‹œ์— ์ต๋ช…์„ฑ ๋ณด์žฅ, ๋งํฌ ๊ธฐ๋ฐ˜ ์ ‘์†, ์งˆ๋ฌธ์„ ์œ ๋„ํ•˜๋Š” UX ๋ผ์ดํŒ…์„ ์žฅ์น˜๋กœ ํ•˜์—ฌ ์†Œํ†ต ์‹œ๋„์— ์žˆ์–ด ๋ถ€๋‹ด๊ฐ์ด ์ ๊ณ , ์†Œํ†ตํ•  ๋ฌผ๊ผฌ๋ฅผ ํ‹€์–ด์ฃผ๋Š” ํšจ์šฉ์  ๊ฐ€์น˜๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

  • ๊ฒฝ์Ÿ ์„œ๋น„์Šค์ธ ์ธ์Šคํƒ€๊ทธ๋žจ ์Šคํ† ๋ฆฌ, ๋‹ต์žฅ, ์ข‹์•„์š”์— ๋น„ํ•˜์—ฌ ์ƒํ˜ธ ์†Œํ†ต ๋ฐฉ์‹์„ ์ฑ„ํƒ

  • ๋‹จ์ˆœ Q&A๊ฐ€ ์•„๋‹Œ, ์„œ๋กœ์˜ ์ทจํ–ฅ์— ๋Œ€ํ•ด ์•Œ์•„๊ฐ€๋ณด์ž๋Š” ์ทจ์ง€๋กœ ์ข์€ ์งˆ๋ฌธ ๋ฒ”์œ„ ์„ค์ •

  • ์ƒ๋Œ€๋ฐฉ์˜ ์นดํ…Œ๊ณ ๋ผ์ด์ง•๋œ ์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ ์†Œํ†ต์˜ ์šฉ์ด์„ฑ ์ฆ๋Œ€: ์„œ๋กœ์˜ ์ทจํ–ฅ๊ณผ ๊ด€๋ จ๋œ ์ฃผ์ œ์— ๋”์šฑ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ, ์„œ๋กœ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ด์šฉ์„ ์‰ฝ๊ฒŒ ์ฐพ๊ณ  ๊ต๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝํ—˜ ์ œ๊ณต

  • ๋‹ค์–‘ํ•œ ํ™œ์šฉ ๋ฒ”์œ„

    Untitled (1)


๐Ÿง ๋ชฉํ‘œ ์‚ฌ์šฉ์ž

์ธ์Šคํƒ€๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ ์ค‘์—์„œ ๋ฌธ์ œ์™€ ๋‹ˆ์ฆˆ์— ๋”ฐ๋ผ ๋ชฉํ‘œ ์‚ฌ์šฉ์ž๋ฅผ ๋‘๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜ํ–ˆ๋‹ค.

  1. ์ƒ๋Œ€๋ฐฉ์„ ์•Œ์•„๊ฐ€๊ณ ์ž ํ•˜๋Š” ์‚ฌ๋žŒ ๋ฌธ์ œ&๋‹ˆ์ฆˆ
  • ์ธ์Šคํƒ€๊ทธ๋žจ ์Šคํ† ๋ฆฌ์˜ ์†Œํ†ต ๊ธฐ๋Šฅ์˜ ํ•œ๊ณ„๋กœ ์†Œ์žฌ ํƒ์ƒ‰์˜ ์–ด๋ ค์›€์„ ๊ฒฝํ—˜ํ•จ.
  • ์†Œํ†ต์‹œ๋„์— ๋ถ€๋‹ด๊ฐ์„ ๋Š๋‚Œ
  • ๋ถˆํŠน์ • ํƒ€์ธ์˜ ํ”ผ๋“œ ์ ‘์†์„ ํ†ตํ•œ ๊ฐœ์ธ ์ •๋ณด ๋…ธ์ถœ์— ๋Œ€ํ•ด ์šฐ๋ ค๋ฅผ ํ‘œํ•จ.
  1. ์ž๊ธฐ ํ‘œํ˜„์„ ์›ํ•˜๋Š” ์‚ฌ๋žŒ ๋ฌธ์ œ&๋‹ˆ์ฆˆ
  • ์ž๊ธฐ ์ทจํ–ฅ์˜ ๋” ์ž์œ ๋กœ์šด ํ‘œํ˜„์„ ์›ํ•จ.
  • ํ”ผ๋“œ ๊ณต๊ฐœ๋ฒ”์œ„๋ฅผ ์„ ํƒ์ ์œผ๋กœ ์„ค์ •ํ•˜๊ณ ์ž ํ•จ.
  • ์–‘๋ฐฉํ–ฅ์  ์†Œํ†ต์„ ์›ํ•จ

ํ”Œ๋ฆฌ๋น—์€ ์ƒ๋Œ€๋ฐฉ์„ ๋” ์ž˜ ์•Œ์•„๊ฐ€๊ณ ์ž ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ์‰ฝ๊ณ  ํŽธํ•œ ์†Œํ†ต์˜ ์ฐฝ๊ตฌ๋ฅผ, ์ž๊ธฐ ํ‘œํ˜„์„ ์›ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ์ž์‹ ์˜ ์•„์ด๋ดํ‹ฐํ‹ฐ์™€ ์ทจํ–ฅ์„ ์ž์œ ๋กญ๊ฒŒ ํ‘œํ˜„ํ•˜๊ณ  ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์„ ์ œ๊ณต.



๊ฐœ๋ฐœ ํŒŒํŠธ

๐Ÿ”ย System Architecture

์Šคํฌ๋ฆฐ์ƒท 2024-05-17 013524



๐Ÿ“œย ERD ์„ค๊ณ„๋„

์Šคํฌ๋ฆฐ์ƒท 2024-05-22 010108


๐Ÿ’ป Technology

๐Ÿ–ฅ๏ธย Frontend



๐Ÿ“€ Backend

Spring Boot Spring Security JPA Gradle JWT OAuth2 Thymeleaf MySQL

๐Ÿ’ป Infra

Server Load Balancer Certificate Manager DNS VPC Auto Scaling Object Storage Naver Clova Firebase Nat Gateway

๐Ÿš€ CI/CD

GitHub Action Source Deploy Naver Agent Object Storage

๐Ÿค๐Ÿป Co-working Tool



๊ธฐ์ˆ  ์Šคํƒ ์„ ์ • ์ด์œ 

๐Ÿ“˜ย Frontend

React

  • ๋น ๋ฅธ ์—…๋ฐ์ดํŠธ, ๋น ๋ฅธ ๋ Œ๋”๋ง
    • Virtual DOM์„ ํ†ตํ•ด ๋น ๋ฅธ ์—…๋ฐ์ดํŠธ, ๋ Œ๋”๋ง์„ ์ œ๊ณตํ•˜์—ฌ ์„ฑ๋Šฅ ์ตœ์ ํ™”
  • ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ โ†‘
    • ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์–ด ์žฌ์‚ฌ์šฉ, ์œ ์ง€๋ณด์ˆ˜์— ์šฉ์ด
  • ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ™œ๋ฐœํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ
    • ์‚ฌ์šฉ๋Ÿ‰์ด ๋งŽ์€ ๋งŒํผ, ๋‹ค์–‘ํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋งŽ์€ ์†”๋ฃจ์…˜์ด ์กด์žฌ
  • ํฌ๋กœ์Šค ํ”Œ๋žซํผ(react-native) ์•ฑ์œผ๋กœ์˜ ํ™•์žฅ ๊ฐ€๋Šฅ์„ฑ

Vite

  • ๋น ๋ฅธ ๋กœ์ปฌ ์„œ๋ฒ„ ๊ตฌ๋™
    • esbuild๋กœย ๋ฏธ๋ฆฌ ๋ฒˆ๋“ค๋งํ•œ ๋ชจ๋“ˆ์„ ํ•„์š”ํ•  ๋•Œ ๊ฐ€์ ธ์™€ ์ฆ‰๊ฐ์ ์œผ๋กœ ์„œ๋ฒ„ ๊ตฌ๋™
    • HMR์„ ์ง€์›ํ•˜์—ฌ ์ˆ˜์ •๋œ ๋ชจ๋“ˆ๋งŒ์„ ๊ต์ฒด
  • ๋น ๋ฅธ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ
    • ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ๋ชจ๋“  ์ข…์† ๋ชจ๋“ˆ์„ ์ „์—ญ ๋ฒ”์œ„๋กœ ์„ ์–ธํ•˜์—ฌ ๊ฒฐํ•ฉ. ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๊ฒŒ ๋นŒ๋“œ ๊ฐ€๋Šฅ

TypeScript

  • ๋†’์€ ์ƒ์‚ฐ์„ฑ
    • ์ž‘์—…๊ณผ ๋™์‹œ์— ๋””๋ฒ„๊น…์ด ๊ฐ€๋Šฅํ•ด ์—๋Ÿฌ ์‚ฌ์ „ ๋ฐฉ์ง€
    • ๊ฐ์ฒด ์•ˆ์˜ ํ•„๋“œ๊ฐ’์„ ๋‹ค ๊ธฐ์–ตํ•  ํ•„์š”์—†์ด IDE๊ฐ€ ์ž๋™์œผ๋กœ ๋ฆฌ์ŠคํŠธ์—… ํ•ด์ฃผ์–ด ํŽธ๋ฆฌ

Recoil + Axios

  • ์ƒํƒœ๊ด€๋ฆฌ์˜ ํŽธ๋ฆฌํ•จ
    • atom์˜ ์ƒํƒœ๋ฅผ ๊ตฌ๋…, ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋งŒ์œผ๋กœ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ

StyledComponents

  • ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ CSS ์ž‘์„ฑ์˜ ํŽธ๋ฆฌํ•จ
    • jsx ๋‚ด์— css๋ฅผ ์ ์šฉํ•  ๋•Œ ์นด๋ฉœ์ผ€์ด์Šค๋กœ ์ž‘์„ฑํ•ด์•ผํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€ ์—†์ด css ๋ฌธ๋ฒ• ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์ง๊ด€์ ์ธ CSS
    • props๋‚˜ ์ „์—ญ ์†์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปดํฌ๋„ŒํŠธ์— ์Šคํƒ€์ผ ์†์„ฑ์„ ๋ถ€์—ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ 
    • ํƒœ๊ทธ์— ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•˜์—ฌ ์ง๊ด€์ ์œผ๋กœ, ์–ด๋–ค ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๋Š”์ง€ ํŒŒ์•… ๊ฐ€๋Šฅ

FramerMotion

  • ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜, ์ œ์Šค์ณ
    • animate props๋ฅผ ํ†ตํ•ด CSS transitions๋ฅผ ์ž๋™ ์ƒ์„ฑํ•ด์ฃผ์–ด ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ ๊ฐ€๋Šฅ

PWA

  • ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ ์ˆ˜์ค€์˜ ๋ชจ๋ฐ”์ผ ์นœํ™”์  ์›น ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ



๐Ÿ“€ Back-end

Spring Boot

โ€ข Java ๊ธฐ๋ฐ˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋น ๋ฅด๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ
โ€ข ์ž๋™ ์„ค์ •, ์Šคํƒ€ํ„ฐ ํŒจํ‚ค์ง€, ๋‚ด์žฅ ์„œ๋ฒ„ ๋“ฑ์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ธํ”„๋ผ์— ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘๊ฐ€๋Šฅ
โ€ข ํŒ€์› ๊ธฐ์ˆ  ์Šคํƒ์— ๋งž๋Š” Java ๊ธฐ๋ฐ˜์˜ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ์œ„ํ•ด ์‚ฌ์šฉ

Spring Security

โ€ข ์ธ์ฆ๊ณผ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์œ„ํ•œ ํฌ๊ด„์ ์ธ ๋ณด์•ˆ ํ”„๋ ˆ์ž„์›Œํฌ
โ€ข JWT ๊ธฐ๋ฐ˜์˜ ์ธ์ฆ ๋ฐ ์ธ๊ฐ€๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ์œ„ํ•ด ์‚ฌ์šฉ
โ€ข ์ถ”ํ›„, ์ธ์ฆ ๋ฐ ์ธ๊ฐ€์˜ ํ™•์žฅ์˜ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, interceptor ๋Œ€์‹  Spring Security ์‚ฌ์šฉ

JPA

โ€ข Java ORM ๊ธฐ์ˆ ๋กœ, MYSQL์„ ์ž๋ฐ”์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

Gradle

โ€ข ๋นŒ๋“œ ๋ฐ ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋„๊ตฌ๋กœ, Maven๊ณผ ๋น„๊ตํ•˜์—ฌ ๋” ์œ ์—ฐํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณต

Swagger

โ€ข API ๋ฌธ์„œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ , API ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค

JWT

โ€ข ์‚ฌ์šฉ์ž ์ธ์ฆ์— ์‚ฌ์šฉ๋˜๋Š” ํ† ํฐ ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ๋กœ, ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ์•ˆ์ „ํ•œ ์ •๋ณด ๊ตํ™˜์„ ๊ฐ€๋Šฅ
โ€ข ์„œ๋ฒ„ Scale-out์‹œ์—, Session ๋ฐฉ์‹์— ๋น„ํ•ด ํ™•์žฅ์„ฑ์ด ์ข‹์•„ JWT ๋ฐฉ์‹์œผ๋กœ ์ธ์ฆ ๋ฐ ์ธ๊ฐ€ ๊ตฌํ˜„

OAuth2

โ€ข ์™ธ๋ถ€ ์ œ๊ณต์ž๋ฅผ ํ†ตํ•œ ์ธ์ฆ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ
โ€ข ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ํŽธ์˜์„ฑ ๋ฐ ๋†’์€ ์ ‘๊ทผ์„ฑ์„ ์œ„ํ•ด Kakao๋ฅผ ์‚ฌ์šฉ



๐Ÿ’ป Infra

Server

โ€ข ๋„ค์ด๋ฒ„ ํด๋ผ์šฐ๋“œ์—์„œ ์ œ๊ณตํ•˜๋Š” ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ… ์„œ๋น„์Šค
โ€ข ์„œ๋ฒ„๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
โ€ข Private Subnet์— ์‹ค์„œ๋ฒ„ ๊ตฌ์ถ• ๋ฐ Public Subnet์— Test Server ๊ตฌ์ถ•
โ€ข Test Server๋ฅผ ํ†ตํ•ด ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ๊ตฌ์ถ• ๋ฐ Bastion Host ๊ธฐ๋Šฅ ์ˆ˜ํ–‰

Load Balancer

โ€ข HTTP ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด Network 7๊ณ„์ธต์˜ Application Load Balancer ์‚ฌ์šฉ
โ€ข AutoScaling ์—ฐ๊ฒฐ๋กœ ์ธํ•œ ํ™•์žฅ์„ฑ ์ฆ๊ฐ€
โ€ข ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐ ์‹œํ‚ค๋ฏ€๋กœ, ์‹œ์Šคํ…œ ๊ฐ€์šฉ์„ฑ ์ฆ๊ฐ€

Certificate Manager

โ€ข SSL ์ธ์ฆ์„œ ๋ฐœ๊ธ‰ ๋ฐ›๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
โ€ข Load Balancer์— ์—ฐ๋™ํ•˜์—ฌ HTTPS ํ”„๋กœํ† ์ฝœ ์ ์šฉ

Global DNS

โ€ข Load Balancer ๋ฐ Front ๋ฐฐํฌ ์„œ๋ฒ„์— Domain ์ด๋ฆ„์„ ์ ์šฉ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
โ€ข DNSSEC์„ ์ ์šฉํ•˜์—ฌ ๋ณด์•ˆ๊ฐ•ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

Auto Scaling

โ€ข ํŠธ๋ž˜ํ”ฝ์˜ ๋ณ€ํ™”์— ์„œ๋ฒ„๋ฅผ ํƒ„๋ ฅ์ ์œผ๋กœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
โ€ข ์„œ๋ฒ„ scale-out ๋ฐ scale-in ์ž๋™ํ™”
โ€ข Launch Configuration์„ ์„œ๋ฒ„ ํ™˜๊ฒฝ์„ค์ • ๊ฐ„์†Œํ™”
โ€ข Load Balancer ์—ฐ๋™์„ ํ†ตํ•œ ํšจ๊ณผ์ ์ธ ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ

VPC

โ€ข ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์„ค ๋„คํŠธ์›Œํฌ๋ง์„ ๊ตฌ์ถ•ํ•ด ์•ˆ์ •์„ฑ ํ™•๋ณด
โ€ข ACG ๋ฐ Network ACL ์ด์ค‘ ๋ฐฉํ™”๋ฒฝ์„ ํ†ตํ•œ ๋ณด์•ˆ ๊ฐ•ํ™”
โ€ข ๊ณต์ธ IP ๋ฐœ๊ธ‰์„ ์ค„์—ฌ, ๋น„์šฉ ๊ฐ์†Œ
โ€ข ๋‚ด๋ถ€์— Subnet์„ ๋‚˜๋ˆ  ํšจ์œจ์ ์ธ ์ธํ”„๋ผ ๊ณต๊ฐ„ ๋ถ„๋ฆฌ
โ€ข Public Subnet์—” Load Balancer, Private Subnet์— ์„œ๋ฒ„ ๋ฐ DB๋ฅผ ๊ตฌ์ถ•ํ•จ์œผ๋กœ์จ, ์™ธ๋ถ€ ์นจ์ž… ๋ฐฉ์–ด

Nat GateWay

โ€ข VPC ๋‚ด๋ถ€ Private Subnet์˜ ์„œ๋ฒ„๊ฐ€ ํ•˜๋‚˜์˜ ๊ณต์ธ IP๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์™ธ๋ถ€ ์ธํ„ฐ๋„ท๊ณผ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” Gateway
โ€ข ์Šคํ”„๋ง ์„œ๋ฒ„๋‚ด์—์„œ ๋ฐœ์ƒํ•˜๋Š” API ํ˜ธ์ถœํ•  ๋•Œ ํ•„์š”
โ€ข ์™ธ๋ถ€์—์„  ํŠธ๋ž˜ํ”ฝ์ด ๋“ค์–ด์˜ฌ ์ˆ˜ ์—†์–ด ๋ณด์•ˆ ๊ฐ•ํ™”

Object Storage

โ€ข ์‚ฌ์šฉ์ž ํ”ผ๋“œ์˜ ์‚ฌ์ง„ ๋ฐ ํŒŒ์ผ์ด ์ €์žฅ๋˜๋Š” ์ €์žฅ์†Œ
โ€ข AWS S3์™€ ์—ฐ๋™๋˜์–ด ๋†’์€ ํ˜ธํ™˜์„ฑ
โ€ข ๊ณ ๊ฐ€์šฉ์„ฑ์œผ๋กœ ์ธํ•œ ์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ ํ™•๋ณด

FireBase

โ€ข ์‚ฌ์šฉ์ž์—๊ฒŒ ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ 
โ€ข FCM์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ํ‘ธ์‹œ ๋ฉ”์„ธ์ง€ ์ „์†ก๊ฐ€๋Šฅ

MySQL

โ€ข ์„œ๋ฒ„์™€ ์—ฐ๊ฒฐ๋˜๋Š” ๋ฉ”์ธ DB



๐Ÿš€ CI/CD

GitHub Action

โ€ข Github์™€ ์—ฐ๋™ํ•ด CI-CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•
โ€ข main -> ์‹ค์„œ๋ฒ„ ๋ฐฐํฌ CI-CD
โ€ข develop -> ํ…Œ์ŠคํŠธ์„œ๋ฒ„ ๋ฐฐํฌ CI-CD
โ€ข ๊ทธ ์™ธ -> Commit & PR์‹œ, ์ž๋™ ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ ์ง„ํ–‰

Object Storage

โ€ข CI ์ง„ํ–‰ ํ›„, Jar ํŒŒ์ผ์„ ์••์ถ•์‹œ์ผœ Object Storage์— ์ €์žฅ
โ€ข ํŒŒ์ผ์„ ๋ฒ„์ „๋ณ„๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์–ด, ์‰ฝ๊ฒŒ Rollback ๊ฐ€๋Šฅ
โ€ข AWS S3 CLI์™€ ์—ฐ๋™๋˜์–ด, ๊ฐ„ํŽธํ•˜๊ฒŒ ํŒŒ์ผ ์ €์žฅ ๊ฐ€๋Šฅ

Source Deploy

โ€ข Object Storage์˜ ํŒŒ์ผ์„ ๊ธฐ๋ฐ˜์œผ๋กœ AutoScaling CD ์ง„ํ–‰
โ€ข ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด Spring ์„œ๋ฒ„ ์‹คํ–‰
โ€ข Auto Scaling Group๋ณ„๋กœ ๋ธ”๋ฃจ/๊ทธ๋ฆฐ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ
โ€ข GitHub Action์—์„œ naver signiture v2 ๋ฐฉ์‹์œผ๋กœ API ํ˜ธ์ถœ๊ฐ€๋Šฅ

Naver Agent

โ€ข Source Deploy๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ผญ ํ•„์š”ํ•œ ํ”„๋กœ๊ทธ๋žจ
โ€ข Server์— ์ž๋™ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ ์šฉํ•˜์—ฌ ์ž๋™ ์„ค์น˜



๐Ÿ”–ย Naming Rules

๐Ÿ–ฅ๏ธย Frontend

  • Folder: kebab-case
  • File: PascalCase
  • Component: PascalCase
  • Constant: SNAKE_CASE
  • Variable: camelCase
  • State(atom, recoil): camelCaseState
  • Interface
    • props: PascalCaseProps
    • api response: PascalCaseProps

๐Ÿ–ฅ๏ธ Backend

  • Package : lowercase
  • Class : PascalCase
  • Constant : UPPERCASE
  • Method : camelCase
  • Variables : camelCase



๐Ÿ—‚๏ธย Commit Convention

๐Ÿ–ฅ๏ธย Frontend

"[์ปค๋ฐ‹์œ ํ˜•] ์ž‘์—… ๋‚ด์šฉโ€
EX) [feat] ์นด์นด์˜ค ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

๐Ÿ“Œย Type

Tag ๋œป
feat ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
fix ๋ฒ„๊ทธ ์ˆ˜์ •
docs ๋ฌธ์„œ ์ˆ˜์ •
style ์ฝ”๋“œ formatting, ์„ธ๋ฏธ์ฝœ๋ก  ๋ˆ„๋ฝ, ์ฝ”๋“œ ์ž์ฒด์˜ ๋ณ€๊ฒฝ์ด ์—†๋Š” ๊ฒฝ์šฐ
refactor ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง
test ํ…Œ์ŠคํŠธ ์ฝ”๋“œ, ๋ฆฌํŒฉํ† ๋ง ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€
chore ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์ˆ˜์ •, ๊ทธ ์™ธ ๊ธฐํƒ€ ์ˆ˜์ • ex) .gitignore
design CSS ๋“ฑ ์‚ฌ์šฉ์ž UI ๋””์ž์ธ ๋ณ€๊ฒฝ
comment ํ•„์š”ํ•œ ์ฃผ์„ ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝ
rename ํŒŒ์ผ ๋˜๋Š” ํด๋” ๋ช…์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์˜ฎ๊ธฐ๋Š” ์ž‘์—…๋งŒ์ธ ๊ฒฝ์šฐ
remove ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๋Š” ์ž‘์—…๋งŒ ์ˆ˜ํ–‰ํ•œ ๊ฒฝ์šฐ
!HOTFIX ๊ธ‰ํ•˜๊ฒŒ ์น˜๋ช…์ ์ธ ๋ฒ„๊ทธ๋ฅผ ๊ณ ์ณ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
init ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ํ›„ ์ฒซ ์ปค๋ฐ‹

๐Ÿ–ฅ๏ธ Backend

์ปค๋ฐ‹์œ ํ˜•:์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€ #(์ด์Šˆ๋ฒˆํ˜ธ)
EX) Feat: ์นด์นด์˜คํŽ˜์ด ๊ฒฐ์ œ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ (#13)

๐Ÿ“Œย Type

Tag ๋œป
Feat ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
Fix ๋ฒ„๊ทธ ์ˆ˜์ • ๋ฐ ๊ธฐ๋Šฅ ์ˆ˜์ •
Docs ๋ฌธ์„œ ์ถ”๊ฐ€ ๋ฐ ์ˆ˜์ •
Test ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€ ๋ฐ ์ˆ˜์ •
Refactor ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง
Rename ํŒŒ์ผ ๋ฐ ํด๋”๋ช… ์ˆ˜์ •
Remove ํŒŒ์ผ ์‚ญ์ œ
Chore ๊ทธ ์™ธ ์ž์ž˜ํ•œ ์ˆ˜์ •



๐Ÿฌย Git Flow

gitflow
  • mainย : ์ถœ์‹œ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ์˜ ๋ธŒ๋žœ์น˜
  • developย : ๋‹ค์Œ ๋ฒ„์ „์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ธŒ๋žœ์น˜
  • featย : ์ด์Šˆ ๋‹จ์œ„๋กœ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ธŒ๋žœ์น˜
    • ๋ธŒ๋žœ์น˜ ๋„ค์ด๋ฐ :ย feat/#์ด์Šˆ๋ฒˆํ˜ธ
  • fix : ์ด์Šˆ ๋‹จ์œ„๋กœ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ธŒ๋žœ์น˜
    • ๋ธŒ๋žœ์น˜ ๋„ค์ด๋ฐ: fix/#์ด์Šˆ๋ฒˆํ˜ธ

< work flow >

๋ฐฑ์—”๋“œ์˜ ๊ฒฝ์šฐ CI-CD๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ ๋ถ€ํ„ฐ ๋ฐฐํฌ๊นŒ์ง€ ์ž๋™ํ™”๋ฅผ ์ง„ํ–‰ํ•˜์˜€์œผ๋ฉฐ, ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

main, develop ๋ธŒ๋žœ์น˜

Github Action์œผ๋กœ ๊ตฌํ˜„์„ ํ•˜์˜€์œผ๋ฉฐ, ๊นƒํ—ˆ๋ธŒ ์ƒ์— ์ฝ”๋“œ๊ฐ€ push๋˜๊ฑฐ๋‚˜, merge๋˜์—ˆ์„ ๋•Œ, ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ๊ฐ€ ์ง„ํ–‰์ด ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ข…๋ฃŒ๋˜๋ฉด ๋นŒ๋“œํŒŒ์ผ์„ Object Storage์— ์ €์žฅ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„, Naver Signiture V2 ๋ฐฉ์‹์„ ํ†ตํ•ด api ์š”์ฒญ์œผ๋กœ Source Deploy์— ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๊ฑธ์–ด ์ž๋™์œผ๋กœ Autoscaling ๋ธ”๋ฃจ/๊ทธ๋ฆฐ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ์™ธ ๋ธŒ๋žœ์น˜

๊ธฐ๋Šฅ๊ฐœ๋ฐœ์„ํ•˜๋Š” feature ๋ธŒ๋žœ์น˜๋‚˜, ์˜ค๋ฅ˜ ํ•ด๊ฒฐํ•˜๋Š” fix ๋ธŒ๋žœ์น˜์˜ ๊ฒฝ์šฐ, ๋ฐฐํฌ๊ฐ€ ํ•„์š”ํ•˜์ง€์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๊นƒํ—ˆ๋ธŒ ์ƒ์— ์ฝ”๋“œ๊ฐ€ push๋œ ๊ฒฝ์šฐ, ์ž๋™ ๋นŒ๋“œ ๋ฐ ํ…Œ์ŠคํŠธ๊ฐ€ ์ง„ํ–‰์ด ๋˜๋ฉฐ, ์ด ๊ณผ์ •์˜ ์„ฑ๊ณต์œ ๋ฌด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๊ฐ€ ์ •์ƒ์ ์ธ์ง€ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages