[Spring] JPA 벌크 연산이란?
·
Back-end/Spring
만약, DB에 Member Table이 있고, Salary라는 컬럼이 존재한다고 가정해보자. 연봉 3000 미만의 member들의 Salary를 수정한다고 가정했을 때, JPA 관점에서는 다음과 같은 순서로 진행될 것이다.  em.find() OR select 쿼리를 날려 영속성 컨텍스트에 엔티티 저장 후 반환반환 받은 엔티티의 값을 변경한다. -> 영속성 컨텍스트에 반영된다.Commit 시점에 변경 감지(Dirty Checking)가 일어나며 Update 쿼리를 날려 DB에 반영한다. 만약, salary를 변경할 member가 80만명이라면? 80만번의 더티 체킹이 일어나고, 80만번의 UPDATE 쿼리가 날아갈 것이다... 이를 해결할 수 있는 방안이 바로 벌크 연산이다.  Bulk 연산이란? 벌크 ..
[Back-End] 로드밸런싱 톺아보기
·
Back-end
매일메일을 통한하루 CS 공부하기 로드 밸런싱이란 애플리케이션을 지원하는 리소스 풀에 들어오는 네트워크 트래픽(들어오는 요청)을 균등하게 분산하는 것을 의미한다. 이를 수행하는 로드 밸런서는 애플리케이션 서버 앞단에 위치하며 클라이언트 요청을 지시하고 제어한다. 이를 통해서 애플리케이션의 가용성, 확장성, 보안 및 성능을 확보할 수 있다. 로드밸런싱 알고리즘 1. Round Robin모든 요청이 순서대로 처리되는 방식이다. 모든 서버의 처리 능력이 동등하고, 요청의 고른 분산이 중요한 경우 고려할 수 있음. 장점 : 구현이 쉬우며 고른 분산을 보장할 수 있다단점 : 서버 부하나 response time을 고려하지 않고 서버 처리 능력이 다른 경우 비효율적임  2. Weighted Round Robin각 ..
[EC2] 인스턴스 HikariCP Connection 고갈 문제
·
Infra & Cloud
프로젝트를 진행하는 당시 백엔드에서 모델 서버에 여러 번 Sagemaker Endpoint로 요청을 호출했을 때, 갑자기 EC2에서 해당 로그를 뜯어봤을 때 다음과 같은 에러가 발생했다. Caused by: java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30001ms (total=10, active=10, idle=0, waiting=0) at com.zaxxer.hikari.pool.HikariPool.createTimeoutException(HikariPool.java:686) ~[HikariCP-5.1.0.jar!/:na] a..
[Back-End] DB Replication이란 무엇인가.
·
Back-end
매일메일을 통한하루 CS 공부하기 DB Replication은 데이터베이스의 고가용성과 데이터 안정성을 보장하기 위해 널리 활용되는 핵심 기술이다. 특히, 대규모 애플리케이션 환경에서는 데이터의 지속적인 가용성과 신뢰성이 매우 중요하기 때문에, 원본(Source) 서버와 복제(Replica) 서버 간의 데이터 동기화는 필수이다. Binary log를 저장하는 방식은?Replication은 Source 서버에서 발생하는 모든 데이터 변경 사항을 Replica 서버로 복제하여 두 서버 간의 데이터 일관성을 유지하는 메커니즘이다. 이러한 과정은 주로 Binary log를 기반으로 이루어지며, Binary log는 Source 서버에서 실행된 모든 데이터 변경 쿼리를 기록하는 역할을 한다. MySQL에서는 해당..
[Back-End] HTTPS란 정확히 무엇일까?
·
Back-end
매일메일을 통한하루하루 CS 공부하기 HTTP란?HyperText Transfer Protocol클라이언트와 서버 간 통신을 위한 통신 규약이다.HTTP는 암호화되지 않은 평문 데이터를 전송하기 때문에 제 3자가 정보를 조회할 수 있다는 위험이 있다. 이를 해결하기 위해 HTTPS가 등장한 것이다. HTTPS란?HTTPS(Hyertext Transfer Protocol Secure)암호화된 데이터를 전송하기 때문에 제 3자가 볼 수 없도록 할 수 있다. 적용 방법인증 기관 (CA)에게 인증서를 발급받아야 한다. CA에 인증서를 요청하면 CA 이름, 서버의 Public Key, 서버의 정보를 활용하여 인증서를 생성하고 이를 CA Private Key로 암호화하여 서버로 전송한다.이때 인증서는 CA Priv..
[Spring] Spring Batch를 활용한 배치 프로세싱
·
Back-end/Spring
💡 Spring Batch이란?Spring Batch는 대량의 데이터를 처리하기 위한 경량화된 프레임워크로, 반복적인 작업을 수행하는 일괄 처리(Batch Processing) 작업을 효율적으로 처리할 수 있는 기능을 제공해준다. 기본적으로 로깅/추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작, 작업 건너뛰기, 리소스 관리 등 대용량 데이터를 처리하는데 필수적인 기능을 제공해준다. 또한 최적화 및 파티셔닝 기술을 통해 대용량 및 고성능 배치 작업을 가능하게 하는 고급 기술 서비스를 제공해주기도 한다. 배치 프로세싱이란?여러 개의 데이터베이스 쿼리나 트랜잭션을 그룹화하여 한 번에 처리하는 기술즉, 사용자에게 빠른 응답이 필요하지 않은 서비스에 적용할 수 있다.    ✈️ Spring Batch의 장..
[Spring] Private 메서드에 @Transactional 선언 시 트랜잭션이 동작하는가?
·
Back-end/Spring
매일메일을 통한하루하루 CS 공부하기  기본적으로 @Transactional, @Cacheable, @Async 등의 AOP 어노테이션은 런타임에 동작하는 Spring AOP를 기반으로 동작한다. Spring AOP가 제공하는 JDK Dynamic Proxy, CGLIB 방식 모두 타깃이 구현하는 인터페이스나 구체 클래스를 대상으로 프록시를 만들어서 타깃 클래스의 메서드 수행 전후에 횡단 관심사에 대한 처리를 할 수 있다. Spring은 빈 생성시, 해당 빈에 AOP 애너테이션이 있는지 검사하고, 있다면 프록시 객체를 생성하여 빈을 대체한다. AOP 적용 대상인 클래스의 경우, 즉, @Transactional과 같은 AOP 애너테이션이 하나라도 선언된 클래스는 프록시로 감싸진다. JDK Dynamic P..
[Back-End] 리버스 프록시 vs 포워드 프록시
·
Back-end
매일메일을 통한하루하루 CS 공부하기 리버스 프록시와 포워드 프록시. 생각해보니 정확하게 개념을 설명할 수 없는 내 자신을 마주하게 됐다.다시 한 번 공부를 통해 성장하자. 포워드 프록시 (Forward Proxy)주로 클라이언트 측에 위치하여, 사용자가 인터넷에 접근할 때 중개자 역할을 한다. 예를 들어, 회사 내부 네트워크에서 외부 웹사이트에 접근하려고 할 때, 포워드 프록시 서버를 통해 요청이 전달됨.이 과정에서 사용자의 실제 IP 주소는 숨겨지고, 프록시 서버의 IP 주소가 대신 사용된다. 핵심 기능익명성 제공 : 실제 IP를 숨겨 개인정보 보호와 보안 측면에서 장점을 제공함.캐싱 : 자주 요청되는 웹페이지나 파일에 대해 캐싱하므로써 네트워크 bandwidth를 절약할 수 있음.보안 강화 기능 :..