전체 글66 B tree, B+ tree 개념 * B tree - 데이터가 정렬되어 있는 트리로 2진트리와 비슷하지만, 자식 노드가 2개 이상 가능한 트리. 어떤 값에 대해서도 같은 시간에 결과를 얻을 수 있는 것이 장점. * 용어 - node : 사각형으로 표시된 한 개의 데이터 - root node : 가장 상단의 노드 - branch node : 중간 노드들 - leaf node : 가장 아래 노드 * 특징 1. 균일성 : 어떤 값에 대해서 O(logN) 값을 얻을 수 있음. 2. 균형트리 : 루트로 부터 리프까지의 거리가 일정한 트리 구조. 3. 항상 정렬된 상태. 대소 비교에 문제가 없음. * 삽입 1. 빈 트리일 경우 root node를 만들어 삽입함. 2. key가 들어갈 리프노드를 탐색한다. 3. 해당 리프 노드에 자리가 남아있다면 정.. 2024. 12. 18. Transaction_and_ACID * 트랜잭션 (Transaction) - 대용량 데이터 동기화 등을 처리하다 보면 개발자가 트랜잭션을어떻게 처리 하느냐에 따라 데이터의 정합성 등에 영향을 주게 된다.그래서 백엔드 개발자로서 트랜잭션은 중요한 개념이다. * 트랜잭션 상태- 위에서 알게된 Commit과Rollback은 트랜잭션이 어떤 상태일 때 발생할 수 있을까- Active : 트랜잭션이 실행 중이며 동작 중인 상태- Partially Committed : 트랜잭션이 실행되고 데이터 변경을 DB에 적용 전 메모리 공간에만 변경해놓을상태.- Committed : 트랜잭션이 정상적으로 완료 상태. 즉 실제로 메모리에서 DB에 데이터를 쓴 상태. Rollback 불가능.- Failed : 오류로 트랜잭션 실패 상태.- Aborted : 트랜잭.. 2024. 12. 18. Spring 트래픽 처리 방법 * intro - 추후에 트래픽 문제를 해결하기 위해서 SpringBoot를 사용했을때 처리하는 방법을 알아두면 추후에 유용할것 같아서 미리 작성한다. 1. 로드밸런싱 (Load Balancing)- 로드밸런싱은 여러 서버 ( 혹은 인스턴스 ) 로 트래픽을 균등하게 배분하여 특정 서버에 과도한 부하가 몰리지 않도록 하는 핵심적인 기법.- Spring Cloud Gateway 나 Zuul( Netflix OSS) 같은 API Gateway를 사용해 트래픽을 마이크로서비스 아키텍처에 유연하게 분배.- 컨테이너 오케스트레이션 도구 사용시 ReplicaSet 및 HPA 를 통해 가용 인스턴스 자동 스케일링. ( 어려움 ) 스케일링 - 수평 스케일링 : 애플리케이션 인스턴스 늘려서 요청 처리 능력 증대. - 수직.. 2024. 12. 10. 동기 방식으로 외부 서비스를 호출할 때 외부 서비스 장애가 나면 어떻게 조치할 수 있을까. * intro - 외부 서비스 장애로 인해 응답이 오래 걸린다고 했을 때 외부 API 응답으로 대기하는 자원들이 운영 서버 내부에 쌓이면 성능에 악영향을 줌. 이를 해결하기 위한 가장 기본적인 방법은 time out을 설정하는 것. * HTTP 커넥션 풀이란?Clientd와 Server간에 지속적으로 유지할 수 있는 HTTP 연결들을 재사용하기 위한 메커니즘 또는 관리 방식입니다. 일반적으로 애플리케이션이 서버와 통신할 때, 매 요청마다 새로운 TCP 연결을 맺고 HTTP 요청을 전송한 뒤, 응답을 받고나서 연결을 종료하는 과정을 반복하면 다음과 같은 비효율이 발생. 1. 연결 설정 오버헤드:TCP 핸드셰이크(3-way handshake), TLS 핸드셰이크(HTTPS의 경우) 등 연결을 맺는 과정은 .. 2024. 12. 10. JSON에 대해서 ( Serialiazation, Deserialization ) * JSON 이란? - JavaScript Object Notation 경량의 데이터 교환 형식으로, 사람이 읽고 쓰고 쉽게 기계가 분석하고 생성하기 용이한 구조를 갖춘 포맷. 키-값으로 데이가 표현되며, 다양한 프로그래밍 언어에서 쉽게 파싱할 수 있음. * 예시{ "name": "Alice", "age": 30, "hobbies": ["reading", "music"]} * 특징 - 직렬화 (Serialization) 과 역직렬화 (Deserialization) 으로 데이터를 주고받을 수 있다. 1. 직렬화 Serialization - 애플리케이션 메모리 상의 객체 ( Ex : Java의 POJO 객체, Python의 dick등)를 JSON 문자열로 변환하는 과정.이 과정을 통해 데이터는 문자열 .. 2024. 12. 8. Java의 lock * Optimistic Lock - 변경 충돌이 적을 것이라 낙관적으로 가정하고 충돌 발생 시에만 재시도 하는 방식. 1. CAS - 읽기 락과 쓰기 락의 구분이 명확한 알고리즘으로, Java의 AtomicInteger, AtomicLong 같은 클래스에 적용됨. - 동작 원리 1. 기존의 값과 새로운 값을 비교한 후, 동일할 때만 값을 교체합니다. 2. 교체에 실패하면 재시도합니다. 3. 하드웨어 명령어 수준에서 구현됨, CPU의 CAS 명령어 (CMPXCHG, LL/SC)를 사용함. 4. Atomic 클래스 (AtomicInteger, AtomicLong, AtomicReference)가 이를 구현함.import java.util.concurrent.atomic.AtomicInteger;public.. 2024. 12. 8. 이전 1 ··· 5 6 7 8 9 10 11 다음