폴리글둯(polyglot) 지원을 ν†΅ν•œ Java 마이크둜 μ„œλΉ„μŠ€μ˜ ꡬ좕  

폴리글둯 μ—μ½”μ‹œμŠ€ν…œ λ‚΄μ—μ„œ μΏ λ²„λ„€ν‹°μŠ€μ— Java 마이크둜 μ„œλΉ„μŠ€ κ΅¬μΆ•ν•˜κΈ°

Last updated

μ™„μ „ν•˜κ²Œ λ…λ¦½μ μœΌλ‘œ μ‘΄μž¬ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μ—†μŠ΅λ‹ˆλ‹€. μ˜€λŠ˜λ‚  κ°œλ°œμžλ“€μ€ ν†΅ν•©ν˜• 마이크둜 μ„œλΉ„μŠ€μ™€ ν΄λΌμš°λ“œ λ„€μ΄ν‹°λΈŒ 마이크둜 μ•„ν‚€ν…μ²˜λ₯Ό μ±„νƒν•˜λŠ” κ²½ν–₯을 보이고 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ ν˜„μž¬μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ•„ν‚€ν…μ²˜μ—μ„œλŠ” 마이크둜 μ„œλΉ„μŠ€λ“€μ΄ 폴리글둯 ν™˜κ²½μ—μ„œ 곡쑴해야 ν•©λ‹ˆλ‹€. 이번 개발 κ³Όμ •μ—μ„œλŠ” μ„œλΉ„μŠ€ 발견, 등둝, λΌμš°νŒ… 등을 ν™œμš©ν•˜μ—¬ λ‹€λ₯Έ 폴리글둯 마이크둜 μ„œλΉ„μŠ€λ“€κ³Ό ν•¨κ»˜ μ‹€ν–‰λ˜λŠ” Java 마이크둜 μ„œλΉ„μŠ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ꡬ좕 방법에 λŒ€ν•΄ λ°°μ›Œλ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.


‘μ½”λ“œ 보기’ λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ GitHubμ—μ„œ ν•œκΈ€ README νŒŒμΌμ„ μ„ νƒν•˜μ—¬ 보싀 수 μžˆμŠ΅λ‹ˆλ‹€.

By Animesh Singh, Anthony Amanse

Overview

폴리글둯(polyglot)의 μ„Έκ³„μ—μ„œ 마이크둜 μ„œλΉ„μŠ€λ“€μ€ ν•¨κ»˜ κ΅¬μΆ•λ˜μ–΄μ•Ό ν•˜κ³ , μ„œλΉ„μŠ€ 발견, λΌμš°νŒ… 및 기타 μž‘μ—…μ‹œ λž­κ·€μ§€ λ„€μ΄ν‹°λΈŒ ν”„λ ˆμž„μ›Œν¬μ—λ§Œ μ˜μ‘΄ν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€. 이번 과정은 폴리글둯 μ—μ½”μ‹œμŠ€ν…œ 내에 β€œGameOn!”이라고 ν•˜λŠ” Java 기반 마이크둜 μ„œλΉ„μŠ€λ₯Ό κ΅¬μΆ•ν•˜λŠ” 방법을 μ†Œκ°œν•©λ‹ˆλ‹€.

이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 레트둜 μŠ€νƒ€μΌμ˜ ν…μŠ€νŠΈ 기반 μ–΄λ“œλ²€μ²˜ κ²Œμž„μœΌλ‘œ, 마이크둜 μ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜ 및 κ΄€λ ¨ κ°œλ…μ„ λΆ„μ„ν•˜λŠ” 데 μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. μΏ λ²„λ„€ν‹°μŠ€ ν΄λŸ¬μŠ€ν„°μ—μ„œ μ‹€ν–‰λ˜λ©° 코어와 ν”Œλž«νΌ, 이 두 κ°€μ§€μ˜ 마이크둜 μ„œλΉ„μŠ€λ₯Ό ν¬ν•¨ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μž…λ‹ˆλ‹€. μ½”μ–΄ 마이크둜 μ„œλΉ„μŠ€λŠ” Java둜 μž‘μ„±λ˜μ—ˆκ³  μ§€μ›μ‹œ 폴리글둯 μ„œλΉ„μŠ€λ₯Ό ν™œμš©ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ μ’…λ₯˜μ˜ νŒ¨ν„΄μ„ 톡해 마이크둜 μ„œλΉ„μŠ€λŠ” μ‚¬μ΄λ“œμΉ΄λ₯Ό λ™μΌν•œ 마이크둜 μ„œλΉ„μŠ€ μ»¨ν…Œμ΄λ„ˆμ—μ„œ ν”„λ‘œμ„ΈμŠ€λ‘œ μ΄μš©ν•˜κ±°λ‚˜ λ³„λ„μ˜ μ»¨ν…Œμ΄λ„ˆ μ‚¬μ΄λ“œμΉ΄λ₯Ό μ΄μš©ν•˜μ—¬ μ„œλΉ„μŠ€ 발견, 등둝, λΌμš°νŒ… μ‹œμ— ν”Œλž«νΌ μ„œλΉ„μŠ€λ₯Ό ν™œμš©ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 마이크둜 μ„œλΉ„μŠ€λ“€μ€ λͺ¨λ‘ μΏ λ²„λ„€ν‹°μŠ€ ν΄λŸ¬μŠ€ν„°μ—μ„œ κ΄€λ¦¬ν•˜λŠ” 도컀(Docker) μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€.

Flow

  1. μ‚¬μš©μžκ°€ ν”„λ‘μ‹œλ₯Ό 톡해 μΏ λ²„λ„€ν‹°μŠ€μ˜ GameOn!을 λ°©λ¬Έν•©λ‹ˆλ‹€. 이 λ•Œ, ν”„λ‘μ‹œλŠ” HAProxyλ₯Ό 기반으둜 ν•˜μ—¬ 전체 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 단일 νŒŒμ‚¬λ“œλ‘œμ„œ API μ»¬λ ‰μ…˜μ˜ ν‘œλ©΄ν™”λ₯Ό λ‹΄λ‹Ήν•©λ‹ˆλ‹€. WebApp은 μ›Ή ν”„λ‘ νŠΈμ—”λ“œλ₯Ό ν΄λΌμ΄μ–ΈνŠΈ 단말에 μ œκ³΅ν•˜λŠ” λ‹¨μˆœ NGINX ν”„λ‘œμ„ΈμŠ€μž…λ‹ˆλ‹€.
  2. μ‚¬μš©μžκ°€ Player λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ™€ ν†΅μ‹ ν•˜μ—¬ κ²Œμž„μ„ ν•©λ‹ˆλ‹€. Player λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” CRUD μ˜€νΌλ ˆμ΄μ…˜κ³Ό API 토큰 관리λ₯Ό μœ„ν•œ 곡용 APIλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
  3. Player λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€κ°€ Auth Java λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ₯Ό μ΄μš©ν•˜μ—¬ μ„ νƒλœ μ†Œμ…œ μ‚¬μΈμ˜¨ μ„œλΉ„μŠ€λ‘œ μ‚¬μš©μžλ₯Ό μΈμ¦ν•˜κ³ , 인증된 ν”Œλ ˆμ΄μ–΄μ— κ΄€ν•œ ν”„λ‘œν•„ 및 μž‘μ—… 진행 데이터λ₯Ό 톡해 ν΄λΌμ΄μ–ΈνŠΈμ— μ‘λ‹΅ν•©λ‹ˆλ‹€.
  4. ν”„λ‘ νŠΈμ—”λ“œ ν΄λΌμ΄μ–ΈνŠΈκ°€ Mediator μ„œλΉ„μŠ€μ— WebSocket을 μ„€μ •ν•˜μ—¬ κ²Œμž„μ„ μ‹œμž‘ν•©λ‹ˆλ‹€. Mediator μ„œλΉ„μŠ€λŠ” WebSphere Libertyλ₯Ό μ΄μš©ν•˜λŠ” Javaμ—μ„œ κ΅¬ν˜„λ˜κ³ , WebSocketsλ₯Ό 톡해 ν”Œλ ˆμ΄μ–΄λ“€μ„ λ£Έ(Room)으둜 μ—°κ²°ν•©λ‹ˆλ‹€.
  5. μ‚¬μš©μžκ°€ μƒ˜ν”Œ μ›Œν¬μŠ€λ£¨λ“€ 쀑 ν•˜λ‚˜μ˜ λ²„νŠΌμ„ ν΄λ¦­ν•˜μ—¬ μƒˆλ‘œμš΄ 룸을 μƒμ„±ν•©λ‹ˆλ‹€.
  6. κ°œλ°œμžκ°€ κ΅¬ν˜„λœ λ£Έ λ‚΄μ—μ„œ Map λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ₯Ό μ΄μš©ν•˜μ—¬ ν•΄λ‹Ή 룸이 κ°€μž₯ 졜근의 μ—°κ²° μ •λ³΄λ‘œ 등둝이 λ˜λ„λ‘ ν•©λ‹ˆλ‹€. Map μ„œλΉ„μŠ€λŠ” Java EE μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œμ„œ, JAX-RSλ₯Ό μ΄μš©ν•˜μ—¬ 곡용 REST APIλ₯Ό μ œκ³΅ν•˜λŠ” WebSphere Libertyμ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€.
  7. κ°œλ°œμžμ—κ²Œ μžμ‹ κ³Ό κ΄€λ ¨λœ API 토큰을 기반으둜 룸에 κ΄€ν•œ 정보λ₯Ό μ—…λ°μ΄νŠΈν•  수 μžˆλŠ” κΆŒν•œμ΄ 주어지도둝 Map μ„œλΉ„μŠ€κ°€ Player μ„œλΉ„μŠ€μ™€ 확인 절차λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.
  8. μ‚¬μš©μžλ“€μ΄ 룸으둜 이동할 λ•Œ, Mediator μ„œλΉ„μŠ€κ°€ μ ‘μ†λœ λ£Έ μ„œλΉ„μŠ€μ— WebSocket 연결을 μ„€μ •ν•©λ‹ˆλ‹€.

Components

IBM Cloud Kubernetes Service

IBM Cloud μΏ λ²„λ„€ν‹°μŠ€ μ„œλΉ„μŠ€λŠ” IBM ν΄λΌμš°λ“œ μƒμ—μ„œ μΏ λ²„λ„€ν‹°μŠ€ ν΄λŸ¬μŠ€ν„°(Kubernetes Cluster) 및 도컀 μ»¨ν…Œμ΄λ„ˆ(Docker Container) 기반의 κ³ κ°€μš©μ„± μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 관리 μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

IBM Cloud DevOps Toolchain Service

개발, 배포 및 운영 μž‘μ—…μ„ μ§€μ›ν•˜λŠ” 도ꡬ 톡합을 κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€.

HAProxy

개발, ꡬ좕, 운영 μž‘μ—…μ„ μ§€μ›ν•˜λŠ” 도ꡬ듀을 ν†΅ν•©ν•©λ‹ˆλ‹€.

Kubernetes Cluster

λ‚˜λ§Œμ˜ ν΄λΌμš°λ“œ 인프라λ₯Ό 생성 및 κ΄€λ¦¬ν•˜κ³ , μΏ λ²„λ„€ν‹°μŠ€λ₯Ό μ»¨ν…Œμ΄λ„ˆ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ μ—”μ§„μœΌλ‘œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Redis

RedisλŠ” μ˜€ν”ˆμ†ŒμŠ€ 기반의 인메λͺ¨λ¦¬ μ €μž₯μ†Œλ‘œμ„œ, λ°μ΄ν„°λ² μ΄μŠ€, μΊμ‹œ, λ©”μ‹œμ§€ 브둜컀 λ“±μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€

Apache Kafka

νŒŒμ΄ν”„λΌμΈ 및 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λΉŒλ“œλ₯Ό μœ„ν•œ 뢄산식 슀트리밍 ν”Œλž«νΌμž…λ‹ˆλ‹€.

Apache CouchDB

μ‚¬μš© νŽΈμ˜μ„±μ— 쀑점을 두고 ”웹을 μ™„μ „νžˆ ν’ˆλŠ”β€ μ•„ν‚€ν…μ²˜λ₯Ό κ°–μΆ˜ μ˜€ν”ˆ μ†ŒμŠ€ λ°μ΄ν„°λ² μ΄μŠ€ μ†Œν”„νŠΈμ›¨μ–΄.

NGINX

무료 μ˜€ν”ˆμ†ŒμŠ€ κ³ μ„±λŠ₯ HTTP μ„œλ²„ 및 λ¦¬λ²„μŠ€ ν”„λ‘μ‹œμž…λ‹ˆλ‹€.

WebSphere Liberty

동적이며 μ‚¬μš©ν•˜κΈ° μ‰¬μš΄ Java EE μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„λ‘œμ„œ 기동 μ‹œκ°„μ΄ λΉ λ₯΄κ³ , λ³€κ²½ 사항을 κ°€μ Έ 였기 μœ„ν•œ μ„œλ²„ μž¬μ‹œμž‘μ΄ μ—†μœΌλ©°, κ°„λ‹¨ν•œ XML μ„€μ •μ˜ νŠΉμ§•μ„ 가지고 μžˆμŠ΅λ‹ˆλ‹€.

Technologies

ν΄λΌμš°λ“œ

인터넷을 톡해 μ»΄ν“¨νŒ… 및 IT λ¦¬μ†ŒμŠ€μ— μ—‘μ„ΈμŠ€ν•©λ‹ˆλ‹€

μ»¨ν…Œμ΄λ„ˆ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜

μ»¨ν…Œμ΄λ„ˆν˜• μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 배포, μŠ€μΌ€μΌλ§ 및 κ΄€λ¦¬μ˜ μžλ™ν™”.

Containers

μ•± 싀행에 ν•„μš”ν•œ λͺ¨λ“  μš”μ†Œλ₯Ό ν¬ν•¨ν•˜λŠ” 가상 μ†Œν”„νŠΈμ›¨μ–΄ 객체.

Java

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€κΈ° μœ„ν•œ μ•ˆμ „ν•œ 객체 지ν–₯ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄.

Microservices

ν΄λΌμš°λ“œ λ‚΄ μ΅œμ‹  μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ΅¬μ„±μ˜ κ΅¬μ„±μš”μ†Œ μ œκ³΅μ„ μœ„ν•΄ κ²½λŸ‰ ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜λŠ” μ„ΈλΆ„ν™”λœ μ•½κ²°ν•© μ„œλΉ„μŠ€λ“€μ˜ 집합.

Related Blogs

κ·€ν•˜κ°€ μž…λ ₯ν•œ μ‡ΌνŠΈμ½”λ“œ 검색쑰건에 λ§€μΉ˜λ˜λŠ” ν¬μŠ€νŒ…μ΄ μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Related Links