전체 글
[Spring] Redis 연결 관리 및 성능 최적화
Connection PoolSpring Boot에서 Redis를 사용할 때 기본적으로 lazy connection을 사용합니다.즉, Redis에 대한 최초 연결이 있을 때 뒤늦게 Connection Pool을 가져오는 방식입니다.@RestControllerpublic class RedisWarmupController { @Autowired private RedisConnectionFactory redisConnectionFactory; @Autowired private StringRedisTemplate redisTemplate; @GetMapping("/redis-test") public String testRedisConnection() { long start = System.curr..
2024년의 회고
어느덧 2024년이 끝나간다. 과거의 회고에서는 성장이라는 단어로 두 발을 꽉 묶고 있었지만 지금은 그 단어가 때로는 지치는 상황을 만들기에 충분하다고 느낀다. 그런 감정 때문인지 모르겠지만 여러 주제를 가지고 2024년 회고를 작성했다가 지금은 다시 다 지워버리고 새롭게 작성하고 있다.결국 모든 주제는 '솔직'이라는 하나의 단어로 귀결되었다.행복의 기준은 누구나 다르다.하지만 올해 행복했었다고 자신 있게 말할 수 있는 사람은 그리 많지 않을 것이다.미래의 불확실성과 때로는 이해하지 못할 타인의 존재, 그리고 세상을 살아가며 지속적으로 발생하는 악연들이 우리를 가끔은 힘들게 했을 것이다.솔직이러한 상황들을 지속적으로 부딪혀오면서 생각하게 된 단어는 '솔직'이다.올해 여러 부분에서 솔직하지 않은 상황을 많..
[Spring] 동시성(Concurrency) 이슈 - 그 외(3)
ThreadLocalThreadLocal은 동시성 문제가 발생해서 쓰는 기능은 아닙니다.ThreadLocal은 각 스레드마다 고유의 변수를 저장할 수 있게 해주는 클래스입니다.주로 트랜잭션에서 컨텍스트를 유지하는 데 사용됩니다.스프링 프레임워크나 Hibernate 같은 ORM에서는 데이터베이스 트랜잭션이 여러 메서드 호출이나 계층을 넘나드는 동안에도 같은 트랜잭션 상태를 유지해야 합니다.이때 ThreadLocal이 중요한 역할을 합니다. 트랜잭션에 동기화에 관한 클래스를 살펴보면 ThreadLocal로 구현된 것을 확인할 수 있습니다. 자신의 스레드에 고유의 변수를 저장하는 것 뿐인데, 왜 동시성 문제가 관련 있을까요?ThreadLocal은 동시성 문제가 발생하지 않도록 회피하는 방식입니다.여러 스레드..
[Spring] 동시성(Concurrency) 이슈 - Database(2)
데이터베이스의 동시성 이슈이제 데이터베이스의 동시성 이슈에 대해 얘기해보겠습니다.데이터베이스의 특징(격리 레벨과 MVCC)우선 흔히 사용하는 RDBMS에서 데이터베이스가 어느 정도까지 동시성을 허용하는지 알 필요가 있습니다.데이터베이스를 사용한다고 모든 동시성 문제를 해결해줄 수 있는게 아니기 때문입니다. 일단 데이터베이스의 동시성 이슈를 이해하기 위해 선행 지식으로 격리 레벨을 알아야 하지만 주제는 동시성 이슈이기 때문에 간단하게 설명하고 넘어 가겠습니다.Read Uncommitted - 커밋되지 않은 업데이트 내역을 읽을 수 있다Read Committed - 커밋된 업데이트 내역을 읽을 수 있다. 다만 하나의 트랜잭션에서 조회를 2번할 때 다른 곳에서 커밋한 값이 조회될 수 있다(Non-Repeata..