Index

μ›Ή λΈŒλΌμš°μ €

λ„€νŠΈμ›Œν¬ & 운영체제

μžλ°”μŠ€ν¬λ¦½νŠΈ

λ¦¬μ•‘νŠΈ

κ²½λ ₯

개인

과제

νƒ€μž…μŠ€ν¬λ¦½νŠΈ

Thoughts

CORS(Cross-origin Resource Sharing)

ꡐ차 좜처 λ¦¬μ†ŒμŠ€ κ³΅μœ λŠ” λ™μΌν•œ URL이 μ•„λ‹Œ λ‹€λ₯Έ μΆœμ²˜μ—μ„œ 데이터λ₯Ό μ£Όκ³  λ°›λŠ” 것을 ν—ˆμš©ν•˜λŠ” 정책이닀.

ν”„λ‘œν† μ½œ, 호슀트, ν¬νŠΈκ°€ λͺ¨λ‘ κ°™μ•„μ•Ό λ™μΌν•œ μΆœμ²˜μ΄λ‹€.

μ‹€μ œλ‘œ λ¦¬μ•‘νŠΈ ν”„λ‘œμ νŠΈλ₯Ό ν•˜λ©΄μ„œ CORS 이슈λ₯Ό κ²ͺμ—ˆλŠ”λ°, 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ package.json μ—μ„œ proxy μ„€μ •μœΌλ‘œ ν•΄κ²°ν–ˆλ‹€.

//package.json

"proxy": "http://localhost:8888"

CSR(Client Side Rendring) SSR(Server Side Rendering)

CSR λ™μž‘

  1. μ„œλ²„μ—μ„œ HTML/CSS λ¦¬μ†ŒμŠ€ λ‹€μš΄ ν›„ 빈 HTML λ…ΈμΆœ

  2. JS λ‹€μš΄λ‘œλ“œ

  3. λ™μ μœΌλ‘œ DOM 생성

  4. μœ μ € μΈν„°λ ‰μ…˜ κ°€λŠ₯

SSR

  1. μ„œλ²„μ—μ„œ λ§Œλ“€μ–΄μ§„ HTML νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œ ν›„ μ™„μ„±λœ ν™”λ©΄ λ…ΈμΆœ

  2. JS λ‹€μš΄λ‘œλ“œ

  3. μœ μ € μΈν„°λ ‰μ…˜ κ°€λŠ₯

μ§„ν–‰ν–ˆλ˜ ν”„λ‘œμ νŠΈλŠ” 컀머슀 λΉ„μ¦ˆλ‹ˆμŠ€μ΄κΈ° λ•Œλ¬Έμ— SEOκ°€ μ€‘μš”ν•œ ν”Œλž«νΌμ΄κ³  이λ₯Ό μœ„ν•΄ Next.jsλ₯Ό λ„μž…ν–ˆλ‹€.

REST API

REST(Representational State Transfer)λŠ” μ„œλ²„μ™€ 톡신할 λ•Œμ˜ λ§Œλ“  ν•˜λ‚˜μ˜ μΈν„°νŽ˜μ΄μŠ€μ΄λ‹€. 일관적인 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μœ μ§€ν•  수 μžˆλ‹€. μžμ› 기반으둜 μ„€κ³„λ˜κΈ° λ•Œλ¬Έμ— λ§ν•˜λ €λŠ” λ°”λ₯Ό λ©”μ‹œμ§€λ₯Ό 톡해 μ‰½κ²Œ μ•Œ 수 μžˆλ‹€. λ‹€λ§Œ HTTP Methodκ°€ ν•œμ •μ μΈ 단점도 μžˆλ‹€.

  • μžμ› Resource -> HTTP URI(Uniform Resource Identifier)

  • ν–‰μœ„ Verb -> HTTP Method(POST, GET, PUT, DELETE)을 톡해 μžμ›μ˜ CRUD κΈ°λŠ₯을 μˆ˜ν–‰ν•  수 μžˆλ‹€.

  • ν‘œν˜„ Representations -> HTTP Message Pay Load

GET api/team
GET api/team/:id
POST api/team
PUT api/team
DELETE api/team

μ†Œλ¬Έμžλ‘œλ§Œ, ν•˜μ΄ν”ˆ(-)으둜, λ§ˆμ§€λ§‰μ—λŠ” μŠ¬λž˜μ‹œ(/) 없이 그리고 ν–‰μœ„λ₯Ό ν¬ν•¨ν•˜μ§€ μ•ŠλŠ” 방식 λ“±μœΌλ‘œ μ„€κ³„λ˜μ–΄μ•Ό ν•œλ‹€.

*URI vs URL

λΈŒλΌμš°μ € μ €μž₯μ†Œ

두 μ €μž₯μ†Œ key: value ν˜•νƒœμ˜ λ¬Έμžμ—΄ string κ°’μœΌλ‘œ μ €μž₯ν•œλ‹€.

Cookie

CookieλŠ” 4KB둜 μž‘μ€ 데이터λ₯Ό μ €μž₯ν•  수 있고, μ„œλ²„μ™€ ν†΅μ‹ ν•œλ‹€. μΏ ν‚€λŠ” 주둜 μ„œλ²„κ°€ μœ μ €λ₯Ό κΈ°μ–΅ν•˜κΈ° μœ„ν•œ μš©λ„λ‘œ μ‚¬μš©λœλ‹€. HTTP ν”„λ‘œν† μ½œμ€ stateless이기 λ•Œλ¬Έμ— request > responseκ°€ λλ‚˜κ³  λ‚˜λ©΄ 톡신을 끊고 κ·Έ λ‹€μŒ 톡신을 해도 이전 λ‚΄μš©μ„ κΈ°μ–΅ν•  수 μ—†κΈ° λ•Œλ¬Έμ΄λ‹€. (주둜 μ‚¬μš©μžμ˜ μ–Έμ–΄, 닀크λͺ¨λ“œ λ“±μ˜ λ‚΄μš©μ„ μ €μž₯)

Web Storage

Web StorageλŠ” Local, Session으둜 λ‚˜λ‰˜μ–΄μ Έ μžˆλ‹€. 5MB μ •λ„λ‘œ 쿠킀에 λΉ„ν•΄μ„œ 큰 데이터λ₯Ό μ €μž₯ ν•  수 있고, μ„œλ²„λ‘œ μ „μ†‘λ˜μ§€ μ•ŠλŠ”λ‹€. ꡳ이 μ„œλ²„λ‘œ 전솑할 ν•„μš”κ°€ μ—†λŠ” 데이터라면 λ³΄μ•ˆκ³Ό 속도λ₯Ό μœ„ν•΄ μ΄μš©ν•˜λ©°, μ›Ή μ„±λŠ₯에 영ν–₯을 주지 μ•Šκ³  큰 데이터λ₯Ό μ €μž₯ν•  수 μžˆλ‹€. Local StorageλŠ” μœ νš¨κΈ°κ°„μ΄ μ—†μ§€λ§Œ, Session StorageλŠ” 창을 λ‹«μœΌλ©΄ μ΄ˆκΈ°ν™”λœλ‹€.4)

μ‹€μ œλ‘œ ν”„λ‘œμ νŠΈμ—μ„œλ„ Local Storageλ₯Ό μ‚¬μš©ν–ˆμ—ˆκ³ , μΌνšŒμ„± λͺ¨λ‹¬κ³Ό 둜그인 μ—¬λΆ€λ₯Ό ν™•μΈν•˜κΈ° μœ„ν•΄ μ €μž₯ν–ˆλ‹€.

Browser Cache

Browser CacheλŠ” λΈŒλΌμš°μ €μ—μ„œ μ›Ή λ¦¬μ†ŒμŠ€μ˜ 사본을 μ €μž₯ν•˜λŠ” λ°©μ‹μœΌλ‘œ 이미지, HTML, CSS, JS λ“±μ˜ 에셋이 μžˆλ‹€. μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈκ°€ 톡신을 ν•˜λ‹€λ³΄λ©΄ 지연될 수 있고 이 간극을 쀄이기 μœ„ν•΄ λΈŒλΌμš°μ € μΊμ‹œκ°€ μžˆλ‹€.

Javascript, Sync vs Async

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” λ…Ό λΈ”λ‘œν‚Ή, μ‹±κΈ€ μŠ€λ ˆλ“œ 언어이닀. λ˜ν•œ, 선언이 μ•„λ‹Œ λ³€μˆ˜μ— ν• λ‹Ήλ˜λ©΄μ„œ λ°μ΄ν„°μ˜ νƒ€μž…μ΄ κ²°μ •λ˜κΈ° λ•Œλ¬Έμ— 동적 νƒ€μž…μ΄κ³ , μŠ€ν¬λ¦½νŠΈμ–Έμ–΄λ‘œ ν•œ 쀄씩 읽어가며 였λ₯Έμͺ½μ—μ„œ μ™Όμͺ½μœΌλ‘œ, μœ„μ—μ„œ λ°‘μœΌλ‘œ μ§„ν–‰λœλ‹€.

μ‹±κΈ€ μŠ€λ ˆλ“œμ΄μ§€λ§Œ ν•˜λ‚˜μ˜ μž‘μ—…μ΄ μ™„λ£Œλ˜κΈ°λ₯Ό 기닀리지 μ•Šκ³  λ‹€μŒ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€. μ΄λ ‡κ²Œ λΉ„λ™κΈ°μ²˜λ¦¬κ°€ κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— λ…Ό λΈ”λ‘œν‚Ήμ΄λΌ λΆ€λ₯Έλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 비동기 처리 방식은 AJAX(Asynchronous Javascript And XML)라 ν•œλ‹€.

Promise

  • Pending(λŒ€κΈ°): μ΄ˆκΈ°μƒνƒœ

  • Fulfilled(성곡): 비동기 μ²˜λ¦¬κ°€ μ™„λ£Œλ˜μ–΄ ν”„λ‘œλ―ΈμŠ€κ°€ κ²°κ³Ό 값을 λ°˜ν™˜ν•΄μ€€ μƒνƒœ

  • Rejected(μ‹€νŒ¨): 비동기 μ²˜λ¦¬κ°€ μ‹€νŒ¨ν•˜κ±°λ‚˜ 였λ₯˜κ°€ λ°œμƒν•œ μƒνƒœ

PromiseλŠ” 3가지 μƒνƒœλ₯Ό 가진닀.

Position

/* μ–΄λŠ μœ„μΉ˜μ— 배치될 지 μ •ν•  수 μžˆλŠ” 속성 */

position: static;
position: relative;
position: absolute;
position: fixed;
position: sticky;

SCSS

cssλ₯Ό 쑰금 더 효율적으둜 νŽΈλ¦¬ν•˜κ²Œ μž‘μ„±ν•  수 μžˆλ„λ‘ variable, nesting, mixin λ“±μ˜ κ°œλ…μ„ μΆ”κ°€ν•΄μ„œ λ‚˜μ˜¨ 슀크립트 언어이닀. λ‹€λ§Œ SaSS와 SCSSλŠ” { } κ°μ‹ΈλŠ” ꡬ문의 μ—¬λΆ€λ‘œ λ‹€λ₯΄λ‹€.

attribute, property

<input value="name" />

νƒœκ·Έ λ‚΄ 속성을 μ˜λ―Έν•˜λŠ” attribute

DOM은 객체둜 μ΄λ£¨μ–΄μ ΈμžˆκΈ° λ•Œλ¬Έμ— 생성 ν›„ κ·Έ μ•ˆμ— 속성은 property , DOM을 μ‘°μž‘ν•΄ propertyλ₯Ό λ³€κ²½ν•  수 μžˆλ‹€.

Display, Box Model

inline은 μ‹€μ œ μ»¨ν…νŠΈμ˜ 크기 λ§Œμ„ μ˜λ―Έν•œλ‹€.

inline-block은 marginκ³Ό padding μ†μ„±μ—μ„œ μƒν•˜μ—λ§Œ μ μš©λœλ‹€. width, heightλŠ” μ μš©λ˜μ§€ μ•ŠλŠ”λ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μ˜†μ— μ»¨ν…νŠΈκ°€ 뢙을 수 μžˆλ‹€.

block은 ν•œ 쀄을 λ‹€ μ°¨μ§€ν•œλ‹€. width, height, margin, padding λͺ¨λ“  것이 μ μš©λœλ‹€.

μ»¨ν…νŠΈμ˜ μ˜μ—­μ€ content+padding으둜 background, img λ“±μ˜ μš”μ†Œλ“€μ΄ ν•΄λ‹Ή μ˜μ—­κΉŒμ§€ λ°˜μ˜λœλ‹€.

Semantic Markup

  • μ›Ή μ ‘κ·Όμ„±: λͺ¨λ“  μ‚¬μš©μžκ°€ μ œμ™Έλ˜μ§€ μ•Šκ³  웹을 μ΄μš©ν•  수 μžˆλ„λ‘ 접근성을 μ€€μˆ˜ν•΄μ•Ό ν•œλ‹€.

  • SEO μ΅œμ ν™”: λ¬Έμ„œ λ‚΄ νƒœκ·Έμ™€ λ‚΄μš©μ„ 톡해 뢄석해 μ–΄λ–€ λ‚΄μš©μ΄ ν¬ν•¨λ˜μ–΄ μžˆλŠ”λ° 효과적으둜 뢄석할 수 μžˆμ„ 것이닀.

  • 개발: ν˜‘μ—… μ‹œμ˜κ°€λ…μ„±, μŠ€νƒ€μΌμ„ λΆ€μ—¬ν•  λ•Œ μ΅œλŒ€ν•œ λ‹€μ–‘ν•œ νƒœκ·Έλ₯Ό ν™œμš©ν•΄ μ‰½κ²Œ μŠ€νƒ€μΌμ„ λΆ€μ—¬ν•  수 μžˆλ‹€.

Async, Defer

λ‘˜λ‹€ 슀크립트λ₯Ό λ‹€μš΄λ°›λŠ” λ™μ•ˆ HTML λžœλ”λ§μ΄ μ€‘λ‹¨λ˜μ§€ μ•ŠλŠ”λ‹€.

AsyncλŠ” 슀크립트 λ‹€μš΄μ΄ μ™„λ£Œλ˜λ©΄ λ°”λ‘œ μ‹€ν–‰ν•œλ‹€.

DeferλŠ” 슀크립트 λ‹€μš΄μ΄ μ™„λ£Œλ˜κ³  HTML을 λ‹€ 읽은 후에 μ‹€ν–‰ν•œλ‹€.

Type, Interface

μΈν„°νŽ˜μ΄μŠ€λŠ” 객체의 μ‹œκ·Έλ‹ˆμ³λ§Œμ„ λ§Œλ“€ 수 μžˆλ‹€.

λ˜ν•œ, ν™•μž₯ μ‹œ λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 선언해도 μžλ™μœΌλ‘œ ν™•μž₯λ˜μ§€λ§Œ νƒ€μž…μ€ λΆˆκ°€λŠ₯ν•˜λ‹€.

μΈν„°νŽ˜μ΄μŠ€λŠ” extendsλ₯Ό 톡해 μƒμ†λ°›λŠ” κ°œλ…, νƒ€μž…μ€ μœ λ‹ˆμ–Έ νƒ€μž…μœΌλ‘œ ν™•μž₯ν•  수 μžˆλ‹€.

Generic은 거의 μ‚¬μš©ν•΄ λ³Έ 적은 μ—†μœΌλ‚˜, Nullable<T>둜 μœ ν‹Έμ„± νƒ€μž…κ°€λ“œλ₯Ό ν™œμš©ν•΄λ³Έ κ²½ν—˜μ€ μžˆλ‹€. Tλ₯Ό 톡해 정해지지 μ•Šμ€ νƒ€μž…μ„ unknowμ΄λ‚˜ anyκ°€ μ•„λ‹Œ 효율적으둜 νƒ€μž…μ„ μ •μ˜ν•΄μ„œ μ‚¬μš©ν•  수 μžˆλŠ” 걸둜 μ•Œκ³ μžˆλ‹€.

μ œλ„€λ¦­ μœ ν‹Έλ¦¬ν‹° νƒ€μž…μœΌλ‘œλŠ” readonly, omit, exclude, partial λ“± λ‹€μ–‘ν•œκ²Œ μžˆλ‹€.

콜백, ν”„λ‘œλ―ΈμŠ€, 페치, μ‰˜λ‘œμš°μΉ΄ν”Ό λ”₯μΉ΄ν”Ό, λ¦¬μ•‘νŠΈ, λ¦¬λ•μŠ€

ν”„λ‘œλ―ΈμŠ€κ°€ λ‚˜μ˜€κ²Œ 된 μ΄μœ λŠ” 콜백 νŒ¨ν„΄μœΌλ‘œ λΉ„λ™κΈ°μ²˜λ¦¬λ₯Ό 진행할 μ‹œ, μ—λŸ¬ μ²˜λ¦¬κ°€ μ–΄λ ΅κ³  가독성 μΈ‘λ©΄μ—μ„œλ„ νž˜λ“€κΈ° λ•Œλ¬Έμ— ν”„λ‘œλ―ΈμŠ€κ°€ νƒ„μƒν–ˆλ‹€. λ˜ν•œ 비동기 방식은 μž‘μ—…μ€‘μΈ μ½”λ“œκ°€ λλ‚˜κΈ° 전에 λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° λ•Œλ¬Έμ— κ²°κ³Όλ₯Ό μ˜ˆμΈ‘ν•˜κΈ° μ–΄λ ΅λ‹€.

ν”„λ‘œλ―ΈμŠ€ κ°μ²΄λŠ” pending, fulfilled, rejected의 μƒνƒœλ₯Ό 가진닀. ν”„λ‘œλ―ΈμŠ€λŠ” .then() .catch() ꡬ문을 톡해 이행/거절 λ˜μ—ˆμ„ μ‹œ 진행할 μž‘μ—…κ³Ό μ—λŸ¬κ°€ λ°œμƒν–ˆμ„ λ•Œ 캐치 ꡬ문을 톡해 μ œμ–΄ν•  수 μžˆλ‹€.

λ¦¬μ•‘νŠΈ 라이프사이클이 무엇인지

μƒνƒœκ΄€λ¦¬λ₯Ό ν•˜κ±°λ‚˜ 라이프사이클에 λ§žμΆ”μ–΄ κ°œλ°œμ„ ν•˜λ €λ©΄ classλ₯Ό μ΄μš©ν•œ 방법 λ°–μ—λŠ” μ—†μ—ˆκ³ , classλ₯Ό μ‚¬μš©ν•˜λ©΄ ν•„μš” μ΄μƒμœΌλ‘œ λ§Žμ€ μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Όν•˜λŠ”λ° this, render 기타 λ“±λ“± μ—¬λŸ¬κ°€μ§€

thisλŠ” μžμ‹ μ΄ μ†ν•œ 객체 λ˜λŠ” μžμ‹ μ΄ 생성할 μΈμŠ€ν„΄μŠ€λ₯Ό κ°€λ¦¬ν‚€λŠ” 자기 μ°Έμ‘° λ³€μˆ˜(self-reference variable)

일반 ν•¨μˆ˜μ˜ 경우 (μƒμ„±μž ν•¨μˆ˜, ν•¨μˆ˜ μ„ μ–Έλ¬Έ λ“±)은 constructor/prototype 이 μžˆκΈ°μ— 즉, 객체이닀.

ν™”μ‚΄ν‘œ ν•¨μˆ˜μ˜ 경우 non-constructor μ΄λ―€λ‘œ 객체가 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— thisλ₯Ό μ΄μš©ν•˜λ©΄ μƒμœ„ μŠ€μ½”ν”„ 일반 ν•¨μˆ˜μ—μ„œ 바인딩할 객체λ₯Ό μ°ΎλŠ”λ‹€.

thisλŠ” ν•¨μˆ˜ 생성 μ‹œμ μ΄ μ•„λ‹Œ ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜λŠ” μ‹œμ μ— 따라 λ™μ μœΌλ‘œ 바뀐닀.

Last updated