전체 글(151)
-
객체 지향 설계와 스프링
자바 진영의 추운 겨울과 스프링의 탄생 EJB(Enterprise Java Beans) 2000년대 초반 자바 표준 기술 Entity Bean : ORM 기술 이론이 좋고, 기능이 많았으나 어렵고, 느리고, 비쌈 POJO(Plain Old Java Object) : 순수한 자바로 돌아가자 스프링 EJB 컨테이너 대체 단순함의 승리 현재 사실상 표준 기술 하이버네이트 EJB 엔티티 빈 기술을 대체 JPA(Java Persistence API) 새로운 표준 정의 스프링 역사 2002년 로드 존슨 책 출간 EJB 문제점 지적 EJB 없이도 충분히 고품질의 확장 가능한 애플리케이션을 개발할 수 있음을 보여주고, 30000라인 이상의 기반 기술을 예제 코드로 선보임 스프링 핵심 개념과 기반 코드 BeanFacto..
2023.09.26 -
메인 메모리 관리
메모리란 무엇인가? 메모리란 주소(Address)를 통해 접근할 수 있는 저장 장치 주소는 메모리상의 서로 다른 위치를 구분하기 위한 숫자 32비트 시스템 2^32 개만큼의 메모리 위치 구분 가능 2^32 bytes의 메모리 공간 사용 가능 64비트 시스템 2^63 개 만큼의 메모리 위치 구분 가능 2^64 bytes의 메모리 공간 사용 가능 주소 바인딩(Address Binding) 메모리의 논리 주소와 물리 주소를 연계하는 작업 논리주소(Logical Address) 프로세스가 메모리에 적재될 때 할당되는 가상의 (독자적인) 위치 물리주소(Physical Address) 프로세스가 실제 배치되는 메모리상의 위치 주소 바인딩의 방식 Compile Time Binding 프로세스가 적재될 메모리 위치를 ..
2023.09.26 -
데드락
식사하는 철학자 문제 식사하는 철학자 문제 (Dining philosophers problem) 5명의 철학자(philosopher)가 둥근 탁자에 둘러앉아 있고 탁자 중앙에는 밥 한 공기가 있다. 총 5개의 젓가락이 철학자 사이마다 있다. 철학자는 식사를 하거나 생각한다. 생각할 때는 젓가락이 필요 없다. 식사를 하려면 자신의 왼쪽, 오른쪽에 있는 젓가락을 들어야 한다. 철학자 : 협력적 스레드(혹은 프로세스) 중앙 밥공기 : 각 스레드가 처리하고자 하는 자신의 작업 젓가락 : 공유 자원(혹은 공유 데이터) 젓가락에 대한 상호 배제 보장 필요 철학자 스레드를 위한 루틴 순서 일단 생각을 하다가 배가 고파서 밥을 먹기로 한다. 밥을 먹기 위해 자기 위치의 좌우 젓가락을 집는다. 밥을 먹는다. 배가 부르니..
2023.09.26 -
동기화 응용
컨디션 변수 스레드 실행 중간 조건 검사 부모 스레드가 작업을 시작하기 전 자식 스레드가 작업을 끝냈는지 알고 싶다면? 회전(spin) 기반 공유 변수 활용 but 바쁜 대기 문제가 남음 컨디션 변수(Conditional variable) 일종의 큐 자료 구조 어떤 실행의 상태(또는 어떤 조건)가 원하는 것과 다를 때, 조건이 참이 되기를 기다리며 스레드가 대기할 수 있는 큐 스레드의 바쁜 대기 문제를 해결할 수 있음 pthread_cond_t c; 컨디션 변수 c 정의] pthread_cond_wait(pthread_cond_t *c, pthread_mutex *m) 스레드가 스스로를 재우기(sleep) 위하여 호출 mutex lock변수 m의 락을 해제하고, 스레드를 잠재움 다른 스레드로부터 시그널을..
2023.09.26 -
동기화(Synchronization)
협력적 프로세스(Cooperating Process) 협력적 프로세스란? 동시에 실행되며 서로 영향을 끼치는 프로세스들 데이터를 공유하는 프로세스들 동시 처리 (concurrent processing) 협력적 프로세스들이 동시에 공유 데이터에 접근해서 연산작업을 수행하는 것 하나의 프로세스에 의해 데이터 접근 및 조작을 동일한 데이터에 접근한 기존 프로세스의 연산 작업에 영향을 끼침 데이터 불일치(data inconsistency) 협력적 프로세스들이 서로 다른 공유 데이터 값을 가지고 연산 작업을 처리 통제되지 않은 협력적 프로세스 실행 순서에 의해 발생 은행 공유 계좌 문제 입금 및 인출을 위한 협력적 프로세스 처리 두 개의 협력적 프로세스 A와 B가 은행 공유 계좌에 접근 프로세스 A는 계좌에 돈을..
2023.09.16 -
CPU 스케쥴링
스케쥴링 개요 스케쥴링이 필요한 이유? 제한된 컴퓨팅 자원 위에서의 멀티 프로세싱을 해야 하기 때문 단일 CPU코어에서는 한 시점에 오직 하나의 프로세스만 처리 가능 CPU 스케쥴링 레디큐에 있는 프로세스 중 하나를 선택하여 CPU 자원 할당 스케쥴링 수행 시점 프로세스가 running 상태에서 waiting상태로 변경될 때 프로세스가 running 상태에서 ready상태로 변경될 때 프로세스가 waiting 상태에서 ready상태로 변경될 때 새로운 프로세스가 ready 상태가 될 때 running상태의 프로세스가 종료될 때 비선점 스케쥴링(Nonpreemptive scheduling) Running 상태의 프로세스가 waiting상태로 바뀌면 트리거링 Running 상태의 프로세스가 종료되면 트리거링..
2023.09.16