| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- NIO
- 동시성제어
- prometheus
- 백엔드개발
- 트랜잭션
- 백엔드
- DevOps
- 성능최적화
- docker
- webflux
- kafka
- grafana
- CloudNative
- GitOps
- Java
- JPA
- Kotlin
- netty
- helm
- RDBMS
- redis
- mysql
- SpringBoot
- jvm
- monitoring
- spring boot
- 성능 최적화
- 데이터베이스
- Kubernetes
- selector
- Today
- Total
목록Java (23)
유성
앞서 한차례 트랜잭션 범위에 대해서 글을 쓴 적이 있다.https://youseong.tistory.com/71 예외 발생 시 롤백 방지하기: Spring에서 독립적인 트랜잭션 설정 방법프로젝트에서 repository.save() 메서드를 사용했음에도 불구하고 데이터가 커밋되지 않는 문제를 겪은 적이 있습니다. 이 글에서는 문제의 원인과 해결 방법을 공유합니다. 트랜잭션 처리 방식문youseong.tistory.com 이번 글에서는 @Transactional 의 파라미터들을 뜯어보며 어떤 기능들이 있는지 확인해 본다.단순히 "붙이면 된다"를 넘어 이를 어떻게 활용할 수 있는지 하나하나씩 뜯어보자.(트랜잭션 의존성: spirng-tx:7.0.3) 1. 어떤 트랜잭션 매니저를 쓸 것인가? (Value, Tr..
지표가 "서버가 아프다"는 신호를 보내는 경고등이라면, 덤프(Dump)는 "진짜 범인이 누구인지" 지목하는 결정적인 블랙박스 증거이다. 장애 분석의 핵심 단계인 덤프를 통해 구체적으로 무엇을 파악할 수 있을까에 대하여, 이번 글에서는 힙 덤프와 스레드 덤프를 직접 뜯어보며, 장애의 실마리를 찾는 과정을 공유한다. 분석 도구: Intellij Profiler과거 덤프 분석을 위해 Eclipse MAT(Memeory Analyzer Tool)을 많이 사용했지만, 최근에는 개발 환경과의 통합성이 높고 시각화가 뛰어난 Intelllij Profiler를 (필자가) 선호한다.이번 글에서는 모든 분석 과정 역시 Intellij Profiler를 기준으로 진행해본다. 1. 힙 덤프(Heap Dump): 메모리 속 '..
최근 1시간 동안 가장 많이 검색된 키워드를 실시간으로 보여주는 기능은 단순해 보이지만, 트래픽이 몰릴수록 정교한 아키텍처 설계를 요구한다.초기 모델부터 성능 최적화를 거쳐 O(1)의 복잡도를 달성하기까지의 과정을 정리해본다. 1. 초기 단계: RDBMS를 활용한 단순 그룹화서비스 초기에는 가장 익숙한 RDBMS를 활용한다.검색어가 입력될 때마다 이력 테이블에 저장하고, 조회 시점에 GROUP BY 연산을 수행하는 방식이다. 등록 로직INSERT INTO real_time_search(id, terms, searched_at) VALUES (null, '검색어', now()); 조회 로직SELECT terms, COUNT(*) AS search_countFROM real_time_searchWHERE s..
신입으로 입사한지 얼마 되지 않았을 때 과거 배치 문제점을 파악하고,성능을 개선한 개발에 대해서 작성하는 글이다. 1. 주변 서비스가 다운된다.아침에 출근하여 모니터링 툴을 확인해보면 CPU가 3시간동안 90%를 찍고 다른 배치 서비스가 종종 다운되는 현상이 발생했다.물론 이중화 시스템이여서 데이터의 이상은 없었고, 인지 후 재기동을 꼭 해주어야만 했다. 로직을 확인해보니 아래와 같이 작성이 되어있었고, 수만건을 아래와 같이 실행하고 있었다. // 간단하게 흐름만 작성한 코드List entities = repository.findAll();while (true) { String matchingNode = "targetValue"; List nextNode = entities.parallelSt..
실무에서 만난 간단한 성능 문제와 해결했던 방법에 대해 알아보자. 1. TCP 수신 속도에 따른 병목 발생문제가 발생했다. 발신부에서 TCP로 요청을 보내는데 병목이 발생한다고 한다.분당 5,000건을 보냈는데 성공건수를 보니 분당 3,000건 정도만 처리되고 나머지는 Timeout이 발생했다고 한다. 아래는 문제가 되는 코드를 간략하게 표현했다.try (ServerSocket serverSocket = new ServerSocket(1770)) { while (!Thread.currentThread().isInterrupted()) { Socket client = serverSocket.accept(); new Thread(new MyReceiver(client)).sta..
Spring WebFlux를 사용하다 보면 flatMap이 어떻게 쓰레드를 차단하지 않고 데이터를 흘려보내는지 궁금할 때가 있다.흔히 "이벤트 루프 기반이다", "논블로킹이다"라고 말하지만, 이를 로우 레벨에서 직접 구현해 보면 그 본질을 더 명확히 이해할 수 있다. 이번 글에서는 Java NIO의 Selector와 Pipe를 이용해, WebFlux의 Assembly-Subscription 구조를 간단하게 직접 코드로 구현해본다. 1. 핵심 개념: 왜 Selector인가?WebFlux의 기반인 Netty는 내부적으로 자바의 Selector를 사용한다.Selector는 하나의 쓰레드가 여러 채널(소켓, 파이프 등)을 감시하게 해준다.Assembly (조립): 파이프라인을 구성하는 단계 (flatMap 호출..