전체 글 112

[spring] Spring Webflux CRUD

목차 개요 demo-fe , demo-api 로 총 2개의 Spring Boot프로젝트를 만들어서 WebClient 와 WebFlux CRUD 를 진행했다. 1.demo-fe Application 역할 : FrontEnd , View 역할 , DB 연결 X Tech Stack WEB-Client 기반의 REST-API (webflux) , Spring Open API 3 , thymeleaf gradle 7.5 , jdk 11 , spring-boot 2.6.12 1.1. WebClient 설정 build.gradle (gradle 사용시) dependencies { implementation 'org.springframework.boot:spring-boot-starter-webflux' } 먼저 We..

Spring , JPA 2023.01.16

Blocking / Non-blocking / Sync / Async

아래는 동기(Synchronous)와 비동기(Asynchronous), 그리고 블럭(Blocking)과 넌블럭(Non-blocking) 에 대해 설명하는 그림이다. Blocking이 곧 Synchronous 와 같고 Non-blocking 이 곧 Asynchronous 와 같은 개념으로 잘못 이해할 수 있다. 동기 (Synchronous) 와 비동기 (Asynchronous) 비동기 (Asynchronous) 는 함께 시간을 맞추지 않는 것이다. 동기 (Synchronous) A 와 B 가 시작시간 또는 종료시간이 일치하면 동기 A 가 끝나는 시간과 B 가 시작하는 시간이 같으면 동기 호출된 함수의 수행 결과 및 종료를 호출한 함수가(호출된 함수뿐 아니라 호출한 함수도 함께) 신경 쓰면 동기 (Synch..

슬슬의 공부 2023.01.16

[k6] 성능테스트 도구

1. K6 란? k6를 이용하면 시스템의 성능테스트를 수행할 수 있다. Grafana Lab에서 만든 load testing 툴이다. 최대 성능을 위해 k6 툴 자체는 Go 언어로 작성돼있다. 1.1. K6 install (Linux) sudo apt-get update sudo apt-get install k6 https://github.com/grafana/k6/releases 2. 장점 / 단점 2.1. 장점 친숙한 언어인 JavaScript로 테스트 시나리오를 짤 수 있기 때문에 러닝커브가 낮다. 간단한 CLI 를 제공하며, 이미 사용중인 DevOps Tool 과 함께 사용하기 쉽다. 2.2. 단점 npm 패키지를 사용하려면 번들링 (Bundling) 및 트랜스파일링(transpiling) 이 필..

DevOps, Infra 2023.01.10

[kafka] kafka Install

Spring 에서 Kafka 를 테스트해보기전, 로컬에 Kafka 설치를 해야한다. 1. Kafka Script (Quick Install) https://kafka.apache.org/downloads 에서 원하는 Kafka 버전을 선택하여 다운받는다. 저는 Kafka 2.8.0 버전을 다운받아 사용했습니다. (윈도우 로컬에 설치할경우) WSL 환경에서 실행시킬경우 bootstrap server 주소를 WSL IP 로 변경해줘야한다. (localhost X) 따라서 윈도우에서 설치후 아래 스크립트에서 .sh 를 .bat 으로 변경하여 사용하면된다. # Run Zookeeper bin/zookeeper-server-start.sh config/zookeeper.properties # Run Kafka b..

Spring , JPA 2023.01.09

[Keycloak] MSA 인증/인가 Open Source Solution Keycloak ?

목차 1. Keycloak 이란? Keycloak은 웹 앱 및 RESTful 웹 서비스를 위한 Single Sign On 솔루션이다. Keycloak의 목표는 애플리케이션 개발자가 조직에 배포한 애플리케이션과 서비스를 쉽게 보호할 수 있도록 보안을 단순화하는 것이다. 2. Keycloak 기능설명 2.1. SSO 사용자는 개별 응용프로그램이 아닌 Keycloak으로 인증한다. 애플리케이션이 로그인 양식, 사용자 인증 및 사용자 저장에 관여하지 않으며 Keycloak에 로그인한 후에는 사용자가 다른 애플리케이션에 액세스하기 위해 다시 로그인 불필요하다. ( 이것은 로그아웃에도 적용된다. Keycloak은 Single Sign-out을 제공하므로 사용자는 Keycloak을 사용하는 모든 응용 프로그램에서 로..

DevOps, Infra 2023.01.05

Webflux with MDC

Spring Webflux 를 개발하다보면 비동기 어플리케이션의 모니터링의 어려움을 겪게된다. 이를 MDC 를 활용하여 해결할 수 있다. 1. MDC (Mapped Diagnostic Context) 란? 멀티스레딩 서버에서 여러 개의 스레드가 동시에 실행되면서 로그를 찍으면 로그를 구분할 수 없게 된다. 그래서 요청마다 ID(Correlation ID)를 부여하여 요청마다 로그를 모아서 볼 수 있다. (Spring Cloud Slueth가 Trace Id 를 부여하는 것과 동일하다.) 요청을 처음 받았을때 Correlation ID를 생성하고, 이를 ThreadLocal에 저장했다가 로그를 쓸때 매번 이 ID를 ThreadLocal에서 꺼내서 같이 출력하면 된다. 참고 : 로그시스템 #4-MDC를 이용..

Spring , JPA 2023.01.04

[Spring Cloud Gateway] JWT & Opaque Token

목차 1. Opaque Token 이란 ? 전달하는 정보 측면에서 불투명한 토큰 토큰은 인증 서버에 저장된 정보를 가리키는 식별자일 뿐이며 서버 측에서 자체 검사를 통해 유효성을 검사함 2. Opaque Token vs JWT Opaque Token 을 사용하는 이유는 JWT (Json Web Token) 은 만료 시간 (expires_in) 이 되기 전에는 탈취 당하더라도 해당 Token 을 무효화 할 수 없기 때문이다. 실생활 예를 든다면, 고객이 카드를 잃어버린 것은 고객의 잘못이기 때문에 카드를 잃어버림으로서 일어나는 손해는 고객이 일부 책임을 져야 한다. 그러나 고객이 카드 분실 신고를 했을 경우 카드사는 해당 카드를 사용 정지를 해야 한다. 이를 구현하려면 JWT 를 DB 로 관리하여 무효화 ..

Spring , JPA 2023.01.04

[ArgoCD]카나리 배포 (Canary Deployment)

1. Rollout 플러그인 설치 # argo-rollouts namespace 생성 kubectl create namespace argo-rollouts # argo-rollouts latest 버전 설치 kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml Canary 배포를 하려면 ArgoCD Rollout 플러그인 설치가 필요하다. 참고 : ArgoCD Rollouts 2. GitOps 2.1. Rollout.yml Blue Green 배포때 작성했던 Rollout 과 마찬가지로 apiVersion : argoproj.io/v1alpha1 kind:..

DevOps, Infra 2022.12.30

[ArgoCD] 블루그린 배포(Blue Green Deployment)

1. Rollout 플러그인 설치 # argo-rollouts namespace 생성 kubectl create namespace argo-rollouts # argo-rollouts latest 버전 설치 kubectl apply -n argo-rollouts -f https://github.com/argoproj/argo-rollouts/releases/latest/download/install.yaml Blue Green 배포를 하려면 ArgoCD Rollout 플러그인 설치가 필요하다. 참고 : ArgoCD Rollouts 2. GitOps 2.1. Rollout.yml apiVersion : apps/v1 대신 argoproj.io/v1alpha1를 사용한다. kind : Deployment 대..

DevOps, Infra 2022.12.30

[ArgoCD] 롤링 배포 (Rolling Deployment)

1. GitOps 1.1. deployment 1. minReadySeconds 설정 spec.minReadySeconds은 pod의 status가 ready가 될 때까지의 최소 대기시간이다. pod가 실행되고나서 .spec.minReadySeconds에 설정된 시간동안은 트래픽을 받지 않는다. 2. Pod Anti-affinity 설정 이 설정은 pod가 여러 node 에 균일하게 배포되는것을 보장한다. 만약 replicas를 3으로 설정하였는데 모두 하나의 node에 배포되고 해당 node가 장애로 다운된다면 해당 서비스 또한 당분간 아예 서비스가 되지 않는다. 하지만 Pod Anti-affinity 설정으로 최대한 동일한 pod가 같은 node에 배포되는것을 방지하여 장애에 강한 서비스를 만들 수 ..

DevOps, Infra 2022.12.30