250825

lililllilillll·2025년 8월 25일

개발 일지

목록 보기
274/350

✅ 한 것들


  • 면접을 위한 CS 전공지식 노트


📖 면접을 위한 CS 전공지식 노트


Chapter 1 디자인 패턴과 프로그래밍 패러다임

Section 1 디자인 패턴

라이브러리 : 제어 흐름이 프로그래머에게 있음
프레임워크 : 제어 흐름이 프레임워크에 있음
공통점 : 특정한 기능들을 모듈화

싱글톤 패턴

  • 클래스 하나에 인스턴스 단 하나
  • 독립적인 단위 테스트 만들기가 어렵다
  • 의존성 주입자를 따로 만들어 의존성 주입으로 모듈 간 결합도 줄일 수 있다

팩토리 패턴: 객체 생성 부분만 따로 떼내서 상위 클래스에선 뼈대, 하위 클래스에서 객체 생성 구체 내용 정하기
전략 패턴: 객체의 행위를 바꿀 때 코드에서 직접 if문 분기하지 않고 인스턴스화한 전략들을 바꿔서 행동 교체
옵저버 패턴: 어떤 객체의 상태가 변화하면 옵저버들한테 변화 알려줌
프록시 패턴: 객체 접근할 때 한 번 거쳐야 하는 객체를 만들어 접근을 필터링하거나 수정
이터레이터 패턴 : 여러 자료형을 iterator라는 하나의 인터페이스로 순회 가능

Section 2 프로그래밍 패러다임

객체 지향 프로그래밍

  • 객체들의 집합으로 프로그램의 상호작용 표현
  • 데이터를 객체로 취급하여 내부에 선언된 메서드를 활용
  • 설계 오래 걸리고 처리 속도 느림
  • 특징
    • 추상화 : 복잡한 시스템에서 핵심적인 개념 또는 기능을 요약
    • 캡슐화 : 객체의 속성과 메서드 일부를 외부에 감춤
    • 상속성 : 상위 클래스 특성을 하위 클래스가 이어받음. 코드 재사용, 계층 관계 생성, 유지 보수성.
    • 다형성 : 하나의 메서드나 클래스가 다양한 방법으로 동작. 오버로딩, 오버라이딩.

설계 원칙

  • 단일 책임 원칙 : 모든 클래스는 각각 하나의 책임만을 가져야 한다
  • 개방-폐쇄 원칙 : 확장에 대해 열려있고, 수정에 대해 닫혀있다
  • 리스코프 치환 원칙 : 부모 자리에 자식 객체를 넣어도 문제 없어야 함
  • 인터페이스 분리 원칙 : 하나의 일반적 인터페이스보다 구체적인 여러 개의 인터페이스 만들어라
  • 의존 역전 원칙 : 상위 계층은 하위 계층의 변화에 대해 독립시켜라

절차적 프로그래밍

  • 로직을 수행해야 할 연속적 계산 과정으로 구성
  • 코드의 가독성이 좋고 실행 속도 빠름
  • 모듈화가 어렵고 유지 보수성 떨어짐

Chapter 2 네트워크

Section 1 네트워크의 기초

네트워크 : 두 대 이상의 컴퓨터가 연결된 환경

  • 처리량(throughput) : 링크 내에서 성공적으로 전달된 데이터의 양
  • 대역폭(bandwidth) : 주어진 시간 동안 네트워크 연결을 통해 흐를 수 있는 최대 비트 수
  • 지연 시간(latency) : 어떤 메시지가 두 장치 사이를 왕복하는 데 걸린 시간

스푸핑 : LAN 상에서 패킷을 관련 없는 호스트에게 가지 않도록 하는 스위칭 기능을 마비시키거나 속여서 특정 노드에 해당 패킷이 오도록 처리하는 것

Section 2 TCP/IP 4계층 모델

TCP/IP 4계층

  • 애플리케이션 계층 : FTP/HTTP/SSH/DNS
  • 전송 계층 : TCP/UDP
  • 인터넷 계층 : IP/ARP
  • 링크 계층 : 이더넷

TCP

  • 패킷 사이 순서 보장, 수신 여부 확인
  • 연결 시작 : 3-way handshake. SYN - SYN+ACK - ACK
  • 연결 해제 : 4-way handshake. FIN - ACK - FIN - ACK (이거 보낸 쪽이 TIME_WAIT)

Section 3 네트워크 기기

라우터 : 여러 네트워크를 연결, 구분하는 기기

Section 4 IP 주소

ARP (Address Resolution Protocol)

  • IP 주소에서 MAC 주소를 구하는 프로토콜

IPv4 : 32비트를 8비트 단위로 점 찍어 표시. 123.45.67.89
IPv6 : 64비트를 16비트 단위로 콜론 찍어 표시. 2001:db8::ff00:42:8329

클래스 A,B,C : 일대일 통신에 사용.

  • A : 1바이트, B : 2바이트, C : 3바이트를 네트워크 주소에 사용

클래스 D : 멀티캐스트 통신에 사용
클래스 E : 예비용 주소

네트워크 첫 번째 주소 : 네트워크 주소
네트워크 마지막 주소 : 브로드캐스트용 주소
버리는 주소가 많아서 DHCP, IPv6, NAT 등장

  • DHCP : 접속 때마다 IP 주소 자동 할당
  • NAT : IP 주소를 다른 주소로 매핑

Chapter 3 운영 체제

Section 1 운영체제와 컴퓨터

운영체제 역할

  • CPU 스케줄링과 프로세스 관리
  • 메모리 관리
  • 디스크 파일 관리
  • I/O 디바이스 관리

운영체제 구조

  • 인터페이스(GUI, CUI)
  • 시스템콜 : 운영체제가 커널에 접근하기 위한 인터페이스. 실행하면 커널 모드로 진입.
  • 커널 : 드라이버, 파일 시스템 등

CPU

  • 산술논리연산장치, 제어장치, 레지스터로 구성됨
  • 인터럽트에 의해 단순히 메모리에 존재하는 명령어를 해석해서 실행
  • 레지스터 : CPU 안의 매우 빠른 임시기억장치
  • 산술논리연산장치(ALU) : 산술 연산, 논리 연산 담당
  • 연산 과정
    • 제어장치가 메모리와 레지스터에 계산할 값 로드
    • 제어장치가 레지스터에 있는 값 계산하라고 ALU에 명령
    • 계산한 값은 제어장치가 레지스터에서 메모리로 저장

인터럽트

  • 어떤 신호가 들어왔을 때 CPU 일시 정지
  • 인터럽트 벡터로 가서 우선순위에 따라 인터럽트 핸들러 함수 실행
  • 하드웨어 인터럽트 : 키보드 연결, 마우스 연결 등 IO 디바이스에서 발생
  • 소프트웨어 인터럽트(trap) : 프로세스 오류 등으로 프로세스가 시스템 콜 호출할 때 발생

DMA 컨트롤러 : IO 디바이스가 메모리에 직접 접근하게 하여 CPU 인터럽트 부하 막아줌

Section 2 메모리

메모리 계층

  • 레지스터 : CPU 안의 작은 메모리. 속도 가장 빠름. 기억 용량 가장 작음
  • 캐시(L1, L2 캐시) : L1은 CPU와 가깝고 L2는 CPU와 물리적 분리. 시간 지역성, 공간 지역성.
  • 메모리(RAM)/주기억장치
  • 저장장치(HDD, SSD)/보조기억장치

가상 메모리

  • 실제로 이용 가능한 메모리 자원을 추상화하여 프로세스가 메모리 혼자 쓰는 것처럼 착각하게 함
  • 가상 주소 : logical address, 실제 메모리 주소 : physical address
  • 가상 주소는 MMU에 의해 실제 주소로 변환
  • 페이지 테이블 : 가상 주소와 실제 주소 매핑
  • TLB(Translation Lookaside Buffer) : 페이지 테이블의 캐시
  • 가상 메모리에는 있는데 실제 메모리에 없으면 페이지 폴트 발생
    • 페이지 폴트 나면 trap이 발생되어 OS에 알림
    • OS는 실제 디스크에서 프레임 찾음
    • 실제 메모리에 가져와서 페이지 교체 알고리즘 기반으로 교체
    • 페이지 테이블 갱신시키고 명령어 다시 시작

스래싱(thrashing)

  • 페이지 폴트가 빈번하게 일어나는거
  • 해결
    • 적절한 페이지 교체 알고리즘 사용
    • 작업 집합 : 각 프로세스가 필요로 하는 페이지 집합 메모리에 유지
    • 물리 메모리 확장
    • 프로세스 조정 : 동시 실행 프로세스 수를 조정

메모리 할당

  • 연속 할당 : 프로세스 순서대로 할당
    • 고정 분할 방식 : 메모리를 미리 나누어 관리. 내부 단편화 (할당된 블럭이 사용할 용량보다 큼) 발생.
    • 가변 분할 방식 : 프로그램 크기에 맞게 동적으로 메모리 나눠 사용. 외부 단편화 (총 메모리는 여유 있는데 가용 단일 블럭 없음) 발생.
      • first fit : 가용 리스트 시작부터 검색해서 맞는 거 할당. 시간 오래 걸릴 수 있음.
      • next fit : 이전 검색 끝난 지점부터 시작. 메모리 사용률 낮을 수 있음.
      • best fit : 가장 작은 여유 블럭 검색. 단순한 리스트 구조에선 모든 블럭 검색해야 함.
      • worst fit : 제일 큰 여유 블럭 검색.
  • 불연속 할당 : 메모리를 연속적으로 할당하지 않음
    • 페이징 : 동일한 크기의 페이지 단위로 나눠 메모리 서로 다른 위치에 프로세스 할당.
    • 세그멘테이션 : 의미 단위인 세그먼트로 나눔. 코드, 데이터, 스택, 힙 영역.
    • 페이지드 세그멘테이션 : 세그멘테이션을 페이지 단위로 나눔.

페이지 교체 알고리즘

  • FIFO : 맨 처음 왔던 페이지를 먼저 교체
  • LRU : 참조가 가장 오래된 페이지 교체.
  • NUR(Not Used Recently, clock 알고리즘) : 시계 방향으로 돌면서 최근 참조 안된거 교체
  • LFU : 가장 적게 참조된 페이지 교체.

Section 3 프로세스와 스레드

프로세스 : 컴퓨터에서 실행되고 있는 프로그램

컴파일 과정

  • 전처리 : 주석 제거, 헤더 파일 병합
  • 컴파일러 : 어셈블리어 변환
  • 어셈블러 : 목적 코드로 변환
  • 링커 : 목적 코드랑 라이브러리 합쳐서 실행 가능한 파일로 변환

정적 라이브러리

  • 라이브러리가 제공하는 모든 코드를 실행 파일에 넣음
  • 시스템 환경 등 외부 의존도가 낮음
  • 코드 중복 등 메모리 효율성이 떨어진다

동적 라이브러리

  • 프로그램 실행 시 필요할 때만 DLL이라는 함수 정보를 통해 참조하여 라이브러리 사용
  • 메모리 효율성이 좋음
  • 외부 의존도가 높아진다

프로세스 메모리 구조

  • 스택 : 지역 변수, 매개변수, 실행되는 함수에 의해 늘어나거나 줄어듦.
  • 힙 : 동적으로 할당하는 변수들을 담음. vector는 내부적으로 힙 영역 사용.
  • 데이터 영역
    • bss : 초기값 설정 안 한 전역, 정적 변수
    • data : 초기값 설정 한 전역, 정적 변수
  • 코드 영역 : 프로그램 코드

PCB(Process Control Block, 프로세스 제어 블록)

  • 프로세스에 대한 메타데이터를 저장한 데이터
  • 프로세스 생성 시에 운영체제가 PCB 생성
  • 커널 스택 가장 앞부분에서 관리됨
  • PCB를 기반으로 컨텍스트 스위칭 일어남

스레드는 스택 영역을 제외한 모든 메모리를 공유하기 때문에 스레드 컨텍스트 스위칭은 비용이 더 적다

IPC(Unter Process Communication)

  • 프로세스끼리 데이터를 주고받음
  • 클라와 서버가 소통하는 것도 IPC의 예
  • 메모리가 완전히 공유되는 스레드보다는 속도가 떨어짐
  • 공유 메모리 : 여러 프로세스에 동일한 메모리 블럭에 대한 접근 권한 부여
  • 익명 파이프 : 임시 공간인 파이프로 단방향 데이터 주고받음
  • 명명된 파이프 : 단방향 또는 양방향 파이프. 여러 파이프 동시에 사용 가능. 프로세스끼리, 다른 네트워크 상 컴퓨터와 통신 가능.
  • 메시지 큐 : 메시지를 큐 형태로 관리

멀티프로세싱 : 메모리 공유 안 해서 서로 소통이 어렵지만 하나 터져도 안정적임
멀티스레딩 : 메모리를 공유해서 효율성 높지만 하나 터지면 다 터짐

공유 자원 : 시스템 안에서 각 프로세스, 스레드가 함께 접근할 수 있는 모니터, 프린터, 메모리, 파일, 데이터 등의 자원이나 변수

  • 경쟁 상태 : 공유 자원을 두 개 이상의 프로세스가 동시에 읽거나 쓰는 상황

임계 영역 : 둘 이상의 프로세스, 스레드가 공유 자원에 접근할 때 순서 등의 이유로 결과가 달라지는 코드 영역

  • 해결 방법 : 뮤텍스(상호 배제), 세마포어(한정 대기), 모니터(융통성)
  • 뮤텍스 : 프로세스나 스레드가 공유 자원을 락 언락
  • 세마포어 : 일반화된 뮤텍스. 공유 자원을 락 언락은 동일한데 세마포어가 신호 보내서 다른 프로세스가 사용.
    • 뮤텍스는 바이너리 세마포어지만 역은 성립 안 함
    • 카운팅 세마포어 : 여러 개의 값을 가질 수 있는 세마포어. 여러 자원 접근 제어.
  • 모니터 : 공유 자원을 숨기고 접근 인터페이스만 제공. 모니터큐로 작업 순차적 처리.

교착 상태(deadlock) : 두 개 이상의 프로세스가 서로의 자원을 기다리며 중단
원인

  • 상호 배제 : 한 프로세스가 자원을 독점하고 있으며 다른 프로세스는 접근 불가
  • 점유 대기 : 특정 프로세스가 점유한 자원을 다른 프로세스가 요청
  • 비선점 : 다른 프로세스의 자원을 강제적으로 가져올 수 없음
  • 환형 대기 : A는 B 자원 요구, B는 A 자원 요구

해결 방법

  • 자원 할당할 때 조건 성립하지 않게 설계
  • 자원 할당 그래프 알고리즘, 은행원 알고리즘 등을 사용한다
  • 교착 상태 발생하면 사이클 제거
  • 매우 드물게 발생하기 때문에 처리 비용 제거 위해 교착 상태 발생하면 작업 종료

Section 4 CPU 스케줄링 알고리즘

비선점형 : 프로세스 강제 중지 없음

  • FCFS(First Come, First Served) : 가장 먼저 온 것을 가장 먼저 처리
  • SJF(Shortest Job First) : 실행 시간이 가장 짧은 프로세스를 먼저 처리 (과거 실행 시간 토대로 추측)
  • 우선순위 : 오래된 작업일수록 우선순위 높임(aging)

선점형 : 프로세스를 중단시키고 다른 프로세스에 CPU 할당

  • 라운드 로빈(RR, Round Robin) : 각 프로세스는 동일한 할당 시간
  • SRF(Shortest Remaining Time First) : 중간에 더 짧은 작업 들어오면 해당 프로세스 실행
  • 다단계 큐 : 우선순위 큐 여러 개 사용하고 큐마다 다른 스케줄링 알고리즘

Chapter 4 데이터베이스

Section 1 데이터베이스의 기본

데이터베이스(DB) : 일정한 규칙 혹은 규약을 통해 구조화되어 저장되는 데이터 모음
DBMS(DataBase Management System) : 데이터베이스를 제어, 관리하는 통합 시스템

엔터티(entity) : 사람, 장소 등 여러 개의 속성을 지닌 명사. 회원이라는 엔터티는 아이디, 주소 등의 속성을 갖는다.
릴레이션(relation)

  • db에서 정보를 구분하여 저장하는 기본 단위
  • 회원 하나에 relation 하나
  • 관계형 데이터베이스에선 테이블이라고 함
  • NoSQL 데이터베이스에선 컬렉션이라고 함

속성(attribute) : relation에서 관리하는 구체적 정보
도메인(domain) : relation에 포함된 각각의 속성들이 가질 수 있는 값의 집합. 성별이면 남,녀

1:1 관계 : 유저당 유저 이메일은 한 개
1:N 관계 : 한 유저당 여러 개 상품 장바구니에 넣을 수 있음
N:M 관계 : 학생도 강의 여러 개, 강의도 학생 여러 명 가능. 학생_강의라는 테이블 따로 만들어짐.

유일성 : 중복되는 값이 없음
최소성 : 최소 필드만 써서 키 형성(복합키 있어도 하나로 되면 하나만)

  • 기본키(Primary Key) : 유일성, 최소성 만족
  • 외래키(Foreign Key) : 다른 테이블의 기본키를 그대로 참조
  • 후보키 : 기본키 될 수 있는 후보들. 유일성, 최소성 만족
  • 대체키 : 기본키가 아닌 후보키들
  • 슈퍼키 : 각 레코드를 유일하게 식별할 수 있는 유일성 만족

Section 2 ERD와 정규화 과정

제1정규화 : 한 칸에 데이터 하나만
제2정규화 : 기본키에 종속된거 다른 테이블로 빼기 (테이블 주제에 관련 없는거 다른 테이블로)
제3정규화 : 일반 컬럼에 종속된거 다른 테이블로 빼기
정규화할수록 수정 간편, 성능 하락(가능성 존재)

Section 3 트랜잭션과 무결성

트랜잭션 : 쿼리 하나로 묶는 단위, ACID 특성

  • 원자성(atomicity) : all or nothing
  • 일관성(consistency) : 허용된 방식으로만 데이터 변경 (0원 가진 놈이 송금 불가)
  • 격리성(isolation) : 트랜잭션 수행 시 서로 끼어들지 못함
  • 지속성(durability) : 성공하면 영원히 반영

격리 수준

  • READ_UNCOMMITTED : 아직 커밋 안된 것도 조회 가능
  • READ_COMMITTED : 커밋 안된 건 못 읽음. 수정은 가능.
  • REPEATABLE_READ : 트랜잭션이 수정한거 다른 트랜잭션이 수정 불가
  • SERIALIZABLE : 트랜잭션 순차 진행

격리 수준에 따라 발생하는 현상

  • phantom read : repeatable_read부터 나타남. 이전 조회엔 없었는데 이번 조회엔 새 데이터가 나타남.
  • non-repeatable read : read_committed부터 나타남. 이전 조회와 값이 다름.
  • dirty read : read_uncommitted부터 나타남. 커밋 안 된 거 읽음.

Section 6 조인의 종류

inner join : 두 테이블 모두 일치하는 행이 있는 부분만 표기
left outer join : 왼쪽 테이블 모든 행 표기
right outer join : 오른쪽 테이블 모든 행 표기
full outer join : 모두 표기

profile
너 정말 **핵심**을 찔렀어

0개의 댓글