/images/profile.png

Hi i'am shy.

[Kafka] Producer

Partitioner μΉ΄ν”„μΉ΄λŠ” 메세지λ₯Ό λ³‘λ ¬λ‘œ 효율적으둜 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ μ—¬λŸ¬κ°œμ˜ νŒŒν‹°μ…˜μœΌλ‘œ ꡬ성할 수 μžˆλ‹€. λ©”μ‹œμ§€λŠ” νŒŒν‹°μ…˜μœΌλ‘œ 보내지고 νŒŒν‹°μ…˜ λ‚΄ 둜그 μ„Έκ·Έλ¨ΌνŠΈμ— μ €μž₯λ˜μ–΄ μΉ΄ν”„μΉ΄λ‘œ μ „μ†‘λœλ‹€. μ—¬λŸ¬κ°œμ˜ νŒŒν‹°μ…˜μ΄ κ΅¬μ„±λ˜μ–΄ μžˆμ„ 경우 μ–΄λŠ νŒŒν‹°μ…˜μœΌλ‘œ λ³΄λ‚΄μ€˜μ•Ό ν•˜λŠ” 지 κ²°μ •ν•˜λŠ” 역할을 ν•˜λŠ” 것이 νŒŒν‹°μ…”λ„ˆμ΄λ‹€. νŒŒν‹°μ…”λ„ˆλŠ” λ©”μ‹œμ§€μ˜ ν‚€λ₯Ό ν•΄μ‹œν•˜μ—¬ μ–΄λ–€ ν† ν”½μ˜ μ–΄λ–€ νŒŒν‹°μ…˜μœΌλ‘œ λ³΄λ‚΄μ€˜μ•Ό ν•  지 λ§€ν•‘ν•˜λŠ” ν…Œμ΄λΈ”μ„ κ΄€λ¦¬ν•œλ‹€. νŒŒν‹°μ…˜μ˜ κ°―μˆ˜κ°€ λ³€κ²½λ˜λ©΄, ν•΄μ‹œν…Œμ΄λΈ”λ„ λ³€κ²½λ˜λ―€λ‘œ νŒŒν‹°μ…˜μ˜ 갯수λ₯Ό 늘릴 λ•ŒλŠ” μœ μ˜ν•΄μ•Όν•œλ‹€. λ©”μ‹œμ§€μ˜ 킀값은 ν•„μˆ˜κ°’μ΄ μ•„λ‹ˆλ―€λ‘œ, null 일 경우 μΉ΄ν”„μΉ΄λŠ” 자체적으둜 ν•΄λ‹Ή λ©”μ‹œμ§€λ₯Ό μ–΄λŠ νŒŒν‹°μ…˜μœΌλ‘œ 보낼 지 κ²°μ •ν•œλ‹€.

[Kafka] Replication/ Controller/ Log

1. Kafka Replication Kafka λŠ” 데이터 νŒŒμ΄ν”„λΌμΈμ˜ 정쀑앙에 μœ„μΉ˜ν•˜λŠ” 메인 ν—ˆλΈŒ 역할을 ν•œλ‹€. λ§Œμ•½ 이 메인 ν—ˆλΈŒμ— λ¬Έμ œκ°€ 생겨 전체 μ‹œμŠ€ν…œμ„ μš΄μš©ν•  수 μ—†λ‹€λ©΄ μ–΄λ–»κ²Œ 될까? κ·ΈλŸ¬ν•œ λ¬Έμ œμ— μ°©μ•ˆν•˜μ—¬ μ•ˆμ •μ„±μ„ 도λͺ¨ν•˜κΈ° μœ„ν•΄ Kafka λ‚΄λΆ€μ—μ„œ replication 을 κ΅¬μΆ•ν•˜μ—¬ μ‹œμŠ€ν…œ μ•ˆμ •μ„±μ„ 높일 수 μžˆλ‹€. 3λŒ€μ˜ λΈŒλ‘œμ»€κ°€ μš΄μ˜μ€‘μΈ kafka 에 A λΌλŠ” 토픽을 μƒμ„±ν•œ ν›„, X λΌλŠ” λ©”μ‹œμ§€λ₯Ό μ „μ†‘ν•˜κ²Œ 되면 λͺ¨λ“  μ„œλ²„λŠ” XλΌλŠ” λ©”μ‹œμ§€λ₯Ό 각각의 λΈŒλ‘œμ»€λ“€μ΄ κ°–κ²Œ λœλ‹€. replication 을 μ΄μš©ν•΄μ„œ 같은 λ©”μ‹œμ§€λ₯Ό μ—¬λŸ¬ λΈŒλ‘œμ»€κ°€ 같이 κ°–κ²Œ λ˜μ–΄ μ•ˆμ •μ„±μ„ 높일 수 μžˆλ‹€.

[DATABASE] Control Concurrency in distributed system with Distributed Lock mechanism

κ°œμš” νŒ”λ‘œμš°/μ–ΈνŒ”, λ”°λ‹₯으둜 μΈν•œ 쀑볡데이터 생성, μ•„μ΄μœ  ν‹°μΌ“ κ²°μ œν•˜κΈ° λ“± λ°±μ—”λ“œμ—μ„  λ™μ‹œμ„± λ¬Έμ œλ‚˜ 같은 μš”μ²­μ΄ μ—¬λŸ¬λ²ˆ μ˜€λŠ” κ²½μš°κ°€ λ§Žλ‹€. μ΄λŸ¬ν•œ μΌ€μ΄μŠ€κ°€ λ°œμƒν•˜μ§€ μ•Šλ„λ‘ 둜직 λ‚΄μ—μ„œ validation 을 μž˜ν•˜μ—¬ 쀑볡데이터가 λ°œμƒν•˜μ§€ μ•Šλ„λ‘ ν•œλ‹€λ˜μ§€ DB ν•„λ“œμ— μœ λ‹ˆν¬ 인덱슀λ₯Ό μƒμ„±ν•˜μ—¬ 쀑볡데이터λ₯Ό DB μΏΌλ¦¬λ‹¨μ—μ„œ λ§‰μ•„μ€€λ‹€λ˜μ§€λ‘œ ν•΄κ²°ν•  μˆ˜λŠ” μžˆμ§€λ§Œ, μ„œλ²„ μΈμŠ€ν„΄μŠ€κ°€ μ—¬λŸ¬λŒ€μ΄κ³  λ§Žμ€ μš”μ²­μ΄ λ°œμƒν•  경우 이λ₯Ό μ™„λ²½ν•˜κ²Œ κ΅¬ν˜„ν•˜κΈ°λŠ” μ–΄λ ΅λ‹€. μ΄λŸ¬ν•œ μΌ€μ΄μŠ€λ₯Ό μ„œλΉ„μŠ€ 둜직 λ‚΄μ—μ„œ 막기전에 κ·Έ μ•žλ‹¨μ—μ„œ 락을 νšλ“ν•œ μš”μ²­μ— λŒ€ν•΄μ„œλ§Œ operation 을 μˆ˜ν–‰ν•  수 μžˆλ„λ‘ ν•˜λŠ” 방법을 μ„€λͺ…ν•˜κ³ μž ν•œλ‹€.

Singleton Design Pattern

why use singleton In some cases, creating resources are unnecessarily large, or the consistency of objects can be lost as multiple objects are created. For instance, this can be observed with threads pool, cache, object handling environment variables, and object used for logging purpose. singleton vs global variables Access to a singleton method achieved through a static method. Singleton is initialized the first time when it is used. Global variables can be accessible and update it whenever, wherever

Decorator Design Pattern

Decorator Pattern 객체가 ν•  수 μžˆλŠ” 행동듀이 μ •μ˜λœ μƒνƒœμ—μ„œ, 객체에 좔가적인 행동이 μš”κ΅¬λ˜μ—ˆμ„ λ•Œ 객체λ₯Ό ν™•μž₯ν•˜λŠ” 것이 μ•„λ‹Œ νŠΉμˆ˜ν•œ 행동을 ν•˜λŠ” 객체 λž˜νΌμ— λ„£μ–΄μ„œ 좔가적인 행동을 ν•  수 μžˆλ„λ‘ ν•œλ‹€. 즉, κΈ°λ³ΈκΈ°λŠ₯에 μΆ”κ°€ν•  수 μžˆλŠ” κΈ°λŠ₯의 μ’…λ₯˜κ°€ λ§Žμ€ 경우 각 μΆ”κ°€ κΈ°λŠ₯을 Decorator에 μ •μ˜ν•˜μ—¬ μ‘°ν•©ν•¨μœΌλ‘œμ¨ μΆ”κ°€κΈ°λŠ₯을 κ΅¬ν˜„ν•  수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄ 푸쉬 μ•Œλ¦Όμ„ 보낼 λ•Œ ν•„μš”ν•œ λ°μ΄ν„°λŠ” μ΄ˆκΈ°μ— 기획된 데이터보닀 λŠ˜μ–΄λ‚  μˆ˜κ°€ μžˆλ‹€. A,B,C 푸쉬λ₯Ό 보낼 λ•Œ 기본적인 틀은 λΉ„μŠ·ν•˜μ§€λ§Œ, 각각 보내야 ν•  λ°μ΄ν„°λŠ” λ‚΄λΆ€μ μœΌλ‘œ μ‘°κΈˆμ”© λ‹€λ₯΄κΈ° λ§ˆλ ¨μ΄λ‹€.

Observer Design Pattern

Observer Pattern ν•œ 객체의 μƒνƒœκ°€ λ°”λ€Œλ©΄, κ·Έ 객체λ₯Ό μ˜μ‘΄ν•˜λŠ” λ‹€λ₯Έ 객체에 연락이 κ°€κ³  μžλ™μœΌλ‘œ λ‚΄μš©μ΄ κ°±μ‹ λ˜λ„λ‘ ν•˜λŠ” νŒ¨ν„΄μœΌλ‘œ OneToMany μ˜μ‘΄μ„±μ„ μ •μ˜ν•œλ‹€. μ—¬κΈ°μ„œ OneToMany μ˜μ‘΄μ„±μ΄λž€, μ£Όμ œλŠ” μƒνƒœλ₯Ό μ €μž₯ν•˜κ³  μ œμ–΄ν•œλ‹€. λ”°λΌμ„œ μƒνƒœκ°€ λ“€μ–΄μžˆλŠ” κ°μ²΄λŠ” 였둜직 ν•˜λ‚˜μ΄λ‹€. λ°˜λ©΄μ— κ·Έ μƒνƒœλ₯Ό μ˜μ‘΄ν•˜λŠ” Observer κ°μ²΄λŠ” μ—¬λŸ¬κ°œμ΄λ‹€ λΌλŠ” μ˜λ―Έμ΄λ‹€.β‚©β‚© 주둜 ν”„λ‘ νŠΈμ—”λ“œ κ΄€μ μ—μ„œ, observer pattern을 μ •μ˜ν•œ 곳이 λ§Žμ§€λ§Œ λ°±μ—”λ“œμ—μ„œλ„ observer pattern으둜 κ΅¬ν˜„ν•˜λŠ” 예제 μΌ€μ΄μŠ€λ“€μ΄ λ§Žλ‹€. 예λ₯Ό λ“€μ–΄, nodejs의 eventEmitter / logging / socket / distributed system / caching