package modules //각 Microservice에 대한 정보 저장 노드 type MSNode struct { nodeName string ipAddr string } func (node *MSNode) GetName() string { return node.nodeName } func (node *MSNode) GetIpaddr() string { return node.ipAddr } type NodeManager interface { GetIpaddr(nodeName string) (string, bool) AddMicroservice(node MSNode) bool RemoveMicroservice(nodeName string) bool } //모든 Microservice정보 저장 type MStable struct { NodeTable map[string]MSNode } func NewMStable() *MStable { return &MStable{NodeTable: make(map[string]MSNode)} } func (manager *MStable) GetIpaddr(nodeName string) (string, bool) { //해당 이름의 노드이름이 존재하는지 확인 node, exists := manager.NodeTable[nodeName] //존재하지 않는 경우 nil리턴 if !exists { return "", false } else { return node.ipAddr, true } } func (manager *MStable) AddMicroservice(node MSNode) bool { //삽입 전 존재여부 확인 _, exists := manager.NodeTable[node.GetName()] if exists { return false } else { manager.NodeTable[node.GetName()] = node return true } } func (manager *MStable) RemoveMicroservice(nodeName string) bool { //삭제 전 존재여부 확인 _, exists := manager.NodeTable[nodeName] if exists { delete(manager.NodeTable, nodeName) return true } else { return false } }