forked from mindol1004/msa-kiz-app
commit
This commit is contained in:
@@ -2,10 +2,10 @@ package kiz.app;
|
|||||||
|
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
|
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
|
||||||
import org.springframework.cloud.openfeign.EnableFeignClients;
|
import org.springframework.cloud.openfeign.EnableFeignClients;
|
||||||
|
|
||||||
@EnableEurekaClient
|
@EnableDiscoveryClient
|
||||||
@EnableFeignClients
|
@EnableFeignClients
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
public class AuthServiceApplication {
|
public class AuthServiceApplication {
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import lombok.RequiredArgsConstructor;
|
|||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@RequestMapping("/auth")
|
@RequestMapping("/auth-service")
|
||||||
public class LoginController {
|
public class LoginController {
|
||||||
|
|
||||||
private final LoginService loginService;
|
private final LoginService loginService;
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import kiz.app.entity.Member;
|
|||||||
@FeignClient("MEMBER-SERVICE")
|
@FeignClient("MEMBER-SERVICE")
|
||||||
public interface MemberClient {
|
public interface MemberClient {
|
||||||
|
|
||||||
@GetMapping("/api/member/{memberId}")
|
@GetMapping("/member-service/{memberId}")
|
||||||
Optional<Member> findByMemberId(@PathVariable("memberId") String memberId);
|
Optional<Member> findByMemberId(@PathVariable("memberId") String memberId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
server:
|
server:
|
||||||
port: 8082
|
port: 0
|
||||||
# servlet:
|
# servlet:
|
||||||
# contextPath: /auth
|
# contextPath: /auth
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ spring:
|
|||||||
eureka:
|
eureka:
|
||||||
instance:
|
instance:
|
||||||
hostname: mindol.synology.me
|
hostname: mindol.synology.me
|
||||||
|
instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
|
||||||
lease-renewal-interval-in-seconds: 30 # 유레카 서버로 설정된 시간(second)마다 하트비트 전송 (디폴트 30초)
|
lease-renewal-interval-in-seconds: 30 # 유레카 서버로 설정된 시간(second)마다 하트비트 전송 (디폴트 30초)
|
||||||
# 디스커버리는 서비스 등록 해제 하기 전에 마지막 하트비트에서부터 설정된 시간(second) 동안 하트비트가 수신되지 않으면
|
# 디스커버리는 서비스 등록 해제 하기 전에 마지막 하트비트에서부터 설정된 시간(second) 동안 하트비트가 수신되지 않으면
|
||||||
# 서비스 등록 해제 (디폴트 90초)
|
# 서비스 등록 해제 (디폴트 90초)
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
package kiz.app.config;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import org.springframework.cloud.gateway.handler.RoutePredicateHandlerMapping;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.http.HttpMethod;
|
||||||
|
import org.springframework.web.cors.CorsConfiguration;
|
||||||
|
import org.springframework.web.reactive.config.CorsRegistry;
|
||||||
|
import org.springframework.web.reactive.config.EnableWebFlux;
|
||||||
|
import org.springframework.web.reactive.config.WebFluxConfigurer;
|
||||||
|
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@EnableWebFlux
|
||||||
|
public class CorsGlobalConfig implements WebFluxConfigurer {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addCorsMappings(CorsRegistry corsRegistry) {
|
||||||
|
corsRegistry.addMapping("/**")
|
||||||
|
.allowedOrigins("http://mindol.synology.me:8081")
|
||||||
|
.allowedMethods("*")
|
||||||
|
.allowedHeaders("*")
|
||||||
|
.allowCredentials(true)
|
||||||
|
.maxAge(3600);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public CorsConfiguration corsConfiguration(RoutePredicateHandlerMapping routePredicateHandlerMapping) {
|
||||||
|
CorsConfiguration corsConfig = new CorsConfiguration().applyPermitDefaultValues();
|
||||||
|
|
||||||
|
Arrays.asList(HttpMethod.OPTIONS, HttpMethod.PUT, HttpMethod.GET, HttpMethod.DELETE, HttpMethod.POST)
|
||||||
|
.forEach(m -> corsConfig.addAllowedMethod(m));
|
||||||
|
|
||||||
|
corsConfig.addAllowedOrigin("*");
|
||||||
|
routePredicateHandlerMapping.setCorsConfigurations(new HashMap<String, CorsConfiguration>() {{ put("/**", corsConfig); }});
|
||||||
|
return corsConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -5,25 +5,32 @@ import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
|
|||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
import kiz.app.filter.AuthenticationFilter;
|
import kiz.app.filter.AuthGatewayFilter;
|
||||||
|
import kiz.app.filter.GlobalFilter;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
// @Configuration
|
@Configuration
|
||||||
// @EnableHystrix
|
// @EnableHystrix
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class GatewayConfig {
|
public class GatewayConfig {
|
||||||
|
|
||||||
private final AuthenticationFilter filter;
|
private final GlobalFilter globalFilter;
|
||||||
|
private final AuthGatewayFilter authFilter;
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public RouteLocator routes(RouteLocatorBuilder builder) {
|
public RouteLocator routes(RouteLocatorBuilder builder) {
|
||||||
return builder.routes()
|
return builder.routes()
|
||||||
.route("user-service", r -> r.path("/users/**")
|
.route("auth-service", r -> r.path("/auth-service/**")
|
||||||
.filters(f -> f.filter(filter))
|
.filters(f -> f
|
||||||
.uri("lb://user-service"))
|
.filter(globalFilter.apply(new GlobalFilter.Config("auth", true, false)))
|
||||||
.route("auth-service", r -> r.path("/auth/**")
|
.rewritePath("/auth-service/(?<segment>.*)", "/$\\{segment}"))
|
||||||
.filters(f -> f.filter(filter))
|
.uri("lb://AUTH-SERVICE"))
|
||||||
.uri("lb://auth-service"))
|
.route("member-service", r -> r.path("/member-service/**")
|
||||||
|
.filters(f -> f
|
||||||
|
.filter(globalFilter.apply(new GlobalFilter.Config("member", true, false)))
|
||||||
|
.filter(authFilter)
|
||||||
|
.rewritePath("/member-service/(?<segment>.*)", "/$\\{segment}"))
|
||||||
|
.uri("lb://MEMBER-SERVICE"))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ import reactor.core.publisher.Mono;
|
|||||||
@RefreshScope
|
@RefreshScope
|
||||||
@Component
|
@Component
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class AuthenticationFilter implements GatewayFilter {
|
public class AuthGatewayFilter implements GatewayFilter {
|
||||||
|
|
||||||
private final RouterValidator routerValidator;//custom route validator
|
private final RouterValidator routerValidator;//custom route validator
|
||||||
private final JwtTokenUtil jwtTokenUtil;
|
private final JwtTokenUtil jwtTokenUtil;
|
||||||
@@ -7,6 +7,7 @@ import org.springframework.http.server.reactive.ServerHttpResponse;
|
|||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
@@ -19,10 +20,17 @@ public class GlobalFilter extends AbstractGatewayFilterFactory<GlobalFilter.Conf
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
|
@Setter
|
||||||
public static class Config {
|
public static class Config {
|
||||||
private String baseMessage;
|
private String baseMessage;
|
||||||
private boolean preLogger;
|
private boolean preLogger;
|
||||||
private boolean postLogger;
|
private boolean postLogger;
|
||||||
|
|
||||||
|
public Config(String baseMessage, boolean preLogger, boolean postLogger) {
|
||||||
|
this.baseMessage = baseMessage;
|
||||||
|
this.preLogger = preLogger;
|
||||||
|
this.postLogger = postLogger;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package kiz.app.filter;
|
||||||
|
|
||||||
|
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
|
||||||
|
import org.springframework.cloud.gateway.filter.GlobalFilter;
|
||||||
|
import org.springframework.web.server.ServerWebExchange;
|
||||||
|
|
||||||
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
|
//@Component
|
||||||
|
public class GlobalGatewayFilter implements GlobalFilter {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -7,88 +7,93 @@ spring:
|
|||||||
config:
|
config:
|
||||||
activate:
|
activate:
|
||||||
on-profile: local
|
on-profile: local
|
||||||
|
# cloud:
|
||||||
cloud:
|
# gateway:
|
||||||
config:
|
# default-filters:
|
||||||
name: bootstrap
|
# - name: GlobalFilter
|
||||||
gateway:
|
# args:
|
||||||
default-filters:
|
# baseMessage: Spring Cloud Gateway Global Filter
|
||||||
- name: GlobalFilter
|
# preLogger: true
|
||||||
args:
|
# postLogger: true
|
||||||
baseMessage: Spring Cloud Gateway Global Filter
|
# globalcors:
|
||||||
preLogger: true
|
# cors-configurations:
|
||||||
postLogger: true
|
# '[/**]':
|
||||||
globalcors:
|
# allowedOrigins: "http://mindol.synology.me:8081"
|
||||||
cors-configurations:
|
# allowedMethods:
|
||||||
'[/**]':
|
# - GET
|
||||||
allowedOrigins: "http://mindol.synology.me:8081"
|
# - POST
|
||||||
allowedMethods:
|
# - DELETE
|
||||||
- GET
|
# - PUT
|
||||||
- POST
|
# - OPTIONS
|
||||||
- DELETE
|
# - DELETE
|
||||||
- PUT
|
# - PATCH
|
||||||
- OPTIONS
|
# allowedHeaders: '*'
|
||||||
- DELETE
|
# allow-credentials: true
|
||||||
- PATCH
|
# routes:
|
||||||
allowedHeaders: '*'
|
# - id: member-service
|
||||||
allow-credentials: true
|
# predicates:
|
||||||
routes:
|
# - Path=/member-service/**
|
||||||
- id: order-service
|
# uri: lb://MEMBER-SERVICE
|
||||||
uri: lb://ORDER-SERVICE
|
# # 특정 필터 적용
|
||||||
predicates:
|
# filters:
|
||||||
- Path=/order-service/**
|
# - AuthGatewayFilterFactory
|
||||||
filters:
|
# routes:
|
||||||
- AuthenticationFilter
|
# - id: order-service
|
||||||
- RewritePath=/order-service/(?<segment>.*),/$\{segment}
|
# uri: lb://ORDER-SERVICE
|
||||||
- name: RequestRateLimiter
|
# predicates:
|
||||||
args:
|
# - Path=/order-service/**
|
||||||
redis-rate-limiter.replenishRate: 3
|
# filters:
|
||||||
redis-rate-limiter.burstCapacity: 3
|
# - name: AuthenticationFilter
|
||||||
key-resolver: "#{@tokenKeyResolver}"
|
# - RewritePath=/order-service/(?<segment>.*),/$\{segment}
|
||||||
|
# - name: RequestRateLimiter
|
||||||
|
# args:
|
||||||
|
# redis-rate-limiter.replenishRate: 3
|
||||||
|
# redis-rate-limiter.burstCapacity: 3
|
||||||
|
# key-resolver: "#{@tokenKeyResolver}"
|
||||||
|
|
||||||
- id: store-service
|
# - id: store-service
|
||||||
uri: lb://STORE-SERVICE
|
# uri: lb://STORE-SERVICE
|
||||||
predicates:
|
# predicates:
|
||||||
- Path=/store-service/**
|
# - Path=/store-service/**
|
||||||
filters:
|
# filters:
|
||||||
- AuthenticationFilter
|
# - name: AuthenticationFilter
|
||||||
- RewritePath=/store-service/(?<segment>.*),/$\{segment}
|
# - RewritePath=/store-service/(?<segment>.*),/$\{segment}
|
||||||
- name: RequestRateLimiter
|
# - name: RequestRateLimiter
|
||||||
args:
|
# args:
|
||||||
redis-rate-limiter.replenishRate: 3
|
# redis-rate-limiter.replenishRate: 3
|
||||||
redis-rate-limiter.burstCapacity: 3
|
# redis-rate-limiter.burstCapacity: 3
|
||||||
key-resolver: "#{@tokenKeyResolver}"
|
# key-resolver: "#{@tokenKeyResolver}"
|
||||||
|
|
||||||
- id: notice-service
|
# - id: notice-service
|
||||||
uri: lb://NOTICE-SERVICE
|
# uri: lb://NOTICE-SERVICE
|
||||||
predicates:
|
# predicates:
|
||||||
- Path=/notice/**
|
# - Path=/notice/**
|
||||||
filters:
|
# filters:
|
||||||
- AuthenticationFilter
|
# - name: AuthenticationFilter
|
||||||
- RewritePath=/notice/(?<segment>.*),/$\{segment}
|
# - RewritePath=/notice/(?<segment>.*),/$\{segment}
|
||||||
|
|
||||||
- id: auth-service
|
# - id: auth-service
|
||||||
uri: lb://AUTH-SERVICE
|
# uri: lb://AUTH-SERVICE
|
||||||
predicates:
|
# predicates:
|
||||||
- Path=/auth/login
|
# - Path=/auth/login
|
||||||
- Method=POST
|
# - Method=POST
|
||||||
filters:
|
# filters:
|
||||||
- RewritePath=/auth/(?<segment>.*),/$\{segment}
|
# - RewritePath=/auth/(?<segment>.*),/$\{segment}
|
||||||
- id: auth-service
|
# - id: auth-service
|
||||||
uri: lb://AUTH-SERVICE
|
# uri: lb://AUTH-SERVICE
|
||||||
predicates:
|
# predicates:
|
||||||
- Path=/auth/logout
|
# - Path=/auth/logout
|
||||||
- Method=POST
|
# - Method=POST
|
||||||
filters:
|
# filters:
|
||||||
- RewritePath=/auth/(?<segment>.*),/$\{segment}
|
# - RewritePath=/auth/(?<segment>.*),/$\{segment}
|
||||||
|
|
||||||
- id: member-service
|
# - id: member-service
|
||||||
uri: lb://MEMBER-SERVICE
|
# uri: lb://MEMBER-SERVICE
|
||||||
predicates:
|
# predicates:
|
||||||
- Path=/member/**
|
# - Path=/member-service/**
|
||||||
filters:
|
# filters:
|
||||||
- AuthenticationFilter
|
# - name: AuthenticationFilter
|
||||||
- RewritePath=/member/(?<segment>.*),/$\{segment}
|
# - RewritePath=/member-service/(?<segment>.*),/$\{segment}
|
||||||
|
|
||||||
management:
|
management:
|
||||||
endpoints:
|
endpoints:
|
||||||
|
|||||||
@@ -12,11 +12,12 @@ spring:
|
|||||||
eureka:
|
eureka:
|
||||||
instance:
|
instance:
|
||||||
hostname: mindol.synology.me
|
hostname: mindol.synology.me
|
||||||
|
instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
|
||||||
lease-renewal-interval-in-seconds: 30 # 유레카 서버로 설정된 시간(second)마다 하트비트 전송 (디폴트 30초)
|
lease-renewal-interval-in-seconds: 30 # 유레카 서버로 설정된 시간(second)마다 하트비트 전송 (디폴트 30초)
|
||||||
# 디스커버리는 서비스 등록 해제 하기 전에 마지막 하트비트에서부터 설정된 시간(second) 동안 하트비트가 수신되지 않으면
|
# 디스커버리는 서비스 등록 해제 하기 전에 마지막 하트비트에서부터 설정된 시간(second) 동안 하트비트가 수신되지 않으면
|
||||||
# 서비스 등록 해제 (디폴트 90초)
|
# 서비스 등록 해제 (디폴트 90초)
|
||||||
lease-expiration-duration-in-seconds: 90
|
lease-expiration-duration-in-seconds: 90
|
||||||
prefer-ip-address: false # 서비스의 호스트 이름이 아닌 IP 주소를 유레카 서버에 등록하도록 지정 (디폴트 false)
|
prefer-ip-address: true # 서비스의 호스트 이름이 아닌 IP 주소를 유레카 서버에 등록하도록 지정 (디폴트 false)
|
||||||
client:
|
client:
|
||||||
register-with-eureka: true # 레지스트리에 자신을 등록할지에 대한 여부 (디폴트 true)
|
register-with-eureka: true # 레지스트리에 자신을 등록할지에 대한 여부 (디폴트 true)
|
||||||
fetch-registry: true # 레지스트리에 있는 정보를 가져올지에 대한 여부 (디폴트 true)
|
fetch-registry: true # 레지스트리에 있는 정보를 가져올지에 대한 여부 (디폴트 true)
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
package kiz.app.member;
|
package kiz.app;
|
||||||
|
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
|
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
|
||||||
|
|
||||||
@EnableEurekaClient
|
@EnableDiscoveryClient
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
public class MemberApplication {
|
public class MemberApplication {
|
||||||
|
|
||||||
@@ -21,6 +21,7 @@ public abstract class SelfValidating<T> {
|
|||||||
* Evaluates all Bean Validations on the attributes of this
|
* Evaluates all Bean Validations on the attributes of this
|
||||||
* instance.
|
* instance.
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
protected void validateSelf() {
|
protected void validateSelf() {
|
||||||
Set<ConstraintViolation<T>> violations = validator.validate((T) this);
|
Set<ConstraintViolation<T>> violations = validator.validate((T) this);
|
||||||
if (!violations.isEmpty()) {
|
if (!violations.isEmpty()) {
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package kiz.app.member.adapter.in.web;
|
|||||||
|
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import kiz.app.common.WebAdapter;
|
import kiz.app.common.WebAdapter;
|
||||||
@@ -10,6 +11,7 @@ import kiz.app.member.adapter.in.web.mapper.MemberWebMapper;
|
|||||||
import kiz.app.member.application.port.in.FindMemberUseCase;
|
import kiz.app.member.application.port.in.FindMemberUseCase;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
|
@RequestMapping("/member-service")
|
||||||
@WebAdapter
|
@WebAdapter
|
||||||
@RestController
|
@RestController
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@@ -18,7 +20,12 @@ public class FindMemberController {
|
|||||||
private final FindMemberUseCase findMemberUseCase;
|
private final FindMemberUseCase findMemberUseCase;
|
||||||
private final MemberWebMapper memberWebMapper;
|
private final MemberWebMapper memberWebMapper;
|
||||||
|
|
||||||
@GetMapping("/api/member/{memberId}")
|
@GetMapping("/welcome")
|
||||||
|
public String welcome(){
|
||||||
|
return "welcome to the first service";
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/{memberId}")
|
||||||
public MemberResponse getMember(@PathVariable("memberId") String memberId) {
|
public MemberResponse getMember(@PathVariable("memberId") String memberId) {
|
||||||
return memberWebMapper.toDto(findMemberUseCase.getMember(memberId));
|
return memberWebMapper.toDto(findMemberUseCase.getMember(memberId));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,26 @@
|
|||||||
package kiz.app.member.adapter.in.web;
|
package kiz.app.member.adapter.in.web;
|
||||||
|
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import kiz.app.common.WebAdapter;
|
||||||
|
import kiz.app.member.application.port.in.SignUpUseCase;
|
||||||
|
import kiz.app.member.application.port.in.command.SignUpCommand;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
|
@RequestMapping("/member-service")
|
||||||
|
@WebAdapter
|
||||||
|
@RestController
|
||||||
|
@RequiredArgsConstructor
|
||||||
public class SignUpController {
|
public class SignUpController {
|
||||||
|
|
||||||
|
private final SignUpUseCase signUpUseCase;
|
||||||
|
|
||||||
|
@PostMapping("/signup")
|
||||||
|
public Long signUp(@RequestBody SignUpCommand command) {
|
||||||
|
return signUpUseCase.signUp(command).getValue();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,10 +11,10 @@ public class MemberWebMapper {
|
|||||||
public MemberResponse toDto(Member member) {
|
public MemberResponse toDto(Member member) {
|
||||||
return MemberResponse.builder()
|
return MemberResponse.builder()
|
||||||
.memberId(member.getMemberId())
|
.memberId(member.getMemberId())
|
||||||
.name(member.getName())
|
.name(member.getMemberName())
|
||||||
.email(member.getEmail())
|
.email(member.getEmail().getValue())
|
||||||
.phone(member.getPhone())
|
.phone(member.getPhone().getValue())
|
||||||
.address(member.getAddress())
|
.address(member.getAddress().getZipCode() + member.getAddress().getAddress1() + member.getAddress().getAddress2())
|
||||||
.birthday(member.getBirthday())
|
.birthday(member.getBirthday())
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,17 @@
|
|||||||
package kiz.app.member.adapter.out.persistence;
|
package kiz.app.member.adapter.out.persistence;
|
||||||
|
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
import javax.persistence.Column;
|
import javax.persistence.Column;
|
||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
import javax.persistence.GeneratedValue;
|
import javax.persistence.GeneratedValue;
|
||||||
|
import javax.persistence.GenerationType;
|
||||||
import javax.persistence.Id;
|
import javax.persistence.Id;
|
||||||
import javax.persistence.Table;
|
import javax.persistence.Table;
|
||||||
|
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
|
import lombok.Builder;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
@@ -19,7 +22,7 @@ import lombok.NoArgsConstructor;
|
|||||||
public class MemberEntity {
|
public class MemberEntity {
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
@GeneratedValue
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
private Long id;
|
private Long id;
|
||||||
|
|
||||||
@Column(name = "member_id", length = 20, nullable = false, unique = true)
|
@Column(name = "member_id", length = 20, nullable = false, unique = true)
|
||||||
@@ -29,7 +32,7 @@ public class MemberEntity {
|
|||||||
private String password;
|
private String password;
|
||||||
|
|
||||||
@Column(name = "name", length = 20, nullable = false)
|
@Column(name = "name", length = 20, nullable = false)
|
||||||
private String name;
|
private String memberName;
|
||||||
|
|
||||||
@Column(name = "email", length = 50, nullable = false)
|
@Column(name = "email", length = 50, nullable = false)
|
||||||
private String email;
|
private String email;
|
||||||
@@ -37,10 +40,42 @@ public class MemberEntity {
|
|||||||
@Column(name = "phone", length = 20)
|
@Column(name = "phone", length = 20)
|
||||||
private String phone;
|
private String phone;
|
||||||
|
|
||||||
@Column(name = "address", length = 100)
|
@Column(name = "zipCode", length = 6)
|
||||||
private String address;
|
private String zipCode;
|
||||||
|
|
||||||
|
@Column(name = "address1", length = 100)
|
||||||
|
private String address1;
|
||||||
|
|
||||||
|
@Column(name = "address2", length = 100)
|
||||||
|
private String address2;
|
||||||
|
|
||||||
@Column(name = "birthday")
|
@Column(name = "birthday")
|
||||||
private LocalDate birthday;
|
private LocalDate birthday;
|
||||||
|
|
||||||
|
@Column(name = "regId", length = 20)
|
||||||
|
private String regId;
|
||||||
|
|
||||||
|
@Column(name = "regDate")
|
||||||
|
private LocalDateTime regDate;
|
||||||
|
|
||||||
|
@Column(name = "modId", length = 20)
|
||||||
|
private String modId;
|
||||||
|
|
||||||
|
@Column(name = "modDate")
|
||||||
|
private LocalDateTime modDate;
|
||||||
|
|
||||||
|
@Builder
|
||||||
|
public MemberEntity(String memberId, String password, String memberName, String email, String phone, String zipCode,
|
||||||
|
String address1, String address2, LocalDate birthday) {
|
||||||
|
this.memberId = memberId;
|
||||||
|
this.password = password;
|
||||||
|
this.memberName = memberName;
|
||||||
|
this.email = email;
|
||||||
|
this.phone = phone;
|
||||||
|
this.zipCode = zipCode;
|
||||||
|
this.address1 = address1;
|
||||||
|
this.address2 = address2;
|
||||||
|
this.birthday = birthday;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,12 +6,14 @@ import kiz.app.common.PersistenceAdapter;
|
|||||||
import kiz.app.member.adapter.out.persistence.mapper.MemberMapper;
|
import kiz.app.member.adapter.out.persistence.mapper.MemberMapper;
|
||||||
import kiz.app.member.adapter.out.persistence.repository.MemberJpaRepository;
|
import kiz.app.member.adapter.out.persistence.repository.MemberJpaRepository;
|
||||||
import kiz.app.member.application.port.out.FindMemberPort;
|
import kiz.app.member.application.port.out.FindMemberPort;
|
||||||
|
import kiz.app.member.application.port.out.SignUpPort;
|
||||||
import kiz.app.member.domain.Member;
|
import kiz.app.member.domain.Member;
|
||||||
|
import kiz.app.member.domain.Member.MemberId;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@PersistenceAdapter
|
@PersistenceAdapter
|
||||||
public class MemberPersistenceAdapter implements FindMemberPort {
|
public class MemberPersistenceAdapter implements FindMemberPort, SignUpPort {
|
||||||
|
|
||||||
private final MemberJpaRepository memberJpaRepository;
|
private final MemberJpaRepository memberJpaRepository;
|
||||||
private final MemberMapper memberMapper;
|
private final MemberMapper memberMapper;
|
||||||
@@ -23,5 +25,11 @@ public class MemberPersistenceAdapter implements FindMemberPort {
|
|||||||
.orElseThrow(EntityNotFoundException::new)
|
.orElseThrow(EntityNotFoundException::new)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MemberId signUp(Member member) {
|
||||||
|
return new MemberId(memberJpaRepository.save(memberMapper.toEntity(member)).getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,10 @@ package kiz.app.member.adapter.out.persistence.mapper;
|
|||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import kiz.app.member.adapter.out.persistence.MemberEntity;
|
import kiz.app.member.adapter.out.persistence.MemberEntity;
|
||||||
|
import kiz.app.member.domain.Address;
|
||||||
|
import kiz.app.member.domain.Email;
|
||||||
import kiz.app.member.domain.Member;
|
import kiz.app.member.domain.Member;
|
||||||
|
import kiz.app.member.domain.Phone;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
public class MemberMapper {
|
public class MemberMapper {
|
||||||
@@ -12,12 +15,26 @@ public class MemberMapper {
|
|||||||
return Member.builder()
|
return Member.builder()
|
||||||
.memberId(member.getMemberId())
|
.memberId(member.getMemberId())
|
||||||
.password(member.getPassword())
|
.password(member.getPassword())
|
||||||
.name(member.getName())
|
.memberName(member.getMemberName())
|
||||||
.email(member.getEmail())
|
.email(Email.of(member.getEmail()))
|
||||||
.phone(member.getPhone())
|
.phone(Phone.of(member.getPhone()))
|
||||||
.address(member.getAddress())
|
.address(Address.of(member.getZipCode(), member.getAddress1(), member.getAddress2()))
|
||||||
.birthday(member.getBirthday())
|
.birthday(member.getBirthday())
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MemberEntity toEntity(Member member) {
|
||||||
|
return MemberEntity.builder()
|
||||||
|
.memberId(member.getMemberId())
|
||||||
|
.password(member.getPassword())
|
||||||
|
.memberName(member.getMemberName())
|
||||||
|
.email(member.getEmail().getValue())
|
||||||
|
.phone(member.getPhone().getValue())
|
||||||
|
.zipCode(member.getAddress().getZipCode())
|
||||||
|
.address1(member.getAddress().getAddress1())
|
||||||
|
.address2(member.getAddress().getAddress2())
|
||||||
|
.birthday(member.getBirthday())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package kiz.app.member.application.port.in;
|
||||||
|
|
||||||
|
import kiz.app.member.application.port.in.command.SignUpCommand;
|
||||||
|
import kiz.app.member.domain.Member.MemberId;
|
||||||
|
|
||||||
|
public interface SignUpUseCase {
|
||||||
|
|
||||||
|
MemberId signUp(SignUpCommand command);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
package kiz.app.member.application.port.in.command;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
import javax.validation.constraints.Email;
|
||||||
|
import javax.validation.constraints.NotBlank;
|
||||||
|
|
||||||
|
import kiz.app.common.SelfValidating;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.Value;
|
||||||
|
|
||||||
|
@Value
|
||||||
|
@EqualsAndHashCode(callSuper = false)
|
||||||
|
public class SignUpCommand extends SelfValidating<SignUpCommand> {
|
||||||
|
|
||||||
|
@NotBlank
|
||||||
|
private final String memberId;
|
||||||
|
@NotBlank
|
||||||
|
private final String password;
|
||||||
|
@NotBlank
|
||||||
|
private final String memberName;
|
||||||
|
@Email
|
||||||
|
private final String email;
|
||||||
|
private final String phone;
|
||||||
|
private final String zipCode;
|
||||||
|
private final String address1;
|
||||||
|
private final String address2;
|
||||||
|
private final LocalDate birthday;
|
||||||
|
|
||||||
|
public SignUpCommand(
|
||||||
|
String memberId,
|
||||||
|
String password,
|
||||||
|
String memberName,
|
||||||
|
String email,
|
||||||
|
String phone,
|
||||||
|
String zipCode,
|
||||||
|
String address1,
|
||||||
|
String address2,
|
||||||
|
LocalDate birthday
|
||||||
|
) {
|
||||||
|
this.memberId = memberId;
|
||||||
|
this.password = password;
|
||||||
|
this.memberName = memberName;
|
||||||
|
this.email = email;
|
||||||
|
this.phone = phone;
|
||||||
|
this.zipCode = zipCode;
|
||||||
|
this.address1 = address1;
|
||||||
|
this.address2 = address2;
|
||||||
|
this.birthday = birthday;
|
||||||
|
this.validateSelf();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package kiz.app.member.application.port.out;
|
||||||
|
|
||||||
|
import kiz.app.member.domain.Member;
|
||||||
|
import kiz.app.member.domain.Member.MemberId;
|
||||||
|
|
||||||
|
public interface SignUpPort {
|
||||||
|
|
||||||
|
MemberId signUp(Member member);
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package kiz.app.member.application.service;
|
||||||
|
|
||||||
|
import kiz.app.common.UseCase;
|
||||||
|
import kiz.app.member.application.port.in.SignUpUseCase;
|
||||||
|
import kiz.app.member.application.port.in.command.SignUpCommand;
|
||||||
|
import kiz.app.member.application.port.out.SignUpPort;
|
||||||
|
import kiz.app.member.domain.Member;
|
||||||
|
import kiz.app.member.domain.Member.MemberId;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
@UseCase
|
||||||
|
public class SignUpService implements SignUpUseCase {
|
||||||
|
|
||||||
|
private final SignUpPort signUpPort;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MemberId signUp(SignUpCommand command) {
|
||||||
|
return signUpPort.signUp(
|
||||||
|
Member.createMember(
|
||||||
|
command.getMemberId(),
|
||||||
|
command.getPassword(),
|
||||||
|
command.getMemberName(),
|
||||||
|
command.getEmail(),
|
||||||
|
command.getPhone(),
|
||||||
|
command.getZipCode(),
|
||||||
|
command.getAddress1(),
|
||||||
|
command.getAddress2(),
|
||||||
|
command.getBirthday()));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package kiz.app.member.domain;
|
||||||
|
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@EqualsAndHashCode
|
||||||
|
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
|
public class Address {
|
||||||
|
|
||||||
|
@Getter private final String zipCode;
|
||||||
|
@Getter private final String address1;
|
||||||
|
@Getter private final String address2;
|
||||||
|
|
||||||
|
public static Address of(String zipCode, String address1, String address2) {
|
||||||
|
return new Address(zipCode, address1, address2);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package kiz.app.member.domain;
|
||||||
|
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@EqualsAndHashCode
|
||||||
|
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
|
public class Email {
|
||||||
|
|
||||||
|
@Getter private final String value;
|
||||||
|
|
||||||
|
public static Email of(String value) {
|
||||||
|
return new Email(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,36 +13,45 @@ import lombok.Value;
|
|||||||
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
public class Member {
|
public class Member {
|
||||||
|
|
||||||
private final MemberId id;
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
private final String memberId;
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
private final String password;
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
private final String name;
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
private final String email;
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
private final String phone;
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
private final String address;
|
|
||||||
|
|
||||||
@Getter
|
|
||||||
private final LocalDate birthday;
|
|
||||||
|
|
||||||
public Optional<MemberId> getId(){
|
|
||||||
return Optional.ofNullable(this.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Value
|
@Value
|
||||||
public static class MemberId {
|
public static class MemberId {
|
||||||
private Long value;
|
private Long value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final MemberId id;
|
||||||
|
|
||||||
|
public Optional<MemberId> getId(){
|
||||||
|
return Optional.ofNullable(this.id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Getter private final String memberId;
|
||||||
|
@Getter private final String password;
|
||||||
|
@Getter private final String memberName;
|
||||||
|
@Getter private final Email email;
|
||||||
|
@Getter private final Phone phone;
|
||||||
|
@Getter private final Address address;
|
||||||
|
@Getter private final LocalDate birthday;
|
||||||
|
|
||||||
|
public static Member createMember(
|
||||||
|
final String memberId,
|
||||||
|
final String password,
|
||||||
|
final String memberName,
|
||||||
|
final String email,
|
||||||
|
final String phone,
|
||||||
|
final String zipCode,
|
||||||
|
final String address1,
|
||||||
|
final String address2,
|
||||||
|
final LocalDate birthday
|
||||||
|
) {
|
||||||
|
return Member.builder()
|
||||||
|
.memberId(memberId)
|
||||||
|
.password(password)
|
||||||
|
.memberName(memberName)
|
||||||
|
.email(Email.of(email))
|
||||||
|
.phone(Phone.of(phone))
|
||||||
|
.address(Address.of(zipCode, address1, address2))
|
||||||
|
.birthday(birthday)
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package kiz.app.member.domain;
|
||||||
|
|
||||||
|
import lombok.AccessLevel;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@EqualsAndHashCode
|
||||||
|
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||||
|
public class Phone {
|
||||||
|
|
||||||
|
@Getter private final String value;
|
||||||
|
|
||||||
|
public static Phone of(String value) {
|
||||||
|
return new Phone(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
server:
|
server:
|
||||||
port: 8083
|
port: 0
|
||||||
# servlet:
|
# servlet:
|
||||||
# contextPath: /member
|
# contextPath: /member
|
||||||
|
|
||||||
@@ -14,15 +14,22 @@ spring:
|
|||||||
settings:
|
settings:
|
||||||
web-allow-others: true
|
web-allow-others: true
|
||||||
datasource:
|
datasource:
|
||||||
driver-class-name: org.h2.Driver
|
url: jdbc:mariadb://mindol.synology.me:3307/kiz_space
|
||||||
url: jdbc:h2:mem:userdb;DB_CLOSE_DELAY=-1
|
driver-class-name: org.mariadb.jdbc.Driver
|
||||||
username: sa
|
username: mindolangel
|
||||||
password:
|
password: $awlswn1318a
|
||||||
|
# driver-class-name: org.h2.Driver
|
||||||
|
# url: jdbc:h2:mem:userdb;DB_CLOSE_DELAY=-1
|
||||||
|
# username: sa
|
||||||
|
# password:
|
||||||
jpa:
|
jpa:
|
||||||
|
open-in-view: false
|
||||||
|
generate-ddl: true
|
||||||
|
show-sql: true
|
||||||
hibernate: # hibernate 사용 설정
|
hibernate: # hibernate 사용 설정
|
||||||
# 애플리케이션 실행 시점에 테이블을 다 지우고, 내가 가진 entity 정보를 보고 다시 테이블 자동 생성
|
# 애플리케이션 실행 시점에 테이블을 다 지우고, 내가 가진 entity 정보를 보고 다시 테이블 자동 생성
|
||||||
# if exists drop table 해주고 다시 만들어준다고 보면 된다.
|
# if exists drop table 해주고 다시 만들어준다고 보면 된다.
|
||||||
ddl-auto: create
|
ddl-auto: update
|
||||||
properties: # property 사용 설정
|
properties: # property 사용 설정
|
||||||
hibernate: # hibernate property 설정
|
hibernate: # hibernate property 설정
|
||||||
format_sql: true
|
format_sql: true
|
||||||
|
|||||||
@@ -12,11 +12,12 @@ spring:
|
|||||||
eureka:
|
eureka:
|
||||||
instance:
|
instance:
|
||||||
hostname: mindol.synology.me
|
hostname: mindol.synology.me
|
||||||
|
instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
|
||||||
lease-renewal-interval-in-seconds: 30 # 유레카 서버로 설정된 시간(second)마다 하트비트 전송 (디폴트 30초)
|
lease-renewal-interval-in-seconds: 30 # 유레카 서버로 설정된 시간(second)마다 하트비트 전송 (디폴트 30초)
|
||||||
# 디스커버리는 서비스 등록 해제 하기 전에 마지막 하트비트에서부터 설정된 시간(second) 동안 하트비트가 수신되지 않으면
|
# 디스커버리는 서비스 등록 해제 하기 전에 마지막 하트비트에서부터 설정된 시간(second) 동안 하트비트가 수신되지 않으면
|
||||||
# 서비스 등록 해제 (디폴트 90초)
|
# 서비스 등록 해제 (디폴트 90초)
|
||||||
lease-expiration-duration-in-seconds: 90
|
lease-expiration-duration-in-seconds: 90
|
||||||
prefer-ip-address: false # 서비스의 호스트 이름이 아닌 IP 주소를 유레카 서버에 등록하도록 지정 (디폴트 false)
|
prefer-ip-address: true # 서비스의 호스트 이름이 아닌 IP 주소를 유레카 서버에 등록하도록 지정 (디폴트 false)
|
||||||
client:
|
client:
|
||||||
register-with-eureka: true # 레지스트리에 자신을 등록할지에 대한 여부 (디폴트 true)
|
register-with-eureka: true # 레지스트리에 자신을 등록할지에 대한 여부 (디폴트 true)
|
||||||
fetch-registry: true # 레지스트리에 있는 정보를 가져올지에 대한 여부 (디폴트 true)
|
fetch-registry: true # 레지스트리에 있는 정보를 가져올지에 대한 여부 (디폴트 true)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
server:
|
server:
|
||||||
port: 8084
|
port: 0
|
||||||
# servlet:
|
# servlet:
|
||||||
# contextPath: /order
|
# contextPath: /order
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ spring:
|
|||||||
eureka:
|
eureka:
|
||||||
instance:
|
instance:
|
||||||
hostname: mindol.synology.me
|
hostname: mindol.synology.me
|
||||||
|
instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}
|
||||||
lease-renewal-interval-in-seconds: 30 # 유레카 서버로 설정된 시간(second)마다 하트비트 전송 (디폴트 30초)
|
lease-renewal-interval-in-seconds: 30 # 유레카 서버로 설정된 시간(second)마다 하트비트 전송 (디폴트 30초)
|
||||||
# 디스커버리는 서비스 등록 해제 하기 전에 마지막 하트비트에서부터 설정된 시간(second) 동안 하트비트가 수신되지 않으면
|
# 디스커버리는 서비스 등록 해제 하기 전에 마지막 하트비트에서부터 설정된 시간(second) 동안 하트비트가 수신되지 않으면
|
||||||
# 서비스 등록 해제 (디폴트 90초)
|
# 서비스 등록 해제 (디폴트 90초)
|
||||||
|
|||||||
Reference in New Issue
Block a user