Feathers: 마이크둜 μ„œλΉ„μŠ€ : μ„œλΉ„μŠ€λ₯Ό λΆ„ν• ν•˜μ—¬ 앱을 λ¦¬νŒ©ν† λ§ν•˜λŠ” ꢌμž₯ 방법?

에 λ§Œλ“  2016λ…„ 05μ›” 19일  Β·  27μ½”λ©˜νŠΈ  Β·  좜처: feathersjs/feathers

λ‚˜λŠ” 마이크둜 μ„œλΉ„μŠ€ μŠ€νƒ€μΌμ— 따라 μ„œλΉ„μŠ€λ₯Ό μΆ”μΆœν•˜κ³  자체 μΈμŠ€ν„΄μŠ€λ‘œ λΆ„λ¦¬ν•˜λŠ” μ‹€μš©μ μΈ / ꢌμž₯ 방법을 μ°ΎμœΌλ €κ³ ν•©λ‹ˆλ‹€. 이 λ¬Έμ œμ—μ„œ κΉƒν„Έμ˜ λ°©λ¬Έ νŽ˜μ΄μ§€μ— ν₯미둜운 μ§„μˆ μ΄ μžˆμŠ΅λ‹ˆλ‹€.

μ„œλΉ„μŠ€ 지ν–₯ : κΉƒν„Έ μ²˜μŒλΆ€ν„° μ„œλΉ„μŠ€ 지ν–₯ 앱을 ꡬ좕 ν•  μˆ˜μžˆλŠ” ꡬ쑰λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. κ²°κ΅­ 앱을 마이크둜 μ„œλΉ„μŠ€λ‘œ λΆ„ν• ν•΄μ•Όν•˜λŠ” 경우 μ‰½κ²Œ μ „ν™˜ ν•  수 있으며 FeathersλŠ” 앱을 μ†μ‰½κ²Œ ν™•μž₯ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ κΉƒν„Έμ—μ„œμ΄ μ‚¬μš© 사둀λ₯Ό μ²˜λ¦¬ν•˜λŠ” 방법에 λŒ€ν•œ μ •λ³΄λŠ” μ—¬μ „νžˆ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€.

μ‹€μ œμ μœΌλ‘œ μ €λŠ” μ²˜μŒμ—λŠ” 두 가지 κΈ°λ³Έ μ£Όμ œμ— μ΄ˆμ μ„ λ§žμΆ”κ³  μžˆμŠ΅λ‹ˆλ‹€.

  • 톡신 : 예λ₯Ό λ“€μ–΄ μ„œλΉ„μŠ€ ν˜ΈμΆœμ„ HTTP μš”μ²­μœΌλ‘œ λŒ€μ²΄ν•˜λŠ” 것과 같이 큰 재 μž‘μ„± λ…Έλ ₯ 없이도 μ›λž˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ„œλΉ„μŠ€λ₯Ό μΆ”μΆœν•˜κ³  μ›λž˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 계속 톡신 ν•  수 μžˆλ„λ‘ν•˜λŠ” λ°©λ²•μ΄μ–΄μ•Όν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.
  • 인증 : μ„œλΉ„μŠ€κ°€ λΆ„ν•  된 ν›„ νŽ˜λ”κ°€ μ„œλΉ„μŠ€ κ°„ 톡신에 λŒ€ν•œ 인증을 μ²˜λ¦¬ν•˜λŠ” 방법에 λŒ€ν•œ μ„€λͺ….

미리 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€!

Documentation Question Scaling

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‹Ήμ‹  말이 λ§žμ•„μš”, 아직 λ¬Έμ„œκ°€ λ„ˆλ¬΄ λ§Žμ§€ μ•Šμ•˜κ³  μš°λ¦¬λŠ” 그것을 μΆ”μ ν•˜κΈ° μœ„ν•΄ 쑰금 전에 https://github.com/feathersjs/feathers/issues/157 을 λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. μ–ΈκΈ‰ν•˜μ‹  두 가지 μ£Όμ œμ— λŒ€ν•œ 제 생각은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

μ²˜μŒμ— 두 개의 μ„œλΉ„μŠ€κ°€μžˆλŠ” μ„œλ²„κ°€ μžˆλ‹€κ³  κ°€μ • ν•΄ λ΄…μ‹œλ‹€.

app.use('/users', memory())
  .use('/todos', memory());

μ‚¬μš©μž μ„œλΉ„μŠ€λŠ” ν•œ μ„œλ²„κ°€ 처리 ν•  μˆ˜μžˆλŠ” 것보닀 λ§Žμ€ νŠΈλž˜ν”½μ„ λ°›κ³  μžˆμœΌλ―€λ‘œ λ‹€λ₯Έ 앱을 λ§Œλ“€μ–΄ λ‹€λ₯Έ μ‹œμŠ€ν…œμœΌλ‘œ μ΄λ™ν•˜λ €κ³ ν•©λ‹ˆλ‹€.

// server1
app.use('/users', memory());
// server2
app.use('/todos', memory());

이제 /todos μ„œλΉ„μŠ€κ°€ 원격 μ„œλΉ„μŠ€μ™€ ν†΅μ‹ ν•˜λ €λ©΄ Feathersλ₯Ό ν΄λΌμ΄μ–ΈνŠΈ 둜 μ‚¬μš©ν•˜μ—¬ μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€ (μ›Ή μ†ŒμΌ“μ€ λΉ λ₯΄κ³  μ–‘λ°©ν–₯μ΄λ―€λ‘œ μ„œλ²„ κ°„ 톡신에 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?).

// server2
const client = require('feathers/client')
const socketClient = require('feathers-socketio/client');
const io = require('socket.io-client');

const socket = io('http://other-server.com');
const otherApp = client().configure(socketClient(socket));

app.use('/todos', memory())
 .use('/users', otherApp.service('users'));

이것은 기본적으둜 μ›Ή μ†ŒμΌ“ 연결을 톡해 μ‚¬μš©μž μ„œλΉ„μŠ€λ₯Ό 원격 μ„œλΉ„μŠ€μ— 투λͺ…ν•˜κ²Œ μ „λ‹¬ν•©λ‹ˆλ‹€. μ›λž˜ /users μ—”λ“œ 포인트λ₯Ό μ‚¬μš©ν•˜λŠ” 것은 아무것도 λ³€κ²½ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

인증과 κ΄€λ ¨ν•˜μ—¬ λ‹€μ–‘ν•œ μ˜΅μ…˜μ΄ μžˆμŠ΅λ‹ˆλ‹€. μœ„μ˜ μ‹œλ‚˜λ¦¬μ˜€μ—μ„œ κ°€μž₯ μ‰¬μš΄ 방법이 될 κ²ƒμž…λ‹ˆλ‹€ server1 이후 λ‹€λ₯Έ μ„œλ²„ IP μ£Όμ†Œ 만 ν—ˆμš© λͺ©λ‘μ— server2 μ—¬μ „νžˆ ν΄λΌμ΄μ–ΈνŠΈ ν†΅μ‹ μ˜ μœ μΌν•œ μ§€μ μž…λ‹ˆλ‹€. κ²°κ΅­ server2 λŠ” μ‚¬μš©μž 인증을 처리 ν•œ λ‹€μŒ μ„œλΉ„μŠ€ ν˜ΈμΆœμ„ λ‹€λ₯Έ μ„œλ²„λ‘œ μ „λ‹¬ν•˜λŠ” κ²Œμ΄νŠΈμ›¨μ΄κ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€ (원본 IP μ£Όμ†Œ 확인 외에 인증에 λŒ€ν•΄ κ±±μ •ν•  ν•„μš”κ°€ μ—†μŒ).

λͺ¨λ“  27 λŒ“κΈ€

λ‹Ήμ‹  말이 λ§žμ•„μš”, 아직 λ¬Έμ„œκ°€ λ„ˆλ¬΄ λ§Žμ§€ μ•Šμ•˜κ³  μš°λ¦¬λŠ” 그것을 μΆ”μ ν•˜κΈ° μœ„ν•΄ 쑰금 전에 https://github.com/feathersjs/feathers/issues/157 을 λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. μ–ΈκΈ‰ν•˜μ‹  두 가지 μ£Όμ œμ— λŒ€ν•œ 제 생각은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

μ²˜μŒμ— 두 개의 μ„œλΉ„μŠ€κ°€μžˆλŠ” μ„œλ²„κ°€ μžˆλ‹€κ³  κ°€μ • ν•΄ λ΄…μ‹œλ‹€.

app.use('/users', memory())
  .use('/todos', memory());

μ‚¬μš©μž μ„œλΉ„μŠ€λŠ” ν•œ μ„œλ²„κ°€ 처리 ν•  μˆ˜μžˆλŠ” 것보닀 λ§Žμ€ νŠΈλž˜ν”½μ„ λ°›κ³  μžˆμœΌλ―€λ‘œ λ‹€λ₯Έ 앱을 λ§Œλ“€μ–΄ λ‹€λ₯Έ μ‹œμŠ€ν…œμœΌλ‘œ μ΄λ™ν•˜λ €κ³ ν•©λ‹ˆλ‹€.

// server1
app.use('/users', memory());
// server2
app.use('/todos', memory());

이제 /todos μ„œλΉ„μŠ€κ°€ 원격 μ„œλΉ„μŠ€μ™€ ν†΅μ‹ ν•˜λ €λ©΄ Feathersλ₯Ό ν΄λΌμ΄μ–ΈνŠΈ 둜 μ‚¬μš©ν•˜μ—¬ μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€ (μ›Ή μ†ŒμΌ“μ€ λΉ λ₯΄κ³  μ–‘λ°©ν–₯μ΄λ―€λ‘œ μ„œλ²„ κ°„ 톡신에 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?).

// server2
const client = require('feathers/client')
const socketClient = require('feathers-socketio/client');
const io = require('socket.io-client');

const socket = io('http://other-server.com');
const otherApp = client().configure(socketClient(socket));

app.use('/todos', memory())
 .use('/users', otherApp.service('users'));

이것은 기본적으둜 μ›Ή μ†ŒμΌ“ 연결을 톡해 μ‚¬μš©μž μ„œλΉ„μŠ€λ₯Ό 원격 μ„œλΉ„μŠ€μ— 투λͺ…ν•˜κ²Œ μ „λ‹¬ν•©λ‹ˆλ‹€. μ›λž˜ /users μ—”λ“œ 포인트λ₯Ό μ‚¬μš©ν•˜λŠ” 것은 아무것도 λ³€κ²½ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

인증과 κ΄€λ ¨ν•˜μ—¬ λ‹€μ–‘ν•œ μ˜΅μ…˜μ΄ μžˆμŠ΅λ‹ˆλ‹€. μœ„μ˜ μ‹œλ‚˜λ¦¬μ˜€μ—μ„œ κ°€μž₯ μ‰¬μš΄ 방법이 될 κ²ƒμž…λ‹ˆλ‹€ server1 이후 λ‹€λ₯Έ μ„œλ²„ IP μ£Όμ†Œ 만 ν—ˆμš© λͺ©λ‘μ— server2 μ—¬μ „νžˆ ν΄λΌμ΄μ–ΈνŠΈ ν†΅μ‹ μ˜ μœ μΌν•œ μ§€μ μž…λ‹ˆλ‹€. κ²°κ΅­ server2 λŠ” μ‚¬μš©μž 인증을 처리 ν•œ λ‹€μŒ μ„œλΉ„μŠ€ ν˜ΈμΆœμ„ λ‹€λ₯Έ μ„œλ²„λ‘œ μ „λ‹¬ν•˜λŠ” κ²Œμ΄νŠΈμ›¨μ΄κ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€ (원본 IP μ£Όμ†Œ 확인 외에 인증에 λŒ€ν•΄ κ±±μ •ν•  ν•„μš”κ°€ μ—†μŒ).

응닡 ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€! 곡식 λ¬Έμ„œ (κ°€μ΄λ“œμ˜ ν•˜μœ„ μ„Ήμ…˜)μ—μ„œμ΄ 주제λ₯Ό λ‹€λ£° κ³„νšμž…λ‹ˆκΉŒ? 이와 κ΄€λ ¨ν•˜μ—¬ μ œκ°€ κΈ°μ—¬ν•  수 μžˆλŠ”μ§€ μ•Œλ €μ£Όμ‹­μ‹œμ˜€.

λͺ…ν™•νžˆ. 그리고 μš°λ¦¬λŠ” ν™•μ‹€νžˆ 도움을받을 수 μžˆμŠ΅λ‹ˆλ‹€. κ°€μ΄λ“œμ—μ„œλ³΄κ³  싢은 λ‚΄μš©μ„ λ¨Όμ € λͺ¨μ•„μ„œ 데λͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€μ–΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.

πŸ’― @daffl 이 κ°•νƒ€ν•©λ‹ˆλ‹€. 이것은 λ°œν‘œλ₯Όν•˜κΈ°λ‘œ 약속 ν•œλ§ŒνΌ λ‹€μŒ 달에 κ³΅μ‹μ μœΌλ‘œ λ‹€λ£° κ³„νšμž…λ‹ˆλ‹€.

@daffl λ°±μ—”λ“œ 마이크둜 μ„œλΉ„μŠ€μ—μ„œ feathers-clientλ₯Ό μ‚¬μš©ν•˜λŠ” 방법은 socket.ioκ°€ μ‚¬μš©λ˜κΈ° λ•Œλ¬Έμ— 슀트리밍 데이터λ₯Ό ν†΅ν•œ μ–‘λ°©ν–₯ 톡신을 ν—ˆμš©ν•©λ‹ˆλ‹€. Feathersμ—λŠ”μ΄ μ‹œλ‚˜λ¦¬μ˜€μ— λŒ€ν•œ 의미 / APIκ°€ 이미 μžˆμŠ΅λ‹ˆκΉŒ? 마이크둜 μ„œλΉ„μŠ€κ°€ λΈŒλΌμš°μ € ν΄λΌμ΄μ–ΈνŠΈκ°€ μ•„λ‹Œ λ‹€λ₯Έ κ΄€μ‹¬μžˆλŠ” 마이크둜 μ„œλΉ„μŠ€μ— λŒ€ν•œ 이벀트λ₯Ό κ²Œμ‹œν•˜λŠ” 상황을 μƒκ°ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

예,ν•˜μ§€λ§Œ κ΄€μ‹¬μžˆλŠ” λ‹€λ₯Έ μ„œλΉ„μŠ€λ„ μ›Ή μ†ŒμΌ“μ„ μ‚¬μš©ν•  μˆ˜μ—†λŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? μš°λ¦¬λŠ” λ‹€λ₯Έ κ³΅κΈ‰μž (예 : λ‹€λ₯Έ λ©”μ‹œμ§• μ„œλΉ„μŠ€)λ₯Ό μΆ”κ°€ν•˜λ €κ³  μƒκ°ν•˜κ³  μžˆμ§€λ§Œ μ§€κΈˆμ€ μ›Ή μ†ŒμΌ“μ΄ μΆ©λΆ„νžˆ λΉ λ₯΄λ©° λΈŒλΌμš°μ €μ—μ„œλ§Œ μ‚¬μš©ν•  μˆ˜μžˆλŠ” 곳에 μž‘μ„±λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

@daffl @ekryski λŠ” νŽ˜λ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 배포

@daffl λ‚˜λŠ” λ‹Ήμ‹ μ˜ λŒ€λ‹΅ 전에 잘 μ΄ν•΄ν•˜μ§€ λͺ»ν–ˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. κ΄€μ‹¬μžˆλŠ” μ„œλΉ„μŠ€κ°€ μ›Ή μ†ŒμΌ“μ„ μ‚¬μš©ν•˜μ—¬ μƒμ‚°μž μ„œλΉ„μŠ€λ₯Ό κ΅¬λ…ν•˜λŠ” ν•œ, 일반 이벀트 APIλ₯Ό μ‚¬μš©ν•˜μ—¬ μƒμ‚°μžμ— μƒˆ 이벀트λ₯Ό κ²Œμ‹œν•˜λŠ” ν•œμ΄λ₯Ό κΉƒν„Έλ‘œ κ΅¬ν˜„ν•˜λŠ” κ²ƒμœΌλ‘œ μΆ©λΆ„ν•©λ‹ˆλ‹€.

@justingreenberg에 λ™μ˜ν•©λ‹ˆλ‹€. ν•΄κ²°ν•΄μ•Ό ν•  또 λ‹€λ₯Έ λ¬Έμ œλŠ” μ±…μž„μžˆλŠ” 마이크둜 μ„œλΉ„μŠ€κ°€ μ˜€ν”„λΌμΈ (좩돌, μ—…λ°μ΄νŠΈ λ“±)이 될 λ•Œ μš”μ²­μ„ μž¬μƒν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 기술적으둜 이것은 λ©”μ‹œμ§€ 큐λ₯Ό μ‚¬μš©ν•˜λŠ” μ£Όμ†Œμ΄κΈ°λ„ν•©λ‹ˆλ‹€.

이것에 λŒ€ν•œ 진전이 μžˆμŠ΅λ‹ˆκΉŒ? λ‚˜λŠ” λͺ‡ 가지 λ¬Έμ„œ / μž‘λ™ 예제λ₯Όλ³΄κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. 특히 인증이 μ²˜λ¦¬λ˜λŠ” 방법과 κ΄€λ ¨ν•˜μ—¬.

@imns μš°λ¦¬λŠ” 이것을 μœ„ν•΄ λ…Έλ ₯ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 예제 μž‘μ—…μ„ μ‹œμž‘ν•˜κ³  앱을 λΆ„ν• ν–ˆκ³  인증 μ„€μ • 방법에 λͺ‡ 가지 μ œν•œμ΄ μžˆμŒμ„ κΉ¨λ‹¬μ•˜μŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ μš°λ¦¬λŠ” ν˜„μž¬ 이것을 더 잘 μ§€μ›ν•˜κΈ° μœ„ν•΄ 인증을 λ¦¬νŒ©ν† λ§ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ°©λ₯™ν•˜λŠ” 데 μ•½ 일주일이 κ±Έλ¦½λ‹ˆλ‹€.

였 이런, μ§€κΈˆ 이거 λ„ˆλ¬΄ λ‚˜μ˜κ²Œ μ“Έ 수 μžˆμ–΄μš” : D

ν˜ΈκΈ°μ‹¬ λ•Œλ¬Έμ— μ—¬λŸ¬ ν”„λŸ°νŠΈ μ—”λ“œμ—μ„œλ„ μž‘λ™ν•˜λ„λ‘ 인증을 재 μž‘μ—…ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ? μ˜€λŠ˜λ‚  λ§Žμ€ λŒ€ν˜• 앱이 λ°±μ—”λ“œμ—μ„œ 마이크둜 μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•˜μ§€λ§Œ ν”„λŸ°νŠΈ μ—”λ“œ 앱도 λΆ„λ¦¬ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

μ•½κ°„μ˜ μΆ”κ°€ λΉ„μš©μ΄ μžˆλ‹€λ©΄μ΄ 책을 μΆ”μ²œν•˜λŠ” κ²ƒμœΌλ‘œ κ°„μ£Ό ν•  수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€ : https://www.amazon.com/Building-Microservices-Sam-Newman/dp/1491950358/ref=sr_1_1 ? ie = UTF8 & qid = 1469071253 & sr = 8-1 & keywords = 마이크둜 μ„œλΉ„μŠ€

μ—¬λŸ¬λΆ„, 이것에 λŒ€ν•œ μ—…λ°μ΄νŠΈκ°€ μžˆμŠ΅λ‹ˆκΉŒ? κ°μ‚¬ν•©λ‹ˆλ‹€.

@juanpujol μ΅œμ‹  μ •λ³΄λŠ” 항상이 티켓에 μžˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜λ„ 확인해 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

(marcfawzi μ—¬κΈ°)

전체 μŠ€λ ˆλ“œλ₯Ό μ½μ§€λŠ” μ•Šμ•˜μ§€λ§Œ μ„œλΉ„μŠ€λ³„λ‘œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€ (이 λΆ„λ¦¬κ°€μžˆλŠ” Micreoservices μ•„ν‚€ν…μ²˜μ—μ„œλŠ” 좔상화λ₯Ό μœ μ§€ν•˜λŠ” 데 μ€‘μš”ν•©λ‹ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄ λͺ¨λ“  μ„œλΉ„μŠ€κ°€ λ™μΌν•œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό κ³΅μœ ν•˜λ©΄ μ‚¬λžŒλ“€μ„ λ°©ν•΄ν•©λ‹ˆλ‹€ 균일 ν•œ μ„œλΉ„μŠ€ APIλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„œλΉ„μŠ€λ₯Ό κ΅¬μ„±ν•˜λŠ” λŒ€μ‹  μ„œλΉ„μŠ€ λͺ¨λΈ (마이크둜 μ„œλΉ„μŠ€ 좔상화 μœ„λ°˜)간에 관계λ₯Ό μ •μ˜ν•˜λŠ” κ²ƒμœΌλ‘œλΆ€ν„°?

그것을 λ§‰λŠ” 것은 아무것도 μ—†μŠ΅λ‹ˆλ‹€. κ·Έλ ‡κ²Œν•˜μ§€ μ•ŠλŠ” 것은 λ‹Ήμ‹ μ—κ²Œ 달렀 μžˆλ‹€κ³  λ§ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. ORM μˆ˜μ€€μ—μ„œ λͺ¨λΈκ³Ό 관계λ₯Ό μ •μ˜ν•˜λŠ” κ²½μš°μ—λ§Œ μ‹€μ œλ‘œ λ¬Έμ œκ°€λ©λ‹ˆλ‹€. λ‹€λ₯Έ μ„œλΉ„μŠ€λ₯Ό ν˜ΈμΆœν•˜μ—¬ μ„œλΉ„μŠ€ μˆ˜μ€€μ—μ„œ 관계λ₯Ό μ–»λŠ” 것이 마이크둜 μ„œλΉ„μŠ€ 좔상화λ₯Ό μœ„λ°˜ν•œλ‹€κ³  μƒκ°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ„€, μ •ν™•νžˆ μ œκ°€ 의미 ν•œ λ°”μž…λ‹ˆλ‹€. 각 μ„œλΉ„μŠ€μ— 자체 DBκ°€μžˆλŠ” μ„œλΉ„μŠ€ λΆ„λ¦¬λŠ” ORM μˆ˜μ€€μ΄ μ•„λ‹Œ μ„œλΉ„μŠ€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 ꡬ성을 κ°•μ œν•˜λŠ” ν™•μ‹€ν•œ 방법이라고 μƒκ°ν•˜λŠ” κ²½ν–₯이 μžˆμŠ΅λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ FeathersλŠ” 마이크둜 μ„œλΉ„μŠ€ ν”„λ ˆμž„ μ›Œν¬λ³΄λ‹€ 더 μΌλ°˜μ μ΄λ―€λ‘œ μ—¬κΈ°μ—μ„œ λͺ¨λ‘ μ’‹μŠ΅λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€ David! 이것은 λ‚΄κ°€ 더 많이 νŒŒν—€μΉ μˆ˜λ‘ 더 쒋아지고 더 μ’‹μ•„ λ³΄μž…λ‹ˆλ‹€! μ£Όμœ„μ— ν›Œλ₯­ν•œ 일!

마이크둜 μ„œλΉ„μŠ€ ν™˜κ²½μ—μ„œ Feathersλ₯Ό μ‚¬μš©ν•  λ•Œ λ°œμƒν•˜λŠ” λͺ‡ 가지 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ—¬κΈ°μ—μ„œ 이것을 μ–ΈκΈ‰ ν•  것이라고 μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€. 이것은 첫 번째 κ΅¬ν˜„ 일 뿐이지 만 κΈ°μ—¬ν•  것이 있으면 μ—¬κΈ° https://github.com/zapur1/feathers-rabbitmq/issues/1

@ zapur1 유망 ν•΄ λ³΄μž…λ‹ˆλ‹€ ... 토둠을 μ‹œμž‘ν•˜κΈ° μœ„ν•΄ λŒ“κΈ€μ„ κ²Œμ‹œν–ˆμŠ΅λ‹ˆλ‹€.

https://github.com/feathersjs/feathers-sync 와 rabbitMQ, Redis λ˜λŠ” MongoDBλ₯Ό μ„œλΉ„μŠ€ μ‚¬μ΄μ˜ λ©”μ‹œμ§€ 브둜컀둜 μ‚¬μš©ν•˜μ—¬ λͺ¨λ‘ 동기화 μƒνƒœλ₯Ό μœ μ§€ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

@ekryski feathers-sync λŠ” μ•½κ°„μ˜ λ‹€λ₯Έ 문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€. 이름이 μ§€μ •λœ μ„œλΉ„μŠ€ (Feathers μ„œλΉ„μŠ€κ°€ μ•„λ‹ˆλΌ 마이크둜 μ„œλΉ„μŠ€ μŠ€νƒ€μΌ μ„œλΉ„μŠ€) μ˜μ—­ λ‚΄μ—μ„œ 이벀트λ₯Ό ν•œ 번만 μˆ˜μ‹ ν•˜λ €λ©΄ μ–΄λ–»κ²Œν•΄μ•Όν•©λ‹ˆκΉŒ? 단일 API μ•±μ—μ„œ 이벀트λ₯Ό μˆ˜μ‹ ν•˜λŠ” 단일 μ„œλΉ„μŠ€μ˜ μ—¬λŸ¬ μΈμŠ€ν„΄μŠ€κ°€μžˆλŠ” 경우 각 μΈμŠ€ν„΄μŠ€λŠ” μ •ν™•νžˆ λ™μΌν•œ μ½”λ“œμ˜ μ—¬λŸ¬ μΈμŠ€ν„΄μŠ€μ—μ„œ ν•΄λ‹Ή μ΄λ²€νŠΈκ°€ μˆ˜μ‹  될 λ•Œ μˆ˜ν–‰λ˜λŠ” μž‘μ—…μ„ 볡제 ν•  κ°€λŠ₯μ„±μ΄μžˆλŠ” 이벀트λ₯Ό μˆ˜μ‹ ν•©λ‹ˆλ‹€.

@ekryski 방금 repoλ₯Ό λ‹€μ‹œ λ΄€λŠ”λ° zapur1 / feathers-rabbitmqκ°€ "Caveats"μ—μ„œ μ–ΈκΈ‰ ν•œ μ •ν™•ν•œ 문제λ₯Ό ν•΄κ²°ν•©λ‹ˆλ‹€.

socketClient둜 μ„œλΉ„μŠ€ 1을 μ„œλΉ„μŠ€ 2에 μ—°κ²°ν•˜λ©΄ μ„œλΉ„μŠ€ 2에 닀쀑 μΈμŠ€ν„΄μŠ€κ°€ 있으면 μ–΄λ–»κ²Œλ‘œλ“œ 밸런슀λ₯Ό κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

socketClientλ₯Ό 톡해 μ—°κ²°ν•˜λŠ” λ³„λ„μ˜ μ„œλ²„ μΈ‘ 앱을 λ§Œλ“œλŠ” 경우 μ„€μ •λœ μ œν•œ 사항에 관계없이 μ„œλΉ„μŠ€λ₯Ό μ‚¬μš©ν•  수 μžˆλ„λ‘ μΈμ¦ν•˜λŠ” κ°€μž₯ 쒋은 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ?

https://github.com/kalisio/feathers-distributedλ₯Ό μ‚¬μš© ν•˜μ—¬ 2 μ„ΌνŠΈλ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€. μ„œλ‘œ λ‹€λ₯Έ μ„œλΉ„μŠ€λ₯Ό ν•¨κ»˜ μ‚¬μš©ν•˜λŠ” N feathers 앱을 λ°°ν¬ν•˜μ—¬ 각 μ„œλΉ„μŠ€λ₯Ό λ…λ¦½μ μœΌλ‘œ κ°œλ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‚΄κ°€ μ΄ν•΄ν•˜λŠ” ν•œ λ™μΌν•œ μ„œλΉ„μŠ€λ₯Ό λ³΄μœ ν•œ N feathers 앱을 λ°°ν¬ν•˜λŠ” 것을 λͺ©ν‘œλ‘œν•˜λŠ” https://github.com/feathersjs/feathers-sync μ™€λŠ” λ‹€λ¦…λ‹ˆλ‹€. 이 λͺ¨λ“  것이 λ‹€μŒκ³Ό 같은 μ§ˆλ¬Έμ„ μ œκΈ°ν•©λ‹ˆλ‹€.

  • 인증 관리
  • API κ²Œμ΄νŠΈμ›¨μ΄ 및 λΆ€ν•˜ λΆ„μ‚°
  • 원격 후크 호좜
  • ...

μ„œλ²„ 1 및 μ„œλ²„ 2와 κ΄€λ ¨ν•˜μ—¬ 제곡 ν•œ μ˜ˆμ œμ—μ„œ @daffl , μ„œλ²„ 2μ—μ„œ /users μ„œλΉ„μŠ€λ₯Ό μ–΄λ–»κ²Œ 보호 ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ? μ„œλ²„ 2에 ν•΄λ‹Ή μ„œλΉ„μŠ€λ₯Ό μ •μ˜ν–ˆλ‹€λ©΄ νŠΉμ • μ„œλΉ„μŠ€ 후크 νŒŒμΌμ—μ„œ 후크λ₯Ό μ‚¬μš©ν•  수 μžˆμ§€λ§Œ app.use('/users', otherApp.service('users')); μˆ˜ν–‰ν•˜κ³  μžˆμœΌλ―€λ‘œ μ„œλ²„ 2μ—μ„œ ν•΄λ‹Ή μ„œλΉ„μŠ€μ— λŒ€ν•œ 호좜 만 μˆ˜ν–‰λ˜λ„λ‘ν•˜λ €λ©΄ μ–΄λ–»κ²Œν•΄μ•Όν•©λ‹ˆκΉŒ? μ‚¬μš©μžκ°€ λ¨Όμ € 인증 된 경우?

νŽΈμ§‘ν•˜λ‹€:
Nvm, λ‚˜λŠ” 아이디어가 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. const usersService = app.service('users') 와 usersService.hooks(hooks) 와 같은 μž‘μ—…μ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ„œ ν›„ν¬μ—λŠ” μ—”λ“œ 포인트λ₯Ό λ³΄ν˜Έν•˜λŠ” 데 ν•„μš”ν•œ 인증 후크가 μžˆμŠ΅λ‹ˆκΉŒ?

https://stackoverflow.com/questions/41076627/evaluating-featherjs-authentication-needs/41095638#41095638 μ—μ„œ λΆ„μ‚° 인증을 μˆ˜ν–‰ν•˜λŠ” 방법에 λŒ€ν•΄ μžμ„Ένžˆ μΌμŠ΅λ‹ˆλ‹€.

각각의 μž₯점과 λ‹¨μ μ΄μžˆλŠ” μ„œλΉ„μŠ€λ₯Ό λΆ„ν• ν•˜λŠ” μ—¬λŸ¬ 가지 방법이 μžˆμŠ΅λ‹ˆλ‹€. Feathersμ—μ„œ 일반적으둜 μ€‘μš”ν•œ 것은 μ„Έμ…˜μ΄μ—†κ³  JSON μ›Ή 토큰 만 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. JWTλŠ” μƒνƒœ λΉ„ μ €μž₯이며 λ™μΌν•œ 비밀을 κ³΅μœ ν•˜λŠ” λͺ¨λ“  μ„œλ²„μ—μ„œ 읽을 수 μžˆμœΌλ―€λ‘œ 쀑앙 μ„Έμ…˜ μ €μž₯μ†Œκ°€ μ—†μ–΄λ„λ©λ‹ˆλ‹€. λ‚΄κ°€ 생각할 μˆ˜μžˆλŠ” 두 가지 μ£Όμš” μ˜΅μ…˜μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  1. 인증을 μ²˜λ¦¬ν•˜κ³  μ—°κ²°λœ λͺ¨λ“  ν΄λΌμ΄μ–ΈνŠΈλ₯Ό κ΄€λ¦¬ν•˜λŠ” 메인 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μžˆμ§€λ§Œ λ°μ΄ν„°λ² μ΄μŠ€μ™€ ν†΅μ‹ ν•˜λŠ” μ„œλΉ„μŠ€ λŒ€μ‹  λ‚΄λΆ€ λ„€νŠΈμ›Œν¬μ˜ λ³„λ„μ˜ κ°„λ‹¨ν•œ κ°œλ³„ API μ„œλ²„μ— μ—°κ²°ν•©λ‹ˆλ‹€. 이것은 더 μ‰¬μš΄ 섀정이고 μž₯점은 λ‚΄λΆ€ API μ„œλ²„κ°€ 맀우 간단 ν•  수 있고 인증이 μ „ν˜€ ν•„μš”ν•˜μ§€ μ•Šλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€ (메인 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λͺ¨λ“  것을 μˆ˜ν–‰ ν•  수 있고 인증 된 μ‚¬μš©μž μ œν•œμ— 따라 쿼리λ₯Ό μž‘μ„±ν•˜κΈ° λ•Œλ¬Έμ—). 단점은 κΈ°λ³Έ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ—¬μ „νžˆ 병λͺ© μƒνƒœμ— μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€ (ν•˜μ§€λ§Œ 기본적으둜 λ‚΄λΆ€ API에 λŒ€ν•œ ν”„λ‘μ‹œ μ—­ν• μ„ν•˜κΈ° λ•Œλ¬Έμ— λΆ€ν•˜κ°€ κ°μ†Œ 함).

my50m

  1. λͺ¨λ“  ν΄λΌμ΄μ–ΈνŠΈλŠ” JWTλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•„μš”ν•œ λͺ¨λ“  API μ„œλ²„μ— μ—°κ²°ν•©λ‹ˆλ‹€. JWTλŠ” λ³„λ„μ˜ 인증 (λ˜λŠ” μ‚¬μš©μž) API에 μ˜ν•΄ μƒμ„±λ©λ‹ˆλ‹€. μœ μΌν•œ 병λͺ© ν˜„μƒμ€ 곡톡 μ‚¬μš©μž μ„œλΉ„μŠ€ (항상 ν•„μš”ν•˜μ§€λŠ” μ•Šμ„ μˆ˜λ„ 있음)μ—μ„œ κ°€μž₯ μ΅œμ‹  μ‚¬μš©μž 정보λ₯Ό κ²€μƒ‰ν•˜λŠ” κ²ƒμ΄λ―€λ‘œ ν™•μž₯ 성이 더 λ›°μ–΄λ‚œ μ†”λ£¨μ…˜μž…λ‹ˆλ‹€. 단점은 ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ κ΄€λ¦¬ν•˜λŠ” 것이 더 λ³΅μž‘ν•˜κ³  λͺ¨λ“  μ„œλ²„μ—μ„œ 인증 (적어도 JWT의 경우)을 κ΅¬μ„±ν•΄μ•Όν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ JWT의 μƒνƒœ λΉ„ μ €μž₯으둜 인해 곡유 μ„Έμ…˜μ΄ ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

lw1bg

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰