전체 글

전체 글

    [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년이 끝나갑니다. 우선 올해는 모두가 수고가 많았다는 느낌이 듭니다.수고하셨습니다. 올해의 회고는 저에게 전달하는 말이기도 하지만 이 글을 보는 분들에게도 전달하고 싶습니다. 어느덧 블로그의 조회수는 30만을 달성했고 그간 여러 성장과 감정을 담고 있었겠지만 현재는 제 자신조차도 회고를 쓰기 조차 조금은 벅찬 감정이 있는 것 같습니다. 과거의 회고에서는 성장이라는 단어로 제 발을 꽉 묶고 있었다면 지금은 그 단어가 때로는 지치는 상황을 만들기에 충분하다고 느끼기 때문인 것 같기도 합니다. 그런 감정 때문인지 모르겠지만 여러 주제를 가지고 2024년 회고를 작성했다가 지금 다시 다 지워버리고 작성하고 있습니다.결국에 모든 주제는 '솔직'이라는 하나의 단어로 귀결됐기 때문입니다. 여러분들은 2..

    [Spring] 동시성(Concurrency) 이슈 - 그 외(3)

    ThreadLocalThreadLocal은 동시성 문제가 발생해서 쓰는 기능은 아닙니다.ThreadLocal은 각 스레드마다 고유의 변수를 저장할 수 있게 해주는 클래스입니다.주로 트랜잭션에서 컨텍스트를 유지하는 데 사용됩니다.스프링 프레임워크나 Hibernate 같은 ORM에서는 데이터베이스 트랜잭션이 여러 메서드 호출이나 계층을 넘나드는 동안에도 같은 트랜잭션 상태를 유지해야 합니다.이때 ThreadLocal이 중요한 역할을 합니다. 트랜잭션에 동기화에 관한 클래스를 살펴보면 ThreadLocal로 구현된 것을 확인할 수 있습니다.  자신의 스레드에 고유의 변수를 저장하는 것 뿐인데, 왜 동시성 문제가 관련 있을까요?ThreadLocal은 동시성 문제가 발생하지 않도록 회피하는 방식입니다.여러 스레드..

    [Spring] 동시성(Concurrency) 이슈 - Database(2)

    데이터베이스의 동시성 이슈이제 데이터베이스의 동시성 이슈에 대해 얘기해보겠습니다.데이터베이스의 특징(격리 레벨과 MVCC)우선 흔히 사용하는 RDBMS에서 데이터베이스가 어느 정도까지 동시성을 허용하는지 알 필요가 있습니다.데이터베이스를 사용한다고 모든 동시성 문제를 해결해줄 수 있는게 아니기 때문입니다. 일단 데이터베이스의 동시성 이슈를 이해하기 위해 선행 지식으로 격리 레벨을 알아야 하지만 주제는 동시성 이슈이기 때문에 간단하게 설명하고 넘어 가겠습니다.Read Uncommitted - 커밋되지 않은 업데이트 내역을 읽을 수 있다Read Committed - 커밋된 업데이트 내역을 읽을 수 있다. 다만 하나의 트랜잭션에서 조회를 2번할 때 다른 곳에서 커밋한 값이 조회될 수 있다(Non-Repeata..