프로세스(Process)는 컴퓨터에서 실행되고 있는 프로그램을 말하며 CPU 스케줄링의 대상이 되는 작업이라는 용어와 거의 같은 의미로 쓰인다. 스레드(Thread)는 프로세스 내 작업의 흐름을 말한다. 프로그램이 메모리에 올라가면 프로세스가 되는 인스턴스화가 일어나고, 이후 운영체제의 CPU 스케줄러에 따라 CPU가 프로세스를 실행한다. 프로세스와 컴파일 과정 프로그램은 컴파일러가 컴파일 과정을 거쳐 컴퓨터가 이해할 수 있는 기계어로 번역되어 실행될 수 있는 파일이 되는 것을 의미한다. 전처리 소스 코드의 주석을 제거하고 #include 등 헤더 파일을 병합하여 매크로를 치환한다. 컴파일러 오류 처리, 코드 최적화 작업을 하며 어셈블리어로 변환한다. 어셈블러 어셈블리어는 목적 코드(object code..
메모리 관리 운영체제의 대표적인 할 일 중 하나가 메모리 관리이다. 컴퓨터 내의 한정된 메모리를 극한으로 활용해야 하기 때문이다. 가상 메모리 (virtual memory) 메모리 관리 기법의 하나로 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 이를 사용하는 사용자들에게 매우 큰 메모리로 보이게 만드는 것을 말한다. 가상적으로 주어진 주소를 가상 주소(local address)라고 하며, 실제 메모리상에 있는 주소를 실제 주소(physical address)라고 한다. 가상 주소는 메모리관리장치(MMU)에 의해 실제 주소로 변환되며, 이 덕분에 사용자는 실제 주소를 의식할 필요 없이 프로그램을 구축할 수 있다. 가상 메모리는 가상 주소와 실제 주소가 매핑되어 있고 프로세스의 주소 정보가 들어 있..

메모리 계층 레지스터, 캐시, 메모리, 저장장치로 구성되어 있다. 레지스터 : CPU 안에 있는 작은 메모리. 휘발성, 속도 가장 빠름, 기억 용량이 가장 적음. 캐시 : L1, L2 캐시를 지칭. 휘발성, 속도 빠름, 기억 용량 적음. 주기억장치 : RAM을 가리킨다. 휘발성, 속도 보통, 기억 용량 보통. 보조기억장치 : HDD, SDD를 일컬으며 휘발성, 속도 낮음, 기억 용량 많음. 램은 하드디스크로부터 일정량의 데이터를 복사해서 임시 저장하고 이를 필요 시마다 CPU에 빠르게 전달하는 역할을 한다. 계층 위로 올라갈수록 가격은 비싸지고 속도가 빨라지며 용량은 작아진다. 캐시 데이터를 미리 복사해 놓는 임시 저장소이자 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리이다..
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}") }..
CPU(Central Processing Unit) 제어장치, 레지스터, 산술논리연산장치로 구성되어 있다. 인터럽트에 의해 단순히 메모리에 존재하는 명령어를 해석해서 실행한다. 관리자 역할을 하는 운영체제의 커널이 프로그램을 메모리에 올려 프로세스로 만들면 일꾼 역할의 CPU가 이를 처리한다. 제어장치(CU, Control Unit) 프로세스 조작을 지시하는 CPU의 한 부품이다. 입출력장치 간 통신을 제어하고 명령어들을 읽고 해석하며 데이터 처리를 위한 순서를 결정한다. 레지스터 CPU 안에 있는 매우 빠른 임시기억장치이다. CPU와 직접 연결되어 있어 연산 속도가 메모리보다 훨씬 빠르다. CPU는 자체적으로 데이터를 저장할 방법이 없어서 레지스터를 거쳐 데이터를 전달한다. 산술논리연산장치(ALU Ar..
운영체제(OS, Operating System)란? 사용자가 컴퓨터를 쉽게 다루게 해주는 인터페이스이다. 하드웨어와 소프트웨어를 관리하고 한정된 메모리나 시스템 자원을 효율적으로 분배해준다. 운영체제의 역할 CPU 스케줄링과 프로세스 관리 CPU 소유권을 프로세스에 할당하고, 프로세스의 생성과 삭제, 자원 할당 및 반환을 관리한다. 메모리 관리 한정된 메모리를 프로세스에 할당한다. 디스크 파일 관리 디스크 파일을 어떠한 방법으로 보관할지 관리한다. I/O 디바이스 관리 마우스나 키보드같은 I/O 디바이스와 컴퓨터 간에 데이터를 주고 받는 것을 관리한다. 운영체제의 구조 유저 프로그램과 하드웨어 사이에 [GUI, 시스템콜, 커널, 드라이버]의 구조로 되어있다. GUI가 없고 CUI만 있는 리눅스 서버도 있..
네트워크 분류 네트워크는 규모를 기반으로 분류할 수 있다. 개인이나 사무실 정도 규모의 LAN(Local Area Network), 시 정도의 규모인 MAN(Metropolitan Area Network), 세계 규모의 WAN(Wide Area Network)으로 나뉜다. LAN 근거리 통신망을 의미하며 좁은 공간에서 운영되며 전송 속도가 빠르고 혼잡하지 않다. MAN 대도시 지역 네트워크를 나타내며 넓은 지역에서 운영된다. 전송 속도는 평균이고 LAN보다는 더 많이 혼잡하다. WAN 광역 네트워크를 의미하며 국가 또는 대륙 같은 더 넓은 지역에서 운영된다. 전송 속도는 낮으며 MAN보다 더 혼잡하다. 네트워크 성능 분석 명령어 네트워크 병목 현상의 주된 원인들은 다음과 같다. 네트워크 대역폭 네트워크 ..
네트워크란? 노드(node)와 링크(link)가 서로 연결되어 있거나 연결되어 있지 않은 집합체를 의미한다. 여기서 노드란 서버, 라우터, 스위치 등 네트워크 장비를 말하고 링크란 유선 또는 무선을 말한다. 좋은 네트워크는 많은 처리량을 처리할 수 있으며 지연 시간이 짧고 장애 빈도가 적고 좋은 보안을 갖춘 네트워크이다. 처리량과 지연 시간 처리량(throughput)이란 링크를 통해 전달되는 단위 시간당 데이터양을 말한다. 단위는 bps(bits per second)이고 초당 전송 또는 수신되는 비트 수를 의미한다. 처리량은 트래픽, 네트워크 장치 간 대역폭, 네트워크 에러, 장치의 하드웨어 스펙에 영향을 받는다. 지연 시간(latency)이란 요청이 처리되는 시간을 말하며 어떤 메시지가 두 장치 사이..
프로그래밍 패러다임(Programming Paradigm)이란? 프로그래머에게 프로그래밍의 관점을 갖게 해주는 역할을 하는 개발 방법론이다. 예를 들어 객체지향 프로그래밍은 프로그래머들이 상호 작용하는 객체들의 집합으로 볼 수 있게 하는 반면에, 함수형 프로그래밍은 상태 값을 지니지 않는 함수 값들의 연속으로 생각할 수 있게 해준다. 여러 패러다임을 지원하는 언어로는 C++, 파이썬, 자바스크립트가 있으며 자바의 경우 jdk 1.8 이전은 객체지향 프로그래밍을 지원하고 이후부터 함수형 프로그래밍 패러다임을 지원하기 위해 람다식, 생성자 레퍼런스, 메서드 레퍼런스를 도입했고 선언형 프로그래밍을 위해 스트림(Stream)과 같은 표준 API 등도 추가됐다. 프로그래밍 패러다임은 크게 선언형, 명령형으로 나누..
- Total
- Today
- Yesterday
- 프로그래밍
- 대수확장성
- 연관매핑
- 스프링 R2DBC
- 프로세스와 스레드
- 프로세스 컴파일
- 프로세스
- 함수형 프로그래밍
- 불연속할당
- 보이스코드정규형
- 중첩루프조인
- 세컨더리인덱스
- 클러스터형인덱스
- 코틀린
- 자바
- 스프링 WebFlux
- 네트워크 기초
- 캐시매핑
- 정렬병합조인
- 디자인 패턴
- 네트워크
- 선언형 프로그래밍
- Design Pattern
- 인덱스최적화
- 직접매핑
- 스레드
- 메모리 계층
- 프로그래밍 패러다임
- java
- 직접연관매핑
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |