๐Ÿ”ฎ Server/Client Side Rendering

@winuss ยท January 08, 2022 ยท 3 min read

01
01

์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ Œ๋”๋ง ๋ฐฉ์‹์€ ํฌ๊ฒŒ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๋ Œ๋”๋ง ๋ฐฉ์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์„ ์‚ดํŽด๋ณด๊ธฐ์— ์•ž์„œ ๊ณผ๊ฑฐ ์›น ์‚ฌ์ดํŠธ์˜ ์—ญ์‚ฌ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Static Site

1990๋…„ ์ค‘๋ฐ˜๊นŒ์ง€๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์ดํŠธ๊ฐ€ static ์‚ฌ์ดํŠธ ์˜€์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„์— ์ด๋ฏธ ์ž˜ ๋งŒ๋“ค์–ด์ง„ html๋ฌธ์„œ๋“ค์ด ์žˆ๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ๋ถ€๋ผ์šฐ์ €์—์„œ ์ฃผ์†Œ์— ์ ‘์†ํ•˜๋ฉด ์„œ๋ฒ„์— ์ด๋ฏธ ๋ฐฐํฌ๋˜์–ด์žˆ๋Š” HTML ๋ฌธ์„œ๋ฅผ ๋ฐ›์•„์™€ ๋ณด์—ฌ์ฃผ๋Š” ํ˜•์‹์ด์ฃ . ์ด๋Ÿฐํ•œ ๋ฐฉ์‹์˜ ๋ฌธ์ œ์ ์€ ํŽ˜์ด์ง€์—์„œ ๋‹ค๋ฅธ ๋ฉ”๋‰ด๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋‹ค์‹œ ์„œ๋ฒ„์—์„œ ํ•ด๋‹นํŽ˜์ด์ง€์˜ HTML์„ ๋ฐ›์•„์™€์„œ ํŽ˜์ด์ง€ ์ „์ฒด๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (๊นœ๋ฐ•, ๊นœ๋ฐ•... ์ •๋ง ์‚ฌ์šฉ์„ฑ์ด ๋–จ์–ด์ง€์ฃ )

iframe

์ดํ›„ 1996๋…„ ๋ฌธ์„œ๋‚ด์—์„œ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์„œ๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” iframe ํƒœ๊ทธ๊ฐ€ ๋„์ž…์ด ๋˜์—ˆ๊ณ  ์ด์ œ๋Š” ํŽ˜์ด์ง€๋‚ด์—์„œ ๋ถ€๋ถ„์ ์œผ๋กœ ๋ฌธ์„œ๋ฅผ ๋ฐ›์•„์™€์„œ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜๊ฐ€ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. (์ง€๊ธˆ๋„ ๊ฐ„ํ˜น ์“ฐ์ด๊ณ  ์žˆ๋Š” ํƒœ๊ทธ์ž…๋‹ˆ๋‹ค.)

XMLHttpRequest API

๊ทธ๋ฆฌ๊ณ  1998๋…„ ์šฐ๋ฆฌ๊ฐ€ ๋งŽ์ด ์“ฐ๊ณ  ์žˆ๋Š” fetch API์˜ ์›์กฐ XMLHttpRequest API๊ฐ€ ๊ฐœ๋ฐœ์ด ๋˜์–ด ์ด์ œ๋Š” HTML๋ฌธ์„œ ์ „์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ JSON๊ณผ ๊ฐ™์€ ํฌ๋ฉง์œผ๋กœ ์„œ๋ฒ„์—์„œ ๊ฐ€๋ฒ•๊ฒŒ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ›์•„ ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ๋™์ ์œผ๋กœ HTML์š”์†Œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ํŽ˜์ด์ง€์— ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๋ฐฉ์‹์ด์ฃ .

AJAX, SPA

2005๋…„ ์ด๋Ÿฐ ๋ฐฉ์‹์ด ๊ณต์‹์ ์œผ๋กœ AJAX๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง€๊ฒŒ ๋˜๊ณ  ๊ตฌ๊ธ€์—์„œ๋„ AJAX๋ฅผ ์ด์šฉํ•ด GMail, Google Map๊ณผ ๊ฐ™์ด ์šฐ๋ฆฌ๊ฐ€ ๋งŽ์ด ์“ฐ๊ณ  ์žˆ๋Š” ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ํ˜„์žฌ ๋„๋ฆฌ ์“ฐ์ด๊ณ  ์žˆ๋Š” ์‹ฑ๊ธ€ํŽ˜์ด์ง€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜(SPA) ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ•œ ํŽ˜์ด์ง€ ๋‚ด์—์„œ ๋จธ๋ฌด๋ฅด๋ฉด์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„์—์„œ ๋ฐ›์•„์™€ ๋ถ€๋ถ„์ ์œผ๋กœ๋งŒ ์—…๋ฐ์ดํŠธ ํ•˜๊ฒŒ ๋˜์ฃ . ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ํ•˜๋‚˜์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‚ฌ์šฉ ํ•˜๋“ฏ ์›น์‚ฌ์ดํŠธ์—์„œ๋„ ์ด์ œ ์‚ฌ์šฉ์„ฑ์ด ๊ต‰์žฅํžˆ ์ข‹์•„์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ SPAํŠธ๋žœ๋“œ + ์‚ฌ์šฉ์ž์˜ PC์„ฑ๋Šฅ์ด ์ ์ฐจ ์ข‹์•„์ ธ์„œ ๋งŽ์€ ๊ฒƒ๋“ค์„ ๋ฌด๋ฆฌ ์—†์ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋„ ํ‘œ์ค€ํ™”๊ฐ€ ์ž˜ ๋˜์–ด์ง์— ๋”ฐ๋ผ Angular, React, Vue์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋‚˜์™€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(CSR) ์‹œ๋Œ€๋กœ ์ ‘์–ด๋“ญ๋‹ˆ๋‹ค.

Client Side Rendering

ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์ด๋ž€ ์‰ฝ๊ฒŒ ์–˜๊ธฐํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ์—์„œ ๋‹ค ์ฒ˜๋ฆฌํ•˜๋Š”๊ฑธ ๋งํ•˜๋Š”๋ฐ์š”, ์„œ๋ฒ„์—์„œ index.html ํŒŒ์ผ์„ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋‚ด์ฃผ๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ณ  ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ ์œผ๋กœ HTML์„ ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ตœ์ข…์ ์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณด์—ฌ ์ฃผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋ง์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉ์ž๊ฐ€ ์ฒซ ํ™”๋ฉด์„ ๋ณด๊ธฐ๊นŒ์ง€์˜ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค
  • ์ฉ ์ข‹์ง€ ์•Š๋Š” SEO(Search Engin Optimization)

Server Side Rendering

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

์–ด๋–ค๊ฒƒ์ด ๋” ์ข‹์„๊นŒ?

์ด๋Ÿฐ SSR์„ ์ด์šฉํ•˜๊ฒŒ ๋˜๋ฉด CSR๊ณผ ๋น„๊ตํ–ˆ์„๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ฒซ ๋ฒˆ์งธ ํŽ˜์ด์ง€ ๋กœ๋”ฉ์ด ๋นจ๋ผ์ง
  • ๋ชจ๋“  ์ปจํ…์ธ ๊ฐ€ HTML์— ๋‹ด๊ฒจ์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์ ์ธ SEO ๊ฐ€๋Šฅ

๊ทธ๋Ÿผ ์ด๋Ÿฐ SSR ๊ณผ์—ฐ ๋ชจ๋“ ๊ฒƒ์˜ ํ•ด๊ฒฐ์ฑ…์ด ๋ ๊นŒ์š”? ๊ทธ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

SSR์—๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํฐ ๋ฌธ์ œ์ ์ด ์กด์žฌํ•˜๋Š”๋ฐ์š”,

  • Static ์‚ฌ์ดํŠธ์™€ ๊ฐ™์€ ๊นœ๋ฐ•์ž„ ์ด์Šˆ ์ฆ‰, ์ฉ ์ข‹์ง€ ์•Š๋Š” UX
  • ์„œ๋ฒ„์˜ ๊ณผ๋ถ€ํ™” (์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์€ ์‚ฌ์ดํŠธ ์ผ์ˆ˜๋ก)
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋น ๋ฅด๊ฒŒ ์›น์‚ฌ์ดํŠธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋™์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์ง€ ๋ชปํ•ด ์—ฌ๊ธฐ์ €๊ธฐ ํด๋ฆญํ•ด๋„ ๋ฐ˜์‘์ด ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TTV(Time To View), TTI(Time to interact)

TTV, TTI ๋‘๊ฐ€์ง€์— ๋Œ€ํ•ด ์ข€ ๋” ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

CSR์€

  1. ์‚ฌ์ดํŠธ์— ์ ‘์†
  2. ์„œ๋ฒ„์—๊ฒŒ์„œ ํ……ํ……๋นˆ ์ธ๋ฑ์Šค ํŒŒ์ผ์„ ๋ฐ›์•„์˜ด
  3. ์›น์‚ฌ์ดํŠธ์— ํ•„์š”ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์„œ๋ฒ„์— ์š”์ฒญ
  4. ์„œ๋ฒ„์—๊ฒŒ์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ๋ฐ›์•„์˜ด
  5. ์ตœ์ข…์ ์œผ๋กœ ๋™์ ์œผ๋กœ HTML์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ฐ›์•„์™€ ์›น์‚ฌ์ดํŠธ๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ๊ณผ ๋™์‹œ์— ์‚ฌ์šฉ์ž ํด๋ฆญ์ด ๊ฐ€๋Šฅ

์ฆ‰, CSR์€ TTV ์‚ฌ์šฉ์ž๊ฐ€ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Œ๊ณผ ๋™์‹œ์— TTI ํด๋ฆญ์„ ํ•˜๊ฑฐ๋‚˜ ์ธํ„ฐ๋ž™์…˜์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋Œ€๋กœ SSR์€

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

์ฆ‰, SSR์€ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์ดํŠธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„๊ณผ ์‹ค์ œ๋กœ ์ธํ„ฐ๋ ‰์…˜์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๋ฐฑ ๊ธฐ๊ฐ„์ด ๊ฝค ๊ธดํŽธ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์›น์‚ฌ์ดํŠธ์˜ ์„ฑ๋Šฅ์„ ๋ถ„์„ํ• ๋•Œ TTV์™€ TTI๋„ ์ค‘์š”ํ•œ ๋งคํŠธ๋ฆญ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CSR์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ถ„๋“ค์ด๋ผ๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์ตœ์ข…์ ์œผ๋กœ ๋ฒˆ๋“ค๋งํ•ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด๋‚ด์ฃผ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ํšจ์œจ์ ์œผ๋กœ ๋งŽ์ด ๋ถ„ํ• ํ•ด์„œ ์ฒซ๋ฒˆ์งธ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๊ธฐ์œ„ํ•œ ์ •๋ง ํ•„์ˆ˜์ ์ธ ๋ถ€๋ถ„๋งŒ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์„์ง€๋ฅผ ๊ณ ๋ฏผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

SSR๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๊ณ , ์ธํ„ฐ๋ ‰์…˜ ํ•˜๋Š” ์‹œ๊ฐ„์˜ ๊ณต๋ฐฑ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ์ง€, ์–ด๋–ป๊ฒŒ ์กฐ๊ฒ€๋” ๋งค๋„๋Ÿฌ์šด UI์™€ UX๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์„์ง€ ๊ณ ๋ฏผํ•ด ๋ณด๋ฉด ์ข‹์„๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋งˆ์น˜๋ฉฐ

์š”์ฆ˜์—๋Š” ๊ผญ CSR ๋˜๋Š” SSR๋งŒ์„ ๊ณ ์ง‘ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ ๋ณด๋‹ค๋Š” Gatsby์™€ ๊ฐ™์€ SSG(Static Site Generation)๋„ ์žˆ์Šต๋‹ˆ๋‹ค. (์ง€๊ธˆ ๋ณด๊ณ  ๊ณ„์‹œ๋Š” ๋ธ”๋กœ๊ทธ๋„ Gatsby๋ฅผ ์‚ฌ์šฉ) ๋ฟ๋งŒ์•„๋‹ˆ๋ผ React์˜ Next.js, Angular Universal๊ณผ ๊ฐ™์€ Angular ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„œ๋ฒ„์—์„œ ์‹คํ–‰ํ•˜๋Š” ํ…Œํฌ๋‹‰๋„ ์žˆ์œผ๋‹ˆ, ์–ด๋–ค ๋ฐฉ์‹์ด ์ข‹๊ณ  ๋‚˜์˜๊ณ ๊ฐ€ ์•„๋‹Œ ๊ฐ๊ฐ์˜ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๊ณ  ํ•„์š”์— ์˜ํ•ด ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@winuss
Hello :) Developer notes!