728x90
반응형

매일 공부/Backend CS 13

[매일메일] 리버스 프록시와 포워드 프록시

✅ 리버스 프록시 (Reverse Proxy) 란?서버에 가까운 프록시클라이언트는 실제 서버가 아닌, 리버스 프록시에게 요청하고 리버스 프록시가 알맞은 백엔드 서버에 요청을 전달리버스 프록시의 핵심 기능 중 하나는 로드 밸런싱다수의 백엔드 서버로 트래픽을 분산시켜 서버 과부하를 방지하고, 서비스의 고가용성을 유지할 수 있습니다.또한 외부에서 직접 백엔드 서버에 접근하지 못하게 하여 DDos 공격이나 해킹 시도로부터 서버를 보호할 수 있습니다.SSL 종료는 리버스 프록시의 중요한 기능SSL/TLS 암호화를 리버스 프록시에서 처리함으로써 백엔드 서버의 부담을 줄이고, 중앙에서 인증서를 관리할 수 있습니다.리버스 프록시는 캐싱 및 콘텐츠 최적화 기능을 통해 정적 콘텐츠를 캐싱하여 응답 속도를 향상하고 서버 부..

[매일메일] 넥스트키 락(Next-Key Lock)이란?

Next-Key Lock이란 무엇인가요? 넥스트키 락은 레코드 락과 갭락을 결합한 형태로, 특정 인덱스 레코드와 그 주변의 갭을 동시에 잠그는 락입니다. 이를 통해 레코드 자체의 변경과 함께 그 주변 공간의 변경도 동시에 제어할 수 있습니다.넥스트키 락은 특정 레코드와 그 주변 공간을 잠그기 때문에, 다른 트랜잭션이 새로운 레코드를 삽입하여 팬텀 리드를 발생시키는 것을 방지합니다. orders_id | orders_amount----------|---------------1 | 1002 | 2003 | 300// 트랜잭션 A 시작START TRANSACTION;// 트랜잭션 A amount = 200인 orders_id = 2 레코드에 대한 레코드 락과 1-2,..

[매일메일] 갭락(Gap Lock)이란?

Gap Lock이란 무엇인가요? 갭 락은 특정 인덱스 값 사이의 공간을 잠그는 락입니다. 기존 레코드 간의 간격을 보호하여 새로운 레코드의 삽입을 방지합니다. 갭 락은 범위 내에 특정 레코드가 존재하지 않을 때 적용됩니다. 트랜잭션이 특정 범위 내에서 데이터의 삽입을 막아 팬텀 읽기(Phantom Read) 현상을 방지합니다. 예를 들어, 인덱스 값 10과 20 사이의 갭을 잠그면 이 범위 내에 새로운 레코드 15를 추가할 수 없습니다.// id 1, 3, 5가 저장된 orders 테이블// 트랜잭션 A 시작START TRANSACTION;// 트랜잭션 A 1-3과 3-5 사이의 갭과 3 레코드 락 설정(넥스트키 락)SELECT * FROM orders WHERE orders_id BETWEEN 2 AN..

[매일메일] 팬텀 리드(Phantom Read) 란?

Phantom Read란 무엇인가요?Phantom Read는 트랜잭션이 동일한 조건의 쿼리를 반복 실행할 때, 나중에 실행된 쿼리에서 처음에는 존재하지 않았던 새로운 행이 나타나는 현상입니다. 이는 주로 읽기 일관성(Read Consistency) 을 유지하는 과정에서 발생할 수 있는 문제로, 데이터 삽입이나 삭제가 다른 트랜잭션에 의해 이루어질 때 발생합니다.  -- 트랜잭션 A 시작START TRANSACTION;-- 트랜잭션 A 첫 번째 조회SELECT * FROM orders WHERE amount > 150;-- 트랜잭션 B 시작START TRANSACTION;-- 트랜잭션 B 새로운 행 삽입INSERT INTO orders (customer_id, amount) VALUES (4, 250);-..

[매일메일] 데이터베이스 시스템 동시성 제어 (MVCC, Lock-Based Concurrency Control)

MVCC(Multi-Version Concurrency Control) 란? 대표적인 동시성 제어 방식으로 MVCC(Multi-Version Concurrency Control) 와 Lock-Based Concurrency Control이 있습니다. 🔒 1. MVCC(Multi-Version Concurrency Control)MVCC는 데이터의 여러 버전을 유지하여 트랜잭션이 동시에 데이터를 읽고 쓸 수 있도록 하는 방식입니다. 각 트랜잭션은 자신만의 일관된 스냅샷을 기반으로 데이터를 읽어, 다른 트랜잭션의 변경 사항에 영향을 받지 않습니다.데이터의 각 버전을 유지하여 읽기 작업이 쓰기 작업과 독립적으로 이루어질 수 있습니다. 트랜잭션은 시작 시점의 스냅샷을 기반으로 데이터를 읽어, 다른 트랜잭션의 ..

[매일메일] HTTP 메서드에서 멱등성이란

멱등성이란멱등성이란 같은 연산을 여러 번 수행해도 결과가 변하지 않는 성질을 의미해.즉, 같은 요청을 한 번 보내든, 여러 번 보내든 결과가 동일해야 해! ✅ 멱등한 HTTP 메서드 vs 멱등하지 않은 메서드GET✅ 멱등함같은 데이터를 조회하므로 결과가 변하지 않음PUT✅ 멱등함같은 데이터를 여러 번 수정해도 결과가 동일DELETE✅ 보통 멱등함같은 데이터를 여러 번 삭제 요청해도 결과가 동일 (이미 삭제된 경우 404 응답)POST❌ 멱등하지 않음같은 데이터를 여러 번 생성하면 중복 삽입될 수 있음 ✅ 멱등성을 보장하는 방법고유한 요청 ID 사용예: requestId를 클라이언트가 생성해서 서버에서 중복 요청인지 확인POST 요청 시 requestId가 동일하면, 이미 처리된 요청이라면 무시데이터 업데..

[매일메일] 스레드, 프로세스, 코어의 수

스레드, 프로세스, 코어의 수가 많을수록 시스템 성능이 향상된다고 생각할 수 있지만, 실제로는 그렇지 않을 확률이 큽니다. 스레드가 많으면?스레드가 지나치게 많아지면 운영체제가 스레드 간 컨텍스트 스위칭을 자주 수행해야 하여 CPU 자원이 스레드 관리에 소모됩니다. 이로 인해 실제 작업 수행 효율이 떨어질 수 있으며, 많은 스레드가 동시에 실행될 경우 메모리나 캐시, 락 등의 자원을 경쟁하게 되어 성능 저하나 데드 락이 발생할 가능성이 높아집니다. 또한, 스레드가 많아지면 동기화와 상태 관리가 복잡해져 버그 발생 가능성도 커집니다. 1. 컨텍스트 스위칭 오버헤드 증가스레드는 하나의 프로세스 내에서 실행되므로, 스레드 간 전환은 프로세스 간 전환보다 가볍지만, 너무 많은 스레드가 존재하면 전환 횟수가 빈번..

[매일메일] 데이터베이스 커넥션 풀(Connection Pool)을 사용하지 않으면 어떤 문제가 발생

애플리케이션과 데이터베이스가 통신을 하기 위해서는 데이터베이스 커넥션이 필요합니다.데이터베이스 커넥션의 생애주기 :데이터베이스 드라이버를 사용하여 데이터베이스에 연결데이터 읽기/쓰기를 위한 TCP 소켓 열기소켓을 통한 데이터 읽기/쓰기연결 종료소켓 닫기커넥션 풀이 없다면 애플리케이션에서 데이터베이스에 접근해야하는 요청을 처리할 때마다 커넥션을 새로 생성하여 연결하고 해제하는 과정을 반복해야 합니다. 이 과정은 비용이 상당히 많이 들기 때문에 요청의 응답시간이 길어집니다.또 동시에 많은 요청이 들어올 경우 매번 새로운 커넥션을 생성하게 되는데, 데이터베이스의 최대 연결 수를 초과할 수 있습니다. 데이터베이스는 일반적으로 동시에 처리할 수 있는 요청 개수에 제한이 있는데, 이 제한을 초과하면 요청이 거부되어..

[매일메일] 단위 테스트와 통합 테스트의 차이점

단위 테스트 (Unit Test)단위 테스트는 소프트웨어의 가장 작은 단위, 즉 개별 메서드나 함수의 기능을 검증하는 테스트입니다. 특정 기능이 올바르게 동작하는지 확인하기 위함이며 독립적이고 빠르게 실행됩니다. 통합 테스트 (Intergration Test) 반면 통합 테스트는 개별 모듈들이 결합되어 전체 시스템이 올바르게 동작하는지 검증하는 테스트입니다. 모듈 간의 상호작용이 올바르게 동작하는지 확인하기 위함이며 실제 데이터베이스, 네트워크 등의 외부 시스템과의 통합을 테스트합니다.@SpringBootTest@ActiveProfiles("test") // 반드시 명시@Transactional // 테스트 후 데이터 롤백@DisplayName("[피드백] Integration Test") 슬라이스 테..

[매일메일] 동기와 비동기의 차이점은 무엇인가

동기와 비동기는 호출하는 함수의 작업 완료를 기다리는지 여부의 차이가 있습니다.함수 A가 동기로 함수 B를 호출하면 A는 B의 작업이 완료될 때까지 기다려야 합니다. 따라서 작업이 순차적으로 진행됩니다. 반면, 함수 A가 비동기로 함수 B를 호출하면 A는 B의 작업 완료를 신경 쓰지 않고 따로 동작합니다. 따라서 작업이 순차적으로 진행되지 않습니다.블로킹과 동기는 어떤 차이가 있나요? 🤔두 개념은 유사하면서도 다른데요. 동기 호출에서는 호출된 함수가 작업을 완료할 때까지 호출한 함수가 기다립니다. 즉, 작업이 순차적으로 진행되는 것을 의미합니다. 반면, 블로킹은 함수가 호출된 후, 호출한 함수의 결과를 기다리기 위해 실행을 멈추는 상태를 의미합니다. 즉, 제어권이 반환되지 않고 대기하는 상황입니다.1...

728x90
반응형