๐Ÿ’Ž Django Framework

ํŠน์ง•

  • MVT ํŒจํ„ด
  • ORM ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ

 

 

MVT ํŒจํ„ด์ด๋ž€?

Model: ๋ฐ์ดํ„ฐ ๊ด€๋ จ DB

View: Model๊ณผ View๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋ฉฐ, ํ•จ์ˆ˜ ์ •์˜

Tamplate: ์‹ค์ œ๋กœ ํ™”๋ฉด์„ ๋ณด์—ฌ์ฃผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค

 

ORM ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ž€?

๊ฐ์ฒด ์ง€ํ–‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ฐ์ฒด๋ผ๋Š” ๊ฐœ๋…์„ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์™€ RDB์— ์“ฐ์ด๋Š” ๋ฐ์ดํ„ฐ์ธ ํ…Œ์ด๋ธ”์„ ์ž๋™์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์œผ๋กœ SQL๋ฌธ์ด ํ•„์š” ์—†๋‹ค.

 

์žฅ๊ณ  MVT ํŒจํ„ด๊ณผ ํŒŒ์ผ ๊ตฌ์กฐ

์žฅ๊ณ ๋Š” Urls.py์—์„œ ๋„˜์–ด์˜จ ์š”์ฒญ์„ View.py์˜ ํ•จ์ˆ˜์™€ ์—ฐ๊ฒฐ๋˜๊ณ  ํ•จ์ˆ˜์—์„œ model.py์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์™€์„œ ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋’ค render ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ template์— ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ฒจ์ฃผ๊ณ  ๋„˜๊ฒจ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  html์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

Django์˜ ์žฅ์ 

  1. Python์˜ ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜์—ฌ ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ  ์ƒ์‚ฐ์„ฑ์ด ํฌ๋‹ค
  2. ์ธ์ฆ, ๊ด€๋ฆฌ์™€ ๊ฐ™์€ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ๋“ค์ด ๊ธฐ๋ณธ ๋ชจ๋“ˆ๋กœ ์ œ๊ณต๋œ๋‹ค. -> ํŠนํžˆ Admin์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ฆฌ

Django์˜ ๋‹จ์ 

  1. ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด๋ผ์„œ ์‹คํ–‰ ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค. -> ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค
  2. Django๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ํŠนํ™” ๊ธฐ๋Šฅ๋ณด๋‹ค ptython์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํŽธ์ด๋‹ค.

 

๐Ÿ’Ž Spring Framework

์ž๋ฐ” ํ”Œ๋žซํผ์„ ์œ„ํ•œ ์˜คํ”ˆ์†Œ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ

 

ํŠน์ง•

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

 

MVC ํŒจํ„ด์—์„œ Model์€ 3๊ฐ€์ง€๋กœ ๋ถ„๋ฆฌ โ—

    • DAO (Data Access Object) -์‹ค์ œ๋กœ DB์— ์ ‘๊ทผํ•˜๋Š” ๊ฐ์ฒด (DB(DB ์ „์šฉ ๊ฐ์ฒด)
    • DTO (Data Transfer Object) – ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ์œ„ํ•œ ์ž๋ฐ” ๊ฐ์ฒด (๋ฐ์ดํ„ฐ๋ฅผ ๋ ˆ์ด์–ด ๊ฐ„ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ ์œผ๋กœ ์†์„ฑ์œผ๋กœ๋Š” Setter์™€ Getter์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
    • Service ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋“ค์–ด๊ฐ€๋Š” ๋ถ€๋ถ„ (Controller๊ฐ€ ์ ์ ˆํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”service๋ฅผ ์„ ํƒํ•ด์„œ ์„ ํƒ๋œ service๊ฐ€ ์ ์ ˆํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์—ฌ ๋ฐ˜ํ™˜)

๐Ÿ‘€ Spring Framework ์‹คํ–‰ ํ๋ฆ„๋„

Request -> DispatcherServlet -> HandlerMapping -> (Controller -> Service -> DAO -> DB -> DAO -> Service -> Controller) -> DispatcherServlet -> ViewResolver -> View -> DispatcherServlet -> Response

 

์ž์„ธํžˆ ๋ณด๊ธฐ

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ Request ์š”์ฒญ ์‹œ DispatcherServlet์ด web.xml์—  ๋“ฑ๋ก๋œ ๋‚ด์šฉ์„ ๊ฐ€๋กœ์ฑˆ๋‹ค. ์ตœ์ดˆ์˜ web.xml ์—์„œ๋Š” ์ด '/' default๋ผ์„œ ์ด ๋ฒ”์œ„๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋ฉด ํŠน์ • URL๋งŒ ์ ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
  2. DispatcherServlet์ด ๊ฐ€๋กœ์ฑˆ ์š”์ฒญ์„ HandlerMapping์—๊ฒŒ ๋ณด๋‚ด ํ•ด๋‹น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” Controller๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
  3. ์‹ค์ œ ๋กœ์ง ์ฒ˜๋ฆฌ
  4. ๋กœ์ง ์ฒ˜๋ฆฌ ํ›„ ViewResolver๋ฅผ ํ†ตํ•ด ViewResolver๊ฐ€ view ํ™”๋ฉด์„ ์ฐพ๋Š”๋‹ค.
  5. ์ฐพ์€ View ํ™”๋ฉด์€ View์— ๋ณด๋‚ด๋ฉด ์ด ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ DispatcherServlet์—๊ฒŒ ๋ณด๋‚ด๊ณ  DispatcherServlet๋Š” ์ตœ์ข… ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†กํ•œ๋‹ค.

 

Spring FrameWork ์žฅ์ 

  • ํ”„๋ ˆ์ž„์›Œํฌ ํŠนํ™” ๊ธฐ๋Šฅ๋“ค์ด ๋งŽ์•„์„œ ๊ฐ„๋‹จํ•œ ์ปดํฌ๋„ŒํŠธ๋กœ ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Œ
  • AOP -> ์ฝ”๋“œ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์ž‘์„ฑ ๊ฐ€๋Šฅ, ์žฌ์‚ฌ์šฉ์„ฑ ์˜ฌ๋ผ๊ฐ
  • DI -> ์„ค์ • ํŒŒ์ผ ๋ถ€๋ถ„์—์„œ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ค๋‹ˆ๊นŒ๋Š” ๋‹ค์–‘ํ•œ DB ์‚ฌ์šฉ, DB๋งˆ๋‹ค ๋ฉ”์„œ๋“œ ๋ฐ”๊ฟ€ ํ•„์š” ์—†์Œ

 

Spring FrameWork ๋‹จ์ 

  • Spring Boot๊ฐ€ ์•„๋‹ ์‹œ ์ดˆ๊ธฐ ํ™˜๊ฒฝ ๊ตฌ์ถ•์— ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”
  • ์„ค์ •์ด ๋ณต์žก
  • ์ปดํฌ๋„ŒํŠธ๋กœ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๊ฐœ๋ฐœ ๊ณต์ˆ˜๊ฐ€ ํฌ๋‹ค.

 

๐Ÿ’Ž Node.js Express Framework

Node.js Express Framework ์žฅ์ 

  • ์‹ฑ๊ธ€๊ทธ๋ ˆ๋“œ, ๋น„๋™๊ธฐ IO ์ฒ˜๋ฆฌ์— ๊ธฐ๋ฐ˜ํ•œ ๋น ๋ฅธ ์†๋„ -> CPU ๋Œ€๊ธฐ์‹œ๊ฐ„ ์ตœ์†Œํ™”, CPU ๋ถ€ํ•˜ ์ ์Œ -> ๋งŽ์€ ์ปค๋„ฅ์…˜์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ตฌ์กฐ์— ์ ํ•ฉ
  • Chrome์˜ V8 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚จ
  • ํŒŒ์ผ I/O๋‚˜ ๋„คํŠธ์›Œํฌ ์ฒ˜๋ฆฌ๋ฅผ ์ด๋ฒคํŠธ ๋“œ๋ฆฌ๋ธ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•จ

 

Node.js Express Framework ๋‹จ์ 

  • ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๋ชจ๋ธ์ด๋ผ ํ•˜๋‚˜์˜ ์ž‘์—…์— ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋ฉด ์‹œ์Šคํ…œ ์ „์ฒด์˜ ์„ฑ๋Šฅ์ด ๊ธ‰๊ฒฉํžˆ ๋‚ฎ์•„์ง„๋‹ค.
  • ๋ถˆํŽธํ•œ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ -> Async & Await ๋ชจ๋“ˆ
  • ๋ฉ€ํ‹ฐ์ฝ”์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Cluster ๋ชจ๋“ˆ ์ด์šฉ, ์„ธ์…˜ ๊ณต์œ  ์‹œ ๋ถ€๊ฐ€์ ์ธ ์ž‘์—… ํ•„์š”

 

๋ฉ€ํ‹ฐ์ฝ”์–ด๋ฅผ ์ด์šฉํ•˜๊ณ  ๋ฌด์ค‘๋‹จ ์„œ๋ฒ„๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” PM2

exec_mode  ํ•ญ๋ชฉ๊ฐ’์„ ‘cluster’๋กœ ์„ค์ •ํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํด๋Ÿฌ์Šคํ„ฐ ๋ชจ๋“œ๋กœ ์‹คํ–‰ํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ด๊ณ , instance  ํ•ญ๋ชฉ๊ฐ’์„ ‘0’์œผ๋กœ ์„ค์ •ํ•˜๋ฉด CPU ์ฝ”์–ด ์ˆ˜ ๋งŒํผ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑ

๐Ÿคž Node.js ์šฉ์–ด ์ •๋ฆฌ

Node.js : ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ

Express : NodeJS Framework

NPM : NodeJS package manager

PM2 : NodeJS process manager

 

 

์ฐธ๊ณ ์ž๋ฃŒ

https://devpad.tistory.com/24

https://elky.tistory.com/652

https://engineering.linecorp.com/ko/blog/pm2-nodejs/

+ Recent posts