티스토리 뷰
1.1 하드웨어
: app(sw)가 구동되는 머신
: 내부 자원(CPU + Memory) + 외부 자원(I/O)(네트워크 IO, 저장장치 IO, 마우스 키보드 등)
1.2 소프트웨어
: 시스템 소프트웨어(OS) + 응용 소프트웨어
- 시스템 SW: OS 운영체제(CPU의 자원 관리 <- 스케쥴링 알고리즘)
- 응용 SW: 어플리케이션(=프로그램), shell
1.3 프로그램, 프로세스, 스레드
프로그램 | - 파일, 코드 등의 정적인 상태 |
프로세스 | - 프로그램이 자원을 할당 받아 활성화된 상태 - 실행 단위가 상대적으로 크고, - 하나의 프로그램에는 하나의 프로세스만 존재 - heap(바구니) + Stack(함수 호출) |
스레드 | - 프로세스 안의 작은 작업 단위 - 실행 단위가 상대적으로 작고 - 하나의 프로그램에 다수의 스레드 존재 가능 - 프로세스와 공유하는 heap - 각 스레드마다 추가로 PC(실행 위치) + 명령어 레지스터(실행 함수) + 스택 영역(실행 변수) 을 가짐 |
- 병렬적 처리를 위해 프로세스 or 스레드끼리 자원 할당에 관한 논의 ==> 따로 정리
- 프로세스에는 2가지 종류
=>Foreground Process (부모 O) + Background Process (부모 X)
- Daemon: 리눅스에서 의존/종속되지 않는 프로세스
- 우리도 모르게 동작중인 Background Process 를 리눅스에서는 Daemon 이라 부른다
- 리눅스 예시, 끝에 d 가 붙는 프로세스들이 모두 데몬을 뜻한다 : sshd, httpd, mysqld
2. OS 위 app 동작 원리
: 운영체제 (커널)은 커널 부팅 직후 초기화 프로세스를 시작 = 시스템에 필요한 프로세스가 자동으로 실행되는 단계
- 초기화 프로세스 (초기화 시스템명 : init 혹은 현대에는 systemd)
- 커널 부팅이 끝나면 (운영체제가 하드웨어의 모든 기능을 제어하게 되었을 때)
- 초기화 시스템은 구성 파일을 읽고 구성 상태에 따라 서비스와 프로세스를 시작
- 초기화 프로세스는 모든 프로세스의 시작점이자 가장 첫 프로세스이기 때문에 1번 PID가 부여 (pid = 1)
- 초기화 시스템 종류와 차이
- 과거 : SysVInit (프로세스명 init) ← Unix 에서 사용
- service (start / stop / restart) ← /etc/init.d
- 한번만 수행 후 종료 → 이후 개별 프로세스 추적 불가 - 현대 : SystemD (데몬 프로세스명 systemd) ← Linux Distributions(Ubuntu 등) 에서 사용
- systemctl (start / stop / **status** / restart) ← /etc/systemd/system/.service
- 한번 수행 후 계속 Daemon 형태로 떠있어서 이후 개별 프로세스 추적 가능
- 과거 : SysVInit (프로세스명 init) ← Unix 에서 사용
3. 컴파일과 인터프리팅: app 개발과 구동
- java기준
- Binary Code -> 머신에서 실행
- Compile: .java(java code) -> .class(bytecode)
- java Compile == javac - RunTime: .class(bytecode) -> Binary Code
- Interpreter == JVM
4. 연속성과 동시성
4.1 연속성: Blocking VS Non-Blocking
: 일반적으로 cpu가 멈추는 것을 기준으로 파악
- Blocking: 하나의 작업이 간간히 방해 받으면서 수행(이 때, 방해란 주기적인 프로그램 실행 상태를 확인하는 등의 행위)
- Non-Blocking: 하나의 작업이 어떠한 방해도 받지 않고 수행
특성 | Blocking | Non-Blocking |
작업 처리 방식 | 요청한 작업이 완료될 때까지 대기 | 요청한 작업을 보내고 바로 다른 작업 진행 |
예시 | - 파일 읽기 - 네트워크 요청에서 응답 대기 |
- 비동기 파일 읽기 - 네트워크 요청 후 다른 작업 진행 |
장점 | 구현이 간단 및 직관적 | 병렬 처리 가능 -> 높은 효율성 |
단점 | 다른 작업 진행 X | 코드가 복잡해질 수 있음 |
4.2 동시성: Synchronous VS Asynchronous
: 일반적으로 병렬 처리를 의미
- 동기(Synchronous): 순차적인 작업 처리
- 비동기(Asynchronous): 병렬적인 작업 처리(바꿔가면서 쓱싹) -> 작업 완료 시, 완료 응답(Call bock)을 받음
깨알 비교 사전
* .jar, .war: java기반 app에서의 아카이브 파일 형식
특징 | .jar(Java ARchive) | .war(Web ARchive) |
용도 | java 애플리케이션 or 라이브러리 배포 | java 웹 애플리케이션 배포 |
내용 | 클래스 파일, 리소스, 라이브러리 등 | 웹 애플리케이션의 웹 리소스 + 서블릿 관련 파일 |
구조 | 자유로운 구조(클래스와 리소스 포함) | 고정된 구조 |
실행 환경 | JRE에서 실행(터미널/명령어) | 웹 서버(Tomcat)에서 실행 |
구성 요소 | Java클래스, 라이브러리, 리소스 | 서블릿, JSP, HTML, JS, 이미지 등 |
배포 방식 | 로컬 파일 시스템에 배포 | 웹 서버에 배포(서버에서 동작) |
'ASAC > 정리용' 카테고리의 다른 글
[03-01] HTTP Cache (1) | 2024.12.18 |
---|---|
[02-02] 서버의 구성과 트래픽 (1) | 2024.12.18 |
[02-02] Web Application Framework (1) | 2024.12.17 |
[02-02] 직렬화-역직렬화 (0) | 2024.12.17 |
[02-01] 렌더링 최적화 전략 (0) | 2024.12.17 |
- Total
- Today
- Yesterday
- useCallback
- memo
- acas#acas7기
- useMemo
- ASAC
- asac7
- asac7#asac
- useReducer
- react
- asac#asac7기
- asac7기
- useLayoutEffect
- ssh
- useState
- useContext
- Nginx
- git
- acac
- useRef
- useEffect
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |