책소개
프로그램의 실행 원리를 이해하지 못한 채 ‘일단 작동만 하도록 만드는 것’과 정확하게 이해하고 ‘제대로 작동하도록 만드는 것’, 둘 중 어느 것이 더 쉬울까? 개발을 해 본 사람이라면 이미 답을 알고 있을 것이다. 제대로 작동하는 프로그램을 개발하려면 문제를 정의하고 해결할 수 있어야 한다. 문제의 해결은 곧 컴퓨터 과학에서 시작되며, 이것이 바로 수많은 기업에서 입사 지원자의 컴퓨터 과학적 지식을 검증하는 이유이다.
이 책은 취업과 이직, 기술 면접과 밀접한 컴퓨터 과학 전반(컴퓨터 구조, 운영체제, 자료구조, 네트워크, 데이터베이스)을 다루며, 실제 프로그래밍에 적용되는 구체적 사례와 친절한 설명을 통해 컴퓨터 과학이라는 방대한 주제를 한눈에 파악할 수 있도록 돕는다. 이 책을 통해 컴퓨터 과학에 대한 이해를 넓히는 것은 물론, 보다 나은 실무 능력과 역량을 갖춘 개발자로 한 단계 성장할 수 있을 것이다.
목차
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
찾아보기