본문 바로가기

Computer Science27

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.
@Component, @Controller, @Service, @Repository 차이점 * intro - @Component, @Controller, @Service, @Repository 각각의 클래스를 특정 역할을 수행하는 Spring Bean으로 등록할 때 사용됩니다. 각 어노테이션은 클래스가 어떤 역할을 하는지 명시적으로 나타냄. Spring의 @ComponentScan 기능을 통해서 자동으로 Bean으로 등록됩니다. @Controller, @Service, @Repository는 내부적으로 @Component를 사용합니다. * Component - 가장 일반적인 형태의 어노테이션, 특정 역할에 종속되지 않는 일반적인 Spring Bean 나타냄. * Service- 비즈니스 로직을 수행하는 클래스에 사용됨. * Controller- Spring MVC에서 웹 요청을 처리하는 컨트롤.. 2024. 12. 8.