![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cndd4q/btsd0nVSdc2/yE3qHwVasUbLrHkweWQAoK/img.png)
Netty에서 제공되는 I/O는 모두 Non-Blocking 기반이다. 예를 들어, Bootstrap에 대한 connect, bind 또는 writeAndFlush 등의 I/O 메소드는 모두 Non-blocking I/O 기반으로 동작한다. Non-Blocking I/O Non-Blocking I/O는 쓰레드가 실행 중에 I/O 연산을 마주했을 때 system call을 하고 바로 빠져나와(Non-Blocking I/O) 다음 작업을 처리하는 방식이다. 따라서 Non-blocking I/O기반의 작업은 I/O가 완료되기 전까지 다른 작업을 수행할 수 있다는 게 핵심이다. 이러한 개념에 비추어 봤을 때, I/O 시간이 오래걸리는 것에 대해서 Non-blocking을 기반으로 하는 것이 좋다. I/O 시간이..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/qGkAW/btsdRRBBeRg/oJEU485nKhb25ah7UU15SK/img.png)
대표적인 암호화 방식 1. 공유키 암호화(대칭키 암호화), Symmetric cryptography - '하나의 키'로 암호화와 복호화를 하는 방식 - 암호화, 복호화 속도가 빠르다는 장점이 있지만 키를 안전하게 공유하는 방법이 어려움 - 키를 공유하는 과정에서 탈취가 발생하면 문제가 될 수 있음 - 암호화된 데이터를 공유할 모든 사람에게 같은 키를 나눠줘야 하는 과정이 쉽지 않음 2. 공개키 암호화(비대칭키 암호화), Asymmetric cryptography - 암호화와 복호화에 쓰이는 키가 서로 다른 방식 - 이때 암호화에 쓰인 키와 복호화에 쓰인 키가 하나의 'pair'를 이룸 - 한쪽 키로 암호화한 것은 다른 한 키로만 복호화할 수 있음 - 두 키를 개인키(비밀키), 공개키라고 부르며 공개키는 ..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/LuHpK/btr1yAUiygx/5PoBwmPX94opezoNMgYKnk/img.webp)
고루틴 - 고루틴은 동시성(Concurrency)을 지원한다. 즉, 코어에서 특정 작업을 수행 중에 멈추고 다른 작업을 수행할 수 있다. - 또한 여러 코어에서 동시에 여러 작업들을 수행하는 병렬성(Parallelism)도 지원한다. - Concurrency 기반으로 실행될지, Parallelism 기반으로 실행될지는 Go 및 OS 내부적으로 처리되기 때문에 개발자가 직접 관여하지 않아도 된다. - 고루틴이란 Go에서 동시에 실행되는 작업들을 의미한다. 다른 언어에서의 쓰레드와 비슷한 개념이지만 다른 언어의 쓰레드보다 메모리를 더 적게 사용하여 성능상 이점이 있다고 한다. - 고루틴은 사용하기에 쉽다. 함수 또는 메소드 호출 시 앞에 go 키워드만 붙여주면 된다. - 모든 Go 프로세스의 main 함수는..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/chc7ck/btr1nxbDCC6/JKXtw9YKgT8AwwPDH8myZ0/img.png)
기존 yaml 방식의 '선언적 프로그래밍' 장단점 - k8s manifest, Helm chart, kustomize 등 장점 - 사람이 읽기 쉬움 - 어디서든 사용가능 - 선언적 프로그래밍 형태 - 원하는 상태(Desired state)로 배포 가능 - static 한 파일 명세 단점 - 복잡성에 따라, 다수 환경일 경우 중복 부분 처리 필요(Helm chart, kustomize 등) - 즉, 공통부분에 대한 관리의 어려움이 있으며 별도 툴에 대한 학습 필요 개발자의 요구사항 yaml 방식의 선언적 프로그래밍 방식을 통해 쿠버네티스에 자원을 할당하고 관리하는 방식은 개발자에게 익숙하지 않았다. 즉, 개발자 친화적인 프로그래밍 언어(Go, Java, Python 등), 프레임워크, CLI 등의 형태를 ..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/vXCaF/btrWYMYmpHf/KTJKK3zdjjvxQ324TjU0b0/img.png)
이전 포스팅에서는 ArgoCD와 Argo Rollout 컨트롤러를 통한 CD 환경을 구축했다. 이번 포스팅에서는 GitOps 상에서 CI 툴인 Jenkins가 Rollout Manifest 파일을 변경시킴으로써 CD 과정이 자동으로 트리거 되는 시나리오를 구축한다. 최종 GitOps 아키텍처 1) 사용자가 Git에 소스코드를 커밋/푸시 2) Jenkins가 커밋 감지 및 Jenkins Pipeline 실행 2-1) gradle 등의 빌드 툴로 빌드 2-2) 컨테이너 이미지 빌드 2-3) 컨테이너 레지스트리 푸시 (신규 태그 생성) 2-4) Git의 Manifest 레포지토리에 Rollout Manifest 수정(보통 컨테이너 이미지 tag 수정) 3) ArgoCD가 Git의 Rollout Manifest..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/rzT6A/btrWRYeeEtk/SojjKmHbsUQaCR5kcNUdjK/img.png)
순서 1. Argo Rollout이란 2. Argo Rollout 플러그인 설치 1) Argo Rollout 설치 스크립트 작성 2) 실행 확인 3. Argo Rollout으로 배포 1) Rollout(Canary) 배포 설정 2) Rollout Object 배포 및 확인 3) 애플리케이션 신규 배포 및 Canary 업데이트 확인 Argo Rollout이란 Argo Rollout은 Canary, Blue-Grean와 같은 고급 배포 기능을 위한 Argo의 CRD 및 Kubernetes 컨트롤러이다. 이를 통해 Kubernetes에선 제공되지 않는 다양한 배포 기법을 적용하고 자동화할 수 있다. Canary 업데이트란 cf. Canary 배포에 대한 포스팅: https://jh-labs.tistory.co..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/GQbnm/btrWLyepLLm/d8jegauhlFTzdADC5qc7J0/img.png)
이번 포스팅에서는 ArgoCD 기반의 GitOps 환경 구축 과정을 정리한다. GitOps 구축 순서 1. ArgoCD 환경 구축 0) 사전준비: k8s 클러스터 외부에서 ArgoCD 접속을 위해 사용할 NodePort 포트포워딩(또는 LoadBalancer 사용) 1) ArgoCD Manifest 파일 작성 (kustomize 기반) 2) ArgoCD 설치 쉘 스크립트 파일 작성 3) ArgoCD Web UI접속 및 로그인 2. Git 연동 1) SSH Key 발급 2) GitHub에 등록 3) ArgoCD에 등록 3. k8s 클러스터에 애플리케이션 Manifest 배포 1) k8s 클러스터에 애플리케이션 배포 2) GitOps 및 Desired State 검증 ArgoCD 구성 환경 k8s 클러스터 ..
- Total
- Today
- Yesterday
- rolling update
- golang
- docker
- db
- github actions
- Non-Blocking
- LFCS
- 코틀린
- Java
- RDB
- Linux
- argocd
- 우분투
- 쿠버네티스
- GitOps
- ubuntu
- helm
- 카프카
- spring
- container
- kafka
- K8s
- Controller
- jvm
- Stream
- 컨트롤러
- CICD
- Kubernetes
- ci/cd
- go
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |