프로그램의 실행 원리를 이해하지 못한 채 ‘일단 작동만 하도록 만드는 것’과 정확하게 이해하고 ‘제대로 작동하도록 만드는 것’, 둘 중 어느 것이 더 쉬울까? 개발을 해 본 사람이라면 이미 답을 알고 있을 것이다. 제대로 작동하는 프로그램을 개발하려면 문제를 정의하고 해결할 수 있어야 한다. 문제의 해결은 곧 컴퓨터 과학에서 시작되며, 이것이 바로 수많은 기업에서 입사 지원자의 컴퓨터 과학적 지식을 검증하는 이유이다.
이 책은 취업과 이직, 기술 면접과 밀접한 컴퓨터 과학 전반(컴퓨터 구조, 운영체제, 자료구조, 네트워크, 데이터베이스)을 다루며, 실제 프로그래밍에 적용되는 구체적 사례와 친절한 설명을 통해 컴퓨터 과학이라는 방대한 주제를 한눈에 파악할 수 있도록 돕는다. 이 책을 통해 컴퓨터 과학에 대한 이해를 넓히는 것은 물론, 보다 나은 실무 능력과 역량을 갖춘 개발자로 한 단계 성장할 수 있을 것이다.
Contents
CHAPTER 01 기술 면접과 실무를 위한 컴퓨터 과학
1 원리를 모르는 개발자는 뛰어난 개발자가 아니다
__일단 작동만 하는 코드 vs 제대로 작동하는 코드
__프로그램의 원리를 이해하기 위한 컴퓨터 과학
2 컴퓨터 과학 지도 그리기: 기술 면접에 대비하고 싶다면
__컴퓨터 과학은 키워드 암기 과목이 아니다
__책에서 다루는 내용: 대다수 직군에서 강조되는 지식
__책에서 다루지 않는 내용: 직군에 따라 중요성이 달라지는 지식
[추가 학습 NOTE] CS Note: 개발자를 위한 컴퓨터 과학 용어집
CHAPTER 02 컴퓨터 구조
1 컴퓨터 구조의 큰 그림
__컴퓨터가 이해하는 정보
__컴퓨터의 핵심 부품
__컴퓨터 구조 지도 그리기
2 컴퓨터가 이해하는 정보
__데이터 - 0과 1로 숫자 표현하기
__데이터 - 0과 1로 문자 표현하기
__명령어
3 CPU
__레지스터
__인터럽트
__CPU 성능 향상을 위한 설계
__파이프라이닝을 통한 명령어 병렬 처리
4 메모리
__RAM
__메모리에 바이트를 밀어 넣는 순서 - 빅 엔디안과 리틀 엔디안
__캐시 메모리
5 보조기억장치와 입출력장치
__RAID
__입출력 기법
[추가 학습 NOTE] GPU의 용도와 처리 방식
[기술 면접 TIP] 취업 멘토가 알려 주는 기술 면접 질문 15
CHAPTER 03 운영체제
1 운영체제의 큰 그림
__운영체제의 역할
__운영체제 지도 그리기
__시스템 콜과 이중 모드
2 프로세스와 스레드
__멀티프로세스와 멀티스레드
__프로세스 간 통신
3 동기화와 교착 상태
__동기화 기법
__교착 상태
4 CPU 스케줄링
__CPU 스케줄링 알고리즘
__리눅스 CPU 스케줄링
5 가상 메모리
__물리 주소와 논리 주소
__스와핑과 연속 메모리 할당
__페이징을 통한 가상 메모리 관리
__페이지 교체 알고리즘
6 파일 시스템
__파일과 디렉터리
__파일 시스템
[추가 학습 NOTE] 전원 버튼을 누르고 부팅이 되기까지
[추가 학습 NOTE] 가상 머신과 컨테이너
[기술 면접 TIP] 취업 멘토가 알려 주는 기술 면접 질문 25
CHAPTER 04 자료구조
1 자료구조의 큰 그림
__자료구조와 알고리즘
__시간 복잡도와 공간 복잡도
__자료구조 지도 그리기
2 배열과 연결 리스트
__배열
__연결 리스트
3 스택과 큐
__스택
__큐
4 해시 테이블
__해시 함수
__해시 충돌
5 트리
__트리의 순회
__트리의 종류
6 그래프
__그래프의 종류와 구현
__깊이 우선 탐색과 너비 우선 탐색
__최단 경로 알고리즘
[기술 면접 TIP] 취업 멘토가 알려 주는 기술 면접 질문 15
CHAPTER 05 네트워크
1 네트워크의 큰 그림
__네트워크의 기본 구조
__두 호스트가 패킷을 주고받는 과정
__네트워크 지도 그리기
2 물리 계층과 데이터 링크 계층
__이더넷
__유무선 통신 매체
__네트워크 인터페이스: NIC
__허브와 스위치
3 네트워크 계층 - IP
__IP의 목적과 특징
__IP 주소의 구조
__공인 IP 주소와 사설 IP 주소
__IP 주소의 할당
__IP 전송 특징의 보완: ICMP
__IP 주소와 MAC 주소의 대응: ARP
4 전송 계층 - TCP와 UDP
__TCP와 UDP의 목적과 특징
__TCP의 연결부터 종료까지
__TCP의 상태 관리
5 응용 계층 - HTTP의 기초
__DNS와 URI/URL
__HTTP의 특징과 메시지 구조
__HTTP 메서드와 상태 코드
__HTTP 주요 헤더
6 응용 계층 - HTTP의 응용
__쿠키
__캐시
__콘텐츠 협상
__보안: SSL/TLS와 HTTPS
7 프록시와 안정적인 트래픽
__오리진 서버와 중간 서버: 포워드 프록시와 리버스 프록시
__고가용성: 로드 밸런싱과 스케일링
__Nginx로 알아보는 로드 밸런싱
[추가 학습 NOTE] 웹 서버와 웹 애플리케이션 서버
[추가 학습 NOTE] 소켓 프로그래밍
[기술 면접 TIP] 취업 멘토가 알려 주는 기술 면접 질문 25
CHAPTER 06 데이터베이스
1 데이터베이스의 큰 그림
__데이터베이스와 DBMS
__파일 대신 데이터베이스를 이용하는 이유
__데이터베이스의 저장 단위와 트랜잭션
__데이터베이스 지도 그리기
2 RDBMS의 기본
__테이블의 구성: 필드와 레코드
__테이블의 관계
__무결성 제약 조건
3 SQL
__데이터 정의 언어(DDL)
__데이터 조작 언어(DML)
__트랜잭션 제어 언어(TCL)
4 효율적 쿼리
__서브 쿼리와 조인
__뷰
__인덱스
5 데이터베이스 설계
__ER 다이어그램
__정규화
6 NoSQL
__RDBMS vs NoSQL: NoSQL의 특징
__다양한 NoSQL: MongoDB와 Redis 맛보기
[추가 학습 NOTE] 데이터베이스 분할과 샤딩
[기술 면접 TIP] 취업 멘토가 알려 주는 기술 면접 질문 20
찾아보기
Author
강민철
강의와 책으로 지식을 나누고, 코드와 논문으로 지식을 발굴하는 개발자이자 연구자이다. 문제 해결과 집필을 즐기고, 조용한 산과 바다를 좋아한다.
강의와 책으로 지식을 나누고, 코드와 논문으로 지식을 발굴하는 개발자이자 연구자이다. 문제 해결과 집필을 즐기고, 조용한 산과 바다를 좋아한다.