이 영역을 누르면 첫 페이지로 이동
천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

천천히 꾸준히 조용히.. i3months 블로그

Computer Science

  • 천천히 꾸준히 조용히
[Operating System] 커널 구조와 프로세스

[Operating System] 커널 구조와 프로세스

2025.03.12
운영체제의 코어 기능을 모아둔 커널을 구현할 때, 구현하는 방식에 따라 Monolithic Kernel과 Micro Kernel로 구분된다. 사용자 공간 - 응용 프로그램에서 실행되는 영역커널 공간 - 운영체제의 핵심 기능이 실행되는 영역 MonolithicKernel운영체제의 모든 핵심 기능이 하나의 커널 공간에서 실행되는 방식으로, Unix와 Linux는 Monolithic Kernel로 구성되어있다.마이크로 커널보다 실행 속도가 빠르지만 작은 에러가 전체 시스템에 전파될 수 있고 커널의 크기가 크다. MicroKernel운영체제의 핵심 기능을 최소화하고 나머지 기능을 사용자 공간에서 가져오는 커널 구조로, IoT 장치 등 작은 운영체제가 필요한 기기에서 사용된다.개발할 때 전체 커널을 다시 컴..
[Operating System] 운영체제 개요

[Operating System] 운영체제 개요

2025.03.10
소프트웨어는 프로그램을 포함하는 더 넓은 개념으로, 프로그램은 시작점이 되는 EntryPoint가 있어 혼자서도 실행될 수 있지만, 소프트웨어는 시작점이 없을 수 있다. 운영체제는 소프트웨어로 단순한 프로그램이 아니라 여러 프로그램, 드라이버, 라이브러리 등 다양한 구성 요소를 포함하는 소프트웨어의 집합이다.    운영체제는 하드웨어와 소프트웨어 사이에 위치해 사용자와 컴퓨터 간 인터페이스를 제공하는 시스템 소프트웨어이다. 운영체제는 컴퓨터의 리소스에 접근하고 관리해 사용자에게 여러 편리한 추상화를 제공한다. 저장소에 파일이 어떤 구조로 저장되어있고, 어떤 위치에 저장되어있는지 사용자가 알지 못해도 운영체제가 알아서 처리해주고, CPU 메모리 등 리소스의 사용량을 지속적으로 모니터링해 기록한다. Proc..
[Nginx] nginx.conf

[Nginx] nginx.conf

2023.12.28
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; keepalive_timeout 65; gzip on; server { listen 80; server_name 127.0.0.1; client_max_body_size 2M; location / { root /usr/share/nginx/html; i..
[Nginx] Timeout

[Nginx] Timeout

2023.12.24
엔진엑스에서의 타임아웃 설정은 크게 클라이언트 / 백엔드 두 가지로 나뉜다. 클라이언트 타임아웃 client_header_timeout 클라이언트가 HTTP 헤더를 서버로 전송하는데 걸리는 최대 시간을 지정한다. 연결이 너무 오래 걸려 서버 리소스를 과도하게 사용하는 연결을 끊어 서버를 보호하고, 의도적으로 헤더를 느리게 전송하는 방식의 공격을 방어한다. 기본 값은 60초이고, nginx.conf의 client_header_timeout 10s; 로 타임아웃 시간을 설정할 수 있다. client_body_timeout HTTP 요청 본문을 서버로 전송하는데 걸리는 최대 시간을 지정한다. header_timeout과 마찬가지로 기본적으로 60초로 설정되고 설정 파일을 통해 수정할 수 있다. 파일 업로드 같..
[Network] 백엔드 아키텍처

[Network] 백엔드 아키텍처

2023.12.21
Listener 네트워크를 통해 들어오는 연결 요청을 대기하고 수신하는 컴포넌트이다. 특정 IP주소와 포트에 바인딩된 소켓을 생성해 그 포트로 들어오는 네트워크 요청을 수신한다. 먼저 운영체제에서 제공하는 네트워크 API를 사용해 네트워크 소켓을 생성하고, 생성된 소켓을 특정 IP와 포트에 바인딩해 해당 소켓이 네트워크 요청을 수신할 수 있도록 한다. Acceptor Listener가 감지한 연결을 운영체제의 네트워크 API 중 accept를 사용해 수락한다. 연결이 수락되면 필요한 세션 정보를 초기화하고 클라이언트와의 통신을 준비한다. Reader 네트워크를 통해 전송된 데이터를 읽고 처리하는 컴포넌트로 데이터를 읽고 애플리케이션에서 사용할 수 있는 형태로 변환한다. 실제 네트워크 요청을 처리하는 컴포..
[Nginx] 내부 구조와 리버스 프록시

[Nginx] 내부 구조와 리버스 프록시

2023.12.21
엔진엑스는 정적 리소스를 제공하는 웹 서버로도 동작할 수 있고 여러 백엔드 서버로 로드밸런싱을 수행하는 리버스 프록시, 메일 프록시로도 동작할 수 있는 다재다능한 웹 서버이다. 리액트로 프론트엔드 웹 애플리케이션을 만들고 사용자들에게 배포 할 때 엔진엑스 웹 서버를 사용할 수 있다. npm build 명령어로 애플리케이션을 번들링하고 엔진엑스를 정적 리소스를 제공하는 웹 서버로 사용하는데, 이 때 root 지시어를 사용해 번들링된 파일이 위치한 디렉토리를 지정하고 모든 서버 요청을 index.html으로 리다이렉트하도록 설정해 SPA 라우팅을 처리한다. server { listen 80; server_name myapp.com; root /app/react/build; index index.html; l..
[Ubuntu] 셸 스크립트 프로그래밍

[Ubuntu] 셸 스크립트 프로그래밍

2023.09.11
리눅스에서 Shell은 사용자와 운영체제간의 상호작용을 중개하는 인터페이스로 사용자의 명령을 해석하고 명령에 따라 시스템을 제어한다. 우분투에서는 bash 라는 셸을 사용한다. 셸 스크립트 프로그래밍은 C언어와 유사한 점이 많다. 변수 / 반복문 / 제어문 등을 사용할 수 있고, 컴파일 하지 않고 바로 텍스트 파일 형태로 실행할 수 있다. 셸 스크립트에서 변수는 사용 전 미리 선언할 필요가 없고, 값을 할당함과 동시에 변수가 생성된다. 모든 변수는 문자열로 취급되며 대입 시 좌우 공백이 없어야 한다. 셸은 여러 환경 변수 값을 가지는데, echo $환경변수명 명령어로 특정 환경변수에 접근할 수 있다. 나머지 반복문, 변수 사용, 제어문 등은 일반 프로그래밍 언어와 비슷하니 필요할 때 찾아서 사용하자. 셸..
[HTTP] HTTP 쿠키와 세션

[HTTP] HTTP 쿠키와 세션

2023.06.12
서로 간의 통신을 위한 약속을 프로토콜이라고 한다. 웹에서 프로토콜은 주고 받을 데이터에 대한 형식을 정의한 것으로 생각하면 된다. 데이터를 주고받을 때, 어떤 형식으로 주고받을지 미리 협의 해 놔야 통신이 가능하다. HTTP (Hyper Text Transfer Protocol) 도 프로토콜의 종류 중 하나다. 1. Stateless HTTP는 상태를 유지하지 않는다. 따라서 같은 클라이언트가 같은 요청을 서버에게 2번 보내도 서버는 같은 클라이언트로부터 도착한 요청임을 알 수 없다. 따라서 쿠키와 세션을 사용해 사용자를 구분한다. 쿠키는 클라이언트의 브라우저에서 관리되는 작은 데이터 파일이다. 서버는 HTTP 응답 메세지를 보낼 때 헤더에 Set-Cookie 필드를 생성해 쿠키를 설정한다. 클라이언트..
[시스템 프로그래밍] Malloc Lab Explicit (2)

[시스템 프로그래밍] Malloc Lab Explicit (2)

2023.01.16
7. free 함수 구현 할당된 메모리를 가용 가능한 상태로 만드는 free 함수를 구현하자. free 함수는 반환할 블록의 위치를 인자로 받고 해당 블록의 가용 상태로 바꾸는 역할을 한다. 이제 다시 테스트를 돌려 보자. 성능에 변화가 없다 -_- 아마도 free로 블록을 가용 상태로 만들었지만 coalescing 작업을 수행하지 않아 가용 리스트에 free 된 블록이 들어가지 않아 아무 효과를 얻지 못하는 것 같다. 8. place 함수 수정 + free 함수 수정 free 함수에 coalesce 작업을 추가해 가용 리스트에 가용 블록을 넣어 주자. implicit에서 작성한 것처럼 place 함수를 수행할 때 블록을 나눌 수 있는 경우 나눠서 공간을 확보하자. implicit 때와 다르게 가용 리스..
[시스템 프로그래밍] Malloc Lab Explicit (1)

[시스템 프로그래밍] Malloc Lab Explicit (1)

2023.01.14
explicit 방식은 implicit 방식의 단점을 보완한다. 가용블록을 위와 같이 디자인한다. header 4바이트 / pred + succ 16바이트 / footer 4바이트로 총 24바이트의 크기를 가진다. pred와 succ 포인터를 통해 힙 공간 중 가용 가능한 공간들만 linked list 형태로 관리하는 방식을 사용한다. 할당된 블록은 위와 같이 디자인한다. (implicit과 동일) 가용 가능 블록들에 대해서는 prev와 succ포인터를 추가해야 해서 메모리를 조금 더 사용해야 하지만 그만큼의 이점이 있다. implicit 방식으로 first fit을 구현할 때는 최악의 경우 전체 블록을 모두 조사해야 가용 블록을 찾을 수 있지만, explicit 방식을 사용하면 조사 대상을 전체 블록 ..
[시스템 프로그래밍] Malloc Lab Implicit (2)

[시스템 프로그래밍] Malloc Lab Implicit (2)

2023.01.11
6. coalesce() 함수 구현 사용하는 이유는 위에서 살펴봤고.. 바로 구현해보자. 1. 이전 블록과 다음 불록이 모두 할당 된 상태 -> 합칠 수 없으니 그대로 반환한다. 2. 다음 블록이 가용 상태 -> 다음 블록과 합치고 반환한다. 3. 이전 블록이 가용 상태 -> 이전 블록과 합치고 반환한다. 4. 이전과 다음 모두 가용 상태 -> 둘 모두 합치고 반환한다. extend_heap 함수를 사용할 때 coalesce 함수를 호출하도록 설정했다. 다시 한 번 테스트 해 보자. 점수가 정말 낮지만 오류는 발생하지 않았다. 가용 블록을 합치지 않아 크기가 제대로 정렬되지 않았다고 생각한 게 맞았나보다. 이제 성능을 끌어올려보자. 7. place 함수 수정 place 함수로 블록을 할당할 때 할당할 크..
[시스템 프로그래밍] Malloc Lab Implicit (1)

[시스템 프로그래밍] Malloc Lab Implicit (1)

2023.01.10
이론에서 배운 것들을 활용해 Malloc Lab을 해결해보자. WSIZE : 메모리 블록의 header와 footer 크기이다. (word 크기) DSIZE : WSIZE의 두 배 크기. CHUNKSIZE : 초기 가용 블록의 크기와 힙을 확장할 때 사용되는 값이다. OVERHEAD : header와 footer를 더한 크기이다. MAX, MIN : 말 그대로.. 두 수를 비교한다. PACK : 크기(size)와 할당 비트(alloc)을 통합해 하나의 워드로 묶는다. header와 footer에 값을 저장 할 때 사용한다. GET : 포인터 p가 가리키는 위치에서 word 크기의 값을 읽어온다. PUT : 포인터 p가 가리키는 위치에서 word 크기의 값을 val 만큼 쓴다. GET_SIZE : head..
  • 최신
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • ···
    • 9
  • 다음

정보

천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

  • 천천히 꾸준히 조용히의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (622) N
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • C (25)
      • C++ (12)
      • Java (19)
      • JavaScript (15)
      • Python (1)
      • PHP (2)
    • Computer Science (103)
      • Machine Learning (28)
      • Operating System (18)
      • Computer Network (23)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
      • Compiler Design (0)
      • Computer Security (0)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Github Actions (0)
      • Amazon Web Service (8)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • Solutions (15) N
    • Logs (6)
    • 낙서장 (27)

최근 글

나의 외부 링크

메뉴

  • 홈
반응형

정보

i3months의 천천히 꾸준히 조용히

천천히 꾸준히 조용히

i3months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © i3months.

티스토리툴바