Skip to content

WeImproveOurSkill/PayPick

Repository files navigation

๐ŸŒ ๊ฒฐ์ œ ์ˆ˜๋‹จ ๋งค์žฅ ์„œ๋น„์Šค


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

Image 1 Image 2 Image 3 Image 4 Image 5

ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

์ง€์—ญ๋ณ„ ๋งค์žฅ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ฒฐ์ œ ์ˆ˜๋‹จ์„ ๋ณด์—ฌ์ฃผ๋Š” ์›น ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ๊ฐ ๊ธฐ์—…์—์„œ ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ํŽ˜์ด ์„œ๋น„์Šค๊ฐ€ ๋งค์žฅ๋งˆ๋‹ค ์ง€์›๋˜๋Š” ์ข…๋ฅ˜๊ฐ€ ๋‹ฌ๋ผ ๋ถˆํŽธํ•จ์„ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์• ํ”ŒํŽ˜์ด๊ฐ€ ๊ตญ๋‚ด์— ๋„์ž…๋˜๋ฉด์„œ ์ด๋Ÿฌํ•œ ๋ถˆํŽธํ•จ์„ ํฌ๊ฒŒ ๋А๊ผˆ๊ณ , ์ด์— ๋”ฐ๋ผ ํŠน์ • ๋งค์žฅ์—์„œ ์–ด๋–ค ๊ฒฐ์ œ ์ˆ˜๋‹จ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋Š” ์ง€๋„๋ฅผ ๋งŒ๋“ค๊ณ ์ž ํ–ˆ์Šต๋‹ˆ๋‹ค.


๐ŸŽฏ ํ”„๋กœ์ ํŠธ ๋ชฉํ‘œ

  • ๊น€๋ฏผ์ˆ˜
    • ๋„ค์ด๋ฒ„ API ๋ฐ ๊ณต๊ณต๋ฐ์ดํ„ฐ API ํ™œ์šฉ ๋Šฅ๋ ฅ ํ–ฅ์ƒ
    • CICD๋ฅผ ์œ„ํ•œ ๋„์ปค, Git Action ํ•™์Šต ๋ฐ ์ ์šฉ
  • ์ดํ˜„๋™
    • Typescript ํ•™์Šต ๋ฐ ํ™œ์šฉ
    • NEXT.JS๋ฅผ ํ†ตํ•œ SSR ํ•™์Šต ๋ฐ ํ™œ์šฉ
    • ๋„ค์ด๋ฒ„ ์ง€๋„ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€ API ํ™œ์šฉ ๋Šฅ๋ ฅ ํ–ฅ์ƒ
    • ๋„์ปค, Git Action, EC2๋ฅผ ์‚ฌ์šฉํ•œ ์›น์•ฑ ์„œ๋น„์Šค ์šด์˜

๐Ÿ”ง ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ฐ ๋ชฉ์ 

ํ”„๋ก ํŠธ์—”๋“œ

  • Typescript
  • React
  • Next.js
  • React-query๋ฅผ ํ†ตํ•œ ์„œ๋ฒ„ ํ†ต์‹  ์ƒํƒœ ๊ด€๋ฆฌ
  • Zustand๋ฅผ ํ†ตํ•œ ์ „์—ญ ์ƒํƒœ๊ด€๋ฆฌ
  • Vanilla-extract๋ฅผ ํ†ตํ•œ ์Šคํƒ€์ผ๋ง

๋ฐฑ์—”๋“œ

  • Spring
    • JDK
    • Gradle
  • DB
    • MySQL + JPA, QueryDSL
    • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ๋ฐ ์ตœ์ ํ™”

CICD

  • Git Action
    • CI ๋‹จ๊ณ„๋ฅผ ์œ„ํ•œ Git Action ์„ค์ •
    • Docker ์ด๋ฏธ์ง€ ์ƒ์„ฑ ํ›„ Public Repository์— ์ €์žฅ
  • Docker
    • ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆํ™”

๋ฐ์ดํ„ฐ

  • ๋„ค์ด๋ฒ„ ๊ฒ€์ƒ‰ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„๋Œ€์นด๋“œ๋กœ ๊ฒฐ์ œ ๊ฐ€๋Šฅํ•œ ๋งค์žฅ ๋ฐ์ดํ„ฐ ์ €์žฅ
    • ๋งค์žฅ๋ช…, ์œ„์น˜, ๋ถ„๋ฅ˜ ๋“ฑ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ์š”์ฒญ์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†ก

๐Ÿ›  ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-09-28 แ„‹แ…ฉแ„’แ…ฎ 12.32.25.png


๐Ÿ“Œ ์„œ๋น„์Šค ๊ธฐ๋Šฅ

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

๐Ÿ“Š ๊ธฐ์ˆ  ์Šคํƒ

Front-end

TypeScript Next.js stomp
TypeScript Next.js React Query Stomp

Back-end

Java Spring-Boot JPA Spring-Security stomp MySQL
Java Spring-Boot Spring-JPA Spring-Security Stomp MySQL

DevOps

NGiNX aws docker GitHub Actions
NGiNX AWS Docker GitHub Actions

๊ธฐํš ๋ฐ ์šด์˜

Git discord figma notion
Git Discord Figma Notion

๐Ÿš€ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ํ˜„ํ™ฉ

  • ๊ณตํ†ต

  • ํ”„๋ก ํŠธ์—”๋“œ

    • Naver Map API๋ฅผ ํ™œ์šฉํ•œ ์ง€๋„ ์„œ๋น„์Šค ๊ตฌํ˜„ํ•˜๊ธฐ
    • Typescript๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Next.js๋กœ ๊ฐœ๋ฐœํ•˜๊ธฐ
    • React-query๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ ์บ์‹ฑํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๊ธฐ
    • Git Action์„ ํ†ตํ•œ CICD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ (Git, GitAction, Docker, AWS EC2)
    • Stomp๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฑ„ํŒ… ์„œ๋น„์Šค ๊ตฌํ˜„ํ•˜๊ธฐ
  • ๋ฐฑ์—”๋“œ

    • Naver API๋ฅผ ํ™œ์šฉํ•œ ๋งค์žฅ ๋ฐ์ดํ„ฐ ์ €์žฅํ•˜๊ธฐ(Python, Docker, Mysql)
    • Spring ํ”„๋กœ์ ํŠธ ๊ธฐ๋ณธ ์„ธํŒ…ํ•˜๊ธฐ (Java, Spring, Mysql, Docker, Spring Data JPA, QueryDSL)
      • API์— ๋”ฐ๋ฅธ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ
    • Stomp๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฑ„ํŒ… ์„œ๋น„์Šค ๊ตฌํ˜„ํ•˜๊ธฐ
    • HTTPS ๊ตฌํ˜„ํ•˜๊ธฐ (Nginx - ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ)
    • Git Action์„ ํ†ตํ•œ CICD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ (Git, GitAction, Docker)

๐Ÿ’ฌ ๊ธฐ์ˆ ์  ์˜์‚ฌ ๊ฒฐ์ •

  • ๋ฐ์ดํ„ฐ ์š”์ฒญ ์‹œ ์ „์†ก ๋ฐฉ์‹: request param, path variable, request body
  • ๋„ค์ด๋ฒ„ API ์š”์ฒญ ๋ฐ์ดํ„ฐ ๋ฒ”์œ„ ์ •์˜
  • CICD์‚ฌ์šฉ ๊ฒฐ์ •
    • Jenkins or Git Action
      • ์  ํ‚จ์Šค์™€ ๊นƒ์•ก์…˜ ์ด์ „์— ๋‘˜ ๋‹ค ํ•™์Šต์„ ํ•ด๋ณธ ๊ฒฝํ—˜์ด ์กด์žฌํ•œ๋‹ค. ๋‹ค๋งŒ ์  ํ‚จ์Šค์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ์ธ์›์ด ๋ฐฑ์—”๋“œ ํ•œ๋ช…์ด๊ธฐ์—, ์ฝ”๋“œ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๊นƒ์—์„œ ์ œ๊ณตํ•˜๋Š” Git Action์„ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ๋” ์ข‹๋‹ค๊ณ  ํŒ๋‹จํ•˜์˜€๋‹ค. Git Action์˜ ๊ฒฝ์šฐ Git์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ์˜ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋™์ž‘ํ•˜๊ณ , ์ž‘์„ฑ์‹œ ์ƒํ™ฉ์— ๋งž๋Š” ํ…œํ”Œ๋ฆฟ์„ ์ œ๊ณตํ•˜๊ธฐ์— ํ•™์Šต๊ณก์„ ์ด ๋‚ฎ๋‹ค๊ณ  ํŒ๋‹จํ•˜์˜€๋‹ค. ๊ทธ๋Ÿฐ ์ด์œ ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ Git Action์„ ๋ฐ”ํƒ•์œผ๋กœ ์ง„ํ–‰์„ ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜์˜€๋‹ค.
    • CICD๋ฅผ ์œ„ํ•œ ๋„์ปค ๋‹จ์ผ ์ปจํ…Œ์ด๋„ˆ์™€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ ์šฉ ๊ณ ๋ฏผ
      • ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” CICD๋ฅผ ์œ„ํ•ด ํ•„์ˆ˜์ ์ธ ๋„๊ตฌ, ๋‹ค๋งŒ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ์ด๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ํฌ๊ธฐ๋ฅผ ์ƒ๊ฐํ•˜์˜€์„ ๊ฒฝ์šฐ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์ ์šฉ์„ ์œ„ํ•ด์„œ๋Š” ์ž‘์—…ํ•ด์•ผํ•˜๋Š” ์–‘์ด ๋” ๋งŽ์•„์ง„๋‹ค๋Š” ๋‹จ์ ์ด ์กด์žฌํ•œ๋‹ค. ๊ทธ๋งŒํผ์˜ ํšจ์œจ์„ ๋ชป ๊ฐ€์ ธ์˜จ๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ ๊ธฐ์กด EC2๋ฐฐํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜์˜€๋‹ค.
  • ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ Zustand ์„ค์น˜
  • ๊ณ ๊ฐ ์ƒ๋‹ด ๋ด‡ ๋ฐฑ์—”๋“œ ์‚ฌ์šฉ ์—ฌ๋ถ€ ๊ฒฐ์ •

๐Ÿ’ก ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

  1. CORS ๋ฌธ์ œ

    • CORS ์„ค์ • ์˜ค๋ฅ˜๋กœ ์ธํ•œ ์ ‘๊ทผ ๋ถˆ๊ฐ€
      • Spring Security ์ดํ•ด ๋ฐ ์˜ฌ๋ฐ”๋ฅธ request ์„ค์ •์„ ํ†ตํ•œ ํ•ด๊ฒฐ
  2. Git Action ์‚ฌ์šฉ ์‹œ ๊ฒฝ๋กœ ์„ค์ • ๋ฌธ์ œ

    • ๊นƒ ์•ก์…˜์€ ์ด๋ฒคํŠธ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ฃผ์–ด์ง„ ์•ก์…˜์„ ์ง„ํ–‰ํ•  ๋•Œ ๊นƒ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ๋ฃจํŠธํด๋”๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์•ก์…˜์„ ์ง„ํ–‰ํ•œ๋‹ค.

      แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-09-28 แ„‹แ…ฉแ„’แ…ฎ 12.58.53.png

      ์ฆ‰ ์•ก์…˜์„ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ, ํ•ด๋‹น ์•ก์…˜์ด ์ˆ˜ํ–‰์ด ๋  ๊ฒฝ๋กœ๋ฅผ ๋‹ค์‹œ ์ƒ์„ฑํ•ด์ค˜์•ผํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. ์ด์ „์—๋Š” ๋ฐฑ์—”๋“œ, ํ”„๋ก ํŠธ์—”๋“œ์˜ ๊ฐ๊ฐ์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜์˜€๊ธฐ์— ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ์˜€์ง€๋งŒ ์ด๋ฒˆ์—๋Š” ํ•˜๋‚˜์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ „์ฒด ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๊ธฐ์— ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค.

      ๊นƒ ์•ก์…˜ ์ง„ํ–‰ ์‹œ ๊ฐ ์•ก์…˜์ด ์‹คํ–‰๋  ํด๋” ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

        working-directory: ${{ secrets.BeWORKINGDIRECTORY }}
      
  3. HTTPS ์ ์šฉ ๋ฌธ์ œ - Nginx

    • ํ”„๋ก ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ธ์ฆ์„œ์™€ nginx์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ธ์ฆ์„œ๊ฐ€ ๋™์ผํ•˜์ง€ ์•Š์•„์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. ํ•ด๋‹น ์ธ์ฆ์„œ๋ฅผ ๋™์ผํ•˜๊ฒŒ ํ•˜์—ฌ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.
  4. ๋กœ์ปฌ๊ณผ EC2 ๋‚ด์˜ ์‹คํ–‰ ํ™˜๊ฒฝ ์ฐจ์ด๋กœ ์ธํ•œ ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์‹œ ํ”Œ๋žซํผ ์ง€์ • ๋ฌธ์ œ

  5. Vanilla-extract ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ธํ•œ Bug fix

    • Vanilla-extract/next-plugin์˜ Next.js App router ๋ฒ„์ „ ๋‹ค์ด๋‚˜๋ฏน ๋ผ์šฐํŒ… ์‹œ CSS Compiling Error๋กœ ์ธํ•ด ๋ฒ„์ „์—… 2.3.5 -> 2.4.0
    • ์—๋Ÿฌ ์˜ˆ์‹œ: [id]/page.css.ts Error: Didn't get a result from child compiler

๐Ÿ’ช ํŒ€์› ์†Œ๊ฐœ ๋ฐ ์—ญํ• 

๊น€๋ฏผ์ˆ˜ ์ดํ˜„๋™
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ๋ฐ CICD ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ๋ฐ CICD

๐Ÿท๏ธ ๊ธฐ์ˆ ์  ์Šคํƒ ์ƒ์„ธ ๋‚ด์šฉ

Content Main Detail
๋งค์žฅ ์œ„์น˜ ํ™•์ธ Spring / TypeScript / Naver API Naver API For Search and I/O Store Data
์ฑ„ํŒ… Spring / TypeScript Socket / SockJS / Stomp / Axios
CI/CD Docker, Jenkins, Dockerhub, Kubernetes Docker, Dockerhub
Nginx nginx Nginx, Let's encrypt,
For HTTPS
๋ฐฐํฌ AWS EC2(Ubuntu Server 20.04 LTS)
ํšŒ์›๊ด€๋ฆฌ Spring Security Spring Security
๋งค์žฅ ์ •๋ณด ๊ด€๋ฆฌ Python, Naver API Naver API For Search Store and I/O Store Data Base
์ง€๋„ Naver API Naver Map API

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors