분류 전체보기

Computer Science/OS

[OS - 7] 프로세스 동기화

프로세스 동기화 프로세스(또는 스레드)는 동시에 그리고 병렬로 실행된다. CPU 코어는 각 프로세스를 빠르게 전환해 실행함으로써 프로세스는 동시에 실행된다. 또한 각 CPU 코어는 하나의 프로세스를 실행함으로써 프로세스는 병렬로 실행된다. 이 같은 동작 방식은 CPU 사용률을 높이지만 한 가지 문제가 있다. 두 개 이상의 프로세스가 공유 데이터에 동시 접근할경우 데이터의 일관성이 깨질 수 있다. 이와 같은 상황은 매우 빈번하게 발생한다. 아래는 예시 상황이다. 두 개 이상의 스레드가 힙 영역, 데이터 영역의 데이터에 동시 접근 두 개 이상의 프로세스가 파일, 메모리, 소켓, 외부 장치 등 컴퓨터 자원 또는 OS의 자원에 동시 접근 두 개 이상의 커널 모드 프로세스가 커널 자료구조(열린 파일 목록 리스트,..

Spring/Spring DB

트랜잭션

트랜잭션 트랜잭션은 DB가 수행하는 작업의 최소 단위이다. 즉 DB는 트랜잭션 단위로 작업을 수행한다. 트랜잭션에 대한 자세한 내용은 아래 글을 참고하자. https://gunjoon.tistory.com/96 [데이터베이스 - 7] 트랜잭션 회복과 동시성 제어 DBMS는 데이터베이스가 항상 정확하고 일관된 상태를 유지할 수 있도록 장애 발생 시 회복 기능과 동시성 제어 기능을 제공한다. 장애 발생 시 회복 기능을 통해, 여러 사용자 gunjoon.tistory.com DB 세션 클라이언트가 DB 서버와 커넥션을 맺게 되면 DB 서버는 세션을 만들고 커넥션을 통한 모든 요청은 생성된 세션을 통해 실행한다. 세션은 트랜잭션을 시작하고, 커밋 또는 롤백을 통해 트랜잭션을 종료한다. 그 후 새로운 트랜잭션을 ..

Spring/Spring DB

커넥션 풀

커넥션 풀의 필요성 JDBC로 DB에 접근하려면 먼저 커넥션(JDBC의 커넥션)을 획득해야한다. 커넥션을 새로 생성하는 과정은 아래와 같이 여러 작업이 수행되기에 많은 시간이 소모된다. DB에 접근할때마다 커넥션을 새로 생성한다면 아래의 두 가지 문제에 직면한다. 커넥션 생성에 시간이 소모되기에 요청에 대한 서버 응답 속도가 느려진다. 커넥션은 서버의 자원이다. 커넥션을 무한정 생성하면 서버의 자원이 고갈될 수 있다. 따라서 커넥션의 생성 개수를 제한해야 한다. 커넥션 풀을 사용한다면 위 두 가지 문제를 해결할 수 있다. 커넥션 풀 풀은 리소스를 보관하고 관리하는 공간이다. 풀에는 미리 생성된 리소스가 보관되어 있다. 애플리케이션은 풀에서 리소스를 가져와 사용하고 사용이 끝나면 풀에 반납한다. 즉 리소스..

Spring/Spring DB

JDBC

JDBC 애플리케이션에서 DB에 접근하기 위해 아래의 과정을 거친다. 첫 번째로 TCP/IP로 연결을 확립하고 두 번째로 DB 서버에 SQL을 전달한다. 마지막으로 DB 서버는 SQL 수행 결과를 응답한다. 이 과정을 위해 DB 사에서 전용 라이브러리를 제공하며 프로그래머는 해당 라이브러리로 위 과정을 구현한다. 하지만 DB의 종류는 무수히 많으며 DB에 따라 DB 접근 코드도 달라진다. DB 접근 코드를 바꾸지 않고도 DB를 바꿀 수 있는 방법이 없을까? 이를 위해 DB 접근 과정을 표준화한 JDBC가 등장했다. JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다. 즉 DB 접근 과정을 표준화한 인터페이스이다. 자바 개발자는 JDB..

Spring/Spring Test

JUnit5

JUnit5 JUnit5은 자바의 Unit 테스트 프레임워크이다. JUnit5을 사용해 자바 코드를 테스트 할 수 있다. 자바 8 이상 버전을 요구한다. JUnit5는 JUnit Platform, JUnit Jupiter, JUnit Vintage 3가지 모듈로 구성된다. JUnit Platform : JUnit Platform은 테스트를 발견하고 테스트 계획을 생성하는 테스트엔진 인터페이스를 정의하고 있다. Platform은 TestEngine을 통해서 테스트를 발견하고, 실행하고, 결과를 보고한다. JUnit Jupiter : Jupiter API로 테스트 코드를 작성하고 Jupiter API 기반의 테스트 코드를 실행하기 위한 테스트 엔진(Jupiter Engine)을 제공한다. Jupiter AP..

Computer Science/OS

[OS - 6] CPU 스케줄링

CPU 스케줄링 멀티 프로그래밍, 멀티 태스킹의 목적은 여러 프로세스를 동시에 실행해 CPU의 유휴 시간을 최대한 줄이는 것이다. 다중 코어 시스템에서는 모든 CPU 코어의 사용량이 최대가 되도록 유지하는 것으로 확장된다. 멀티 프로그래밍 환경에서 핵심은 CPU 자원의 스케줄링이다. CPU 스케줄링은 CPU(또는 CPU 코어) 할당을 기다리는 여러 프로세스 중에서 어떤 프로세스에게 CPU를 할당할지 선택하는 것을 말한다. 그리고 CPU 스케줄링을 수행하는 모듈을 스케줄러라고 한다. 그러면 어떻게 CPU 스케줄링을 해야 효율적일까? 이번 장에서는 여러 CPU 스케줄링 알고리즘을 알아본다. CPU - I/O 버스트 사이클 프로세스의 실행은 CPU 버스트와 I/O 버스트의 사이클로 구성된다. CPU 버스트는 ..

Spring/Spring MVC

API 예외 처리

API 서버는 예외 발생 시 각 예외 상황에 맞는 오류 응답 스펙을 정하고, 스펙에 맞는 데이터를 응답해야 한다. API 서버는 HTTP 요청 시 JSON 데이터를 응답한다고 가정한다. 서블릿 예외 처리 방식 서블릿 예외 처리 방식으로 예외 발생 시 API 응답 방식을 알아보자. 먼저 ErrorPage로 처리할 예외와 경로를 지정한다. package hello.exception; import org.springframework.boot.web.server.ConfigurableWebServerFactory; import org.springframework.boot.web.server.ErrorPage; import org.springframework.boot.web.server.WebServerFacto..

Spring/Spring MVC

예외 처리와 오류 페이지

웹 애플리케이션 동작 중 예외가 발생하면 예외를 처리하고 필요하다면 사용자가 알 수 있도록 오류 페이지를 응답하는 것이 좋은 웹 애플리케이션이다. 이를 위해 스프링 MVC의 예외 처리와 오류 페이지 응답 구조를 알아보자. 여기서 오류 페이지란 클라이언트에게 오류를 알리는 뷰(ex - html 문서)이다. 만약 뷰가 아닌 API로 정의된 데이터(ex - json)만을 응답해야하는 API 서버에서는 각 오류(예외) 상황에 맞는 오류 응답 스펙을 정하고 스펙에 맞는 데이터를 응답하면 된다. 예외 처리와 오류 페이지 응답 스프링 MVC는 톰캣과 같은 서블릿 컨테이너를 기반으로 동작하고 서블릿 컨테이너는 자바를 기반으로 동작한다. 따라서 스프링 MVC의 예외 처리 구조를 파악하려면 자바 예외 처리 - 서블릿 컨테..

gunjoon98
'분류 전체보기' 카테고리의 글 목록 (5 Page)