🍃 Spring
[Spring] RFC 7232 - Conditional Requests로 비용 및 부하 최적화 하기
개요RFC 7232 - Conditional Requests는 브라우저가 불필요한 서버 요청을 최소화하고, 네트워크 트래픽과 서버 자원을 절약할 수 있도록 도와주는 인터넷 표준 정의 문서를 말합니다. 이 기능을 잘 사용한다면 AWS와 같은 클라우드 환경에서 비용 최적화 및 대용량 트래픽에서의 트래픽 개선도 가능합니다.기능 소개If-Modified-Since의 시간 기준으로 업데이트된 것만 조회 가능 ETag와 Last-Modified 기준으로 기존에 받았던 정책 값을 캐시 해서 사용 가능 브라우저의 캐시 자동 처리로 인해 서버에 불필요한 요청 제어일단 위의 기능들은 굳이 규약을 안 지켜도 만들 수 있으나 규약을 지켜서 만든다면 좀 더 효율적인 코드 개발이 가능해지겠습니다.바로 활용 예시를 몇개 확..
[Spring] gRPC 사용법
깃헙에 코드가 있습니다.gRPC란?gRPC는 구글에서 만든 원격 프로시저 호출(RPC) 기술입니다.RPC는 원격 위치에 있는 서버에서 함수를 직접 실행하는 방식으로, 클라이언트가 서버의 함수를 마치 로컬 함수처럼 호출할 수 있게 해줍니다.gRPC는 저지연성을 위해 HTTP/2 위에서 동작하며, 주로 클라이언트 - 서버 간의 요청-응답을 처리하는데 사용됩니다.그러나 여기서 말하는 클라이언트-서버는 React와 Spring Boot처럼 웹 프론트엔드와 백엔드를 의미하는 것이 아니라, 마이크로서비스 아키텍처(MSA) 환경에서 분산된 시스템 간의 통신을 의미합니다.gRPC는 데이터가 바이너리 형식으로 처리되기 때문에, 사람이 읽기 어렵고 개발자가 아닌 일반 사용자와의 상호작용에는 적합하지 않습니다. 요약하자면 ..
[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..
[Spring] 동시성(Concurrency) 이슈 - 그 외(3)
ThreadLocalThreadLocal은 동시성 문제가 발생해서 쓰는 기능은 아닙니다.ThreadLocal은 각 스레드마다 고유의 변수를 저장할 수 있게 해주는 클래스입니다.주로 트랜잭션에서 컨텍스트를 유지하는 데 사용됩니다.스프링 프레임워크나 Hibernate 같은 ORM에서는 데이터베이스 트랜잭션이 여러 메서드 호출이나 계층을 넘나드는 동안에도 같은 트랜잭션 상태를 유지해야 합니다.이때 ThreadLocal이 중요한 역할을 합니다. 트랜잭션에 동기화에 관한 클래스를 살펴보면 ThreadLocal로 구현된 것을 확인할 수 있습니다. 자신의 스레드에 고유의 변수를 저장하는 것 뿐인데, 왜 동시성 문제가 관련 있을까요?ThreadLocal은 동시성 문제가 발생하지 않도록 회피하는 방식입니다.여러 스레드..