🌱 μœ„λ‹ˆ Log 🌱

Event-Driven Architecture

일반적으둜 APIλŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ν•œ 값에 λŒ€ν•΄μ„œ 응닡을 μ œκ³΅ν•œλ‹€. ν΄λΌμ΄μ–ΈνŠΈ(μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜, λͺ¨λ°”일 μ•±, μ„œλ²„)κ°€ νŠΉμ • 데이터λ₯Ό μš”μ²­ν•˜λ©΄, APIλŠ” κ·Έ μš”μ²­μ— μ•Œλ§žμ€ 데이터λ₯Ό λ°˜ν™˜ν•œλ‹€. APIλŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ— λŒ€ν•΄μ„œλ§Œ 응닡을 λ°˜ν™˜ν•˜λ©°, ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­ 없이 APIκ°€ 데이터λ₯Ό 보내지 μ•ŠλŠ”λ‹€. ν•˜μ§€λ§Œ APIκ°€ ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­ 없이 ...

DB Lock

Concurrency μ—¬λŸ¬ μž‘μ—…μ΄ λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” κ²ƒμ²˜λŸΌ 보이도둝 κ΄€λ¦¬λ˜λŠ” μƒνƒœ ν•˜λ‚˜μ˜ CPUμ—μ„œ μ—¬λŸ¬ μž‘μ—…μ΄ 싀행될 λ•Œ, CPUλŠ” λΉ λ₯΄κ²Œ μž‘μ—…μ„ μ „ν™˜ν•˜μ—¬ 마치 μ—¬λŸ¬ μž‘μ—…μ΄ λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” κ²ƒμ²˜λŸΌ 보이게 ν•œλ‹€. λ™μ‹œμ„±μ„ ν™œμš©ν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ˜ μ—¬λŸ¬ 뢀뢄이 λ™μ‹œμ— μ‹€ν–‰λ˜μ–΄, 더 λ§Žμ€ μž‘μ—…μ„ λΉ λ₯΄κ²Œ μ²˜λ¦¬ν•  수 있고, μžμ›μ„ 효율적으둜 μ‚¬μš©ν•˜λ©°, 응닡을 ν–₯...

Socket

μžλ°”μ˜ μ†ŒμΌ“μ€ λ„€νŠΈμ›Œν¬ μƒμ—μ„œ 데이터λ₯Ό μ£Όκ³  λ°›κΈ° μœ„ν•œ 톡신 채널을 μ œκ³΅ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° μΈν„°νŽ˜μ΄μŠ€μ΄λ‹€. μ†ŒμΌ“μ€ TCP/IPλ‚˜ UDP같은 ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ λ„€νŠΈμ›Œν¬μ— μ—°κ²°λœ 두 ν”„λ‘œκ·Έλž¨ μ‚¬μ΄μ—μ„œ 데이터λ₯Ό μ†‘μˆ˜μ‹ ν•  수 μžˆλ„λ‘ ν•œλ‹€. 이λ₯Ό 톡해 μžλ°” ν”„λ‘œκ·Έλž¨ κ°„, λ˜λŠ” μžλ°” ν”„λ‘œκ·Έλž¨κ³Ό λ‹€λ₯Έ μ‹œμŠ€ν…œ 간에 톡신할 수 μžˆλ‹€. Socket μ†ŒμΌ“μ€ TCP...

ThreadLocal

ThreadLocal 각각의 μŠ€λ ˆλ“œ λ³„λ‘œ λ³„λ„μ˜ μ €μž₯ 곡간을 μ œκ³΅ν•˜λŠ” μ»¨ν…Œμ΄λ„ˆλ‘œ μŠ€λ ˆλ“œ λ‹¨μœ„λ‘œ 둜컬 λ³€μˆ˜λ₯Ό ν• λ‹Ήν•  수 μžˆλ‹€. 각 μŠ€λ ˆλ“œκ°€ μžμ‹ λ§Œμ˜ 데이터λ₯Ό κ°€μ§ˆ 수 있고, λ‹€λ₯Έ μŠ€λ ˆλ“œμ™€ κ³΅μœ ν•˜μ§€ μ•Šμ•„, λ©€ν‹° μŠ€λ ˆλ“œ ν™˜κ²½μ—μ„œλ„ μŠ€λ ˆλ“œ κ°„ 데이터 κ³΅μœ μ™€ 동기화 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλ‹€. 일반 λ³€μˆ˜μ˜ 수λͺ…은 νŠΉμ • μ½”λ“œ 블둝(λ©”μ„œλ“œ, for λΈ”λ‘λ²”μœ„ λ“±) ...

λ„μ»€λ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ°°ν¬ν•˜

도컀 μ΄λ―Έμ§€λ‘œ λ°°ν¬ν•œλ‹€? 도컀가 무엇이고 이것을 μ–΄λ–»κ²Œ μ™œ μ‚¬μš©ν•˜λŠ”μ§€, 배포가 μ–΄λ–»κ²Œ μ΄λ£¨μ–΄μ§€λŠ”μ§€μ— λŒ€ν•΄ μ•Œμ•„λ³΄μž. κ·Έ 전에 λ„μ»€λŠ” μ–΄λ–»κ²Œ λ“±μž₯ν–ˆκ³ , κΈ°μ‘΄μ—λŠ” μ–΄λ–€ λ°©μ‹μœΌλ‘œ 배포가 μ΄λ£¨μ–΄μ‘Œμ„κΉŒ? κΈ°μ‘΄ 가상화 κΈ°μˆ μ€ 가상 머신을 μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ 각 κ°€μƒν™˜κ²½ λ§ˆλ‹€ λ³„λ„μ˜ μš΄μ˜μ²΄μ œμ™€ ν•˜λ“œμ›¨μ–΄ λ“œλΌμ΄λ²„λ₯Ό μ„€μΉ˜ν•΄μ•Ό ν–ˆλ‹€. λΆˆν•„μš”ν•˜κ²Œ 운영체제λ₯Ό 반볡 μ„€μΉ˜ν•΄...

CI/CD Github Action

μžλ™ν™”λœ ν”„λ‘œμ„ΈμŠ€λ₯Ό 톡해 μˆ˜λ™ μž‘μ—…μ„ 쀄이고 λΆˆν•„μš”ν•œ μ‹œκ°„μ„ 쀄이기 톡해 CI/CDλ₯Ό κ΅¬μΆ•ν–ˆλ‹€. CI/CDλ₯Ό κ΅¬μΆ•ν•˜λŠ” λ°©λ²•μ—λŠ” μ—¬λŸ¬ 가지 μ’…λ₯˜κ°€ μžˆλŠ”λ°, κ·Έ 쀑 Github Action을 μ„ νƒν–ˆλ‹€. Github Action Githubμ—μ„œ μ œκ³΅ν•˜λŠ” CI/CD μž‘μ—…μ„ μžλ™ν™”ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” λ„κ΅¬λ‘œ PR, ν‘Έμ‹œ λ“± μ½”λ“œ 변경이 일어났을 λ•Œ, λΉŒλ“œ 및...

NIO

Java NIO λŠ” JDK 1.4 에 적용된 νŒ¨ν‚€μ§€λ‘œ 기쑴의 Java I/O 느린 단점을 보완 Java IO 파일의 κ²½λ‘œμ™€ 이름 λ“±μ˜ 메타 데이터λ₯Ό ν¬ν•¨ν•œ InputStream, OutputStream 객체 생성 InputStream 및 OutputStream 객체λ₯Ό μ‚¬μš©ν•˜μ—¬ read(), write() λ“±μ˜ λ©”μ„œλ“œ 호좜 이 λ©”μ„œλ“œλ“€μ€ ...

NCP(Naver Cloud Platform)λ₯Ό μ΄μš©ν•˜μ—¬ μ„œλ²„ ꡬ좕

Naverμ—μ„œ μ œκ³΅ν•˜λŠ” μ„œλΉ„μŠ€λ₯Ό μ΄μš©ν•˜μ—¬ μ„œλ²„λ₯Ό κ΅¬μΆ•ν•˜μ˜€λ‹€. f-lab을 톡해 Naver의 ν΄λΌμš°λ“œ μ„œλ²„ κΈˆμ•‘μ— λŒ€ν•œ 지원을 λ°›μ•„ Naverλ₯Ό μ±„νƒν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜ ν•„μš”ν•œ μ„œλΉ„μŠ€λ₯Ό μƒκ°ν•΄λ³΄μž μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„(2) μ›Ή μ„œλ²„ (Nginx 1) CI/CD μ„œλ²„ (github Action) Redis μ„œλ²„

JVM λ‚΄λΆ€ λ™μž‘ 원리

JVM (Java Virtual Machine) Write once, Run everyWhere Java ν”„λ‘œκ·Έλž¨ 싀행을 λ‹΄λ‹Ήν•˜λŠ” κ°€μƒμ˜ μ»΄ν“¨ν„°λ‘œ, Java λ°”μ΄νŠΈ μ½”λ“œ μ‹€ν–‰, λ©”λͺ¨λ¦¬ 관리, 가비지 μ»¬λ ‰μ…˜ 등을 λ‹΄λ‹Ήν•œλ‹€. μžλ°”μ™€ 운영체제 μ‚¬μ΄μ—μ„œ μ€‘κ³„μž 역할을 ν•˜λ©°, μžλ°”κ°€ μš΄μ˜μ²΄μ œμ— ꡬ애받지 μ•Šκ³  ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•  수 μžˆλ„λ‘ 도와쀀닀. ...

Blocking IO와 Non-Blocking IO , 동기와 비동기

Blocking ν˜„μž¬ μŠ€λ ˆλ“œ(λ˜λŠ” ν”„λ‘œμ„ΈμŠ€)κ°€ μ–΄λ–€ μž‘μ—…μ„ μˆ˜ν–‰ν•  λ•Œ, κ·Έ μž‘μ—…μ΄ μ™„λ£Œλ  λ•ŒκΉŒμ§€ λ‹€λ₯Έ μž‘μ—…μ„ ν•  수 없도둝 λŒ€κΈ°ν•˜λŠ” μƒνƒœ μ œμ–΄κΆŒμ΄ 호좜된 ν•¨μˆ˜μ—κ²Œ λ„˜μ–΄κ°€μ„œ, ν•¨μˆ˜κ°€ μž‘μ—…μ„ λλ‚Όλ•ŒκΉŒμ§€ μ œμ–΄κΆŒμ„ μœ μ§€ν•©λ‹ˆλ‹€. λ”°λΌμ„œ ν˜ΈμΆœν•œ ν•¨μˆ˜λŠ” 호좜된 ν•¨μˆ˜κ°€ λλ‚˜κΈ° μ „κΉŒμ§€ λ‹€λ₯Έ μž‘μ—…μ„ ν•˜μ§€ λͺ»ν•˜κ³  λŒ€κΈ°ν•©λ‹ˆλ‹€. νŒŒμΌμ„ μ½κ±°λ‚˜ μ“°λŠ” μž‘μ—…μ—μ„œ 파일 ...