DEV/Backend68 ESP 캡슐화 보안 페이로드(ESP) 캡슐화 보안 페이로드는 비밀성, 데이터 출처 인증., 비연결형 무결성, 재전송 방지 서비스, 트래픽 흐름의 비밀성을 제공하기 위해 사용된다. 제공되는 서비스의 집합은 SA 설정 시점에 선택된 옵션과 네트워크 위상에서 구현 위치에 따라 의존적이다 ESP는 GCM과 같은 인증 되는 암호화 알고리즘을 포함하여 다양한 암호화와 인증 알고리즘으로 동작한다 ESP 형식 ESP 패킷 최상위 형식 페이로드 데이터 서브 구조 암호화 및 인증 알고리즘 페이로드 데이터 그리고, 패딩 패드 길이, 다음 헤더 필드는 ESP 서비스에 의해 암호화 된다. 암호화 알고리즘이 초기화 벡터(IV)를 필요로 하면 데이터는 페이로드 데이터 필드의 시작 부분에 명시해서 전달된다. IV를 포함하면 암호문의 일부로.. DEV/Backend 2023. 6. 10. Write Lock과 Read Lock Write Lock과 Read Lock 결국은 공유 자원에 대해서, 데이터를 읽고 쓸 때 트랜잭션(Transaction) 등에 락은 필연적입니다 또한, 공유 자원의 데이터 정합성을 지키기 위해서는 위와 같이 락으로 공유 자원에 순차적인 데이터 접근을 구현합니다 하지만, 잘못된 락은 시스템 성능을 저하시키니 조심해야 합니다다 개발자 입장에서 락을 통해 동시성을 제어할 때는 락의 범위를 최소하는 것이 중요합니다 Write Lock(배타 잠금) 쓰기 잠금은 잠금을 보유한 트랜잭션이 잠긴 데이터를 읽고 쓸 수 있도록 하는 일종의 잠금입니다. 쓰기 잠금이 유지되는 동안 다른 트랜잭션은 잠긴 데이터를 읽거나 쓸 수 없습니다. 이렇게 하면 데이터 일관성이 보장되지만 잠금 범위가 크면 대기 시간이 길어질 수 있습니다... DEV/Backend 2023. 6. 10. 낙관적 Lock과 비관적 Lock 낙관적 Lock과 비관적 Lock 낙관적 잠금 낙관적 잠금은 충돌이 드물고 전체 트랜잭션 중에 리소스를 잠글 필요가 없다고 가정하는 전략입니다. 대신 트랜잭션이 커밋될 때 충돌을 확인합니다. 충돌이 감지되면(예: 다른 트랜잭션이 데이터를 수정함) 트랜잭션이 롤백되고 오류가 반환됩니다. 낙관적 잠금은 버전 번호를 사용하여 구현됩니다. 트랜잭션이 커밋되면 시스템은 데이터베이스의 현재 버전 번호가 읽은 버전 번호와 일치하는지 확인합니다. 일치하면 트랜잭션이 커밋되고 버전 번호가 증가합니다. 일치하지 않으면 충돌이 발생하고 트랜잭션이 롤백됩니다. 다음은 낙관적 잠금을 사용하는 방법의 예입니다. START TRANSACTION; SELECT version_number FROM table_name WHERE con.. DEV/Backend 2023. 6. 10. 동시성 제어 동시성 제어 데이터베이스의 동시성 제어를 통해 여러 트랜잭션(Transaction)이 서로 간섭하지 않고 동시에 발생할 수 있습니다. 동시 실행에도 불구하고 트랜잭션의 일관성, 격리 및 내구성을 보장하게 하는 것이죠! 데이터베이스의 동시성 문제에 대한 일반적인 패턴 공유 리소스 조회 여러 트랜잭션이 공유 리소스를 읽고 있을 때 하나의 트랜잭션이 리소스를 수정하는 경우 제대로 관리하지 않으면 불일치가 발생할 수 있습니다. 공유 리소스 업데이트 여러 트랜잭션이 공유 리소스를 동시에 업데이트하려고 하면 충돌이 발생할 수 있습니다. 이를 종종 쓰기-쓰기 충돌이라고 합니다. 교착 상태 교착 상태는 두 개 이상의 트랜잭션이 서로 리소스를 해제하기를 무한정 기다릴 때 발생합니다. 이는 관리해야 하는 동시성 제어의 일.. DEV/Backend 2023. 6. 10. 트랜잭션 격리레벨 트랜잭션 격리레벨 트랜잭션(Transaction) 격리 수준은 한 트랜잭션에서 변경한 내용을 다른 트랜잭션에 표시하는 방법과 시기를 결정합니다. SQL에는 네 가지 트랜잭션 격리 수준이 있습니다. READ UNCOMMITTED 가장 낮은 격리 수준입니다. 이 수준에서 트랜잭션은 아직 커밋되지 않은 다른 트랜잭션에서 쓰고 있는 데이터를 읽을 수 있습니다( 이로 인해 불일치가 발생할 수 있습니다. READ COMMITTED 이것은 많은 데이터베이스 시스템의 기본 수준입니다. 이 수준을 사용하는 트랜잭션은 트랜잭션이 시작되기 전에 커밋된 데이터만 볼 수 있습니다. 이는 더티 읽기를 방지하지만 여전히 반복 불가능한 읽기 및 팬텀 읽기로 이어질 수 있습니다. REPEATABLE READ 이 수준은 읽은 데이터가 .. DEV/Backend 2023. 6. 10. 트랜잭션(Transaction) 트랜잭션 트랜잭션은 하나 이상의 SQL 문을 포함하는 단일 논리적 작업 단위입니다. 트랜잭션은 데이터베이스 시스템에서 데이터 무결성과 일관성을 보장하는 데 사용됩니다. 동일한 데이터에 대한 여러 작업이 동시에 발생할 수 있는 다중 사용자 및 동시 데이터베이스 환경에서 매우 중요합니다. 예시로 아래의 SQL 문이 작동하는 것을 봅시다 홍길동이 김국밥에게 잔액을 +900을 줬지만 3번에서 실패가 발생했습니다 이 경우, 데이터의 정합성이 깨집니다. 위의 그림처럼, 홍길동은 900이 그대로 남았지만, 김국밥은 잔액이 900원이 더 생긴 상태로 쿼리가 종료 되었습니다 눈 먼 돈이 생겨버렸죠 이러한 문제 때문에 여러 SQL문을 마치 하나의 오퍼레이션으로 묶어야 하는 필요가 생겼습니다 ACID ACID로 참조되는 네.. DEV/Backend 2023. 6. 10. Fan Out On Read (Pull Model) Fan Out On Read (Pull Model) 웹 서비스를 예시로 들며 Fan Out On Read 모델에 대해 알아봅시다 푸시 모델이라고도 하는 Fan Out On Read는 게시물 작성 시 팔로워의 타임라인에 게시물을 즉시 전달하여 실시간 업데이트를 보장하기 위해 소셜 미디어 시스템에서 사용되는 전략입니다. 이 접근 방식은 즉각적인 데이터 일관성을 우선시하여 팔로워가 지체 없이 최신 게시물을 받을 수 있도록 합니다. Fan Out On Read에는 몇가지 특징이 있습니다 즉시 전달 Fan Out On Read를 사용하면 게시물이 생성되는 즉시 팔로워의 타임라인에 즉시 전달됩니다. 게시물 작성과 팔로워의 타임라인에 표시되는 사이에는 지연이 없습니다. Read Latency 증가 시스템이 포스트 데.. DEV/Backend 2023. 6. 9. Fan Out On Write (Push Model) Fan Out On Write (Push Model) Fan Out On Read (Pull Model)로 설명을 하면, 게시물 작성 할 때 , 해당 회원을 팔로우하는 회원들에게 데이터를 배달하는 것입니다 일종의 인덱스? 역할을 하는 Timeline 테이블을 만들어, 조회 시간을 줄여 시간복잡도에서 이득을 가져 가는 것이죠 정리를 하자면, Fan Out On Write(푸시 모델)는 게시물이 생성되는 즉시 팔로워의 타임라인에 게시물이 전달되는 소셜 미디어 시스템에서 사용되는 전략입니다. 실시간 업데이트 및 즉각적인 데이터 일관성을 보장하기 위해 타임라인 데이터가 팔로워의 타임라인으로 푸시됩니다. 단순화된 검색 게시물은 이미 팔로워의 타임라인에 전달되어 있기 때문에 팔로워가 자신의 타임라인에 액세스할 때 .. DEV/Backend 2023. 6. 9. 커버링 인덱스 커버링 인덱스 커버링 인덱스는 페이지네이션을 최적화하기 위한 기법입니다. 커버링 인덱스의 기본 아이디어는 검색 조건이 인덱스에 부합하다면, 테이블에 바로 접근하는 것보다 인덱스를 통해 접근하는 것이 빠르지 않을까?입니다 즉 테이블에 접근하지 않고 바로, 인덱스로만 데이터 응답을 내려주는 것입니다 인덱스에 필요한 모든 정보를 포함하여 데이터에 대한 접근과 검색 속도를 향상시키는거죠. 커버링 인덱스는 인덱스에 모든 필요한 컬럼이 포함되어 있기 때문에 데이터 테이블에 직접 접근하지 않고도 필요한 정보를 인덱스에서만 가져올 수 있습니다 흐름 설명 위의 테이블에 SELECT 나이 FROM 회원 WHERE 나이 < 30 쿼리를 날리는 상황을 가정해 봅시다 조회가 끝나면, 19와 27이 조회 되었고, 인덱스를 따라 .. DEV/Backend 2023. 6. 9. 커서 기반 페이지네이션 커서 기반 페이지네이션 커서 기반 페이지네이션은 오프셋 기반 페이지네이션의 한계를 극복하기 위한 방법으로, 마지막으로 읽은 위치를 나타내는 커서 또는 마커를 사용하여 데이터의 연속된 페이지를 효율적으로 검색하는 방식입니다. 커서 기반 페이지네이션은 오프셋 기반 페이지네이션의 한계를 극복하기 위해 커서 또는 마커를 사용하여 마지막으로 읽은 위치를 추적합니다. 커서 기반 페이지네이션에서는 다음과 같은 방식으로 작동합니다. 커서는 마지막으로 읽은 키 또는 마커를 받아옵니다. 이는 데이터셋 내에서 특정 위치를 나타냅니다. 고유 식별자, 타임스탬프 또는 데이터셋 내 위치를 정의하는 다른 값을 사용할 수 있습니다. 오프셋 값 대신 커서를 기반으로 다음 데이터 세트를 검색합니다. 이를 통해 스캔하고 폐기할 필요 없이.. DEV/Backend 2023. 6. 9. 오프셋 기반 페이지네이션 오프셋 기반 페이지네이션 오프셋 기반의 페이지네이션은 페이지를 조회하기 위해 오프셋(offset)과 크기(size)를 사용하는 방식입니다. 이 방식은 특정 페이지의 데이터를 요청할 때, 이전 페이지까지의 데이터를 스캔해야 하는 단점이 있습니다. 이에 따라 성능 이슈가 발생할 수 있습니다. 오프셋 기반의 페이지네이션 구현 레포지터리 구성 먼저 오프셋 기반의 페이지 구성을 사용하도록 레포지터리를 구성해야 합니다. 레포지터리 인터페이스에서 findAllBy 메서드를 정의합니다. public Page findAllByMemberId(Long memberId, Pageable pageRequest) { var params = new MapSqlParameterSource() .addValue("memberId",.. DEV/Backend 2023. 6. 9. 페이지네이션 페이지네이션 페이지네이션은 웹 사이트에서 데이터를 한 페이지에 특정 수만큼 표시하도록 하는 기능입니다. 사용자가 다음 페이지를 클릭하면 다음 데이터 세트가 표시되는 것이죠 일반적으로 흔하게 대용량 데이터를 유저에게 제공할 때 쉽게 접할 수 있는 방식입니다. 오프셋 기반 페이지네이션 오프셋 기반 페이지네이션은 가장 일반적인 페이지네이션 방식으로, 데이터의 시작 위치(오프셋)와 한 페이지에 표시할 데이터의 수(리미트)를 지정합니다 예를 들어, 다음과 같이 SQL 쿼리에서 사용할 수 있습니다. public Page getPosts(Long memberId, Pageable pageable) { var posts = findAllBy(memberId, pageable); var count = getCount(m.. DEV/Backend 2023. 6. 9. 이전 1 2 3 4 5 6 다음