λŒ€μš©λŸ‰ λ°μ΄ν„°λ‘œ μΈν•œ API μ„±λŠ₯ 문제 ν•΄κ²°: 컀버링 인덱슀 및 인덱슀 νŠœλ‹μ„ ν†΅ν•œ μ΅œμ ν™”
Β·
Project
κ°œμš”μ΅œκ·Ό 개발 μ€‘μ΄λ˜ μ„œλΉ„μŠ€μ˜ κ²Œμ‹œκΈ€ 쑰회 APIμ—μ„œ λŒ€μš©λŸ‰ 데이터λ₯Ό μΆ”κ°€ν•œ ν›„ μ„±λŠ₯ ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν•˜λŠ” κ³Όμ •μ—μ„œ, 데이터 μΆ”κ°€ μ΄μ „μ—λŠ” λ‚˜νƒ€λ‚˜μ§€ μ•Šμ•˜λ˜ λ¬Έμ œμ λ“€μ„ λ°œκ²¬ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. κΈ°μ‘΄μ—λŠ” μ›ν™œν•˜κ²Œ μž‘λ™ν•˜λ˜ APIκ°€ 데이터가 κΈ‰κ²©νžˆ μ¦κ°€ν•˜μž 응닡 속도 μ§€μ—°, λ°μ΄ν„°λ² μ΄μŠ€ μ„œλ²„ κ³ΌλΆ€ν•˜, 일뢀 μš”μ²­μ—μ„œμ˜ μ˜ˆμ™Έ λ°œμƒ λ“± λ‹€μ–‘ν•œ μ„±λŠ₯ μ €ν•˜ ν˜„μƒμ„ λ³΄μ˜€μŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ μ˜ˆμƒμΉ˜ λͺ»ν•œ μ„±λŠ₯ μ €ν•˜ ν˜„μƒμ€ λ‹¨μˆœνžˆ 데이터 양이 λŠ˜μ–΄λ‚¬κΈ° λ•Œλ¬Έμ΄ μ•„λ‹ˆλΌ, μ¦κ°€λœ 데이터 λ³Όλ₯¨μ— κΈ°μ‘΄ μ‹œμŠ€ν…œμ΄ μ–΄λ–»κ²Œ λ°˜μ‘ν•˜λŠ”μ§€μ— λŒ€ν•œ λ©΄λ°€ν•œ 뢄석이 ν•„μš”ν•˜λ‹€λŠ” 점을 μ‹œμ‚¬ν–ˆμŠ΅λ‹ˆλ‹€. 즉, κΈ°μ‘΄μ—λŠ” λ“œλŸ¬λ‚˜μ§€ μ•Šμ•˜λ˜ μ‹œμŠ€ν…œμ˜ ν•œκ³„λ‚˜ νŠΉμ • 둜직의 λΉ„νš¨μœ¨μ„±μ΄ λŒ€μš©λŸ‰ 데이터 ν™˜κ²½μ—μ„œ λ°œν˜„λœ κ²ƒμœΌλ‘œ νŒλ‹¨ν–ˆμŠ΅λ‹ˆλ‹€. λ³Έ κΈ€μ—μ„œλŠ” λ‹€μ–‘ν•œ κ³„μΈ΅μ˜ μ§€ν‘œλ“€μ„ 쒅합적..
GitHub Actions + Docker + NGINXλ₯Ό ν™œμš©ν•œ Blue/Green 무쀑단 배포 ν™˜κ²½ ꡬ좕
Β·
Project
λ“€μ–΄κ°€λ©°μ΄λ²ˆ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λŠ” κ³Όμ •μ—μ„œ, 배포 μž‘μ—… 쀑 μ„œλ²„ λ‹€μš΄ 문제λ₯Ό κ²½ν—˜ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ΄μ „κΉŒμ§€λŠ” μƒˆλ‘œμš΄ λ²„μ „μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ 배포할 λ•Œλ§ˆλ‹€ λΆˆκ°€ν”Όν•˜κ²Œ νŠΈλž˜ν”½ μ€‘λ‹¨μ΄λ‚˜ μ—λŸ¬ λ°œμƒμ΄ λ™λ°˜λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 특히, μ„œλΉ„μŠ€κ°€ μ‹€μ‹œκ°„μœΌλ‘œ μš΄μ˜λ˜λŠ” μƒν™©μ—μ„œ μ‚¬μš©μžκ°€ 접속쀑일 λ•Œ 배포가 이루어지면, μž μ‹œ λ™μ•ˆ μ„œλΉ„μŠ€ μ΄μš©μ— λΆˆνŽΈμ„ κ²ͺκ±°λ‚˜, 일뢀 μš”μ²­μ΄ μ²˜λ¦¬λ˜μ§€ μ•ŠλŠ” κ²½μš°κ°€ λ°œμƒν•˜κΈ°λ„ ν–ˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄, 배포 κ³Όμ •μ—μ„œ λ°œμƒν•  수 μžˆλŠ” λ‹€μš΄νƒ€μž„μ„ μ΅œμ†Œν™”ν•  수 μžˆλŠ” 방법을 κ³ λ―Όν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ—¬λŸ¬ 배포 μ „λž΅μ„ μ‚΄νŽ΄λ³Έ κ²°κ³Ό, 무쀑단 배포 방식을 μ μš©ν•˜λŠ” 것이 효과적이라 νŒλ‹¨ν•˜μ˜€κ³ , 이λ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ GitHub Actions와 Blue-Green 배포 방식을 λ„μž…ν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. CI/CD 도ꡬ..
Call by Value와 Call by Reference
Β·
Java
ν”„λ‘œκ·Έλž˜λ°μ—μ„œ ν•¨μˆ˜ 호좜 방식은 맀우 μ€‘μš”ν•œ κ°œλ…μž…λ‹ˆλ‹€. 특히, Call by Value와 Call by ReferenceλŠ” 두 κ°€μ§€ μ£Όμš”ν•œ 호좜 λ°©μ‹μœΌλ‘œ, 각각 κ³ μœ ν•œ νŠΉμ§•κ³Ό 단점을 κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. 이번 ν¬μŠ€νŒ…μ€ 이 두 κ°€μ§€ 방법과 Javaμ—μ„œ μ–΄λ–»κ²Œ μ‚¬μš©λ˜λŠ”μ§€μ— λŒ€ν•΄ μ‚΄νŽ΄λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.  Call by ValueCall by ValueλŠ” ν•¨μˆ˜κ°€ 인자둜 전달받은 κ°’μ˜ 볡사본을 μ‚¬μš©ν•˜μ—¬ μ²˜λ¦¬ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. 이 방식은 주둜 κΈ°λ³Έν˜• λ˜λŠ” μ›μ‹œ νƒ€μž…(primitive type)의 λ°μ΄ν„°μ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ •μˆ˜λ‚˜ μ‹€μˆ˜ 같은 데이터 νƒ€μž…μ΄ 여기에 ν•΄λ‹Ήλ©λ‹ˆλ‹€. πŸ’« 예제 μ½”λ“œλŠ” 이해λ₯Ό μœ„ν•΄ C++둜 μž‘μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.#include using namespace std;void modify(int a)..
Java의 GC
Β·
Java
κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(GC)의 ν•„μš”μ„±κ³Ό μ•Œκ³ λ¦¬μ¦˜κ°€λΉ„μ§€ μ»¬λ ‰μ…˜(GC) μ΄λž€?GCλŠ” λ©”λͺ¨λ¦¬ 관리 기법 쀑 ν•˜λ‚˜λ‘œ, ν”„λ‘œκ·Έλž¨μ΄ 더 이상 ν•„μš”λ‘œ ν•˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬λ₯Ό μžλ™μœΌλ‘œ ν•΄μ œν•΄ μ£ΌλŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€. μš°λ¦¬κ°€ ν”νžˆ GCκ°€ κ΄€λ¦¬ν•œλ‹€κ³  λ§ν•˜λŠ” λ©”λͺ¨λ¦¬λŠ” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑 λ™μ μœΌλ‘œ ν• λ‹Ήλ˜λŠ” νž™(Heap) μ˜μ—­μ„ μ˜λ―Έν•˜κ³ , GCκ°€ ν•΄μ œν•˜λŠ” λŒ€μƒμ€ μ–΄λ–€ λ³€μˆ˜μ—μ„œλ„ μ°Έμ‘°λ˜μ§€ μ•ŠλŠ” λ©”λͺ¨λ¦¬ κ³΅κ°„μž…λ‹ˆλ‹€.  Cλ‚˜ C++같은 μ–Έμ–΄μ—μ„œλŠ” κ°œλ°œμžκ°€ 직접 λ©”λͺ¨λ¦¬λ₯Ό ν• λ‹Ήν•˜κ³  ν•΄μ œν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ μˆ˜λ™μœΌλ‘œ λ©”λͺ¨λ¦¬λ₯Ό κ΄€λ¦¬ν•˜λŠ” 건 κ½€ 번거둜울 뿐 μ•„λ‹ˆλΌ λ©”λͺ¨λ¦¬ λˆ„μˆ˜(Memory Leak)κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ 이미 ν•΄μ œλœ λ©”λͺ¨λ¦¬μ— μ ‘κ·Όν•˜κ±°λ‚˜ λ‹€μ‹œ ν•΄μ œν•˜λ €λ©΄ 였λ₯˜κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. Javaμ—μ„œλŠ” 이런 μž‘μ—…μ„ μ•Œμ•„μ„œ μ²˜λ¦¬ν•΄μ£ΌκΈ° λ•Œλ¬Έμ— 개발자..
μ±„νŒ… λ©”μ„Έμ§€ 읽음 처리 κΈ°λŠ₯ ꡬ쑰 κ°œμ„ κΈ°
Β·
Project
κ°œμš”μ±„νŒ…λ°© λ©”μ„Έμ§€ 읽음 처리 κΈ°λŠ₯은 μ‚¬μš©μžκ°€ λ§ˆμ§€λ§‰μœΌλ‘œ 읽은 λ©”μ„Έμ§€λ₯Ό μΆ”μ ν•˜μ—¬, 읽지 μ•Šμ€ λ©”μ„Έμ§€μ˜ 개수λ₯Ό ν™•μΈν•˜κ³  각 메세지에 λŒ€ν•΄ '읽지 μ•Šμ€ 개수 (Unread Count)'λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€. 기쑴의 λ©”μ„Έμ§€ 읽음 처리 κ΅¬μ‘°λŠ” 각 λ©”μ„Έμ§€λ§ˆλ‹€ ν•΄λ‹Ή λ©”μ„Έμ§€λ₯Ό 읽은 μœ μ €μ˜ ID 리슀트λ₯Ό κΈ°λ‘ν•˜κ³ , 읽은 μœ μ € ID λ°°μ—΄μ˜ 길이λ₯Ό 톡해 '읽지 μ•Šμ€ 개수 (Unread Count)'λ₯Ό κ³„μ‚°ν–ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ‚¬μš©μžκ°€ λ§Žμ€ μ±„νŒ…λ°©μ€ μ‚¬μš©μžκ°€ 적은 μ±„νŒ…λ°©μ— λΉ„ν•΄ 더 λ§Žμ€ λ©”μ„Έμ§€κ°€ μ˜€κ°€λ―€λ‘œ, μˆ˜μ •ν•΄μ•Όν•  λ°μ΄ν„°μ˜ κ°œμˆ˜κ°€ κΈ°ν•˜κΈ‰μˆ˜μ μœΌλ‘œ λŠ˜μ–΄λ‚˜κ²Œ λ©λ‹ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ©”μ„Έμ§€ 읽음 처리 λ‘œμ§μ„ κ°œμ„ ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. 기쑴의 λ©”μ„Έμ§€ 읽음 처리 λ‘œμ§λ¨Όμ €, 기쑴의 μ±„νŒ… μ‹œμŠ€ν…œμ˜ λ©”μ„Έμ§€ 읽음 처리 λ‘œμ§μ„ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€. μ•žμ„œ μ„€..
Embedded Mongo/Redis μ μš©ν•˜κΈ°
Β·
Project
λ“€μ–΄κ°€λ©°μ΄λ²ˆ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ 둜컬 개발 ν™˜κ²½μ˜ 일관성과 νš¨μœ¨μ„±μ— λŒ€ν•΄ 고민이 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. νŒ€ ν”„λ‘œμ νŠΈκ°€ 진행됨에 따라, μ—¬λŸ¬ λͺ…μ˜ κ°œλ°œμžκ°€ λ™μ‹œμ— μž‘μ—…μ„ μ‹œμž‘ν•˜κ²Œ λ˜μ—ˆκ³ , ν”„λ‘œμ νŠΈλ₯Ό GitHubμ—μ„œ ν΄λ‘ ν•œ λ’€, λΉ λ₯΄κ²Œ κ°œλ°œμ„ μ‹œμž‘ν•  수 μžˆλŠ” ν™˜κ²½μ„ μ œκ³΅ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€λŠ” 점을 κΉ¨λ‹¬μ•˜μŠ΅λ‹ˆλ‹€.  μ΄ˆκΈ°μ—λŠ” 각 κ°œλ°œμžκ°€ Redis, MySQL, MongoDB와 같은 μ™ΈλΆ€ 데λͺ¬μ€ λ³„λ„λ‘œ μ„€μΉ˜ν•΄μ•Ό ν•˜λŠ” κ²½μš°κ°€ λ§Žμ•˜κ³ , 그둜 인해 μ„€μ •μ—λ§Œ 였랜 μ‹œκ°„μ΄ κ±Έλ¦¬κ±°λ‚˜, ν™˜κ²½ μ„ΈνŒ…μ„ ν•˜μ§€ λͺ»ν•œ μ±„λ‘œ μ§„ν–‰λ˜λŠ” κ²½μš°λ„ μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ, ν”„λ‘œμ νŠΈλ₯Ό ν΄λ‘ ν•œ ν›„ λ°”λ‘œ μ‹€ν–‰ κ°€λŠ₯ν•œ ν™˜κ²½μ„ ꡬ성해야 ν•œλ‹€λŠ” 생각이 λ“€μ—ˆκ³ , 이λ₯Ό μœ„ν•΄ λ‘œμ»¬μ—μ„œ λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰ν•  수 μžˆλŠ” 기술이 ν•„μš”ν•˜λ‹€κ³  νŒλ‹¨ν–ˆμŠ΅λ‹ˆλ‹€.  μ΄ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ ..