Kubernetes Secret 은 base64로 인코딩된 값을 data로 갖는다. data 필드의 모든 키(key)에 해당하는 값(value)은 base64로 인코딩된 문자열이어야 한다. https://kubernetes.io/ko/docs/concepts/configuration/secret/#시크릿-개요 그럼 일반적인 string을 base64로 어떻게 인코딩할까? 아주 간단하다. echo, base64 를 사용하면 된다. $ echo 'want-to-encode-this' | base64 d2FudC10by1lbmNvZGUtdGhpcwo= 근데 위와 같이 하는 경우, base64 인코딩 된 값을 비교하거나 할 때 문제가 생길 수 있다. 왜냐하면 echo 는 마지막에 무조건 newline(\n) 을..
최근 JDK 17 release 되었고, JDK 11 다음의 LTS 버전으로서 오랫동안 지원이 되는 만큼 업무/개인프로젝트 등에서 적극적으로 사용하고 있다. Stream.toList() JDK17 기반에서 Stream을 사용해 List로 변환(collect)하다보면 IntelliJ에서 자주 보는 메세지가 있다. 위의 경우인데, collect(toList()) 대신 Stream.toList() 를 사용할 수 있다는 정보성 메시지이다. 그래서 나는 보통 JDK 17로 개발을 할 때, 아래와 같이 사용했다. // Before jdk 17 var peopleName = people.stream() .map(Person::name) .collect(Collectors.toList()); // jdk 17 var ..
Java Stream 사용 시, debugging이 어려울 때가 있다. IntelliJ IDEA에서는 Stream debugging 시 시각적으로 데이터를 확인할 수 있는 기능을 제공하고 있는데, 이게 정말 편리하다. 이를 활용해보자. 예제 간단한 예제를 만들었다. (참고: Java 17 (LTS) 을 사용했다) public static void main(String[] args) { var people = List.of( new Person("Sim", 47, City.SEOUL), new Person("Lee", 31, City.BUSAN), new Person("Kim", 23, City.SEOUL), new Person("Park", 18, City.JEJU), new Person("Song", ..
이게 왜 궁금해? tag 생성으로부터 trigger 되는 CI/CD pipeline을 구성하던 중 한 가지 문제가 생겼다. Gitops 방식을 사용하고 있는 프로젝트였고, tag 가 생성되면 production 까지 배포될 수 있도록 Container image를 생성하고 Cluster git repo의 container tag를 앞에서 빌드한 tag로 수정하는 작업을 수행하도록 구성했다. 문제는 tag 가 어느 Branch에서 만들어지던간에 Pipeline이 Trigger되어 production 까지 배포될 수 있는 것이었다. 예를 들어 temp branch에서 tag를 생성해 push하면 production 으로 배포될 수 있었다. 특정 branch에서 tag 가 생성하였는가를 판단하는 Webhook..
OOME = Out Of Memory Error 간단히 잘 설명된 글 [Java Memory Profiling에 대하여] 1. JVM 메모리의 이해와 케이스 스터디 [Java Memory Profiling에 대하여] 2. 메모리 모니터링과 원인 분석 2차 가공이 불가능한 글이라 내용은 첨부하지 않는다. 오류의 예제 상황을 설명하고 있고, Grafana Heap Graph/jstat/mat 등을 통해 GC 실행 수/Memory 상황/dump 등을 보며 오류 상황을 확인할 수 있도록 제공하고 있다.
Flame Graph ? show the CPU time spent in Java methods, system libraries, and the kernel, all in one visualization. 해석하기 각 사각형은 stack frame을 나타낸다(즉, 함수). 사각형의 가로(width)는 현재 프로파일에 얼마나 존재하는지(실행되는지)를 나타낸다. Graph x축 왼쪽과 오른쪽 순서는 중요하지 않다. stack은 단순히 알파벳 순서대로 정렬된 것이다. y축 stack depth. 함수들간의 호출 depth. Stack의 색상들은 code type에 따라 설정된다. 보통 Java code는 초록색, C++ code는 노란색, System은 빨간색으로 설정된다. 하지만 다른 color scheme..
Pod spec 에는 restartPolicy 필드가 있다. Pod의 Container가 종료했을 때, 재시작 정책을 정의하는 필드이다. 3가지의 값을 허용한다. Always (default): Container들이 정상적으로 종료(zero exit code)되었더라도 재시작하는 정책. Container가 어떻게 종료되든 간에 무조건 구동 중이여야한다면 해당 옵션을 사용하는 것이 유용하다. OnFailure : Container가 비정상적으로 종료(non-zero exit code)하는 경우에만 재시작하는 정책. Pod가 특정 task를 수행하도록 설게되었고, 그 task가 완료(성공)되면 재시작하지 않는게 정상인 경우라면 해당 옵션을 사용하는 것이 유용하다. Never: Container의 exit c..
잘 모르면 몸이 고생한다고, Deployment replicas를 계속 변경하며 테스트 할 일이 있었는데 `kubectl edit` 으로 replicas를 변경해가며 사용했다. 근데 더 간단하게 CLI 상에서 replicas를 변경할 수 있는 `kubectl scale` 명령어가 있었다. # Scale a replica set named 'foo' to 3 kubectl scale --replicas=3 rs/foo # Scale a resource identified by type and name specified in "foo.yaml" to 3 kubectl scale --replicas=3 -f foo.yaml # If the deployment named mysql's current size i..
- Total
- Today
- Yesterday
- WebFlux
- k8s
- 백준
- Spring
- c++
- tag
- HTTP
- Clean Architecture
- OpenTelemetry
- gradle
- boj
- container
- 클린 아키텍처
- MySQL
- 쿠버네티스
- Kubernetes
- Spring boot
- java
- 로그
- Intellij
- Istio
- 비동기
- 일상
- Log
- python
- docker
- jasync
- 하루
- 알고리즘
- Algorithm
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 29 |
| 30 |