λλ λ§μ΄ν¬λ‘ μλΉμ€ μ€νμΌμ λ°λΌ μλΉμ€λ₯Ό μΆμΆνκ³ μ체 μΈμ€ν΄μ€λ‘ λΆλ¦¬νλ μ€μ©μ μΈ / κΆμ₯ λ°©λ²μ μ°ΎμΌλ €κ³ ν©λλ€. μ΄ λ¬Έμ μμ κΉνΈμ λ°©λ¬Έ νμ΄μ§μ ν₯λ―Έλ‘μ΄ μ§μ μ΄ μμ΅λλ€.
μλΉμ€ μ§ν₯ : κΉνΈ μ²μλΆν° μλΉμ€ μ§ν₯ μ±μ κ΅¬μΆ ν μμλ ꡬ쑰λ₯Ό μ 곡ν©λλ€. κ²°κ΅ μ±μ λ§μ΄ν¬λ‘ μλΉμ€λ‘ λΆν ν΄μΌνλ κ²½μ° μ½κ² μ ν ν μ μμΌλ©° Feathersλ μ±μ μμ½κ² νμ₯ ν μ μμ΅λλ€.
κ·Έλ¬λ κΉνΈμμμ΄ μ¬μ© μ¬λ‘λ₯Ό μ²λ¦¬νλ λ°©λ²μ λν μ 보λ μ¬μ ν μ°Ύμ μ μμ΅λλ€.
μ€μ μ μΌλ‘ μ λ μ²μμλ λ κ°μ§ κΈ°λ³Έ μ£Όμ μ μ΄μ μ λ§μΆκ³ μμ΅λλ€.
미리 κ°μ¬λ립λλ€!
λΉμ λ§μ΄ λ§μμ, μμ§ λ¬Έμκ° λ무 λ§μ§ μμκ³ μ°λ¦¬λ κ·Έκ²μ μΆμ νκΈ° μν΄ μ‘°κΈ μ μ 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 μλ λ€λ¦ λλ€. μ΄ λͺ¨λ κ²μ΄ λ€μκ³Ό κ°μ μ§λ¬Έμ μ κΈ°ν©λλ€.
μλ² 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λ μν λΉ μ μ₯μ΄λ©° λμΌν λΉλ°μ 곡μ νλ λͺ¨λ μλ²μμ μ½μ μ μμΌλ―λ‘ μ€μ μΈμ μ μ₯μκ° μμ΄λλ©λλ€. λ΄κ° μκ°ν μμλ λ κ°μ§ μ£Όμ μ΅μ μ λ€μκ³Ό κ°μ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
λΉμ λ§μ΄ λ§μμ, μμ§ λ¬Έμκ° λ무 λ§μ§ μμκ³ μ°λ¦¬λ κ·Έκ²μ μΆμ νκΈ° μν΄ μ‘°κΈ μ μ https://github.com/feathersjs/feathers/issues/157 μ λ§λ€μμ΅λλ€. μΈκΈνμ λ κ°μ§ μ£Όμ μ λν μ μκ°μ λ€μκ³Ό κ°μ΅λλ€.
μ²μμ λ κ°μ μλΉμ€κ°μλ μλ²κ° μλ€κ³ κ°μ ν΄ λ΄ μλ€.
μ¬μ©μ μλΉμ€λ ν μλ²κ° μ²λ¦¬ ν μμλ κ²λ³΄λ€ λ§μ νΈλν½μ λ°κ³ μμΌλ―λ‘ λ€λ₯Έ μ±μ λ§λ€μ΄ λ€λ₯Έ μμ€ν μΌλ‘ μ΄λνλ €κ³ ν©λλ€.
μ΄μ
/todos
μλΉμ€κ° μ격 μλΉμ€μ ν΅μ νλ €λ©΄ Feathersλ₯Ό ν΄λΌμ΄μΈνΈ λ‘ μ¬μ©νμ¬ μ°κ²°ν μ μμ΅λλ€ (μΉ μμΌμ λΉ λ₯΄κ³ μλ°©ν₯μ΄λ―λ‘ μλ² κ° ν΅μ μ μ¬μ©νμ§ μλ μ΄μ λ 무μμ λκΉ?).μ΄κ²μ κΈ°λ³Έμ μΌλ‘ μΉ μμΌ μ°κ²°μ ν΅ν΄ μ¬μ©μ μλΉμ€λ₯Ό μ격 μλΉμ€μ ν¬λͺ νκ² μ λ¬ν©λλ€. μλ
/users
μλ ν¬μΈνΈλ₯Ό μ¬μ©νλ κ²μ μ무κ²λ λ³κ²½ν νμκ° μμ΅λλ€.μΈμ¦κ³Ό κ΄λ ¨νμ¬ λ€μν μ΅μ μ΄ μμ΅λλ€. μμ μλ리μ€μμ κ°μ₯ μ¬μ΄ λ°©λ²μ΄ λ κ²μ λλ€
server1
μ΄ν λ€λ₯Έ μλ² IP μ£Όμ λ§ νμ© λͺ©λ‘μserver2
μ¬μ ν ν΄λΌμ΄μΈνΈ ν΅μ μ μ μΌν μ§μ μ λλ€. κ²°κ΅server2
λ μ¬μ©μ μΈμ¦μ μ²λ¦¬ ν λ€μ μλΉμ€ νΈμΆμ λ€λ₯Έ μλ²λ‘ μ λ¬νλ κ²μ΄νΈμ¨μ΄κ° λ μ μμ΅λλ€ (μλ³Έ IP μ£Όμ νμΈ μΈμ μΈμ¦μ λν΄ κ±±μ ν νμκ° μμ).