πŸ’»μš©λ‡½ 개발 λ…ΈνŠΈπŸ’»
article thumbnail
[Web] OAuth의 λ“±μž₯ 및 OAuth 2.0 κ°œλ…μ— λŒ€ν•΄μ„œ μ‰½κ²Œ μ•Œμ•„λ΄μš”.

πŸ“– λ“€μ–΄κ°€λ©° 졜근 λ‹€μ–‘ν•œ μ›Ή μ„œλΉ„μŠ€λ₯Ό 접해보면 κ°„νŽΈν•œ SNS 둜그인으둜 μ‰½κ²Œ μ„œλΉ„μŠ€λ₯Ό μ΄μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이런 κ°„νŽΈν•œ SNS 둜그인이 λ°”λ‘œ OAuth2.0 ν”„λ‘œν† μ½œμ„ 톡해 μ§„ν–‰λ©λ‹ˆλ‹€. 그럼, OAuthκ°€ μ–΄λ–€ λ°°κ²½μ—μ„œ λ“±μž₯ν•˜μ˜€κ³ , ν˜„μž¬λŠ” μ–΄λ–»κ²Œ ν‘œμ€€ν™”λ˜μ–΄ OAuth2.0μ΄λΌλŠ” μ΄λ¦„μœΌλ‘œ μ‚¬μš©λ˜κ³  μžˆλŠ”μ§€, κ·Έ 흐름에 λŒ€ν•œ κ°œλ…μ„ ν•¨κ»˜ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. 🧐 OAuth λ“±μž₯λ°°κ²½ μ›Ή μ„œλΉ„μŠ€μ˜ 닀양성이 μ¦κ°€ν•˜λ©΄μ„œ, μ•ˆμ „ν•˜κ²Œ 정보λ₯Ό κ³΅μœ ν•˜λŠ” 방법에 λŒ€ν•œ ν•„μš”μ„±μ΄ μƒκ²ΌμŠ΅λ‹ˆλ‹€. 이둜 인해 OAuth(Open Authorization)λΌλŠ” κ°œλ…μ΄ νƒ„μƒν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μ„€λͺ…ν•˜κΈ° μœ„ν•΄μ„œ ν•œ κ°€μ§€ 예λ₯Ό λ“€μ–΄ λ³Όκ²Œμš”. 우리의 μ„œλΉ„μŠ€κ°€ μ‚¬μš©μžμ—κ²Œ μ‚¬μš©μžμ˜ ꡬ글에 λŒ€ν•œ 정보λ₯Ό μ œκ³΅ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒμš”? μ‚¬μš©μžκ°€ ꡬ글에 λŒ€..

article thumbnail
[Web] μ›Ή μ†ŒμΌ“(Web Socket)μ΄λž€? λ“±μž₯ λ°°κ²½κ³Ό λͺ©μ , λ™μž‘ 방식 (feat. Polling, Long polling, Server-Sent Event)

πŸ“– λ“€μ–΄κ°€λ©°μ΄λ²ˆ ν¬μŠ€νŒ…μ€ μ›Ή μ†ŒμΌ“(Web Scoket)에 λŒ€ν•œ ν¬μŠ€νŒ…μ„ ν•˜λ €κ³  ν•©λ‹ˆλ‹€. μ΄ 글을 μ½μœΌμ‹œλŠ” 뢄듀은 μ•„λ§ˆ μ›Ή μ†ŒμΌ“μ΄ 무엇인지 μ •λ„λŠ” μ•Œκ³  μžˆμ„ 것이라고 μƒκ°ν•©λ‹ˆλ‹€. λ§žμŠ΅λ‹ˆλ‹€. μ‹€μ‹œκ°„ 톡신이 ν•„μš”ν•  λ•Œ 적극적으둜 μ‚¬μš©λ˜λŠ” κΈ°μˆ μž…λ‹ˆλ‹€. κ·ΈλŸΌ μ™œ μ‹€μ‹œκ°„ 톡신을 ν•  λ•Œ μ›Ή μ†ŒμΌ“μ„ μ‚¬μš©ν•˜λŠ”μ§€, κΈ°μ‘΄μ—λŠ” μ–΄λ–€ 방식을 μ‚¬μš©ν–ˆκ³ , μ–΄λ–€ 문제λ₯Ό ν•΄κ²°ν•΄ μ£ΌλŠ”μ§€, μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€ λ“±λ“± μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.μ›Ή μ†ŒμΌ“μ˜ λ“±μž₯ 배경초기의 인터넷 톡신 방식은 주둜 HTTPλ₯Ό μ΄μš©ν•œ ν΄λΌμ΄μ–ΈνŠΈ(μš”μ²­) - μ„œλ²„(응닡) λͺ¨λΈμ„ 톡해 μ§„ν–‰λ˜μ—ˆμŠ΅λ‹ˆλ‹€.즉, ν΄λΌμ΄μ–ΈνŠΈκ°€ μ„œλ²„μ— μš”μ²­(Request)을 보내고, μ„œλ²„κ°€ 이에 응닡(Response)ν•˜λŠ” λ°˜μ΄μ€‘ 톡신 방식을 λ”°λ¦…λ‹ˆλ‹€. μ΄ 방식이 νŽ˜μ΄μ§€λ₯Ό μš”μ²­ν•˜λŠ” λ“±μ˜ κ°„λ‹¨ν•œ μž‘μ—…μ—λŠ” 효과적..

article thumbnail
[JavaScript] μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ(Execution Context)κ°€ λ¬΄μ—‡μΌκΉŒμš”?

λ“€μ–΄κ°€λ©° πŸ“– μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ΄ν•΄ν•˜λŠ” 데 μžˆμ–΄μ„œ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ(Execution Context)의 κ°œλ…μ— λŒ€ν•΄μ„œ μˆ™μ§€ν•˜λŠ” 것은 μ€‘μš”ν•©λ‹ˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 핡심 κ°œλ… 쀑 ν•˜λ‚˜λ‘œ, μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μ½”λ“œμ˜ μ‹€ν–‰ μˆœμ„œμ™€ 방식을 κ²°μ •ν•˜κ²Œ 되죠. μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ(Excution Context)λž€β“ μ‹€ν–‰ν•  μ½”λ“œμ— μ œκ³΅ν•  ν™˜κ²½ 정보듀을 λͺ¨μ•„놓은 κ°μ²΄μž…λ‹ˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 동적 μ–Έμ–΄λ‘œμ„œμ˜ 성격을 κ°€μž₯ 잘 νŒŒμ•…ν•  수 μžˆλŠ” κ°œλ…μž…λ‹ˆλ‹€. κ·Έλž˜μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ ν™œμ„±ν™”λ˜λŠ” μ‹œμ μ— μ•„λž˜μ™€ 같은 λ™μž‘μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. ν˜Έμ΄μŠ€νŒ…(hoisting) μ™ΈλΆ€ ν™˜κ²½ 정보 ꡬ성 this κ°’ μ„€μ • λ“±λ“± 이둜 인해 λ‹€λ₯Έ μ–Έμ–΄μ—μ„œλŠ” λ°œκ²¬ν•  수 μ—†λŠ” νŠΉμ΄ν•œ ν˜•μƒλ“€μ΄ λ°œμƒν•©λ‹ˆλ‹€. λ™μž‘ κ³Όμ • λ™μΌν•œ ν™˜κ²½μ— μžˆλŠ” μ½”λ“œλ“€μ„ μ‹€ν–‰ν•  λ•Œ ν•„μš”ν•œ ν™˜κ²½ 정보..

article thumbnail
[JavaScript] μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ 비동기 처리 νŒ¨ν„΄μ— λŒ€ν•΄μ„œ μ•Œμ•„λ΄…μ‹œλ‹€. (Callback, Promise, Generator, async/await)

πŸ“– λ“€μ–΄κ°€λ©° 비동기 처리 νŒ¨ν„΄μ„ μ•Œμ•„λ³΄κΈ° μ•žμ„œ, 비동기 μ²˜λ¦¬λž€ λ¬΄μ—‡μΌκΉŒμš”? 비동기 μ²˜λ¦¬λž€? νŠΉμ • μ½”λ“œμ˜ 연산이 μ™„λ£Œλ  λ•ŒκΉŒμ§€ 전체 μ½”λ“œμ˜ 싀행을 μ€‘λ‹¨ν•˜μ§€ μ•Šκ³ , λ‹€μŒ μ½”λ“œλ₯Ό μš°μ„ μ μœΌλ‘œ μ‹€ν–‰ν•˜λŠ” 방식을 λ§ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ λ™μž‘ν•˜λŠ” ν•¨μˆ˜λ₯Ό μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” '비동기 ν•¨μˆ˜'라고 ν•©λ‹ˆλ‹€. 비동기 처리의 ν•œκ³„μ μ€ μž‘μ—… μ™„λ£Œ μ‹œμ μ„ μ˜ˆμΈ‘ν•˜κΈ° μ–΄λ ΅λ‹€λŠ” μ μž…λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이것은 비동기 처리의 본질적인 νŠΉμ„±μ΄λ©°, 이λ₯Ό 효과적으둜 κ΄€λ¦¬ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 기본적으둜 μ‹±κΈ€ μŠ€λ ˆλ“œ(single-threaded) 기반의 μ–Έμ–΄λ‘œ, ν•œ λ²ˆμ— ν•˜λ‚˜μ˜ μž‘μ—…λ§Œ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 즉, μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μ½”λ“œκ°€ μž‘μ„±λœ μˆœμ„œλŒ€λ‘œ, μœ„μ—μ„œ μ•„λž˜λ‘œ, λ™κΈ°μ μœΌλ‘œ μ²˜λ¦¬λœλ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. κ·Έλ ‡λ‹€λ©΄ μ–΄λ–»κ²Œ μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ 비동기적인 ..

article thumbnail
[Next.js] Turbopackμ—μ„œ SVG κ΄€λ ¨ Element type is invalid: expected a string μ—λŸ¬ ν•΄κ²°

πŸ“– λ“€μ–΄κ°€λ©° Next.js 13 버전 μ΄ν›„μ—λŠ” Rust μ–Έμ–΄λ‘œ 개발된 Turbopack이 λ„μž…λ˜μ—ˆμŠ΅λ‹ˆλ‹€. Next 14 λ²„μ „μœΌλ‘œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ μ§„ν–‰ν•˜κ³  Turbopack으둜 개발 ν™˜κ²½μ„ μ‹€ν–‰ν–ˆμ„ λ•Œ λ§žμ΄ν•œ λ¬Έμ œμ— λŒ€ν•΄μ„œ 정리해보렀 ν•©λ‹ˆλ‹€. 문제 λ°œμƒ ❗ Turbopack으둜 개발 ν™˜κ²½μ„ μ‹€ν–‰ν•˜μž μ•„λž˜μ™€ 같이 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. 이 였λ₯˜μ— λŒ€ν•΄ 검색해 λ³΄λ‹ˆ "μ»΄ν¬λ„ŒνŠΈμ˜ 이름이 잘λͺ»λ˜μ—ˆκ±°λ‚˜, import κ²½λ‘œκ°€ 잘λͺ» μž…λ ₯λ˜μ—ˆμ„ λ•Œ λ°œμƒν•œλ‹€"λŠ” μ„€λͺ…을 찾을 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 이에 따라 import 된 뢀뢄을 잘 확인해 λ³΄λΌλŠ” 쑰언이 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜, 제 μ½”λ“œμ—μ„œλŠ” importκ°€ μ •μƒμ μœΌλ‘œ μ΄λ£¨μ–΄μ‘ŒκΈ° λ•Œλ¬Έμ— μˆ˜μ •ν•  뢀뢄이 μ—†μ—ˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ—λŸ¬ λ©”μ‹œμ§€λ₯Ό λ‹€μ‹œ 확인해 λ³Έ κ²°κ³Ό 'DarkModeBtn' μ»΄ν¬λ„Œ..

article thumbnail
[Web] CSR vs SSR vs SSG vs ISR 각 λ Œλ”λ§ 방식 μ‰½κ²Œ μ•Œμ•„λ³΄κΈ°

πŸ“– λ“€μ–΄κ°€λ©° λ¨Όμ €, μ›Ή λ Œλ”λ§(Web Rendering)μ΄λž€ μ›Ή νŽ˜μ΄μ§€λ₯Ό μ‚¬μš©μžμ—κ²Œ λ³΄μ—¬μ£ΌλŠ” 과정을 μ˜λ―Έν•©λ‹ˆλ‹€. 이 λ Œλ”λ§ 방식에 λ”°λΌμ„œ λ‘œλ”© 속도, 검색 μ—”μ§„ μ΅œμ ν™”(SEO), μ‚¬μš©μž κ²½ν—˜ 등이 λ‹¬λΌμ§‘λ‹ˆλ‹€. 이 과정을 κ°„λ‹¨νžˆ λΉ„μœ ν•˜μžλ©΄, λ ˆμŠ€ν† λž‘μ—μ„œ μš”λ¦¬λ₯Ό μ£Όλ¬Έν•œλ‹€κ³  κ°€μ •ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€. λ ˆμŠ€ν† λž‘μ—μ„œ μ†λ‹˜(μ‚¬μš©μž)이 메뉴(μ›Ή νŽ˜μ΄μ§€)λ₯Ό μ£Όλ¬Έν•˜κ³ , μš”λ¦¬μ‚¬(μ„œλ²„)κ°€ μš”λ¦¬(μ›ΉνŽ˜μ΄μ§€)λ₯Ό μ€€λΉ„ν•˜κ³ , 웨이터(λΈŒλΌμš°μ €)κ°€ μš”λ¦¬λ₯Ό μ†λ‹˜μ—κ²Œ κ°€μ Έλ‹€μ£ΌλŠ” κ³Όμ •κ³Ό λΉ„μŠ·ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œ μš”λ¦¬μ‚¬κ°€ μš”λ¦¬λ₯Ό μ€€λΉ„ν•˜λŠ” 과정이 λ°”λ‘œ λ Œλ”λ§(Rendering)μž…λ‹ˆλ‹€. μ΄λ ‡κ²Œ μ€‘μš”ν•œ μ›Ή λ Œλ”λ§μ—λŠ” μ—¬λŸ¬ κ°€μ§€ 방식이 μžˆμŠ΅λ‹ˆλ‹€. 였늘 μ•Œμ•„λ³Ό λ Œλ”λ§ 방식듀은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ λ Œλ”λ§(Client Side Rendering, CS..

article thumbnail
[Next.js] v13 이후 app routerμ—μ„œ μΉ΄μΉ΄μ˜€ν†‘ κ³΅μœ ν•˜κΈ° κ΅¬ν˜„(feat.TypeScript)

πŸ“– λ“€μ–΄κ°€λ©° 졜근 Next.14 버전 app router둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ μ§„ν–‰ν•˜λ©΄μ„œ μΉ΄μΉ΄μ˜€ν†‘ κ³΅μœ ν•˜κΈ° κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” 데 μžˆμ–΄μ„œ λ³€κ²½λœ λΆ€λΆ„κ³Ό μ—¬λŸ¬ 였λ₯˜λ₯Ό λ§žμ΄ν•˜μ—¬ μƒˆλ‘­κ²Œ ν¬μŠ€νŒ…ν•©λ‹ˆλ‹€. 이전 ν¬μŠ€νŒ…μ—μ„œ 1번 ~ 1-3λ²ˆκΉŒμ§€λŠ” 방법이 λ™μΌν•©λ‹ˆλ‹€. 이전 ν¬μŠ€νŒ…μ„ μ°Έκ³ ν•΄μ„œ ν”Œλž«νΌ λ“±λ‘κΉŒμ§€ ν•˜κ³  μ½μ–΄μ£Όμ‹œλ©΄ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€. app routerμ—μ„œλŠ” _document.tsx와 _app.tsxκ°€ 사라지고 이전에 ν•΄λ‹Ή νŒŒμΌμ—μ„œ μž‘μ„±λ˜μ—ˆλ˜ μ½”λ“œλŠ” layout.tsxμ—μ„œ μž‘μ„±ν•΄μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€. 슀크립트 μ»΄ν¬λ„ŒνŠΈ μž‘μ„± 카카였 λ””λ²¨λ‘œνΌμ—μ„œ ν”Œλž«νΌ 등둝을 μ™„λ£Œν–ˆλ‹€λ©΄ 이제 ν”„λ‘œμ νŠΈλ‘œ λŒμ•„μ™€μ„œ μ μš©μ„ ν•΄λ΄…μ‹œλ‹€. λ¨Όμ € KakaoScript.tsx νŒŒμΌμ„ μƒμ„±ν•˜κ³  μ•„λž˜ μ½”λ“œλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. 파일 μœ„μΉ˜λŠ” ν”„λ‘œμ νŠΈ ꡬ쑰에 맞게 μƒμ„±ν•˜μ‹œλ©΄ 됩..

article thumbnail
[Next.js] 개인 ν”„λ‘œμ νŠΈ 11μ—μ„œ 14둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ κ³Όμ •

πŸ“–λ“€μ–΄κ°€λ©° μ•½ 2λ…„ μ „ Next.js(SSG) + TypeScript둜 μ œμž‘ν•œ λ‘€ MBTI ν”„λ‘œμ νŠΈλ₯Ό 14 λ²„μ „μœΌλ‘œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ ν•œ κ³Όμ • 및 ν›„κΈ°λ₯Ό μž‘μ„±ν•΄λ³΄λ € ν•œλ‹€. ν•΄λ‹Ή 글은 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ μ–΄λ–»κ²Œ ν•˜λŠ” 가에 λŒ€ν•œ 글이 μ•„λ‹™λ‹ˆλ‹€. 제λͺ© κ·ΈλŒ€λ‘œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ ν•˜λŠ” 과정을 κΈ°λ‘ν•˜λŠ” κΈ€μž…λ‹ˆλ‹€. λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ μ™œ ν•΄μ•Ό ν–ˆλŠ”κ°€? 사싀 μ„œλΉ„μŠ€ μžμ²΄λ‘œλŠ” λ¬Έμ œμ—†μ΄ 잘 λŒμ•„κ°€κ³  μžˆμ—ˆλ‹€. λŒ€μ‹ μ— Next.js둜 직접 A - ZκΉŒμ§€ ν•΄λ³Έ ν”„λ‘œμ νŠΈλŠ” λ‘€ MBTI ν”„λ‘œμ νŠΈλ°–μ— μ—†μ—ˆλ‹€. Next.jsκ°€ 11버전에 λΉ„ν•΄ 14 λ²„μ „κΉŒμ§€(특히 13 λ²„μ „μ—μ„œ) λ§Žμ€ 뢀뢄이 변경이 되고, μ–΄λ–»κ²Œ ν™œμš©ν•  수 μžˆλŠ”μ§€ 직접 λΆ€λ”ͺ히며 κΉ¨λ‹¬μœΌλ©° ν•™μŠ΅ν•˜λŠ” λ°©μ‹μœΌλ‘œ 지식을 ν‘μˆ˜ν•˜λŠ” λ‚˜μ˜ μ„±ν–₯인 μ΄μœ μ™€ μ΅œμ‹  λ²„μ „μœΌλ‘œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ ν•˜λ©΄μ„œ κΈ°μ‘΄ μ½”λ“œμ™€λŠ” ..

article thumbnail
[JavaScript] thisκ°€ λ¬΄μ—‡μΌκΉŒμš”? μ½”λ“œ 예제둜 μ‰½κ²Œ μ•Œμ•„λ΄…μ‹œλ‹€.

this ν‚€μ›Œλ“œμ˜ μ •μ˜ μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ thisλŠ” ν˜„μž¬ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό μ°Έμ‘°ν•˜λŠ” νŠΉλ³„ν•œ ν‚€μ›Œλ“œμž…λ‹ˆλ‹€. 기본적으둜 μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ 생성될 λ•Œ ν•¨κ»˜ 결정이 λ˜λŠ”λ°μš”. 즉, this의 값은 ν•¨μˆ˜κ°€ μ–΄λ–»κ²Œ ν˜ΈμΆœλ˜μ—ˆλŠ”μ§€μ— 따라 λ³€ν•˜λ©°, μΌλ°˜μ μœΌλ‘œλŠ” ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œ 객체λ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€. 일반 ν•¨μˆ˜μ—μ„œμ˜ this μΌλ°˜ν•¨μˆ˜μ—μ„œ thisλŠ” 'μ „μ—­ 객체'λ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€. μ „μ—­ κ°μ²΄λž€? λΈŒλΌμš°μ € ν™˜κ²½μ—μ„œλŠ” window, Node.js ν™˜κ²½μ—μ„œλŠ” global 객체λ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€. function main() { console.log(this); } main(); // window 객체 λ˜λŠ” global 객체 좜λ ₯ μœ„μ™€ 같이 μ΄λ ‡κ²Œ μ „μ—­μ μœΌλ‘œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” 것은 function main() { console.log(this); } ..