이번 글에서는 R2DBC, Spring data r2dbc를 사용해 코드를 작성해보자. 학습 기록용. 피드백은 언제나 환영입니다. 사용한 모든 예제코드는 github을 참고해주세요. 이전 글 R2DBC를 사용해보자 (1) - 왜 사용할까? 이번 글에서 R2DBC란 무엇이고, 왜 사용하고, 어떻게 사용했는지 경험에 대해 이야기해보고자 한다. 잘못된 내용이 있으면 피드백은 언제든지 환영입니다 :) R2DBC는 언제 사용할까? Reactive Programming binux.tistory.com 예제 환경은 다음과 같다. Java: JDK 17 Build tool: Gradle Database: MySQL Dependency 사용하기 위해서는 의존성을 먼저 추가해주어야 한다. 데이터베이스에 맞는 R2DBC d..
이번 글에서 R2DBC란 무엇이고, 왜 사용하고, 어떻게 사용했는지 경험에 대해 이야기해보고자 한다. 학습 기록용. 피드백은 언제나 환영입니다. 시리즈 R2DBC를 사용해보자 (2) - CRUD를 만들어보자 이번 글에서는 R2DBC, Spring data r2dbc를 사용해 코드를 작성해보자. 학습 기록용. 피드백은 언제나 환영입니다. 사용한 모든 예제코드는 github을 참고해주세요. 이전 글 R2DBC를 사용해보자 (1) - 왜 사 binux.tistory.com R2DBC를 사용해보자 (3) - Join (Many-To-One, One-To-One, One-To-Many) 이번 글에서 R2DBC, Spring data r2dbc를 사용해 Join을 다뤄보자. 학습 기록용. 피드백은 언제나 환영입니다..
Tomcat 같이 Thread pool을 만들어두고 사용하는 경우, ThreadLocal 사용 시 주의해야하는 점이 있습니다. 바로 Thread 반환 시, ThreadLocal을 remove 해주어야 한다는 점입니다. 왜 Thread pool을 사용할까요? Thread pool을 사용하는 경우는 이유가 명확한데요. Thread를 작업 도중 생성하는 것이 시간이 오래 걸리는 비싼 행동이기 때문입니다. 그러므로 특정한 개수(Tomcat의 경우 200개)만큼의 Thread를 미리 만들어두고, 요청이 들어올 때마다 만들어둔 Thread를 이용하도록 합니다. 작업이 끝나면 다시 Thread를 반환하고, 추후 다른 요청을 처리할 때 다시 이용하게 됩니다. 왜 이러한 Thread pool 구조에서 ThreadLoca..
최근 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", ..
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..
WebClient 를 사용하되, block 을 사용한다? 이게 RestTemplate 같은 Blocking 기반의 http client를 사용하는 것과 무엇이 다를까? 사실 단일으로 하나의 request를 다루는 것이라면 성능이 거의 같을 것이다. 어느정도 각 http client 구현도에 차이가 있을 수 있지만, 유의미한 차이가 있지는 않을 것이다. 아래는 아주 대충 작성해 본 예시 // WebClient var webclientResponse = WebClient.create("some-url").get().retrieve().bodyToMono(String.class); webclientResponse.block(); // RestTemplate var restTemplateResponse = ne..
- Total
- Today
- Yesterday
- r2dbc
- python
- 일상
- WebFlux
- c++
- 로그
- gradle
- Kubernetes
- 비동기
- MySQL
- tag
- java
- Algorithm
- Log
- container
- jasync
- 알고리즘
- 이스티오
- Intellij
- Spring
- 백준
- docker
- Spring boot
- boj
- 하루
- HTTP
- 쿠버네티스
- Istio
- k8s
- sidecar
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |