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

๐Ÿ“ฐ CS ์ค€๋น„/์ผ๋ฐ˜

์ผ๋ฐ˜์ ์ธ ์งˆ๋ฌธ

  • ์–ด์ œ/์ด๋ฒˆ ์ฃผ์— ๋ฌด์—‡์„ ๊ณต๋ถ€ํ•˜์…จ๋‚˜์š”?
  • ์ฝ”๋”ฉ์„ ํ•  ๋•Œ ๋‹น์‹ ์„ ๋“ค๋œจ๊ฒŒ ํ•˜๊ฑฐ๋‚˜ ํฅ๋ฏธ๋ฅผ ๋„๋Š” ๊ฒƒ๋“ค์€ ๋ฌด์—‡์€ ๊ฐ€์š”?
  • ์ตœ๊ทผ์— ๋‹น์‹ ์ด ๊ฒฝํ—˜ํ•œ ๊ธฐ์ˆ ์ ์ธ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ด๊ณ  ๊ทธ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋‚˜์š”?
  • ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•  UI, Security, Performance, SEO, Maintainability์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • ์„ ํ˜ธํ•˜๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๋Œ€ํ•ด ์ž์œ ๋กญ๊ฒŒ ์ด์•ผ๊ธฐํ•ด ์ฃผ์„ธ์š”.
  • ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์€ ์–ด๋–ค ๊ฒƒ๋“ค์„ ์‚ฌ์šฉํ•ด๋ณด์…จ์Šต๋‹ˆ๊นŒ?
  • ๋‹น์‹ ์ด ์›น ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค ๋•Œ์˜ ๊ณผ์ •์„ ์„ค๋ช…ํ•ด์ฃผ์‹ค ์ˆ˜ ์žˆ์„๊นŒ์š”?
  • ๋‹น์‹ ์—๊ฒŒ 5๊ฐ€์ง€ ๋‹ค๋ฅธ stylesheet๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์ดํŠธ์— ์ œ๊ณตํ•˜๋Š” ๊ฒŒ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ผ๊นŒ์š”?
  • ์ ์ง„์  ํ–ฅ์ƒ๋ฒ•(progressive enhancement)๊ณผ ์šฐ์•„ํ•œ ์„ฑ๋Šฅ์ €ํ•˜๋ฒ•(graceful degradation)์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
  • ์›น์‚ฌ์ดํŠธ์—์„œ assets/resources๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๊ด€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•œ ๋ฒˆ์— 1๊ฐœ์˜ ๋„๋ฉ”์ธ์—์„œ ๋‚ด๋ ค๋ฐ›๋Š” ์ž์›์€ ๋ช‡ ๊ฐœ์ธ๊ฐ€์š”?
    • ์˜ˆ์™ธ์—๋Š” ์–ด๋–ค ๊ฒƒ๋“ค์ด ์žˆ๋‚˜์š”?
  • ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ์„ธ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์— ๊ด€ํ•ด์„œ ์ด์•ผ๊ธฐ ํ•ด ๋ณด์„ธ์š”.
  • ๋‹น์‹ ์ด ํ”„๋กœ์ ํŠธ์— ํ•ฉ๋ฅ˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทผ๋ฐ ๊ทธ๋“ค์€ Tab์„ ์ด์šฉํ•˜๊ณ , ๋‹น์‹ ์€ Space๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ํ•˜์‹ค ๊ฑด๊ฐ€์š”?
  • ๊ฐ„๋‹จํ•œ Slideshow ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๊ด€ํ•ด์„œ ์ด์•ผ๊ธฐํ•ด ๋ณด์„ธ์š”.
  • ๋งŒ์•ฝ ๋‹น์‹ ์ด ์˜ฌํ•ด ๊ธฐ์ˆ ์  ์ฑ…์ž„์ž๊ฐ€ ๋˜์—ˆ๋‹ค๋ฉด ๋ฌด์—‡์„ ๋จผ์ € ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
  • ํ‘œ์ค€์˜ ์ค‘์š”์„ฑ์— ๊ด€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • Flash of Unstyled Content์— ๊ด€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”. ๋˜ FOUC๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„  ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”?
  • ARIA์™€ screenreader์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”. ๋˜ ์ ‘๊ทผ์„ฑ์„ ์ง€์›ํ•˜๋Š” ์›น์‚ฌ์ดํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ๋งŒ๋“œ๋Š”์ง€์— ๋Œ€ํ•ด๋„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • CSS ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ JavaScript ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ ์ฐจ์ด์ ์— ๊ด€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  • CORS๋Š” ๋ฌด์—‡์˜ ์•ฝ์ž์ด๊ณ  ์–ด๋–ค ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ ์–ธ๊ธ‰ํ•˜๋Š” ๊ฒƒ์ธ๊ฐ€์š”?

 


๋‹น์‹ ์—๊ฒŒ 5๊ฐ€์ง€ ๋‹ค๋ฅธ stylesheet๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์ดํŠธ์— ์ œ๊ณตํ•˜๋Š” ๊ฒŒ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ผ๊นŒ์š”?

CSS๋Š” ๋Ÿฐํƒ€์ž„์‹œ ์กฐ์ž‘ ๊ฐ€๋Šฅํ•œ ์„ ์–ธํ˜• ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ฐ ์Šคํƒ€์ผ์‹œํŠธ๋ฅผ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋ฆฌ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๋„์ž…(SASS, LESS)ํ•˜์—ฌ ํ•˜๋‚˜์˜ ์Šคํƒ€์ผ์‹œํŠธ๋กœ ๋ณ‘ํ•ฉํ•œ ํ›„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

์ ์ง„์  ํ–ฅ์ƒ๋ฒ•(progressive enhancement)๊ณผ ์šฐ์•„ํ•œ ์„ฑ๋Šฅ์ €ํ•˜๋ฒ•(graceful degradation)์˜ ์ฐจ์ด๋ฅผ ์„ค๋ช…ํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ ์ง„์  ํ–ฅ์ƒ๋ฒ• (Progressive enhancement) ์šฐ์•„ํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๋ฒ• (graceful degradation)
๋งŽ์€ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ๋ง๊ทธ๋Œ€๋กœ ๊ธฐ๋Šฅ์„ ์ ์ง„์ ์œผ๋กœ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ.
๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ฐจ๊ณก์ฐจ๊ณก ์Œ“์•„์„œ ๋ฐœ์ „ํ•ด ๋‚˜๊ฐ€๋Š” ๋ฐฉ๋ฒ•
๋…ธ๋ ฅ๊ณผ ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค.
์ตœ์‹  ๊ธฐ์ˆ ์„ ๊ธฐ๋ฐ˜ ๋˜๋Š” ์ตœ์‹  ๊ธฐ๊ธฐ์—์„œ ๋™์ž‘ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค๊ณ  ๋‚˜์„œ, ์˜ค๋ž˜๋œ ๊ธฐ์ˆ  ๋˜๋Š” ์˜ค๋ž˜๋œ ๊ธฐ๊ธฐ์—์„œ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ. 
์‚ฌ์šฉ์ž๋“ค์˜ ๊ธฐ๊ธฐ๋ฅผ ์œ„ํ•ด ๋ณ„๋„์˜ ๋ฒ„์ „์„ ๋งŒ๋“ค์–ด ๋†“๋Š” ๊ฒƒ. 
ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ ์ˆœ์ „ํžˆ ๊ฐœ๋ฐœ์ž ๊ด€์ ์—์„œ ์ž‘์„ฑ๋œ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ javascript๋ฅผ ๋ชจ๋ฅด๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ๋„์›€์ด ๋˜์ง€ ๋ชปํ•œ๋‹ค.
ex ) ์›น ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ
1. HTML๋กœ ๋งˆํฌ์—…์„ ๊ตฌ์„ฑํ•œ๋‹ค.
2. CSS๋กœ ์Šคํƒ€์ผ์„ ์ž…ํžŒ๋‹ค.
3. JS๋กœ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ ์‹œํ‚จ๋‹ค.
ex) ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ javascript๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์„ ๋•Œ
js๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ธฐ๊ธฐ๋ฅผ ์œ„ํ•ด <noscript> ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ "javascript๊ฐ€ ์ง€์›๋˜๋Š” ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•ด ์ฃผ์„ธ์š”!" ์™€ ๊ฐ™์€ ์•Œ๋žŒ์„ ๋„์›Œ์ฃผ๋Š” ๊ฒƒ

 

ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ์„ธ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์— ๊ด€ํ•ด์„œ ์ด์•ผ๊ธฐ ํ•ด ๋ณด์„ธ์š”.

https://jsmokblog.tistory.com/21

 

๋ Œ๋”๋ง ์ตœ์ ํ™” ๋ฐฉ๋ฒ• - ์ดˆ๊ธฐ ๋ Œ๋”๋ง ์ตœ์ ํ™”

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

jsmokblog.tistory.com

 

์›น ํ‘œ์ค€์— ๊ด€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์›น ํ‘œ์ค€์ด๋ž€ ์›น ํ‘œ์ค€ํ™” ๋‹จ์ฒด์ธ W3C(world wide web consorution)์—์„œ ๊ถŒ๊ณ ํ•œ ํ‘œ์ค€์•ˆ์— ์˜ํ•ด ํ‘œํ˜„, ๊ตฌ์กฐ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ œ์ž‘ํ•˜๊ณ  ์›น์„ ๊ตฌํ˜„ํ•˜๋Š” ์ž‘์—…์„ ์˜๋ฏธํ•œ๋‹ค.

์›น ํŽ˜์ด์ง€ ์ œ์ž‘์— ์žˆ์–ด ๋ธŒ๋ผ์šฐ์ €์˜ ์ข…๋ฅ˜ ๋ฐ ๋ฒ„์ „์— ๋”ฐ๋ฅธ ๊ธฐ๋Šฅ ์ฐจ์ด์— ๋Œ€ํ•ด์„œ ์–ด๋Š ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์„ ํƒํ•˜๋“ ์ง€ ํ˜ธํ™˜์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๋Š” ํ‘œ์ค€์•ˆ์ด ๋ฐ”๋กœ '์›น ํ‘œ์ค€'์ด๋‹ค.

์›น ํ‘œ์ค€์˜ ์ค‘์š”์„ฑ 3๊ฐ€์ง€
1. ์›น ํŽ˜์ด์ง€ ์ˆ˜์ • ๋ฐ ์šด์˜ ๊ด€๋ฆฌ ์šฉ์ด
์˜จ๋ผ์ธ ์ฝ˜ํ…์ธ ์˜ ์˜ฌ๋ฐ”๋ฅธ ๊ตฌ์กฐํ™”์™€ CSS๋กœ ์‹œ๊ฐ ํ‘œํ˜„์„ ํ†ต์ผํ•ด ์ œ์ž‘ ๋ถ€๋‹ด์„ ์ค„์ž„

2. ์›น ์ ‘๊ทผ์„ฑ ํ–ฅ์ƒ
์—ฌ๋Ÿฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ˜ธํ™˜์ด ๊ฐ€๋Šฅํ•˜๊ณ , ํ‘œ์ค€์ด ์ •ํ•ด์ ธ ์žˆ๋‹ค ๋ณด๋‹ˆ ๋ณด๋‹ค ๋Œ€์ค‘์„ฑ ์ง€๋‹˜
3. ๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค ํ˜ธํ™˜
์›น ํ‘œ์ค€์œผ๋กœ ์ œ์ž‘ํ•˜๋ฉด ๋ณ„๋„์˜ ์›น ํŽ˜์ด์ง€ ์ œ์ž‘ ์—†์ด ํ˜ธํ™˜ ๊ฐ€๋Šฅ

 

Flash of Unstyled Content์— ๊ด€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”. ๋˜ FOUC๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„  ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜์š”?

FOUC์˜ ์ •์˜ FOUC๋Š” ์™ธ๋ถ€์˜ CSS๊ฐ€ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ ์ „์— ์ž ์‹œ ์Šคํƒ€์ผ์ด ์ ์šฉ๋˜์ง€ ์•Š์€ ์›น ํŽ˜์ด์ง€๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š” ํ˜„์ƒ์ด๋‹ค.
FOUC ๋ฐœ์ƒ ์›์ธ ์›น ํ™”๋ฉด์ด ๊นœ๋นก๊ฑฐ๋ฆฌ๋Š” ํ˜„์ƒ์€ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง์˜ ์ˆœ์„œ์˜ ๋ฌธ์ œ์ด๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” HTML, CSS, JS์ˆœ์„œ๋กœ ๋ฐ›๊ฒŒ ๋˜๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ CSS์ ์šฉ์ด ์•ˆ ๋œ ์ƒํƒœ์—์„œ ๋ณด์—ฌ์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.
FOUC ํ•ด๊ฒฐ์ฑ… 1. Preload์‹œํ‚ค๊ธฐ
2. rendering delay์‹œํ‚ค๊ธฐ
3. Font Loading API์“ฐ๊ธฐ
4. Proper caching์ ์šฉํ•˜๊ธฐ(์›น ์บ์‰ฌ ์‚ฌ์šฉ)

 

CSS ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ JavaScript ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ ์ฐจ์ด์ ์— ๊ด€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ช…๋ นํ˜• ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ์„ธ๋ฐ€ํ•œ ์กฐ์ •์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด ์žฅ์ ์ด๊ณ  CSS ์• ๋‹ˆ๋ฉ”์ด์…˜์€ ์„ ์–ธํ˜• ์–ธ์–ด๋กœ์จ ์ง„์ž…์žฅ๋ฒฝ์ด ๋‚ฎ๊ณ  ๋˜ํ•œ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ฉ”์ธ์“ฐ๋ ˆ๋“œ๊ฐ€ ์•„๋‹Œ ์ปดํฌ์ง€ํŠธ๋ผ๋Š” ๋ณ„๋„์˜ ์“ฐ๋ ˆ๋“œ์—์„œ ๊ตฌํ˜„๋˜๊ธฐ ๋•Œ๋ฌธ์— GPU์˜ ๋ฐฑ ๋ฒ„ํผ์—์„œ ์ฒ˜๋ฆฌ๋˜๊ฒŒ ๋˜๋ฏ€๋กœ ์„ฑ๋Šฅํ–ฅ์ƒ์— ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹จ, CSS ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ ๊ฒฝ์šฐ ์ปดํฌ์ง€ํŒ…์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ์†์„ฑ ์ฆ‰ opacity, transform ๋งŒ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. left, top ๋“ฑ์˜ ๋ ˆ์ด์•„์›ƒ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ์†์„ฑ์ผ ๊ฒฝ์šฐ ์˜คํžˆ๋ ค ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

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


๋™๊ธฐ์™€ ๋น„๋™๊ธฐ์˜ ์ฐจ์ด

๋™๊ธฐ(Synchronous) ๋ฐฉ์‹ ๋น„๋™๊ธฐ(Asynchronous) ๋ฐฉ์‹
์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‹คํ–‰์ด ๋๋‚˜๋ฉด ๋‹ค์Œ ๋™์ž‘์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ํ•ด๋‹น ๋™์ž‘์˜ ์ฒ˜๋ฆฌ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ๋‹ค์Œ ์š”์ฒญ์ด ๋™์ž‘ํ•˜๋Š” ๋ฐฉ์‹
- ์ˆœ์„œ์— ๋งž์ถ”์–ด ์ง„ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ œ์–ดํ•˜๊ธฐ ์‰ฝ๋‹ค.
- ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์š”์ฒญ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์–ด ํšจ์œจ์ด ๋–จ์–ด์ง„๋‹ค.
- ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋Š” ์‹œ๊ฐ„์„ ๊ธฐ๋‹ค๋ฆด ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
- ์ž‘์—…์ด ์™„๋ฃŒ๋œ ๊ฒฐ๊ณผ๋ฅผ ์ œ์–ดํ•˜๊ธฐ ์–ด๋ ต๋‹ค.


SPA (Single Page Application), MPA(Multi Page application)
SPA๋ฅผ CSR(Client Side Rendering)๋ฐฉ์‹์œผ๋กœ, MPA๋ฅผ SSR(Server Side Rendering)๋ฐฉ์‹์œผ๋กœ ๋ Œ๋”๋งํ•œ๋‹ค๊ณ  ๋งํ•œ๋‹ค.

SPA <์žฅ์ > <๋‹จ์ >
๋‹จ์ผ ํŽ˜์ด์ง€๋กœ ๊ตฌ์„ฑ๋œ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์„ ๋œปํ•˜๋Š” ๋‹จ์–ด์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์„ ๋ฐฐ์ œํ•˜๊ณ , ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ JSON ๋“ฑ์˜ ํ˜•ํƒœ๋กœ ๋ฐ›์•„ ๋™์ ์œผ๋กœ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค. - ์ข‹์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•œ๋‹ค.
- ํŽ˜์ด์ง€์˜ ์ผ๋ถ€๋งŒ ๋ฐ”๋€Œ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๋‹ค.
- ๊ฐœ๋ฐœํ•˜๊ธฐ์— ๋” ์‹ฌํ”Œํ•˜๋‹ค.
- ๋กœ์ปฌ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์บ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.
- SPA์˜ Appication์€ ์„œ๋ฒ„์—๊ฒŒ ์ •์ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•œ
๋ฒˆ๋งŒ ์š”์ฒญํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋Š” ์ „๋ถ€ ์ €์žฅํ•ด
๋†“๋Š”๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋Š” ์˜คํ”„๋ผ์ธ์—์„œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
- ์ดˆ๊ธฐ์— ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํ•„์š”ํ•œ ๋ชจ๋“  ์ •์  ๋ฆฌ์†Œ์Šค๋ฅผ ํ•œ๋ฒˆ์— ๋‹ค ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ ๊ตฌ๋™ ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค.
- SEO(๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”) ๊ด€์ ์— ๋ถˆ๋ฆฌํ•˜๋‹ค.
MPA <์žฅ์ >  <๋‹จ์ >
์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ์ •์  ๋ฆฌ์†Œ์Šค๊ฐ€ ๋‹ค์šด๋กœ๋“œ ๋˜๊ณ , ๊ทธ์— ๋งž์ถฐ ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. - SEO ๊ด€์ ์— ์œ ๋ฆฌํ•˜๋‹ค.
- MPA๋Š” ์™„์„ฑ๋œ ํ˜•ํƒœ์˜ HTMLํŒŒ์ผ์„ ์„œ๋ฒ„
๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ๊ฒ€์ƒ‰ ์—”์ง„์ด ํŽ˜
์ด์ง€๋ฅผ ํฌ๋กค๋งํ•˜๊ธฐ์— ์ ํ•ฉํ•˜๋‹ค.
- ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•  ๋•Œ๋งˆ๋‹ค ์ „์ฒด ํŽ˜
์ด์ง€๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋ง ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŽ˜์ด์ง€๋ฅผ
์ด๋™ํ•˜๋ฉด ํ™”๋ฉด์ด ๊นœ๋นก์ธ๋‹ค.
- ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ๊ฐ€ ์„œ๋กœ ์—ฐ๊ด€์ด ๋†’์•„
๊ฐœ๋ฐœ์ด ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.


CORS์™€ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•
CORS : ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์—์„œ ๋ฆฌ์†Œ์Šค ์š”์ฒญ ์‹œ cross-origin HTTP์— ์˜ํ•ด ์š”์ฒญ์„ ํ•˜๋Š”๋ฐ, ๋Œ€๋ถ€๋ถ„์˜ ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ณด์•ˆ ์ƒ์˜ ์ด์œ ๋กœ ์ด ์š”์ฒญ์„ ์ œํ•œํ•œ๋‹ค. ์ด๋ฅผ ๋™์ผ ์˜ค๋ฆฌ์ง„ ์ •์ฑ…(Same Origin Policy)์ด๋ผ๊ณ  ํ•œ๋‹ค.
ํ•ด๊ฒฐ๋ฐฉ๋ฒ• : ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ์š”์ฒญ ๋ณด๋‚ด๋Š” ๋Œ€์ƒ๊ณผ ํ”„๋กœํ† ์ฝœ์ด ๊ฐ™์•„์•ผ ํ•˜๊ณ , ํฌํŠธ๋„ ๊ฐ™์•„์•ผ ํ•œ๋‹ค. JSONP(JSON-padding)์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•˜๊ฑฐ๋‚˜ ํŠน์ • HTTP ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ด ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด์™€ ๊ฐ™์ด ํƒ€ ๋„๋ฉ”์ธ ๊ฐ„ ์ž์›์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์„ Cross Origin Resource Sharing, ์ค„์—ฌ์„œ CORS๋ผ๊ณ  ํ•œ๋‹ค.


ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง•
ํฌ๋กœ์Šค ๋ธŒ๋ผ์šฐ์ง•์€ ์›น ํ‘œ์ค€์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ OS ๋˜๋Š” ํ”Œ๋žซํผ์— ๋Œ€์‘ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋ณ„ ๋ Œ๋”๋ง ์—”์ง„์ด ๋‹ค๋ฅธ ์ƒํ™ฉ ๋“ฑ ์–ด๋– ํ•œ ์ƒํ™ฉ ์†์—์„œ๋„ ๋ฌธ์ œ ์—†์ด ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ „๋žต์„ ์„ธ์šธ ์ˆ˜๊ฐ€ ์žˆ๋Š”๋ฐ, feature detection (๊ธฐ๋Šฅ ํƒ์ง€)์„ ์‚ฌ์šฉํ•ด์„œ ํ•ด๋‹น ๊ธฐ๋Šฅ์ด ํ•ด๋‹น ๋ธŒ๋ผ์šฐ์ €์— ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ํŠนํžˆ ํ•œ ์ชฝ ํ™˜๊ฒฝ์— ์ตœ์ ํ™”๋ฅผ ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค, ์ „์ฒด์ ์ธ ์›น ํ‘œ์ค€์„ ์ง€ํ‚ค๋Š” ๋ฐ์— ๋…ธ๋ ฅํ•ด์•ผ ํ•œ๋‹ค.


RESTful API ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€, ์•„๋Š”๋Œ€๋กœ ๋‹ค ๋งํ•ด๋‹ฌ๋ผ
HTTP ํ†ต์‹ ์—์„œ ์–ด๋–ค ์ฐจ์›์— ๋Œ€ํ•œ CRUD ์š”์ฒญ์„ Resource์™€ Method๋กœ ํ‘œํ˜„ํ•˜์—ฌ ํŠน์ •ํ•œ ํ˜•ํƒœ๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. RESTful API๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒƒ๋“ค๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
- Resource(์ž์›, URI)
- Method(์š”์ฒญ ๋ฐฉ์‹, GET or POST ๋“ฑ)
- Representation of Resource(์ž์›์˜ ํ˜•ํƒœ, JSON or XML ๋“ฑ)


HTTP์™€ HTTPS์˜ ์ฐจ์ด
HTTP(Hypertext Transfer Protocol)๋Š” ์ธํ„ฐ๋„ท์ƒ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•œ ์„œ๋ฒ„/ํด๋ผ์ด์–ธํŠธ ๋ชจ๋ธ์„ ๋”ฐ๋ฅด๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค.
HTTPS๋Š” ๊ธฐ์กด http์— ๋ณด์•ˆ(security)์ด ์ถ”๊ฐ€๋œ ๊ฒƒ์œผ๋กœ, ์„œ๋ฒ„์—์„œ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „์†ก๋˜๋Š” ์ •๋ณด๊ฐ€ ์•”ํ˜ธํ™”๋˜์ง€ ์•Š๋Š” http์˜ ์•ฝ์ ์„ ๋ณด์™„ํ•œ ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

 

 

 

 

'๐Ÿ“ฐ CS ์ค€๋น„ > ์ผ๋ฐ˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

OOP (๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)  (0) 2021.10.30