Home

0

Spring Cloud - 13. Users Microservice Catalog

목차 Spring Cloud - 20. Users Microservice AuthorizationHeaderFilter 추가 Spring Cloud - 19. Users Microservice JWT 생성 Spring Cloud - 18. Users Microservice 로그인 성공 처리 Spring Cloud - 17. Users Microservice Routes 정보 변경 Spring Cloud - 16. Users Microservice loadUserByUsername() 구현 Spring Cloud - 15. Users Microservice AuthenticationFilter Spring Cloud - 14. Users Microservice Order Service Spring Cloud - 13. Users Microservice Catalog Spring Cloud - 12. Users Microservice 사용자 조회 Spring Cloud - 11. Users Microservice Gateway 연동 Spring Cloud - 10. Users Microservice 사용자 추가 Spring Cloud로 개발하는 마이크로서비스 애플리케이션 9 Spring Cloud - Users Microservice 13. Users Microservice Catalog설정 정보server: port: 0spring: application: name: catalog-service h2: console: enabled: true settings: web-allow-others: true datasource: hikari: driver-class-name: org.h2.Driver url: jdbc:h2:mem:testdb username: sa password: jpa: hibernate: ddl-auto: create-drop show-sql: true generate-ddl: trueeureka: client: service-url: defaultZone: http://localhost:8761/eureka#logging:# level:# com.example.catalogservice: DEBUG @Data@Entity@Table(name = "catalog")public class CatalogEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false, length = 120, unique = true) private String productId; @Column(nullable = false) private String productName; @Column(nullable = false) private Integer stock; @Column(nullable = false) private Integer unitPrice; @Column(nullable = false, updatable = false, insertable = false) @ColumnDefault(value = "CURRENT_TIMESTAMP") private Date createdAt;} @Repositorypublic interface CatalogRepository extends CrudRepository<CatalogEntity, Long> { CatalogEntity findByProductId(String productId);} public interface CatalogService { Iterable<CatalogEntity> getAllCatalogs();} @Service@Slf4jpublic class CatalogServiceImpl implements CatalogService{ CatalogRepository repository; Environment env; public CatalogServiceImpl(CatalogRepository repository, Environment env){ this.repository = repository; this.env = env; } @Override public Iterable<CatalogEntity> getAllCatalogs() { return repository.findAll(); }}

0

Spring Cloud - 12. Users Microservice 사용자 조회

목차 Spring Cloud - 20. Users Microservice AuthorizationHeaderFilter 추가 Spring Cloud - 19. Users Microservice JWT 생성 Spring Cloud - 18. Users Microservice 로그인 성공 처리 Spring Cloud - 17. Users Microservice Routes 정보 변경 Spring Cloud - 16. Users Microservice loadUserByUsername() 구현 Spring Cloud - 15. Users Microservice AuthenticationFilter Spring Cloud - 14. Users Microservice Order Service Spring Cloud - 13. Users Microservice Catalog Spring Cloud - 12. Users Microservice 사용자 조회 Spring Cloud - 11. Users Microservice Gateway 연동 Spring Cloud - 10. Users Microservice 사용자 추가 Spring Cloud로 개발하는 마이크로서비스 애플리케이션 9 Spring Cloud - Users Microservice 12. Users Microservice 사용자 조회@Overridepublic UserDto getUserByUserId(String userId) { UserEntity userEntity = userRepository.findByUserId(userId); if (userEntity == null) throw new UsernameNotFoundException("User not found"); UserDto userDto = new ModelMapper().map(userEntity, UserDto.class); List<ResponseOrder> orders = new ArrayList<>(); userDto.setOrders(orders); return userDto;}@Overridepublic Iterable<UserEntity> getUserByAll() { return userRepository.findAll();} public interface UserRepository extends CrudRepository<UserEntity, Long> { UserEntity findByUserId(String userId);} 전체 User 정보 가져오기@GetMapping("/users")public ResponseEntity<List<ResponseUser>> getUsers() { Iterable<UserEntity> userList = userService.getUserByAll(); List<ResponseUser> result = new ArrayList<>(); userList.forEach(v -> { result.add(new ModelMapper().map(v, ResponseUser.class)); }); return ResponseEntity.status(HttpStatus.OK).body(result);} 특정 User 정보 가져오기@GetMapping("/users/{userId}") public ResponseEntity<ResponseUser> getUsers(@PathVariable("userId") String userId) { UserDto userDto = userService.getUserByUserId(userId); ResponseUser returnValue = new ModelMapper().map(userDto, ResponseUser.class); return ResponseEntity.status(HttpStatus.OK).body(returnValue); }

0

Spring Cloud - 11. Users Microservice Gateway 연동

목차 Spring Cloud - 20. Users Microservice AuthorizationHeaderFilter 추가 Spring Cloud - 19. Users Microservice JWT 생성 Spring Cloud - 18. Users Microservice 로그인 성공 처리 Spring Cloud - 17. Users Microservice Routes 정보 변경 Spring Cloud - 16. Users Microservice loadUserByUsername() 구현 Spring Cloud - 15. Users Microservice AuthenticationFilter Spring Cloud - 14. Users Microservice Order Service Spring Cloud - 13. Users Microservice Catalog Spring Cloud - 12. Users Microservice 사용자 조회 Spring Cloud - 11. Users Microservice Gateway 연동 Spring Cloud - 10. Users Microservice 사용자 추가 Spring Cloud로 개발하는 마이크로서비스 애플리케이션 9 Spring Cloud - Users Microservice Users Microservice Gateway 연동@GetMapping("/health_check")public String status(){ return String.format("It's Working in User Service on PORT %s", env.getProperty("local.server.port"));} server: port: 8080eureka: client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://localhost:8761/eurekaspring: application: name: apigateway-service cloud: gateway: default-filters: - name: GlobalFilter args: baseMessage: Spring Cloud Gateway Global Filter preLogger: true postLogger: true routes: - id: user-service # uri: http://localhost:8081/ uri: lb://USER-SERVICE predicates: - Path=/user-service/** filters: - CustomFilter # - AddRequestHeader=first-request, first-request-header2 # - AddResponseHeader=first-response, first-response-header2 - id: first-service # uri: http://localhost:8081/ uri: lb://MY-FIRST-SERVICE predicates: - Path=/first-service/** filters: - CustomFilter # - AddRequestHeader=first-request, first-request-header2 # - AddResponseHeader=first-response, first-response-header2 Gateway를 거처 User Service에 접근하게 되면 문제가 발생 User Service의 URI와 API Gateway의 URI가 다르기 때문에 문제가 생김 @GetMapping("/user-service/health_check")public String status(){ return String.format("It's Working in User Service on PORT %s", env.getProperty("local.server.port"));}

0

Spring Cloud - 10. Users Microservice 사용자 추가

목차 Spring Cloud - 20. Users Microservice AuthorizationHeaderFilter 추가 Spring Cloud - 19. Users Microservice JWT 생성 Spring Cloud - 18. Users Microservice 로그인 성공 처리 Spring Cloud - 17. Users Microservice Routes 정보 변경 Spring Cloud - 16. Users Microservice loadUserByUsername() 구현 Spring Cloud - 15. Users Microservice AuthenticationFilter Spring Cloud - 14. Users Microservice Order Service Spring Cloud - 13. Users Microservice Catalog Spring Cloud - 12. Users Microservice 사용자 조회 Spring Cloud - 11. Users Microservice Gateway 연동 Spring Cloud - 10. Users Microservice 사용자 추가 Spring Cloud로 개발하는 마이크로서비스 애플리케이션 9 Spring Cloud - Users Microservice Users Microservice 사용자 추가@RestController@RequestMapping("/")public class UserController { private Environment env; private UserService userService; private Greeting greeting; public UserController(Environment env, UserService userService){ this.env = env; this.userService = userService; } @GetMapping("/health_check") public String status(){ return "It's Working in User Service"; } @GetMapping("/welcome") public String welcome(){ return env.getProperty("greeting.message"); } @GetMapping("/welcome_value") public String welcomeValue(){ return greeting.getMessage(); } @PostMapping("/users") public ResponseEntity createUser(@RequestBody RequestUser user){ ModelMapper modelMapper = new ModelMapper(); modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT); UserDto userDto = modelMapper.map(user, UserDto.class); userService.createUser(userDto); ResponseUser responseUser = modelMapper.map(userDto, ResponseUser.class); return ResponseEntity.status(HttpStatus.CREATED).body(responseUser); }} @Datapublic class ResponseUser { private String email; private String name; private String userId;} @Datapublic class RequestUser { @NotNull(message = "Email cannot be null") @Size(min = 2, message = "Email not be less than two characters") private String email; @NotNull(message = "Name cannot be null") @Size(min = 2, message = "Name not be less than two characters") private String pwd; @NotNull(message = "Password cannot be null") @Size(min = 8, message = "Password not be less than two characters") private String name;} @Datapublic class UserDto { private String email; private String name; private String pwd; private String userId; private Date createdAt; private String encryptedPwd;} @Component@Data@AllArgsConstructor@NoArgsConstructorpublic class Greeting { @Value("${greeting.message}") private String message;} @Data@Entity@Table("users")public class UserEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false, length = 50) private String email; @Column(nullable = false, length = 50) private String name; @Column(nullable = false, unique = true) private String userId; @Column(nullable = false, unique = true) private String encryptedPwd;}

0

Spring Cloud로 개발하는 마이크로서비스 애플리케이션 9

목차 Spring Cloud - 20. Users Microservice AuthorizationHeaderFilter 추가 Spring Cloud - 19. Users Microservice JWT 생성 Spring Cloud - 18. Users Microservice 로그인 성공 처리 Spring Cloud - 17. Users Microservice Routes 정보 변경 Spring Cloud - 16. Users Microservice loadUserByUsername() 구현 Spring Cloud - 15. Users Microservice AuthenticationFilter Spring Cloud - 14. Users Microservice Order Service Spring Cloud - 13. Users Microservice Catalog Spring Cloud - 12. Users Microservice 사용자 조회 Spring Cloud - 11. Users Microservice Gateway 연동 Spring Cloud - 10. Users Microservice 사용자 추가 Spring Cloud로 개발하는 마이크로서비스 애플리케이션 9 Spring Cloud - Users Microservice Spring Cloud로 개발하는 마이크로서비스 애플리케이션 9server: port: 0spring: application: name: user-service h2: console: enabled: true settings: web-allow-others: true datasource: username: sa password: hikari: driver-class-name: org.h2.Driver url: jdbc:h2:mem:testdbeureka: instance: instanceId: ${spring.application.name}:${spring.application.instance_id:${random.value}} client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://localhost:8761/eurekagreeting: message: Welcome to the Simple E-commerce.n

0

Spring Cloud - Users Microservice

목차 Spring Cloud - 20. Users Microservice AuthorizationHeaderFilter 추가 Spring Cloud - 19. Users Microservice JWT 생성 Spring Cloud - 18. Users Microservice 로그인 성공 처리 Spring Cloud - 17. Users Microservice Routes 정보 변경 Spring Cloud - 16. Users Microservice loadUserByUsername() 구현 Spring Cloud - 15. Users Microservice AuthenticationFilter Spring Cloud - 14. Users Microservice Order Service Spring Cloud - 13. Users Microservice Catalog Spring Cloud - 12. Users Microservice 사용자 조회 Spring Cloud - 11. Users Microservice Gateway 연동 Spring Cloud - 10. Users Microservice 사용자 추가 Spring Cloud로 개발하는 마이크로서비스 애플리케이션 9 Spring Cloud - Users Microservice Users Microservice@RestController@RequestMapping("/")public class UserController { @GetMapping("/health_check") public String status(){ return "It's Working in User Service"; }} 프로젝트 설정 추가하기server: port: 0spring: application: name: user-serviceeureka: instance: instanceId: ${spring.application.name}:${spring.application.instance_id:${random.value}} client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://localhost:8761/eureka Application.yml 파일로부터 데이터 가져오기server: port: 0spring: application: name: user-serviceeureka: instance: instanceId: ${spring.application.name}:${spring.application.instance_id:${random.value}} client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://localhost:8761/eurekagreeting: message: Welcome to the Simple E-commerce. Enviroment 객체를 사용하는 방법

0

Spring Cloud - 7. Load Balancer 적용

Spring Cloud - 7. Load Balancer 적용 Spring Cloud - 6. Spring Cloud Gateway Global Filter 적용 Spring Cloud - 5. Spring Cloud Gateway Global Filter 적용 Spring Cloud - 4. Spring Cloud Gateway Custom Filter 적용 Spring Cloud - 3. Spring Cloud Gateway Filter 적용 Spring Cloud - 2. Spring Cloud Gateway 사용하기 Spring Cloud - Eureka 에 Service 등록하기 Spring Cloud - Service Discovery Server (Eureka) Spring Cloud로 개발하는 마이크로서비스 애플리케이션 7 - Load Balancer 적용Spring Cloud Gateway와 Eureka연동 Gateway 설정eureka 설정하기 eureka: client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://localhost:8761/eureka Gateway 설정하기 spring: application: name: apigateway-service cloud: gateway: default-filters: - name: GlobalFilter args: baseMessage: Spring Cloud Gateway Global Filter preLogger: true postLogger: true routes: - id: first-service# uri: http://localhost:8081/ uri: lb://MY-FIRST-SERVICE predicates: - Path=/first-service/** filters: - CustomFilter# - AddRequestHeader=first-request, first-request-header2# - AddResponseHeader=first-response, first-response-header2 - id: second-service# uri: http://localhost:8082/ uri: lb://MY-SECOND-SERVICE predicates: - Path=/second-service/** filters: - name: CustomFilter - name: LoggingFilter args: baseMessage: Hi, there. preLogger: true postLogger: true# - AddRequestHeader=second-request, second-request-header2# - AddResponseHeader=second-response, second-response-header2 Client 설정

0

Spring Cloud - 6. Spring Cloud Gateway Global Filter 적용

Spring Cloud - 7. Load Balancer 적용 Spring Cloud - 6. Spring Cloud Gateway Global Filter 적용 Spring Cloud - 5. Spring Cloud Gateway Global Filter 적용 Spring Cloud - 4. Spring Cloud Gateway Custom Filter 적용 Spring Cloud - 3. Spring Cloud Gateway Filter 적용 Spring Cloud - 2. Spring Cloud Gateway 사용하기 Spring Cloud - Eureka 에 Service 등록하기 Spring Cloud - Service Discovery Server (Eureka) Spring Cloud로 개발하는 마이크로서비스 애플리케이션 6 - Spring Cloud Gateway Global Filter 적용LoggingFilter @Component@Slf4jpublic class LoggingFilter extends AbstractGatewayFilterFactory<LoggingFilter.Config> { public LoggingFilter(){ super(Config.class); } @Override public GatewayFilter apply(Config config) { GatewayFilter filter = new OrderedGatewayFilter((exchange, chain) -> { ServerHttpRequest request = exchange.getRequest(); ServerHttpResponse response = exchange.getResponse(); log.info("Logging Filter baseMessage : {}", request.getId()); if(config.isPreLogger()){ log.info("Logging Pre Filter: request id -> {}", request.getId()); } // Custom Post Filter return chain.filter(exchange).then(Mono.fromRunnable(() -> { if(config.isPostLogger()){ log.info("Logging Post Filter: response code -> {}", response.getStatusCode()); } })); }, Ordered.HIGHEST_PRECEDENCE); return filter; } @Data public static class Config{ // Put the configuration properties private String baseMessage; private boolean preLogger; private boolean postLogger; }} application.yml server: port: 8080eureka: client: register-with-eureka: false fetch-registry: false service-url: defaultZone: http://localhost:8761/eurekaspring: application: name: apigateway-service cloud: gateway: default-filters: - name: GlobalFilter args: baseMessage: Spring Cloud Gateway Global Filter preLogger: true postLogger: true routes: - id: first-service uri: http://localhost:8081/ predicates: - Path=/first-service/** filters: - CustomFilter# - AddRequestHeader=first-request, first-request-header2# - AddResponseHeader=first-response, first-response-header2 - id: second-service uri: http://localhost:8082/ predicates: - Path=/second-service/** filters: - name: CustomFilter - name: LoggingFilter args: baseMessage: Hi, there. preLogger: true postLogger: true# - AddRequestHeader=second-request, second-request-header2# - AddResponseHeader=second-response, second-response-header2

0

JPA - Persist Context (영속성 컨텍스트)

목차 JPA - Entity의 생명주기 JPA - Persist Context (영속성 컨텍스트) Persist Context (영속성 컨텍스트) 란? JPA 가 Entity 를 관리하기 위한 공간, Entity 상태가 Database 에 반영되기 전까지 Entity 의 읽기/쓰기/수정/삭제를 상태 관리한다. EntityManagerFactory 에서 EntityManager 를 생성하고 EntityManager 를 이용해 영속성 컨텍스트에 접근할 수 있다. EntityManager 를 이용해 Entity(데이터)를 저장하거나 조회하면 영속성 컨텍스트에서 해당 Entity 를 관리하게 된다. EntityManager 는 Transaction 단위로 영속성 컨텍스트를 생성하고 지운다. EntityManager 와 영속성 Context가 1:1로 대응이 된다. 영속성 Context는 내부에 1차 cache가 존재하고 (key, value) 형태로 데이터를 관리한다.장점 : buffering이나 Caching을 할 수 있다. @Id Entity Member1 member @Id : Key Entity : 객체 영속성 컨텍스트의 이점

0

Spring Cloud - 5. Spring Cloud Gateway Global Filter 적용

Spring Cloud - 7. Load Balancer 적용 Spring Cloud - 6. Spring Cloud Gateway Global Filter 적용 Spring Cloud - 5. Spring Cloud Gateway Global Filter 적용 Spring Cloud - 4. Spring Cloud Gateway Custom Filter 적용 Spring Cloud - 3. Spring Cloud Gateway Filter 적용 Spring Cloud - 2. Spring Cloud Gateway 사용하기 Spring Cloud - Eureka 에 Service 등록하기 Spring Cloud - Service Discovery Server (Eureka) Spring Cloud로 개발하는 마이크로서비스 애플리케이션 5 - Spring Cloud Gateway Global Filter 적용공통적으로 실행될 수 있는 Filter. 라우팅 정보마다 개별적으로 필터를 지정해야 하는 Custom Filter와 다르게 Global Filter의 경우 한번에 처리를 할 수 있다. GlobalFilter.java @Component@Slf4jpublic class GlobalFilter extends AbstractGatewayFilterFactory<GlobalFilter.Config> { public GlobalFilter(){ super(Config.class); } @Override public GatewayFilter apply(Config config) { // Custom Pre Filter return (exchange, chain) -> { ServerHttpRequest request = exchange.getRequest(); ServerHttpResponse response = exchange.getResponse(); log.info("Global Filter baseMessage : {}", request.getId()); if(config.isPreLogger()){ log.info("Global Filter Start: request id -> {}", request.getId()); } // Custom Post Filter return chain.filter(exchange).then(Mono.fromRunnable(() -> { if(config.isPostLogger()){ log.info("Global Filter End: response code -> {}", response.getStatusCode()); } })); }; } @Data public static class Config{ // Put the configuration properties private String baseMessage; private boolean preLogger; private boolean postLogger; }} application.yml spring: application: name: apigateway-service cloud: gateway: default-filters: - name: GlobalFilter args: baseMessage: Spring Cloud Gateway GlobalFilter preLogger: true postLogger: true