Code Monkey home page Code Monkey logo

doki_api's Introduction

โค๏ธโ€๐Ÿ”ฅใƒ‰ใ‚ญใƒ‰ใ‚ญ ๆผซ็”ป้ƒจ!!! โค๏ธโ€๐Ÿ”ฅ api-server

introduction

img1

์ง์ ‘ ๋…ธ์…˜์œผ๋กœ ์ œ์ž‘ํ•˜์—ฌ ์‚ฌ๋‚ด์— ๊ณต์œ ํ–ˆ๋˜ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์›น ์„œ๋น„์Šค๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ๊ธฐ์กด์— ํ™œ์šฉํ–ˆ๋˜ ๋“ฑ๊ธ‰์ œ, ํ‰์ ์ œ, ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ๋Šฅ ๋“ฑ์„ ์žฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ตฌํ˜„ ์‚ฌํ•ญ

  • JWT๋ฅผ ํ™œ์šฉํ•œ ์ธ์ฆ/์ธ๊ฐ€ ๋กœ์ง ๊ตฌํ˜„
  • ์• ๋‹ˆ๋ฉ”์ด์…˜ ์กฐํšŒ ํ•„ํ„ฐ๋ง ๋ฐ ํŽ˜์ด์ง€๋„ค์ด์…˜, AND OR ๊ฒ€์ƒ‰ ๊ตฌํ˜„
  • ๋ฆฌ๋ทฐ์˜ ๋ณ„์ ์œผ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ ํ‰์  ์—…๋ฐ์ดํŠธ
  • ํšŒ์›์ด ์ž‘์„ฑํ•œ ๋ฆฌ๋ทฐ, ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ธ€ ๊ฐœ์ˆ˜๋กœ ํšŒ์›๋“ฑ๊ธ‰์ œ๋„ ์šด์˜
  • ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ๊ฐ™์€ IP์˜ ์—ฌ๋Ÿฌ ์ž‘ํ’ˆ๋“ค์„ ์‹œ๋ฆฌ์ฆˆ๋กœ ๋ฌถ์–ด ์กฐํšŒ
  • ํšŒ์›์ด ๋ง˜์— ๋“œ๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์Šคํฌ๋žฉํ•˜๊ณ  ๋”ฐ๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณต

Tech

Nest.js, TypeORM

database: MySQL 8.0

tools: dbeaver, docker, erd-cloud, postman, swagger

Deploy : Docker, Google Cloud Platform(VM instance, Storage, SQL, Cloud Functions)

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„

img1

RDBMS์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ๊ณผ ๋ฐ์ดํ„ฐ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์ปฌ๋Ÿผ ํƒ€์ž…์„ ์ตœ๋Œ€ํ•œ ์‹ ๊ฒฝ์ผ๊ณ  ๊ธฐํš์ ์ธ ๋ฐฉํ–ฅ์— ๋งž๊ฒŒ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ†ตํ•œ ์‹œ๋ฆฌ์ฆˆ ๊ธฐ๋Šฅ : ๊ทน์žฅํŒ์ด๋‚˜ ํŒŒ์ƒ๋˜๋Š” ์ž‘ํ’ˆ์ด ๋งŽ์€ ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ ํŠน์„ฑ์ƒ ํ•˜์ด์–ด๋ผํ‚ค ๋ชจ๋ธ์„ ์ด์šฉํ•ด ๋ถ€๋ชจ๊ฐ€ ๋˜๋Š” ์›๋ณธ ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ๊ฐ™์€ IP์˜ ์—ฌ๋Ÿฌ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‹œ๋ฆฌ์ฆˆ๋กœ ๋ฌถ์–ด ์กฐํšŒ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค๊ณ„ํ–‡์Šต๋‹ˆ๋‹ค.

  • ํšจ์œจ์ ์ธ ๋ฆฌ๋ทฐ ํ‰๊ท  ์ ์ˆ˜ : ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์กฐํšŒํ•  ๋•Œ๋งˆ๋‹ค ๋ชจ๋“  ๋ฆฌ๋ทฐ๋ฅผ ์กฐํšŒํ•ด ์ ์ˆ˜ ํ‰๊ท ์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด ๋น„ํšจ์œจ์ ์ด๋ผ ๋Š๊ปด ํ‰๊ท  ์ ์ˆ˜ ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฆฌ๋ทฐ๊ฐ€ ์ƒ์„ฑ/๊ฐฑ์‹ ๋  ๋•Œ๋งŒ ํ‰๊ท ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ์—…๋ฐ์ดํŠธํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ์Šคํฌ๋žฉ : ์‚ฌ์šฉ์ž๊ฐ€ ์ข‹์•„ํ•˜๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ ๊ฐœ์ธํ™”๋œ ๋ชฉ๋ก์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ณ  ์ž์‹ ์ด ์„ ํƒํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ๋…ผ๋ฆฌ์  ์‚ญ์ œ : ํ›„์— ๊ตฌํ˜„ํ•  ํšŒ์› ์ •๋ณด ์‚ญ์ œ ์ •์ฑ…์ด๋‚˜ ์•…์„ฑ ๋ฆฌ๋ทฐ ๋“ฑ ์กฐํšŒ๋Š” ๋˜์ง€ ์•Š๊ฒŒ ํ•˜๋˜ ์ €์žฅ์„ ํ•˜๊ณ ์žˆ์–ด์•ผ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌผ๋ฆฌ์  ์‚ญ์ œ๋ณด๋‹ค ์ตœ๋Œ€ํ•œ ๋…ผ๋ฆฌ์  ์‚ญ์ œ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

ERD CLOUD LINK

CI/CD ๊ตฌ์„ฑ

img3

์ˆ˜๋™์œผ๋กœ ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ •์„ ์ž๋™ํ™”ํ•˜๊ธฐ ์œ„ํ•ด GitHub Actions๋ฅผ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. Github Repository์˜ Main ๋ธŒ๋žœ์น˜์— ์ƒˆ๋กœ์šด Commit์ด ํ‘ธ์‹œ๋  ๋•Œ๋งˆ๋‹ค GitHub Actions๋ฅผ ํ†ตํ•ด YAML ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋˜์–ด ์ž๋™ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

  • ์†Œ์Šค ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‹œ Docker ์ด๋ฏธ์ง€๋ฅผ ์ž๋™์œผ๋กœ ๋นŒ๋“œํ•˜๊ณ  Docker Hub์— ํ‘ธ์‹œ

  • Docker Hub์—์„œ ์ตœ์‹  ์ด๋ฏธ์ง€๋ฅผ Pull ํ•˜์—ฌ GCP VM ์ธ์Šคํ„ด์Šค์— ์ž๋™์œผ๋กœ ๋ฐฐํฌํ•˜๊ณ , ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€

  • Webhook์„ ํ™œ์šฉํ•˜์—ฌ Telegram Bot์œผ๋กœ ๋ฐฐํฌ์˜ ์„ฑ๊ณต ์—ฌ๋ถ€๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์•Œ๋ฆผ

๋ฌด์ค‘๋‹จ ๋ฐฐํฌ

img4

Rolling Deploy ์ „๋žต์„ ์ฑ„ํƒํ•˜์—ฌ Nginx๋ฅผ ์ด์šฉํ•œ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„ค์ •์œผ๋กœ ๋™์ผํ•œ ๋ฒ„์ „์˜ ๋‘ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•จ์œผ๋กœ์จ ์„œ๋น„์Šค ์ค‘๋‹จ(downtime) ์—†์ด ์•ˆ์ •์ ์ธ ๋ฐฐํฌ๋ฅผ ๋‹ฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. nginx.conf ์„ค์ •์„ ์กฐ์ •ํ•˜์—ฌ ์—…๋ฐ์ดํŠธ ๋Œ€์ƒ ์ปจํ…Œ์ด๋„ˆ์˜ ํฌํŠธ๋ฅผ ์šฐ์„  ์ค‘๋‹จ ์ฒ˜๋ฆฌํ•œ ๋’ค, nginx reload ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ์„ ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๋กœ ์›ํ™œํ•˜๊ฒŒ ์ „ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์„ ๋ฐ˜๋ณตํ•จ์œผ๋กœ์จ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง

๋ ˆํฌ์ง€ํ† ๋ฆฌ ํŒจํ„ด ์ ์šฉ

img5 ์„œ๋น„์Šค ํ•จ์ˆ˜์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ์ฟผ๋ฆฌ๋ฌธ๋“ค์ด ์„ž์—ฌ์žˆ์–ด ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์–ด๋ ค์šด ๋ฉด์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ ˆํฌ์ง€ํ† ๋ฆฌ ํŒจํ„ด์„ ์ ์šฉํ•˜์˜€๊ณ  ๊ฐ€๋…์„ฑ์ด ํ›จ์”ฌ ๊ฐœ์„ ๋˜์—ˆ์œผ๋ฉฐ ๋ฐ์ดํ„ฐ ์กฐํšŒ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ด€์‹ฌ์‚ฌ๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์œ ์ง€๋ณด์ˆ˜๋„ ํ›จ์”ฌ ์‰ฌ์›Œ์กŒ์Šต๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ์šฉ ์œ ํ‹ธ ํด๋ž˜์Šค ์ž‘์„ฑ

img6 ์„œ๋น„์Šค ํ•จ์ˆ˜์—์„œ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ๋ฐ˜๋ณต๋˜๋˜ ์ฝ”๋“œ๋ฅผ Handler ํด๋ž˜์Šค๋กœ ์ž‘์„ฑํ•˜์—ฌ ์žฌ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ ์ „ ์ฃผ์ž…๋œ ์ปค์Šคํ…€ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์™€ ์Šค์ฝ”ํ”„ ๋‚ด์—์„œ ์ƒ์„ฑ๋œ QueryRunner๊ฐ€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ์žˆ์—ˆ์ง€๋งŒ ์ปค์Šคํ…€ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๋‚ด๋ถ€ ํ•จ์ˆ˜๋กœ ์ปค์Šคํ…€ ๋ฉ”์†Œ๋“œ๊ฐ€ extend๋˜์–ด์žˆ๋Š” ์ƒˆ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋กœ ๋ฆฌํ„ดํ•˜๋„๋ก ์ž‘์„ฑํ•˜์—ฌ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

doki_api's People

Contributors

hankbae93 avatar

Watchers

 avatar

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.