| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- docker compose
- 지연 로딩
- Dead Letter Queue
- redis
- JdbcTemplate
- docker
- CORS
- @Transactional
- Routing Key
- mybatis
- MSA
- kafka
- Web
- 컨테이너
- dockerhub
- Spring Container
- 쿠버네티스
- Spring
- @ComponentScan
- 스프링 부트
- 페이징
- JWT
- AWS
- JPA
- DI
- 서블릿 컨테이너
- DLQ
- Spring Data JPA
- securitycontextholderfilter
- JPQL
- Today
- Total
목록Computer Science (11)
look-forest
이번 시간에는 멀티프로세싱, 멀티스레싱 환경에서 발생할 수 있는 deadlock이란 무엇이고, 어떻게 대응할 것인지 알아보겠다. 교착 상태(deadlock) 2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만 기다리며 작업을 더 이상 진행하지 못하는 상태 deadlock 발생 조건 deadlock은 아래 4가지 조건을 모두 만족할 때 발생한다. Mutual Exclusion: 적어도 1개의 resource가 배타적 자원일 때 Hold and Wait: 어떤 자원을 할당받은 상태에서 다른 자원을 기다리는 상태 (공유 자원 2개 이상 필요할 때) No preemption: resource를 뺏을 수 없을 때 Circular Wait: 점유와 대기를 하는 프로세스 간의 관계가 원을 이룸 Resource-A..
이번 시간에는 Concurrency-Control의 고전적인 문제들에 대해서 알아보겠다. The Bounded-Buffer Problem (The Producer-Consumer Problem) The Readers-Writers Problem The Dining-Philosophers Problem The Bounded-Buffer Problem 데이터 n개를 담을 수 있는 버퍼를 Producer가 채우고, Counsumer가 비우는 상황 상호 배제를 위한 mutex, 빈 상태와 가득 찬 상태를 위한 counting semaphore를 쓴다. int n; semaphore mutex = 1; semaphore empty = n; semaphore full = 0; empty 세마포어와 full 세마포어..
자바 동기화를 위한 synchronized 키워드, wait(), notify 메소드에 대해 알아보겠다. 특히 Java는 Monitor를 제공한다. Monitor는 모니터 내부에서는 항상 하나의 프로세스만이 활성화되도록 보장해 주므로, 프로그래머 가 동기화 제약 조건을 명시적으로 프로그래밍해야 할 필요가 없다는 장점이 있다. 자바에서 모든 객체는 monitor를 가지고 있고, monitor는 여러 스레드가 동시에 객체로 접근하는 것을 막는다. 스레드가 monitor를 가지면, monitor를 가지는 객체에 lock을 걸어 다른 thread들이 해당 객체에 접근할 수 없게 한다. monitor를 가질 수 있는 것은 synchronized 키워드 내에서 가능하다. synchronized 임계 영역에 해당하는..
이전 시간에 동기화 문제 해결을 위한 피터슨 알고리즘에 대해서 알아보았다. 좋은 알고리즘이지만, 너무 복잡했다. 또한 Peterson's algorithm과 같은 software적인 해결책은 SMP (Symmetric Multiprocessor System) 환경과 같은 modern computer system에서는 제대로 작동할 수 있다는 보장이 없다. 그 해결책으로 하드웨어적인 instruction이나 mutex, semaphore와 같은 소프트웨어적인 API를 사용하여 프로세스 간 동기화를 보장하는 방법을 사용한다. 이번 시간에는 Critical Section Problem 해결을 위한 좀 더 higher-level의 software tool에 대해서 알아보겠다. OS supported SW sol..
이전 시간에, 공유 자원에 여러 프로세스가 동시에 access하는 상황인 race condition, 공유 자원에 접근하는 코드 영역인 critical section에 대해서 배웠고 이떄 data integrity가 깨지는 문제를 인지했다. 해결을 위해선 synchronization이 필요하다. 구체적으로 mutual exclusion, progress, bounded waiting을 충족해야 한다. 이 3가지를 충족해서 '이론적으로는' 좋은 해결책이 peterson's solution이다. 피터슨 이전의 단순한 해결책: lock(flag)만 사용 진입 후 잠금 → 잠금 직전에 타임아웃이 걸려 동시 진입 (mutual exclusion 위배) 잠금 후 진입 → 잠금 직후에 타임아웃이 걸려 둘 다 무한 루..
지금까지는 프로세스나 스레드를 동시에 사용하는 멀티프로세싱, 멀티스레딩에 대해서 알아보았다. CPU 이용률을 높히고 반응성이 좋아졌지만, 문제점도 존재한다. 이번 시간에는 어떠한 문제가 있는지 알아보겠다. [문제] data inconsistency 프로세스나 스레드가 concurrently(시분할) or parallel(멀티코어)하게 진행될 경우, 공유 데이터의 일관성이 깨질 수 있다. 예를 들어, 아래 코드의 경우를 보자. conurrent하게 실행될 경우, instruction 진행 '도중에' interrupted 될 수 있는데, 그 경우 data integrity가 깨질 수 있다. int counter = 0; void *run1(void *param){ for (int i = 0; i < 1000..
멀티프로그래밍(멀티프로세싱, 멀티태스킹)의 목적은 프로세스를 동시에 실행시켜 CPU 이용률을 극대화하는 것이다. 그럼 메모리에 로드된 프로세스들 중 어떤 프로세스를 CPU에게 할당하는 것이 최선일까? CPU Scheduling을 위한 기본 개념 스케줄러와 디스패처 CPU scheduler: Ready 상태의 프로세스들 중 CPU에게 할당해 실행할 프로세스를 선택 dispatcher: context switching (dispatcher latency는 가급적 짧아야 한다!) 선점형과 비선점형 스케줄링 Non-preemptive scheduling: 프로세스가 종료되거나 I/O waiting 상태로 넘어갈 때까지 CPU 작업 계속 진행 과거 일괄 작업 방식에서 사용하던 방식 스케줄러의 작업량이 적고 문맥 ..
이전까지는, a single thread of control을 가진 프로세스들을 동시 실행하는 것에 대해 공부해왔다. 하지만, 하나의 프로세스가 여러 스레드로 구성될 수도 있다. Thread란? thread는 lightweigt process로 CPU 점유의 단위가 된다. 프로세스 내 각각의 thread는 program counter, register set, stack pointer로 구성된다. Multithreading Server는 multithread를 활용한다. 요청마다 스레드를 생성하여 처리를 위임한다면, 자원 소비도 줄이고 동시 처리도 용이하다! 멀티스레드 프로그래밍의 장점 프로세스의 응답성 향상 - 한 스레드가 blocking이거나 입출력으로 인해 작업이 진행되지 않더라도, 다른 스레드가 ..