※ 컴퓨터 구조란?
: "컴퓨터가 어떻게 동작하는지" 이해하기 위해서 구조를 파악해야 한다.
구조를 알면 알 수 있는 내용(일부분)
- 코드가 메모리에 올라가고, CPU가 어떻게 처리하는지 알면 성능 최적화에 유리하다.
- 배포된 서버에서 장애가 생겼을 때 원인을 추측할 수 있다.
- JVM이 어떻게 메모리를 쓰는지도 알 수 있다.
컴퓨터 구조 개념 설명
- CPU
: 계산하고 명령을 처리하는 두뇌이다.
: 코드가 실행되는 핵심 부품이다.
실무 예시
: 서버가 느려졌을 때 명령어(top, htop)로 CPU 사용률을 확인할 수 있다.
: 병렬 처리할 때 CPU 코어 수에 따라 멀티스레드 효과가 달라진다.
: Java에서 Thread.sleep()은 CPU를 쉬게 하고, while(true) 같은 코드가 CPU를 계속 점유하면 과부하로 이어진다.
- 메모리(RAM)
: 임시 저장 공간이며, 실행중인 프로그램이 사용하는 작업 공간이다.
실무 예시
: 서버에 프로그램 배포 시 메모리 부족으로 인한 Out Of Memory(OOM) 발생 가능성이 있다.
: DB 쿼리로 너무 많은 데이터를 한 번에 가져오면 부족 현상으로 메모리가 터진다.
--> 데이터는 페이징 처리로 해결을 하면 된다. ex) LIMIT 20 OFFSET 0
- 보조기억장치(SSD, HDD 등)
: 파일 저장소, DB(데이터), 로그파일, 실행파일 등을 저장한다.
- 명령어
: CPU가 이해하는 단위 명령어를 뜻한다.
: 우리가 작성한 자바 코드 --> 컴파일 --> 명령어(컴퓨터가 알아 먹는)로 바꾼다.
- 레지스터
: CPU 안에 초고속 임시 메모리 저장 공간이다.
: 데이터 처리 속도를 향상 시킨다.
실무 예시
: 우리가 직접 다루진 않지만, 컴파일러가 성능 최적화(loop 안의 변수를 캐싱 등)할 때, 캐시 관련 최적화 한다.
: 고성능 연산 라이브러리(ex) Numpy) --> 내부적으로 CPU 캐시 활용 최적화가 핵심이다.
- 캐시메모리
: CPU와 메모리 사이의 중간 저장소이다.
: CPU -> 메모리 || CPU -> 캐시 -> 메모리 - 속도 차이를 극복하고, 성능을 향상시킨다.
실무 예시
: 우리가 직접 다루진 않지만, 컴파일러가 성능 최적화(loop 안의 변수를 캐싱 등)할 때, 캐시 관련 최적화 한다.
: 고성능 연산 라이브러리(ex) Numpy) --> 내부적으로 CPU 캐시 활용 최적화가 핵심이다.
- 시스템 버스
: 데이터 이동 통로이다.
: 부품끼리 어떻게 연결되는지 이해할 수 있다.
※ 운영체제란!?
: 여러 프로그램이 서로 안 부딪히게, 자원(CPU, 메모리 등)을 나눠쓰도록 관리하는 소프트웨어이다.
- 프로세스
: 실행중인 프로그램 하나이다.
: 서버에서 여러 백엔드 애플리케이션을 동작한다.
실무 예시
: Java Spring 웹 서버도 내부적으로 멀티 스레드 기반으로 동작한다.
-> 동시에 여러 요청을 처리한다.
: Redis, Nginx, Tomcat 모두 프로세스/스레드 기반으로 동작.
: 로그 보면 "PID"가 찍혀 있는 경우가 많다. (PID = 프로세스 ID)
- 스레드(Thread)
: 프로세스 안의 작업 단위이다.
: 동시에 처리할 때 사용 (동시 = 멀티스레드)
- CPU 스케줄링
: CPU를 누가 먼저 사용할 지 정해준다.
: 서버 성능, 응답 속도에 영향을 준다.
실무 예시
: 너무 많은 연산 작업을 요청하면 느려진다.
- OS가 프로세스에 CPU를 안 준다.
- 동기화
: 여러 스레드가 하나의 데이터에 접근하는 것을 말한다.
: 멀티스레드 프로그램에서 중요하다.
실무 예시
: 게시글 좋아요, 조회수 증가 --> 여러 요청이 동시에 들어오면 race condition 발생 가능하다.
: synchronized, Lock, AtomicInteger, Redis 등의 분산락을 활용해서 충돌을 방지해준다.
- 인터럽트
: 예외/특별한 상황시 CPU 처리를 요청한다.
: 서버가 이벤트 처리하는 흐름과 관련이 있다.
실무 예시
: 자바에서 Thread.interrupt() 사용하면, 긴 작업 중단이 가능하다.
- 메모리 관리
: 메모리를 프로세스마다 효율적으로 분배한다.
: 메모리 누수 방지, GC(Garbage Collection) 이해할 때 필요하다.
**GC(Garbage Collection)
: 자바 언어에서 new로 만든 객체(메모리)를 직접 지우지 않아도 GC가 대신 "안 쓰는 메모리"를 찾아서 정리한다.
- 가상메모리
: 실제보다 더 큰 메모리처럼 사용하는 방식이다.
: 메모리 부족 문제를 해결해 준다.
- 시스템 콜
: 사용자 프로그램 <-> 운영체제 요청 인터페이스
- 파일 읽기/쓰기, 네트워크 사용 등 핵심 기능을 연결한다.
**시스템 콜(System Call)
: 자바나 파이썬으로 코드작성한다고 해도, 파일을 읽거나, 네트워크를 쓰거나, 메모리 요청시
운영체제의 도움이 필요하다. ("운영체제야 ~~해줘")
'컴퓨터구조 & 운영체제' 카테고리의 다른 글
| *운영 체체(+주홍철)_복습(3) (0) | 2025.10.21 |
|---|---|
| ※ 운영 체체(+주홍철)_복습(2) (1) | 2025.08.30 |
| 운영 체체(+주홍철)_복습(1) (3) | 2025.08.24 |
| 컴퓨터 구조&운영 체제 - 00 (0) | 2025.04.17 |