본문 바로가기 메뉴 바로가기

블로그으으

프로필사진
  • 글쓰기
  • 관리
  • 태그
  • 방명록
  • RSS

블로그으으

검색하기 폼
  • 분류 전체보기 (40)
    • Kafka (2)
    • 웹개발 (10)
    • ㄴspring boot (4)
    • DB (3)
    • JAVA (3)
    • AWS (3)
    • 도커 (2)
    • Jenkins (2)
    • 알고리즘 (1)
    • 네트워크 (2)
    • elk (2)
    • 리눅스 (0)
    • 제우스 (1)
  • 방명록

ㄴspring boot (4)
같은 쿼리인데 결과가 다르게 나온다면? – MyBatis 1차 캐시

이번에 꽤 흥미로운 이슈를 하나 겪었다. 동일한 쿼리, 동일한 파라미터로 MyBatis 쿼리를 두 번 실행했는데, 첫 번째 쿼리의 결과와 두 번째 쿼리의 결과가 달랐다. (p6spy를 통해 확인했을 때 두 번째 쿼리는 로그조차 안 찍힘)결론부터 얘기하자면, MyBatis의 1차 캐시 때문에 발생한 문제였다.트랜잭션과 1차 캐시트랜잭션 내에서 1차 캐시가 동작한다는 점을 이해하는 것이 중요하다. MyBatis에서 1차 캐시는 SqlSession 단위로 관리되며, 하나의 트랜잭션 내에서 같은 SqlSession을 사용하기 때문에 트랜잭션 동안 캐시된 데이터는 계속 유지된다. 이 말은 트랜잭션 내에서 같은 쿼리와 파라미터로 데이터 조회 시, 쿼리가 실행되지 않고 1차 캐시에서 결과를 가져온다는 의미다.따라서 ..

ㄴspring boot 2025. 4. 13. 17:12
[Spring Boot] Multiple Datasource with Clickhouse

최근에 DL(Data Lake) 데이터 저장소를 Logpresso에서 ClickHouse(+Nifi)로 전환하는 작업을 진행했다. 이에 따라 API 서버(Spring Boot)에서도 Logpresso에서 가지고 오던 데이터를 ClickHouse에서 가져오도록 전환을 진행했다. 이를 위해 하나의 프로젝트에 다중 데이터소스(pg, ClickHouse)를 연결해야 했다. 이 글은 그 내용을 다룬다. 1. build.gradle 에 clickhouse jdbc 추가ClickHouse JDBC를 사용하기 위해 build.gradle에 의존성을 추가해준다. 2. yml 에 clickhouse 접속 정보 추가application.yml 파일에 ClickHouse 접속 정보를 추가해준다.datasource 위의 pos..

ㄴspring boot 2024. 6. 17. 00:03
ThreadPoolExecutor RejectedExecutionException 오류 - SynchronousQueue

우리 프로젝트에서는 여러개의 쓰레드를 이용하여 작업을 실행하기 위해 ThreadPoolExecutor를 이용하고 있다 쓰레드 풀의 개수는 고정적으로 사용하고 있으며, 해당 쓰레드를 실행하는 부분에서 쓰레드의 개수를 관리하며 쓰레드 풀 이상의 요청은 하지 않기 때문에 이론적으로는 쓰레드 풀이 터지는 경우는 없어야 했다. 하지만 여러 프로젝트를 진행하며 종종 쓰레드 풀이 터지곤 했는데 이번에 조금 더 깊이 파봤다 발생한 오류 는 아래와 같다 RejectedExecutionException: Task cohttp://m.xxx.xx.TrainWorker rejected from java.util.concurrent.ThreadPoolExecutor[Running, pool size = 16, active th..

ㄴspring boot 2023. 7. 11. 09:24
[spring boot] mybatis + jpa multi datasource 설정하기

스프링 부트 프로젝트를 개발하며 2개의 데이터베이스를 연결해야하는 이슈가 생겼다. 기존 프로젝트는 mybatis와 jpa를 섞어서 사용하는 구조이고, multi datasource를 설정하기 위해서는 수동설정이 필요했다. 수동설정을 위해 mybatis는 mapper가 어디에 있는지, jpa는 entity와 repository가 어디에 있는지를 모두 설정해주어야 했는데 기존 프로젝트의 구조가 이곳저곳에 퍼져있어 어려움을 겪었다. 1. application.properties에 datasource 입력 application.properties에 두개의 데이터베이스에 접근하기 위한 정보를 입력해준다. 여기서 중요한 점은 url이 아닌 jdbc-url을 사용해야한다는 것이다. 그 이유는 spring boot 2..

ㄴspring boot 2021. 2. 15. 11:06
이전 1 다음
이전 다음
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
  • lnk
  • lbr
TAG
  • db 두개
  • 1차캐시
  • 스레드 동기화
  • multiple datasource
  • cleanup policies
  • volatile
  • php
  • 넥서스 파일 보관주기
  • 네트워크
  • API Gateway
  • 캐시
  • AWS
  • 오블완
  • spring boot
  • 기본클래스를 찾거나 로드할 수 없습니다
  • s3
  • cleanup policy
  • 보관주기
  • 다중 데이터소스
  • CURSOR
  • myabatis
  • cursor mcp
  • PostgreSQL
  • cursor ai
  • jpa 1차 캐시
  • 넥서스 보관주기
  • docker
  • 쓰레드 변수
  • 도커
  • 카프카
more
«   2025/06   »
일 월 화 수 목 금 토
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
글 보관함

Blog is powered by Tistory / Designed by Tistory

티스토리툴바