프로세스의 메모리 구조 운영체제는 프로세스에 적절한 메모리를 할당한다. 메모리 구조는 동적 영역인 스택과 힙, 정적 영역인 데이터 영역과 코드 영역으로 나눠진다. 스택은 위 주소부터 할당되고 힙은 아래 주소부터 할당된다. 스택 지역변수, 매개변수, 함수가 저장되고 컴파일 시에 크기가 결정되며 '동적'인 특징을 갖는다. 함수가 함수를 재귀적으로 호출하면서 동적으로 크기가 늘어날 수 있는데, 이 때 힙과 스택의 메모리 영역이 겹치면 안되기 때문에 힙과 스택 사이의 공간을 비워 놓는다. 힙 동적 할당할 때 사용되며 런타임 시 크기가 결정된다. 예를 들어 벡터 같은 동적 배열은 당연히 힙에 동적 할당된다. '동적'인 특징을 갖는다. 데이터 영역 전역변수, 지역변수가 저장되고, 정적인 특징을 갖는 프로그램이 종료..
프로세스(Process)는 컴퓨터에서 실행되고 있는 프로그램을 말하며 CPU 스케줄링의 대상이 되는 작업이라는 용어와 거의 같은 의미로 쓰인다. 스레드(Thread)는 프로세스 내 작업의 흐름을 말한다. 프로그램이 메모리에 올라가면 프로세스가 되는 인스턴스화가 일어나고, 이후 운영체제의 CPU 스케줄러에 따라 CPU가 프로세스를 실행한다. 프로세스와 컴파일 과정 프로그램은 컴파일러가 컴파일 과정을 거쳐 컴퓨터가 이해할 수 있는 기계어로 번역되어 실행될 수 있는 파일이 되는 것을 의미한다. 전처리 소스 코드의 주석을 제거하고 #include 등 헤더 파일을 병합하여 매크로를 치환한다. 컴파일러 오류 처리, 코드 최적화 작업을 하며 어셈블리어로 변환한다. 어셈블러 어셈블리어는 목적 코드(object code..
메모리 관리 운영체제의 대표적인 할 일 중 하나가 메모리 관리이다. 컴퓨터 내의 한정된 메모리를 극한으로 활용해야 하기 때문이다. 가상 메모리 (virtual memory) 메모리 관리 기법의 하나로 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 이를 사용하는 사용자들에게 매우 큰 메모리로 보이게 만드는 것을 말한다. 가상적으로 주어진 주소를 가상 주소(local address)라고 하며, 실제 메모리상에 있는 주소를 실제 주소(physical address)라고 한다. 가상 주소는 메모리관리장치(MMU)에 의해 실제 주소로 변환되며, 이 덕분에 사용자는 실제 주소를 의식할 필요 없이 프로그램을 구축할 수 있다. 가상 메모리는 가상 주소와 실제 주소가 매핑되어 있고 프로세스의 주소 정보가 들어 있..

메모리 계층 레지스터, 캐시, 메모리, 저장장치로 구성되어 있다. 레지스터 : CPU 안에 있는 작은 메모리. 휘발성, 속도 가장 빠름, 기억 용량이 가장 적음. 캐시 : L1, L2 캐시를 지칭. 휘발성, 속도 빠름, 기억 용량 적음. 주기억장치 : RAM을 가리킨다. 휘발성, 속도 보통, 기억 용량 보통. 보조기억장치 : HDD, SDD를 일컬으며 휘발성, 속도 낮음, 기억 용량 많음. 램은 하드디스크로부터 일정량의 데이터를 복사해서 임시 저장하고 이를 필요 시마다 CPU에 빠르게 전달하는 역할을 한다. 계층 위로 올라갈수록 가격은 비싸지고 속도가 빨라지며 용량은 작아진다. 캐시 데이터를 미리 복사해 놓는 임시 저장소이자 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리이다..
1. 코루틴 코루틴(Coroutine)은 코틀린에서 비동기-논블로킹 프로그래밍을 명령형 스타일로 작성할 수 있도록 도와주는 라이브러리이다. 코루틴은 멀티 플랫폼을 지원하여 코틀린을 사용하는 안드로이드, 서버 등 여려 환경에서 사용할 수 있다. 코루틴은 일시 중단 가능한 함수(suspend function)를 통해 스레드가 실행을 잠시 중단했다가 중단한 지점부터 다시 재개(resume)할 수 있다. 코루틴을 사용한 구조적 동시성 예시 suspend fun combineApi() = coroutineScope { val response1 = async { getApi1() } val response2 = async { getApi2() } return ApiResult { response1.await() r..
1. R2DBC 1-1. R2DBC 이전 전통적인 방식의 JDBC(Java Database Connectivity) 드라이버는 하나의 커넥션에 하나의 스레드를 사용하는 Thread per Connection 방식 String selectSql = "SELECT * FROM employees"; try (ResultSet resultSet = stmt.executeQuery(selectSql)) { List employees = new ArrayList(); while (resultSet.next()) { Employee emp = new Employee(); emp.setId(resultSet.getInt("emp_id")); emp.setName(resultSet.getString("name")); e..
1. 스프링 WebFlux 1-1. 프로젝트 리액터 (Project Reactor) 리액티브 스트림의 구현체 중 하나로 스프링의 에코시스템 범주에 포함된 프레임워크 리액티브 스트림 사양을 구현하고 있으므로 리액티브 스트림에서 사용하는 용어와 규칙을 그대로 사용한다. 리액터를 사용하면 애플리케이션에 리액티브 프로그래밍을 적용할 수 있고 비동기-논블로킹을 적용할 수 있다. 함수형 프로그래밍의 접근 방식을 사용해 비동기-논블로킹의 난해함을 어느 정도 해결한다. 백프레셔(BackPressure)를 사용해 시스템의 부하를 효율적으로 조절할 수 있다. 1-2. 모노(Mono)와 플럭스(Flux) 리액터는 리액티브 스트림의 Publisher 인터페이스를 구현하는 Mono와 Flux라는 두 가지 핵심 타입을 제공한다...
1. 리액티브 프로그래밍 데이터 또는 이벤트의 변경이 발생하면 이에 반응해 처리하는 프로그래밍 기법이다. 비동기 프로그래밍을 처리하는 새로운 접근 방식 데이터의 통지, 완료, 에러에 대한 처리를 옵저버 패턴에 영감을 받아 설계되었고 데이터의 손쉬운 비동기 처리를 위해 함수형 언어의 접근 방식을 사용 1-1. 리액티브 프로그래밍 이전의 비동기 프로그래밍 대부분 콜백 기반의 비동기 처리 방식을 사용했다. fetch("/api/users/me") { user -> fetch("/api/users/${user.id}/followers") { followers -> fetch("/api/users/${user.id}/likes") { likes -> fetch("/api/uesrs/${user.id}/contac..
1. 동기와 비동기 프로그래밍 1-1. 동기 프로그래밍 (Synchronous Programming) 동기 방식의 프로그램에서 작업의 실행 흐름은 순차적으로 동작한다. 순차적으로 동작하기 때문에 코드를 파악하기 쉽고 디버깅이 쉽다. 특정 작업을 실행하는 동안에 다른 작업을 할 수 없다. fun main() { // 실시간 주식 정보를 가져온다. val stock: StockDto = getRealtimeStockData("APPLE") println("주식 심볼 : $(stock.symbol}") println("시가 : $(stock.price.open}") println("종가 : $(stock.price.close}") println("시가총액 : $(stock.price.marketCap}") }..

코틀린으로 Spring Boot, JPA 환경에서 개발 중에 다음 에러가 발생했다. nested exception is org.hibernate.InstantiationException: No default constructor for entity JPA Entity는 파라미터가 없는 기본 생성자가 필요한데 없어서 에러가 발생했다. 해결은 kotlin-jpa 플러그인을 추가해서 쉽게 해결할 수 있다. build.gradle.kts 파일에 추가하면 된다. apply(plugin = "kotlin-jpa")
- Total
- Today
- Yesterday
- 직접연관매핑
- 프로세스
- 프로그래밍
- 프로세스 컴파일
- 함수형 프로그래밍
- 대수확장성
- 정렬병합조인
- 스프링 R2DBC
- 프로그래밍 패러다임
- 코틀린
- 선언형 프로그래밍
- 중첩루프조인
- java
- Design Pattern
- 네트워크 기초
- 세컨더리인덱스
- 연관매핑
- 네트워크
- 프로세스와 스레드
- 보이스코드정규형
- 스레드
- 스프링 WebFlux
- 메모리 계층
- 디자인 패턴
- 직접매핑
- 캐시매핑
- 자바
- 인덱스최적화
- 불연속할당
- 클러스터형인덱스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |