본문 바로가기

Infra System22

Request between resource servers 각 Resource Server는 Access Token을 필요로 합니다. 따라서 하나의 Resource Server에서 또 다른 Resource Server로 요청을 보내려면 그 요청의 Header에 Authorization을 추가해주어야 합니다. MSA에서는 Resource Server 간 요청이 빈번한데, 개발자가 매번 이 작업을 해주는 것은 비효율적인 일이므로 air-common-lib에서 이를 처리하려 합니다. 이하 본문에서는 Resource Server → Resource Server 요청을 서비스간 요청이라고 하고, Client → Resource Server를 클라이언트 요청이라고 칭하겠습니다. 이를 위해 필요한 작업을 크게 두 가지로 나누면, 클라이언트 요청이 들어오면, 요청의 Heade.. 2020. 10. 14.
Resource Server Setting at Prototype app Authentication을 통해 발급받은 Access Token을 가지고, Resource Server에 접근하고자 하는 프로토타입 애플리케이션을 작성해보겠습니다. 1.Resource Server Config @Configuration @EnableResourceServer class ResourceServerConfig : ResourceServerConfigurerAdapter() { val signingKey: String = "signingKey!" override fun configure(http: HttpSecurity) { http.headers().frameOptions().disable() http.authorizeRequests() .antMatchers("/**").authentic.. 2020. 10. 14.
Prometheus와 Grafana 연동 - Web UI Dashboard Kafka Web UI Dashboard를 위해 prometheus와 grafana를 연동해야 합니다. 1. Prometheus와 Grafana 연동 1. 데이터 소스 연결 메인화면에서 Add data source를 선택하면 아래와 같이 추가할 수 있는 목록이 나열됩니다. 프로메테우스를 선택하면 아래와 같이 프로메테우스와 연결하기 위한 세팅이 나타납니다. 여기서 중요한 것은 URL입니다. 이 URL에는 프로메테우스 서버의 URL이 기재되어야 하며, 프로메테우스 서버는 내부 IP를 가지고 있는 서비스로 노출되어 있기 때문에 이를 조회해야 합니다. kubectl get svc -n {네임스페이스명} 해당 클러스터IP와 내부 Port를 기재하고, 필요한 기능을 체크하여 저장합니다. 2. Template을 이용.. 2020. 10. 14.
Grafana installation - Web UI Dashboard Grafana는 모니터링을 시각화하기 위한 도구입니다. helm을 이용하여 설치하므로, helm이 설치되어 있다는 것을 전제로 합니다. 1. 설치 방법 1. helm으로 grafana 설치 helm install --name air-grafana --namespace monitoring -f values.yaml stable/grafana 이때 사용한 values.yaml에서 가장 중요한 것은 외부 포트 오픈을 위해, service: NodePort를 지정해주었다는 것입니다. 또한 adminUser와 adminPassword를 지정해주어야 합니다. 더보기 rbac: create: true pspEnabled: true pspUseAppArmor: true namespaced: false extraRole.. 2020. 10. 14.
Prometheus install - Web UI Dashboard Prometheus는 Kafka Monitoring을 위한 도구입니다. helm을 이용하여 설치했으므로, helm이 설치되어 있는 것을 전제로 합니다. 1. 설치방법 1.helm으로 prometheus 설치 helm install --name air-kube-monitoring --namespace monitoring -f values.yaml stable/prometheus 이때 사용한 values.yaml에서 가장 중요한 것은 외부 포트 오픈을 위해, server: service: type: NodePort를 지정하고, 이를 위한 nodePort를 지정해주었다는 것입니다. 또한 데이터 유지기간을 길게 잡기 위해서 retention을 365d로 주었습니다. 더보기 rbac: create: true po.. 2020. 10. 14.
Authentication Server - Outer Architecture Authentication Server는 User 정보를 입력받아, 유효한 User인 경우 JWT Token을 발급해줍니다. pom.xml user 정보를 mariadb에서 관리합니다. 따라서 air-mariadb-starter를 상속받습니다. 따라서 authentication을 위해 2개의 library를 추가해 주어야 합니다. spring-boot-starter-security spring-security-oauth2-autoconfigure 4.0.0 kr.sys4u.lab air-mariadb-starter 0.0.1-SNAPSHOT kr.sys4u.lab air-auth 0.0.1-SNAPSHOT air-auth Demo project for Spring Boot 0.9.1 org.springf.. 2020. 10. 14.
Api-gateway Server - Outer Architecture pom.xml gateway-server로 spring-cloud-start-gateway를 사용할 예정입니다. 그리고 air-gateway도 eureka-server에 등록될 eureka-client이기 때문에 air-eureka-client를 상속받으려 했습니다. 하지만 의존성 관계를 보면, air-eureka-client가 spring-boot-starter-web을 의존하고 있고 spring-cloud-start-gateway는 spring-boot-starter-webflux를 의존하고 있어서 서로 충돌하는 결과가 발생했습니다. 따라서 air-gateway에서는 spring-boot-starter-parent를 직접 상속받아서 필요한 library를 dependency에 추가하였습니다. 4.0... 2020. 10. 14.
Eureka Server(standalone) - Outer Architecture pom.xml air-starter를 상속받고, netflix가 제공하는 eureka-server를 dependency에 추가합니다. 4.0.0 kr.sys4u.lab air-starter 0.0.1-SNAPSHOT kr.sys4u.lab air-eureka-server-starter 0.0.1-SNAPSHOT air-eureka-server-starter Demo project for Spring Boot org.springframework.cloud spring-cloud-starter-netflix-eureka-server application.yml application.yml에 eureka-server에 대한 세팅을 해주어야 합니다. server: port: 7979 spring: applica.. 2020. 10. 14.
MongoDB based Prototype - Inner Architecture air-mariadb-starter를 의존하는 비즈니스 애플리케이션 프로토타입으로, 이 포스트에서는 Controller, Service, Repo, Dto에 대한 코드는 다루지 않습니다. MariaDB based Prototype과 거의 유사하므로 아래 설정 정보만 기재하겠습니다. application.yml 몽고디비 설정은 아래와 같습니다. ...중략 spring: data: mongodb: host: {IP} port: {포트} database: {데이터베이스명} username: {유저명} password: {패스워드} ...중략 2020. 10. 14.
MariaDB based Prototype - Inner Architecture air-mariadb-starter를 의존하는 비즈니스 애플리케이션 프로토타입으로, 이 포스트에서는 Controller, Service, Model, Mapper에 대한 코드는 다루지 않습니다. application.yml MariaDb와 Mybatis, log4jdbc 의존성을 가지고 있기 때문에 각각에 대한 yml 설정 필요합니다. ...중략 logging: level: root: INFO spring: datasource: driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy url: jdbc:log4jdbc:mariadb://{서버IP:포트}/{데이터베이스명} username: {유저명} password: {패스워드} ...중략 mybatis: mapp.. 2020. 10. 14.