
최근 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..

이 글의 주제인 File Permission 에 대해 이야기 하기 전에 글을 작성하게 된 계기를 먼저 이야기해보고자 합니다. 서버 개발을 하다보면 직접 원격 Linux 서버에 들어가 작업을 하는 경우가 많습니다. 그러던 중 File permission이 없어 작업을 진행할 수 없던 경우가 종종 있었는데요. 그럴 때마다 어떤 권한이 부족하고, 어떤 것이 원인인지 확실히 파악하지 못하니 답답했었습니다. Permission을 풀기 위해 그냥 구글링으로 chmod ~ 명령어를 가져와 사용하곤 했죠. 위와 같은 외계어(라고 생각했던 것)를 보면서 ‘File Permission 정보인 건 알겠는데, 어떻게 해석하고/어떻게 수정되는거지?’라는 궁금증이 들었습니다. 그래서 이 글에서 이 궁금증을 해소해보고자 합니다. ..
- Total
- Today
- Yesterday
- 비동기
- c++
- python
- container
- HTTP
- Istio
- 쿠버네티스
- gradle
- tag
- 클린 아키텍처
- 하루
- Intellij
- Spring
- WebFlux
- Clean Architecture
- k8s
- 백준
- Algorithm
- java
- docker
- Log
- jasync
- Spring boot
- OpenTelemetry
- Kubernetes
- boj
- 일상
- 알고리즘
- 로그
- MySQL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |