msa game login 구현하기 [1] api 권한 추가 해당 유튜브 영상을 참고하여 진행했다! 기존의 코드는 token만을 발급하며 권한에 대한 정보도 없이 반환하는 형식이였다. 토큰으로만 접속하는 방법을 사용하기엔 보안적인 문제가 있으므로 이왕 할때 제대로 하자는 마인드로 access_token과 refresh_token을 구별하여 제대로 해보자. 다음과 같이 권한 역할을 할 roles 를 추가하여주고 user 정보를 불러올때 함께 사용할 내용... msamsa Login Service[3] gateway 인증 추가 지난 포스트까지 login 토큰을 발급해봤다. 이젠 로그인 이후 다른 서비스를 사용할 때 토큰 값이 유효한지 체크후에 진행할 수 있도록 gateway에서 처리해보자. login-servie에서는 자체적으로 filter로 거르고 있기 때문에 gateway에서 정확히 걸러지는지 확인하기 위해 어차피 order-service를 생성해야되기 때문에 임의로 하나의 서비스를 생성해서 추가해놔보자. 선택... msamsa Kafka Spring 활용 [1] Producer, Consumer Kafka의 동작 구조를 살펴봤으니 실제로 Spring Cloud에서는 어떻게 사용하는지 직접 만들어서 사용해보자. 우리가 지금까지 만들었던 catalog-service와 order-service를 사용하여 주문이 발생했을 때 catalog-service에 존재하는 재고 qty의 값을 줄여주는 로직을 kafka의 메세지를 주고 받음으로써 처리하는 로직을 만들어보려고 한다. kafka 의존성을... msamsa Kafka Connect (Source, Sink) 을 통해 Maria DB에 mydb라는 테이블을 하나 만들어두자. url로 접근하여 connect 압축파일을 다운받는다. 명령어를 입력하여 kafka connect를 실행시켜보자. 참고로 connect 실행 전 zookeaper와 kafka server를 실행시켜 두고 해야한다. window의 경우 다음과 같은 오류가 발생한다. ./bin/windows/kafka-run-class.bat 파... msamsa Kafka Spring 활용 [2] Connect 사용 maria db에 쿼리문을 통해 orders 테이블을 추가한다. 설정 yml 파일에 다음과 같은 내용으로 변경한다. 의존성에 mariadb 의존성이 추가되어 있을 경우에 가능하다. 그리고 서비스들을 실행시켜 다음과 같이 주문을 생성했다. maria db에서도 정상적으로 전송된 데이터를 확인할 수 있다. 이건 이제 원래 로직상 정상적으로 추가되던 데이터들이고 kafka를 통해서 진행해보자 이전... msamsa MSA 모니터링 의존성을 추가해주고 의존성 추가해주고 의존성 추가해주고 이전에는 확인되지 않았던 user.status, user.welcome이 등록된 것을 확인할 수 있다. 이제부터 user.status, user.welcome의 지표를 수집하게 된다. 그리고나서 prometheus에서 지표가 저장되고 있다는 것을 확인할 수 있다. Prometheus를 설치하면 yml 파일을 확인할 수 있는데 해당 설정을... msamsa MSA 장애 처리와 분산 추척 현재 order-serivce를 실행시키지 않고 요청했을 경우 getOrders()를 호출하는 과정에서 에러가 발생하여 user-service로부터 500 에러를 반환받는다. 라는 생각도 할 수 있다. 코드를 다음과 같이 circuitBreaker를 사용하여 수정해주고 서버를 실행해서 다시 요청해보자 서비스 자체적 에러로 표시되기 보다 빈 배열값으로 반환해서 정상 반환하고 있는 것을 확인할 ... msamsa DB 서버 만들기 (Docker - MariaDB) 나는 라즈베리파이로 진행하면서 arm v7 기반이라 일반적인 maria docker images는 실행이 안되는 경우가 많아서 liuxserver에서 올려준 이미지중에 찾아서 사용한다. 그리고 해당 사용법까지 자세하게 설명되어 있다. 이 세팅 내용 중 해당 설정만으로 시작했다. ROOT_ACCESS_PASSWORD 이 부분만 사용하고자 하는 비밀번호로 변경해주자. docker-compose ... msamsa Portfolio 사이트 올리기 예전에 만들어놨던 node.js 기반의 포트폴리오 사이트가 있는데 수정해서 jenkins에 등록해놓고 사용하려고 한다. 프론트 프로젝트는 최대한 aws에 올리려고 한다. 그래서 우선 network부터 다시 세팅해야한다. 다음과 같이 작성해주었고 docker는 java와 다르게 jar만 던지는게 아니라 소스 전체를 다 가져가야한다. 그래서 package만 이동 후 install해주고 그 후에 ... msamsa MSA Docker 관리하기 네트워크를 통해 컨테이너를 묶어주면 ip로 따로 통신하지 않고 컨테이너의 이름으로 서로 통신이 가능하게 만들어준다. 위 명령어로 네트워크를 생성할 수 있다. 따로 설정하지 않고 컨테이너를 그냥 실행하면 자동으로 default network가 사용되긴 하지만 서로 묵어두면 더 편리하게 사용가능하다. 상세 내용은 다음과 같이 나오며 Containers 내부에 들어있는 컨테이너끼리 통신이 가능한것... msamsa [Spring] FeignClient 에러 리스폰스 버블링 Spring Feign Client를 사용하면 일반적으로 다음과 같은 코드를 작성합니다. 요청이 성공적으로 처리된 경우에는 크게 문제가 되지 않지만, Feign Server에서 처리가 실패된 경우에는 문제가 발생하게 됩니다. 우리 서비스에서는 에러 발생 시 exception advice를 통해 에러 타입에 맞는 failure response entity를 반환하는 구조입니다. 때문에 Feig... errormsaSpringSpring Spring Cloud Config(feat.RabbitMQ) 현재 사내에서 진행하고 있는 프로젝트는 MSA 구조로 되어있으며, 총 11대의 서버를 사용해 서비스를 나누었다. 각 서비스에는 설정 파일(application.properties)이 존재하는데, 설정 파일을 하나 바꿀 때마다 빌드하고 배포하는 것이 비효율적이어서 설정 파일을 따로 빼는 작업이 필요해졌다. Spring Cloud Config란? 분산된 환경에서 설정 파일을 외부로 분리할 수 있... dockermsaspring cloud configrabbitmqdocker Login 유효성 검사 추가하기 Spring Boot에 validation의 의존성을 추가해준다. 그리고 다음과 같이 validator package에 존재하는 NotEmpty와 Length 조건을 주어 값들을 체크하도록 해놓고 다음 코드로 실제로 에러가 발생하는지 확인해보자. 다음과 같이 id를 빼서 보내보자. 놀랍게도 한글로 반환해준다. 하지만 이렇게 message 옵션을 설정해주면 메세지의 내용도 우리 마음대로 변경할... msamsa Login Service[2] 로그인 및 JWT 추가 회원가입은 지난 포스트에서 진행했으니 이제 로그인을 만들어보자. RequestLogin을 Vo로 만들었다. security의 login 처리를 위해 UsernamePasswordAuthenticationFilter를 상속받아 구현해주었다. WebSecurity에 join, login을 제외한 모든 요청에 대해 filter를 적용하도록 하고 인증 service를 등록해준다. userServic... msamsa MSA 학습(7) - kafka 연동 1. 선행 작업 kafa 설치 후 주키퍼, kafka 실행 quickstart-events 토픽 생성 2. 라이브러리 추가 3. KafkaProducer 클래스 작성 4. KafkaConsumer 클래스 작성 5. KafkaController 작성 6. KafkaController 호출 7. 메세지 송수신 확인... kafkaDDDmsaDDD SpringCloud-Discovery yml application.java에 @EnableEurekaServer 추가 yml 설정 application.java에 @EnableDiscoveryClient 추가 user-service 여러개 실행하기 -Dserver.port=8082 mvn spring-boot:run -Dspring-boot.run.jvmArguments='-Dserver.port=9003' cmd 랜덤 포트로 ... msamsa MSA 프로젝트 1(초안) 마이크로서비스 연동을 위해 Discovery, ApiGateway, Config-service를 설정했다. Discovery : Client로 부터 들어오는 요청 받기 및 Eureka 서버로서 작동. ApiGateway : 로드밸런서 역할 및 마이크로서비스라우팅 역할 Config-Service : 각 마이크로서비스의 환경설정을 한 곳에서 설정하기 위해 외부 서비스로 빼냄 Discovery 의... SpringbootmsaSpringboot MSA 학습(3) - Service discovery MSA 환경에서는 서비스 상호간 API를 호출하게 되는데 IP가 동적으로 할당되는 클라우드 환경에서 클라이언트가 서비스 인스턴스를 찾을 수 있도록 해줌 1. Eureka Server 프로젝트 생성 2. 기본 서버 설정 (application.yml) @EnableEurekaServer 어노테이션 추가 후 실행 3. 서버 실행 확인 4. Eureka Client 프로젝트 생성 5. Client... DDDmsaDDD [SpringCloud MSA]Users MicroService(로그인 제외) User Microservice /h2-console로 요청을 하면 h2 dashboard를 볼 수 있도록 설정 Environment, UserService를 직접 @Autowired 하는 것 보다는 생성자를 이용해 주입하는 것이 권장된다 /welcome을 이용하면 Environment 객체를 이용해 application.yml 파일의 @RequestBody를 이용해 body 값을 Reque... msa암호화SpringCloudSpringSecuritySpringCloud 마이크로 서비스 keyword "마이크로서비스 패턴"과 "도메인 주도 설계로 시작하는 마이크로서비스 개발"을 읽고 키워드를 정리해놓은 글입니다 2) 서비스마다 디비 분리 - 배포성 : 개발자가 자신이 담당한 서비스 자율적으로 배포 확장 큐브 애플리케이션을 확장하는 세 가지 방법을 정의 x축 확장. z축 확장. y축 확장. 애플리케이션 기능을 분해하여 기능에 따라 서비스로 부하 분산 패턴 : 패턴 적용 결과 - 3 부분(장... msamsa
game login 구현하기 [1] api 권한 추가 해당 유튜브 영상을 참고하여 진행했다! 기존의 코드는 token만을 발급하며 권한에 대한 정보도 없이 반환하는 형식이였다. 토큰으로만 접속하는 방법을 사용하기엔 보안적인 문제가 있으므로 이왕 할때 제대로 하자는 마인드로 access_token과 refresh_token을 구별하여 제대로 해보자. 다음과 같이 권한 역할을 할 roles 를 추가하여주고 user 정보를 불러올때 함께 사용할 내용... msamsa Login Service[3] gateway 인증 추가 지난 포스트까지 login 토큰을 발급해봤다. 이젠 로그인 이후 다른 서비스를 사용할 때 토큰 값이 유효한지 체크후에 진행할 수 있도록 gateway에서 처리해보자. login-servie에서는 자체적으로 filter로 거르고 있기 때문에 gateway에서 정확히 걸러지는지 확인하기 위해 어차피 order-service를 생성해야되기 때문에 임의로 하나의 서비스를 생성해서 추가해놔보자. 선택... msamsa Kafka Spring 활용 [1] Producer, Consumer Kafka의 동작 구조를 살펴봤으니 실제로 Spring Cloud에서는 어떻게 사용하는지 직접 만들어서 사용해보자. 우리가 지금까지 만들었던 catalog-service와 order-service를 사용하여 주문이 발생했을 때 catalog-service에 존재하는 재고 qty의 값을 줄여주는 로직을 kafka의 메세지를 주고 받음으로써 처리하는 로직을 만들어보려고 한다. kafka 의존성을... msamsa Kafka Connect (Source, Sink) 을 통해 Maria DB에 mydb라는 테이블을 하나 만들어두자. url로 접근하여 connect 압축파일을 다운받는다. 명령어를 입력하여 kafka connect를 실행시켜보자. 참고로 connect 실행 전 zookeaper와 kafka server를 실행시켜 두고 해야한다. window의 경우 다음과 같은 오류가 발생한다. ./bin/windows/kafka-run-class.bat 파... msamsa Kafka Spring 활용 [2] Connect 사용 maria db에 쿼리문을 통해 orders 테이블을 추가한다. 설정 yml 파일에 다음과 같은 내용으로 변경한다. 의존성에 mariadb 의존성이 추가되어 있을 경우에 가능하다. 그리고 서비스들을 실행시켜 다음과 같이 주문을 생성했다. maria db에서도 정상적으로 전송된 데이터를 확인할 수 있다. 이건 이제 원래 로직상 정상적으로 추가되던 데이터들이고 kafka를 통해서 진행해보자 이전... msamsa MSA 모니터링 의존성을 추가해주고 의존성 추가해주고 의존성 추가해주고 이전에는 확인되지 않았던 user.status, user.welcome이 등록된 것을 확인할 수 있다. 이제부터 user.status, user.welcome의 지표를 수집하게 된다. 그리고나서 prometheus에서 지표가 저장되고 있다는 것을 확인할 수 있다. Prometheus를 설치하면 yml 파일을 확인할 수 있는데 해당 설정을... msamsa MSA 장애 처리와 분산 추척 현재 order-serivce를 실행시키지 않고 요청했을 경우 getOrders()를 호출하는 과정에서 에러가 발생하여 user-service로부터 500 에러를 반환받는다. 라는 생각도 할 수 있다. 코드를 다음과 같이 circuitBreaker를 사용하여 수정해주고 서버를 실행해서 다시 요청해보자 서비스 자체적 에러로 표시되기 보다 빈 배열값으로 반환해서 정상 반환하고 있는 것을 확인할 ... msamsa DB 서버 만들기 (Docker - MariaDB) 나는 라즈베리파이로 진행하면서 arm v7 기반이라 일반적인 maria docker images는 실행이 안되는 경우가 많아서 liuxserver에서 올려준 이미지중에 찾아서 사용한다. 그리고 해당 사용법까지 자세하게 설명되어 있다. 이 세팅 내용 중 해당 설정만으로 시작했다. ROOT_ACCESS_PASSWORD 이 부분만 사용하고자 하는 비밀번호로 변경해주자. docker-compose ... msamsa Portfolio 사이트 올리기 예전에 만들어놨던 node.js 기반의 포트폴리오 사이트가 있는데 수정해서 jenkins에 등록해놓고 사용하려고 한다. 프론트 프로젝트는 최대한 aws에 올리려고 한다. 그래서 우선 network부터 다시 세팅해야한다. 다음과 같이 작성해주었고 docker는 java와 다르게 jar만 던지는게 아니라 소스 전체를 다 가져가야한다. 그래서 package만 이동 후 install해주고 그 후에 ... msamsa MSA Docker 관리하기 네트워크를 통해 컨테이너를 묶어주면 ip로 따로 통신하지 않고 컨테이너의 이름으로 서로 통신이 가능하게 만들어준다. 위 명령어로 네트워크를 생성할 수 있다. 따로 설정하지 않고 컨테이너를 그냥 실행하면 자동으로 default network가 사용되긴 하지만 서로 묵어두면 더 편리하게 사용가능하다. 상세 내용은 다음과 같이 나오며 Containers 내부에 들어있는 컨테이너끼리 통신이 가능한것... msamsa [Spring] FeignClient 에러 리스폰스 버블링 Spring Feign Client를 사용하면 일반적으로 다음과 같은 코드를 작성합니다. 요청이 성공적으로 처리된 경우에는 크게 문제가 되지 않지만, Feign Server에서 처리가 실패된 경우에는 문제가 발생하게 됩니다. 우리 서비스에서는 에러 발생 시 exception advice를 통해 에러 타입에 맞는 failure response entity를 반환하는 구조입니다. 때문에 Feig... errormsaSpringSpring Spring Cloud Config(feat.RabbitMQ) 현재 사내에서 진행하고 있는 프로젝트는 MSA 구조로 되어있으며, 총 11대의 서버를 사용해 서비스를 나누었다. 각 서비스에는 설정 파일(application.properties)이 존재하는데, 설정 파일을 하나 바꿀 때마다 빌드하고 배포하는 것이 비효율적이어서 설정 파일을 따로 빼는 작업이 필요해졌다. Spring Cloud Config란? 분산된 환경에서 설정 파일을 외부로 분리할 수 있... dockermsaspring cloud configrabbitmqdocker Login 유효성 검사 추가하기 Spring Boot에 validation의 의존성을 추가해준다. 그리고 다음과 같이 validator package에 존재하는 NotEmpty와 Length 조건을 주어 값들을 체크하도록 해놓고 다음 코드로 실제로 에러가 발생하는지 확인해보자. 다음과 같이 id를 빼서 보내보자. 놀랍게도 한글로 반환해준다. 하지만 이렇게 message 옵션을 설정해주면 메세지의 내용도 우리 마음대로 변경할... msamsa Login Service[2] 로그인 및 JWT 추가 회원가입은 지난 포스트에서 진행했으니 이제 로그인을 만들어보자. RequestLogin을 Vo로 만들었다. security의 login 처리를 위해 UsernamePasswordAuthenticationFilter를 상속받아 구현해주었다. WebSecurity에 join, login을 제외한 모든 요청에 대해 filter를 적용하도록 하고 인증 service를 등록해준다. userServic... msamsa MSA 학습(7) - kafka 연동 1. 선행 작업 kafa 설치 후 주키퍼, kafka 실행 quickstart-events 토픽 생성 2. 라이브러리 추가 3. KafkaProducer 클래스 작성 4. KafkaConsumer 클래스 작성 5. KafkaController 작성 6. KafkaController 호출 7. 메세지 송수신 확인... kafkaDDDmsaDDD SpringCloud-Discovery yml application.java에 @EnableEurekaServer 추가 yml 설정 application.java에 @EnableDiscoveryClient 추가 user-service 여러개 실행하기 -Dserver.port=8082 mvn spring-boot:run -Dspring-boot.run.jvmArguments='-Dserver.port=9003' cmd 랜덤 포트로 ... msamsa MSA 프로젝트 1(초안) 마이크로서비스 연동을 위해 Discovery, ApiGateway, Config-service를 설정했다. Discovery : Client로 부터 들어오는 요청 받기 및 Eureka 서버로서 작동. ApiGateway : 로드밸런서 역할 및 마이크로서비스라우팅 역할 Config-Service : 각 마이크로서비스의 환경설정을 한 곳에서 설정하기 위해 외부 서비스로 빼냄 Discovery 의... SpringbootmsaSpringboot MSA 학습(3) - Service discovery MSA 환경에서는 서비스 상호간 API를 호출하게 되는데 IP가 동적으로 할당되는 클라우드 환경에서 클라이언트가 서비스 인스턴스를 찾을 수 있도록 해줌 1. Eureka Server 프로젝트 생성 2. 기본 서버 설정 (application.yml) @EnableEurekaServer 어노테이션 추가 후 실행 3. 서버 실행 확인 4. Eureka Client 프로젝트 생성 5. Client... DDDmsaDDD [SpringCloud MSA]Users MicroService(로그인 제외) User Microservice /h2-console로 요청을 하면 h2 dashboard를 볼 수 있도록 설정 Environment, UserService를 직접 @Autowired 하는 것 보다는 생성자를 이용해 주입하는 것이 권장된다 /welcome을 이용하면 Environment 객체를 이용해 application.yml 파일의 @RequestBody를 이용해 body 값을 Reque... msa암호화SpringCloudSpringSecuritySpringCloud 마이크로 서비스 keyword "마이크로서비스 패턴"과 "도메인 주도 설계로 시작하는 마이크로서비스 개발"을 읽고 키워드를 정리해놓은 글입니다 2) 서비스마다 디비 분리 - 배포성 : 개발자가 자신이 담당한 서비스 자율적으로 배포 확장 큐브 애플리케이션을 확장하는 세 가지 방법을 정의 x축 확장. z축 확장. y축 확장. 애플리케이션 기능을 분해하여 기능에 따라 서비스로 부하 분산 패턴 : 패턴 적용 결과 - 3 부분(장... msamsa