일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- Algorithm
- 페이지 부재율
- 기아 상태
- ALU
- 트랩
- Oracle
- 교착상태
- mutex
- fork()
- 페이지 대치
- 단편화
- 스케줄링
- 스레드
- 추상화
- 알고리즘
- concurrency
- BOJ
- 운영체제
- 세마포어
- 프로세스
- 페이징
- 부동소수점
- 동기화
- 백준
- mips
- 우선순위
- 인터럽트
- 컴퓨터구조
- 가상 메모리
- PYTHON
- Today
- Total
목록전체 글 (130)
봉황대 in CS

현재 진행하고 있는 프로젝트에서 이벤트 조회 기능을 구현하며, 이 기능에 부하를 주었을 때 어떤 문제가 발생하는지를 확인하고 여러 가지 기법들을 적용해 보며 해결하게 되었다. 이 과정을 통해서 배웠던 것들을 여기에 정리하고자 한다. 상황 설명각 이벤트에는 이벤트의 시작 시각(beginTime)과 종료 시각(endTime)이 저장된다.@Getter@Entity@Table(name = "events")@NoArgsConstructor(access = AccessLevel.PROTECTED)public class Event extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; ..

Global cache vs. Local cache분산 환경에서 Global cache는 다수의 서버가 바라볼 수 있는 캐시를 말한다. 예를 들어, MSA 환경에서 Redis를 캐시 서버로 띄워놓고, 여러 서버들이 DB에 있는 원본 데이터를 조회하는 것이 아니라 Redis에 캐싱되어 있는 데이터를 조회하는 것이다. 이를 통해 DB connection 요청을 줄일 수 있으며 Redis의 빠른 조회 성능을 통해 전체 시스템의 성능도 향상할 수 있다. 하지만 이는 원래 DB로 가야 했던 요청이 캐시 서버로 옮겨진 것일 뿐이라, 만약 조회가 매우 빈번하게 발생하는 데이터인 경우에는 캐시 서버가 그 부하를 모두 견뎌야 한다. 그리고 캐시 서버에서 데이터를 가져올 때마다 서버에서 메모리 할당이 발생하고 이후 GC가..

문제 상황이벤트 목록을 조회하는 API를 구현하는 중이었다. 이벤트 목록은 자주 조회되는 데이터라, 매 순간마다 DB에 요청을 보내는 것은 비합리적이다. 한번에 얻을 수 있는 DB connection의 개수는 한정적이기 때문에 DB에게 부하를 많이 주게 되면 connection을 얻기 위해 기다리는 시간이 늘어날 수 밖에 없고, 이벤트 목록 조회 뿐만 아니라 다른 요청들도 DB에게 가게 된다면 그 파급 효과가 더욱 커지게 된다. 따라서 Redis에 캐싱해두는 전략을 사용하여 DB connection 요청을 줄이고자 하였다. (+ 이벤트 목록은 모든 사용자에게 동등하게 보이는 Global 데이터이기 때문에 Redis cache에 올려두어도 문제가 없다.) 조회 로직은 다음과 같다.1. Redis에 캐싱된..

Pagination(또는 Paging)은 데이터를 조회하는 경우, 데이터 전체를 가져오는 것이 아니라 데이터를 페이지라는 일정량으로 쪼개어 요청한 페이지에 대한 데이터만 일부분 가져오는 기법이다. 전체 데이터가 매우 많은 경우에 Pagination을 통해 DB의 부하를 줄일 수 있으며, '무한 스크롤'을 위한 조회 API 구현 시 많이 사용하는 방법이다. Pagination을 구현하는 방법에는 여러 가지가 존재하는데, 이 글에서는 Offset 기반 pagination과 Cursor 기반 pagination을 알아본다. 그리고 nGrinder를 통한 부하 테스트를 진행하여 서로를 비교하고 왜 이런 차이가 발생하는지를 정리한다.예시 상황상품(Product) table에는 300,000건의 데이터가 저장되어 ..

* 본 글은 ‘친절한 SQL 튜닝’ 책과 Oracle 공식 문서들을 바탕으로 작성하였습니다. (참고한 문서의 링크는 하단에 첨부) SQL Processing 과정 중에서 Soft parse와 Hard parse는 각각 어떤 과정이고, 언제 선택되는가? 먼저 여기에서 중심이 되는 구조인 Library cache에 대해서 알아보자. Library CacheSQL과 PL/SQL code를 재사용할 수 있도록 caching 해두는 메모리 공간이다. System Global Area(SGA) 내부 Shared pool에 위치하여, 모든 server와 background process가 공유한다. Why caching & reusing SQL, PL/SQL codes ?왜 SQL과 PL/SQL code를 ca..
* 본 글은 'Database System Concepts - 7th Edition(데이터베이스 시스템 7판)'을 바탕으로 작성하였습니다. What is phantom read ?i.e., Phantom phenomenon 이미 전 포스팅에서 다룬 개념이지만, 다시 명확하게 하는 겸 작성한다.https://eunajung01.tistory.com/166 두 개의 transaction, T_1과 T_2가 있다고 하자. 둘은 각각 다음과 같은 SQL을 실행한다.# T_1insert into instructor values(11111, 'Feynman', 'Physics', 94000);# T_2select count(*)from instructorwhere dept_name='Physics';T_2는 in..

ACID는 데이터베이스의 transaction이 안전하게 수행되는 것을 보장하기 위해서 가져야 하는 특성들을 말한다. Atomicity ensures that either all all the effects of a transaction are reflected in the database, or none are;a failure cannot leave the database in a state where a transaction is partially executed. (All or nothing)Consistency ensures that if the database is initially consistent,the execution of the transaction (by itself) leaves..

What is CPU Pinning ?‘CPU pinning’은 특정 process 또는 thread가 지정한 CPU core에서만 실행되도록 하는 것을 말한다. CPU pinning is a stricter form of CPU affinity,where you bind a process or a thread to a specific CPU core, and prevent it from running on any other core. What is CPU Affinity ?여기서 ‘CPU affinity’란, ‘the ability to specify which CPU cores a process or a thread can run on’특정 process 또는 thread가 지정된 CPU core 집..