๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐ŸŒŸ ์„œ๋น„์Šค ์†Œ๊ฐœ

  • 'Hands-up ๐Ÿ‘‹' ์€ "์‹ค์‹œ๊ฐ„ ๊ฒฝ๋งค"์™€ ์†Œํ†ต์„ ํ†ตํ•ด ์ž์‹ ์˜ ๋ฌผํ’ˆ์„ ์†์‰ฝ๊ฒŒ ๊ฑฐ๋ž˜ํ•˜๋Š” ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ํ˜„์กดํ•˜๋Š” ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ์—์„œ๋Š” ์ฐพ์„ ์ˆ˜ ์—†๋Š” “์žฌ๋ฏธ”์™€ “๋น ๋ฅธ๊ฑฐ๋ž˜”, “ํ™•์‹คํ•œ ๊ฑฐ๋ž˜”๋ฅผ ์ถ”๊ตฌํ•ฉ๋‹ˆ๋‹ค.
  • "๋”์ด์ƒ ํ•„์š”์น˜์•Š๋Š” ๋ณธ์ธ์˜ ๋ฌผํ’ˆ์ด ์ง‘์— ๋‚จ์•„์žˆ์œผ์‹ ๊ฐ€์š”?"
    "์„œ๋กœ ๊ฐ„ ๊ฐ€๊ฒฉํฅ์ •์˜ ์—๋„ˆ์ง€๋ฅผ ์Ÿ๊ณ  ๊ณ„์‹ ๊ฐ€์š”?"
    "์งง์€์‹œ๊ฐ„๋‚ด์— ๋น ๋ฅด๊ฒŒ ๋ณธ์ธ์˜ ๋ฌผํ’ˆ์„ ํŒ”์•„์น˜์šฐ์‹œ๊ณ  ์‹ถ์œผ์‹ ๊ฐ€์š”?"

๊ฒฝ๋งค๋ผ๋Š” ์‹œ์Šคํ…œ์„ ํ†ตํ•˜์—ฌ ํŒ๋งค์ž๋Š” ์ตœ์†Œํ•œ์œผ๋กœ ๋ฐ›๊ณ  ์‹ถ์€ ์ƒํ’ˆ๊ฐ€๊ฒฉ์„ ๋จผ์ € ์ œ์‹œํ•จ์œผ๋กœ์จ

๊ฒฝ๋งค ์ž…์ฐฐ์„ ํ†ตํ•ด ํŒ๋งค์ž์™€ ๊ตฌ๋งค์ž์˜ ํ•ฉ์˜์ ์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ •ํ•ด์ง€๋ฉด์„œ ํŒ๋งค์ž๋Š” ๋น ๋ฅด๊ฒŒ ํŒ๋งคํ•˜๊ณ  ๊ตฌ๋งค์ž๋Š” ์›ํ•˜๋Š” ๊ฐ€๊ฒฉ์— ๊ตฌ๋งคํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.

๐Ÿ‘จ‍๐Ÿ‘จ‍๐Ÿ‘ง‍๐Ÿ‘ฆ ํŒ€์› ์†Œ๊ฐœ

 

Gyeung Min Kim

Won Chae Yi

Jun Ho Hyeon

Ki Hoon Kang

Min Su Kim

Sang Hun Son

๐Ÿ“† ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๊ฐœ์š”

ํ•ต์‹ฌ ๋ชฉํ‘œ

  • ๊ฑฐ๋ž˜์˜ ํ™•์‹ค์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด 1์ธ 1๊ณ„์ •์„ ๋ชฉํ‘œ๋กœํ•˜๊ณ  ๋ฆฌ๋ทฐ ํ˜น์€ ์‹ ๊ณ  ๊ธฐ๋Šฅ์„ ๋„์ž…ํ•œ๋‹ค.
  • ๊ฒฝ๋งค๋งˆ๊ฐ์˜ ํƒ€์ž„์–ดํƒ์„ ๋ถ€์—ฌํ•ด์„œ ํฅ๋ฏธ๋ฅผ ์œ ๋ฐœํ•˜๊ณ  ์‚ฌ์ดํŠธ์— ์ฐธ์—ฌ๋„๋ฅผ ๋†’์ธ๋‹ค.
  • ๋‹ค๋ฅธ ํƒ€ ๋ฌผํ’ˆ ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ๊ณผ ์ฐจ๋ณ„์„ฑ์„ ๋‘”๋‹ค.

 

๊ฐœ๋ฐœ ์ผ์ •

  • ์ง„ํ–‰ ๊ธฐ๊ฐ„: 2022.11.30 ~ 2022.12.19 ( 20์ผ )
  • ํ”ผ๋“œ๋ฐฑ ๊ธฐ๊ฐ„: 2022.12.20 ~ 2022.12.23 ( 60๊ฐœ์˜ ํ”ผ๋“œ๋ฐฑ )
  • ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜ ๊ธฐ๊ฐ„: 2022.12.24 ~ 2022.12.26 ( 3์ผ )
    • ๊ฐ์ข… ์•Œ๋ฆผ ๊ธฐ๋Šฅ ( ์ž…์ฐฐ ๊ฒฝ์Ÿ, ๊ฒฝ๋งค ์‹œ์ž‘, ๋‚™์ฐฐ, ๋ฉ”์‹œ์ง€ )
    • ๊ฒฝ๋งค ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ( ์ž…์ฐฐ ๋‚ด์—ญ, ์ฐธ์—ฌ์ž ์ •๋ณด, ์ฑ„ํŒ… ๋‚ด์—ญ )
    • xss ๋ณด์•ˆ

 

๐Ÿ”จ๊ธฐ์ˆ  ์„ ์ • Why ?

Django / DRF

  • Serializer, ์œ ์ € ๊ด€๋ฆฌ, REST API ๋“ฑ Django์—์„œ ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ฑ„์šฉ

Django Channels

  • ์‹ค์‹œ๊ฐ„ ๋น„๋™๊ธฐ๋กœ ๋“ค์–ด์˜ค๋Š” ws/wss ํ”„๋กœํ† ์ฝœ์„ ์žฅ๊ณ ์—์„œ ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

Django Rest Framework simple-jwt

  • ์œ ์ € ์ธ์ฆ์„ ํ† ํฐ๋ฐฉ์‹์œผ๋กœ ์•”ํ˜ธํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

Websocket

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

AWS EC2

  • ์šฉ๋Ÿ‰์„ ์ค„์ด๊ฑฐ๋‚˜ ๋Š˜๋ฆด ์ˆ˜ ์žˆ๋Š” ํƒ„๋ ฅ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๋ณด์•ˆ ๋ฐ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ, ์Šคํ† ๋ฆฌ์ง€ ๊ด€๋ฆฌ์— ํšจ๊ณผ์ ์ด๋ฉฐ ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ๋ฅผ ํ”„๋ฆฌํ‹ฐ์–ด๋กœ ๋ฌด๋ฃŒ๋กœ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ์ฑ„์šฉ

AWS S3

  • ์„œ๋น„์Šค์—์„œ ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œ ํ• ๋•Œ, EC2์— ์ €์žฅ์„ ํ•˜๊ฒŒ๋˜๋ฉด ์šฉ๋Ÿ‰์ด ๋ถ€์กฑํ•ด์ง€๊ณ  ํŒŒ์ผ๋“ค์„ ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํŒŒ์ผ ์ €์žฅ์— ์ตœ์ ํ™” ๋˜์–ด์žˆ๊ณ , ์ €์žฅ์šฉ๋Ÿ‰์ด ๋ฌดํ•œ๋Œ€์— ๊ฐ€๊นŒ์šด S3๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ด๋ฏธ์ง€ ํŒŒ์ผ๋“ค์„ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌ ํ–ˆ์Šต๋‹ˆ๋‹ค.

Docker

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

Nginx

  • event-driven์˜ ๋น„๋™๊ธฐ ๊ตฌ์กฐ์ธ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” nginx๋Š” ์ฑ„ํŒ…๊ธฐ๋Šฅ ๋•Œ๋ฌธ์— ๋™์‹œ์ ‘์†์ž ์ˆ˜์˜ ์ฆ๊ฐ€์— ๋Œ€์‘ํ•˜๊ธฐ์— ์ ํ•ฉํ•œ ๋ฐฉ์‹์˜ ์›น์„œ๋ฒ„๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜์—ฌ ์ฑ„ํŒ…๊ธฐ๋Šฅ์ด ์žˆ๋Š” ์›น์‚ฌ์ดํŠธ์—์„œ ๋ฐฐํฌ์‹œ ์ค‘๋‹จ๋˜์ง€ ์•Š๋Š”์ ์ด ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ์‚ฌ์šฉ์„ฑ ๋ฐ ํŽธ์˜์„ฑ์„ ์ฆ๋Œ€์‹œํ‚ต๋‹ˆ๋‹ค.

Gunicorn

  • ๋กœ์ปฌ๊ฐœ๋ฐœํ™˜๊ฒฝ์—์„œ๋Š” django์˜ runserver๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ gunicorn์ด ์—†์–ด๋„ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฐฐํฌํ™˜๊ฒฝ์—์„œ๋Š” runserver๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก django์—์„œ๋„ ๊ถŒ์žฅ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Python WSGI ๋Œ€ํ‘œ์ ์œผ๋กœ ์„ฑ๋Šฅ์ด ๊ฒ€์ฆ๋œ Gunicorn์„ ํ™œ์šฉํ•ด์„œ Nginx๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์„œ๋ฒ„์‚ฌ์ด๋“œ ์š”์ฒญ์„ gunicorn์„ ํ™œ์šฉํ•ด์„œ django๋กœ ์ „๋‹ฌํ•˜๊ฒŒ๋” ํ–ˆ์Šต๋‹ˆ๋‹ค.

Daphne

  • Gunicorn์ด WSGI HTTP์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค๋ฉด ์ €ํฌ ์„œ๋น„์Šค์— ์žˆ๋Š” ์ฑ„ํŒ…๊ธฐ๋Šฅ์€ ASGI WS ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Daphne๋Š” Channels ๋ฅผ ์„ค์น˜ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์„ค์น˜๋˜๋ฉฐ Channels์—์„œ ์ง€์›ํ•˜๋Š” ์„œ๋ฒ„๋กœ ASGI ํ”„๋กœํ† ์ฝœ๋กœ ๋ฐ›์€ WS์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ  ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

PostgreSQL

  • PostgreSQL์€ MySQL๋ณด๋‹ค ํ‘œ์ค€์— ๋” ๊ฐ€๊น๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š”๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ๋‘๊ณ ์žˆ๊ณ , ์˜คํ”ˆ์†Œ์Šค ๋ฐ ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ์ด๋„๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž…๋‹ˆ๋‹ค. django์—์„œ ๊ฐ€์žฅ ๊ถŒ์žฅํ•˜๋Š” RDBMS๊ฐ€ PostgreSQL์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•ด๋ด„์œผ๋กœ์จ MySQL๊ณผ๋Š” ์–ด๋– ํ•œ ์ฐจ์ด์ ์ด ์žˆ๋Š”์ง€ ๊ณต๋ถ€๋„ ํ•˜๊ณ , ๋‹ค๋ฅธ RDBMS๋ฅผ ์‚ฌ์šฉํ•ด๋ด„์œผ๋กœ์จ ๊ฒฝํ—˜์น˜๋ฅผ ์Œ“๊ณ ์ž ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/T-emergency/hands-up-backend

 

GitHub - T-emergency/hands-up-backend

Contribute to T-emergency/hands-up-backend development by creating an account on GitHub.

github.com