본문 바로가기

CS31

REST API란? 1. REST API의 탄생 REST : Representational State Transfer (대표적인 상태 이전?) 로이 필딩이 웹(HTTP) 설계의 우수성에 비해 제대로 사용되어지지 않는 모습이 안타까워 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표 2. REST 구성 자원(RESOURCE) - URI 행위(Verb) - HTTP METHOD 표현(Representations) 3. REST 특징 1. Uniform (유니폼 인터페이스) Uniform Interface는 URI로 지정한 리소스에 대한 조작으로 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일 2. Stateless(무상태성) REST는 무상태성 성격. 다시 말해 작업을 위한 상태정보를 따로 저장하고 관리하.. 2023. 7. 5.
동시성 제어하기 - 07. 읽기와 쓰기의 트레이드 오프 병목 해소하기 쓰기 지점의 병목은 하나의 레코드를 점유 → 락 대기가 발생 락 대기를 풀고자 테이블 형식으로 분리 → 조회 지점의 병목이 발생 조회 지점의 병목은 카운트로 처리 INSERT 했던 데이터들을 aggregation해서 sum 하기 위해서 매번 카운트 쿼리가 발생 데이터의 성질 확인하기 정합성을 요구하는 데이터인가? 예시) 좋아요수가 0.1초의 딜레이를 가진다고 해서 고객에게 엄청난 손해를 주는 데이터인가? 그렇지 않다. 좋아요 수는 어느 정도의 실시간성만 보장만 된다면 괜찮다. 클라이언트는 웹 서버에 좋아요 누름에 대한 요청을 한다. 웹 서버는 좋아요 테이블에 INSERT를 한다. 조회 시점은 게시물 테이블 컬럼에 캐싱을 해놓는다. 특정 주기를 가진 스케쥴러가 좋아요 테이블을 주기적으로 co.. 2023. 6. 7.
동시성 제어하기 - 04. 낙관적 락 동시성 제어를 위한 가장 보편적인 방법은 락을 통한 줄세우기 → 비관적 락 락을 통한 동시성 제어는 불필요한 대기 상태를 만듦 MySQL에서는 인덱스를 잠그기 때문에 WHERE문 조건에 따라서 불필요한 데이터들이 잠기기도 함 동시성이 빈번하지 않은 쿼리로 인해 다른 쿼리가 대기한다면? 동시성 이슈가 빈번하지 않길 기대하고, 어플리케이션에서 제어한다. → 낙관적 락의 기본 개념 CAS(compare and set) 낙관적 락에서 어떻게 어플리케이션에서 제어하는가? → CAS를 통해 제어한다. 예제를 통해 살펴보자. 예제) 지난 예제와 다른 점은 버전이 추가되었다는 것이다. 낙관적 락에서는 레코드 하나에 대해서 버전을 매긴다. (버전 관리를 통해 내가 조회했던 버전이 맞는지 확인을 하고 맞다면 업데이트를 하.. 2023. 6. 7.
동시성 제어하기 - 02. 쓰기락과 읽기락 - 이론 동시성 제어를 위한 가장 보편적인 방법은 락을 통한 줄세우기 쓰기락과 읽기락 락을 통해 동시성을 제어할 때는, 락의 범위를 최소화 하는 것이 중요 → 락을 잡는동안 수행하는 작업의 범위를 최소화 하는 것 락의 범위가 크면 클수록 락을 획득하기 위한 여러 트랜잭션들이 대기하는 시간이 길어짐 → 그만큼 성능도 내려간다. 락의 범위가 길어질수록 Connection Pool을 점유하는 시간이 길어짐 → 최악의 경우에는 Connection Pool 고갈로 이어질 수 있음 MySQL에서는 트랜잭션의 커밋 혹은 롤백시점에 잠금이 풀림 → 트랜잭션이 곧 락의 범위 따라서 여기서는 락의 범위를 최소화 한다는 것은 하나의 트랜잭션을 최소화 한다는 것임 예시) 만약 S3이미지를 업로드 한다고 했을 때 이것이 트랜잭션 범위안.. 2023. 6. 7.