Category: Spring

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 에 서비스 등록하기 [Spring Cloud] - Eureka (Service Discovery Server) 사용하기 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 에 서비스 등록하기 [Spring Cloud] - Eureka (Service Discovery Server) 사용하기 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

[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 에 서비스 등록하기 [Spring Cloud] - Eureka (Service Discovery Server) 사용하기 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

0

[Spring Cloud] - 4. Spring Cloud Gateway Custom 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 에 서비스 등록하기 [Spring Cloud] - Eureka (Service Discovery Server) 사용하기 사용자 정의 필터 만들기AbstractGatewayFilterFactory 를 이용해 Custom Filter를 정의할 수 있다. CustomFilter.java @Component@Slf4jpublic class CustomFilter extends AbstractGatewayFilterFactory<CustomFilter.Config> { public CustomFilter(){ 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("Custom PRE filter: request id -> {}", request.getId()); // Custom Post Filter return chain.filter(exchange).then(Mono.fromRunnable(() -> { log.info("Custom POST filter: request id -> {}", response.getStatusCode()); })); }; } public static class Config{ // Put the configuration properties }} 설정에 추가하기 spring.cloud.gateway.routes.filters 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: 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: - CustomFilter# - AddRequestHeader=second-request, second-request-header2# - AddResponseHeader=second-response, second-response-header2

0

[Spring Cloud] - 3. Spring Cloud Gateway 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 에 서비스 등록하기 [Spring Cloud] - Eureka (Service Discovery Server) 사용하기 코드를 통한 라우팅 설정RouteLocatorBuilder 를 이용해 Filter를 추가할 수 있다. FilterConfig.java @Configurationpublic class FilterConfig { @Bean public RouteLocator gatewayRoutes(RouteLocatorBuilder builder) { return builder.routes() .route(r -> r.path("/first-service/**") .filters(f -> f.addRequestHeader("first-request", "first-request-header") .addResponseHeader("first-response", "first-response-header")) .uri("http://localhost:8081")) .route(r -> r.path("/second-service/**") .filters(f -> f.addRequestHeader("second-request", "second-request-header") .addResponseHeader("second-response", "second-response-header")) .uri("http://localhost:8082")) .build(); }} application.yml을 통한 라우팅 설정 spring.cloud.gateway.routes.filters application.yml spring: application: name: apigateway-service cloud: gateway: routes: - id: first-service uri: http://localhost:8081/ predicates: - Path=/first-service/** filters: - AddRequestHeader=first-request, first-request-header2 - AddResponseHeader=first-response, first-response-header2 - id: second-service uri: http://localhost:8082/ predicates: - Path=/second-service/** filters: - AddRequestHeader=second-request, second-request-header2 - AddResponseHeader=second-response, second-response-header2

0

[Spring Cloud] - 2. Spring Cloud Gateway 사용하기

[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 에 서비스 등록하기 [Spring Cloud] - Eureka (Service Discovery Server) 사용하기 참고 https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/ Spring Cloud Gateway당연히 가능합니다! Spring Cloud Gateway는 스프링 생태계에서 제공하는 도구 중 하나로, 마이크로서비스 아키텍처를 구축하기 위해 사용됩니다. Spring Cloud Gateway는 API 게이트웨이로 작동하여 클라이언트와 백엔드 서비스 사이의 통신을 관리하고 보안, 로드 밸런싱, 라우팅, 필터링 등의 기능을 제공합니다. Spring Cloud Gateway의 핵심 개념은 라우트(Routes)와 필터(Filters)입니다. 라우트는 클라이언트 요청을 수신하고, 해당 요청을 백엔드 서비스로 전달하는 방법을 정의하는데 사용됩니다. 각 라우트는 요청을 받을 수 있는 경로, 요청을 보낼 수 있는 대상 URI, 필요한 필터 등을 포함하고 있습니다. 이를 통해 요청의 동적인 라우팅과 로드 밸런싱을 구현할 수 있습니다. 또한, 필터는 요청과 응답에 대한 전처리와 후처리 작업을 수행하기 위해 사용됩니다. 예를 들어, 인증, 로깅, 헤더 조작 등의 작업을 필터를 통해 처리할 수 있습니다. 필터는 전역 필터(Global Filters)와 라우트별 필터(Route Filters)로 구분될 수 있으며, 필터 체인을 통해 여러 필터를 조합하여 사용할 수 있습니다. Spring Cloud Gateway는 Netty 서버를 기반으로 동작하며, 비동기적이고 넌블로킹 방식으로 요청을 처리합니다. 이를 통해 높은 성능과 확장성을 제공합니다. 또한, Spring Cloud Gateway는 다양한 기능과 확장 포인트를 제공하여 개발자가 필요에 맞게 사용할 수 있습니다. 요약하자면, Spring Cloud Gateway는 스프링 기반의 API 게이트웨이로서 마이크로서비스 아키텍처에서 클라이언트와 서비스 사이의 통신을 관리하고 보안, 로드 밸런싱, 라우팅, 필터링 등의 기능을 제공합니다.

0

Spring Data JPA - Auditing

목차 Spring Data JPA - 벌크성 수정 쿼리 Spring Data JPA - Convertor Spring Data JPA - Auditing Spring Data JPA - Paging Request Paramater Spring Data JPA - 페이징과 정렬 Post not found: spring/spring-data-jpa/07-spring-data-jpa Spring Data JPA - 반환 타입 Spring Data JPA - Query 파라미터 바인딩 Spring Data JPA - Query 를 이용한 조회 결과를 특정 값으로 반환하기 Spring Data JPA - JPQL (Java Persistence Query Lange) 사용하기 Spring Data JPA - 메소드 이름으로 쿼리 생성하기 Spring Data JPA - 시작하기 참고https://docs.spring.io/spring-data/jpa/docs/1.7.0.DATAJPA-580-SNAPSHOT/reference/html/auditing.html Spring Data JPA - Auditing(감사) 데이터가 언제 누구에 의해서 생성, 수정 됐는지 추적할 필요가 있는데Spring Data JPA 에서는 쉽게 Audit 를 할 수 있는 기능들을 제공한다. Spring Data JPA Auditing 사용하기EnableJpaAuditing 어노테이션을 이용해 프로젝트에 Auditing 기능을 사용할 수 있도록 설정한다. @SpringBootApplication@EnableJpaAuditingpublic class DataJpaApplication { public static void main(String[] args) { SpringApplication.run(DataJpaApplication.class, args); } // 데이터가 생성 및 수정될 때 생성한 사람과 수정한 사람 정보를 넣기 위한 Bean 을 만들어준다. @Bean public AuditorAware<String> auditorProvider(){ return () -> Optional.of(UUID.randomUUID().toString()); }}

0

Spring Data JPA - Paging Request Paramater

목차 Spring Data JPA - 벌크성 수정 쿼리 Spring Data JPA - Convertor Spring Data JPA - Auditing Spring Data JPA - Paging Request Paramater Spring Data JPA - 페이징과 정렬 Post not found: spring/spring-data-jpa/07-spring-data-jpa Spring Data JPA - 반환 타입 Spring Data JPA - Query 파라미터 바인딩 Spring Data JPA - Query 를 이용한 조회 결과를 특정 값으로 반환하기 Spring Data JPA - JPQL (Java Persistence Query Lange) 사용하기 Spring Data JPA - 메소드 이름으로 쿼리 생성하기 Spring Data JPA - 시작하기 참고https://docs.spring.io/spring-data/jpa/docs/1.7.0.DATAJPA-580-SNAPSHOT/reference/html/auditing.html Paging Request Paramater Page 와 Size 를 사용해 Paging 과 관련한 Request Parameter 요청을 보낼 수 있다. Page Paging 된 데이터의 Page 번호 Size Paging 할 데이터 크기 Default Size = 20 이다. @GetMapping("/members")public Page<Member> list(Pageable pageable) { Page<Member> page = memberRepository.findAll(pageable); return page;} Paramater 를 이용해 요청 보내기

0

Spring Data JPA - 페이징과 정렬

목차 Spring Data JPA - 벌크성 수정 쿼리 Spring Data JPA - Convertor Spring Data JPA - Auditing Spring Data JPA - Paging Request Paramater Spring Data JPA - 페이징과 정렬 Post not found: spring/spring-data-jpa/07-spring-data-jpa Spring Data JPA - 반환 타입 Spring Data JPA - Query 파라미터 바인딩 Spring Data JPA - Query 를 이용한 조회 결과를 특정 값으로 반환하기 Spring Data JPA - JPQL (Java Persistence Query Lange) 사용하기 Spring Data JPA - 메소드 이름으로 쿼리 생성하기 Spring Data JPA - 시작하기 Spring Data JPA - 페이징과 정렬 조회 쿼리에 Pageable 객체를 넣어 줌으로써 JPA 에서 제공하는 Paging 기능을 사용할 수 있다. 스프링에서는 Page 을 손쉽게 사용할 수 있도록 Pageable 인터페이스를 제공합니다. 페이징시 offset (시작지점) 부터 시작해 limit 만큼씩 잘라 Page Number 를 붙입니다. // Page 객체를 반환Page<Member> findPageByAge(int age, Pageable pageable);// Slice 객체를 반환Slice<Member> findSliceByAge(int age, Pageable pageable);// List 객체를 반환List<Member> findListByAge(int age, Pageable pageable); Paging 반환 값Paging 반환되는 객체로 Page, Slice, List 세가지 종류의 객체가 있습니다. 종류 설명 Page Count 쿼리 를 포함하는 페이징 Slice 내부적으로 Limit + 1 조회 List 별도의 작업 없이 결과만 반환