면접을 위한 CS 전공지식 노트 - 디자인 패턴, 운영체제, 데이터베이스, 자료 구조, 네트워크, 개발자 면접
디자인 패턴, 네트워크, 운영체제, 데이터베이스, 자료 구조, 개발자 면접과 포트폴리오까지!
CS 전공지식 습득과 면접 대비, 이 책 한 권이면 충분하다!
개발자 면접에서 큰 비중을 차지하는 CS(Computer Science) 전공지식! 디자인 패턴부터 자료 구조까지 알아야 할 게 너무 많은데, 어떻게 준비해야 할까? 이 책은 디자인 패턴, 네트워크, 운영체제, 데이터베이스, 자료 구조 등 면접에 필요한 CS 전공지식을 모두 담고 있다. 200여 개의 그림과 코드로 이론을 자세히 설명하고, 실제 라이브러리에서 사용된 디자인 패턴 등으로 실무 활용법을 함께 다뤄 이론과 실무를 놓치지 않고 학습할 수 있도록 구성했다. 또한, 중요한 내용은 깊게, 덜 중요한 내용은 핵심만 설명하며, 책 곳곳에 70여 개의 용어 풀이도 담고 있다. 마지막으로 구글, 네이버, 카카오 등 탑티어급의 회사에 합격한 저자의 경험을 기반으로 한 포트폴리오 작성법과 챕터별 예상 질문, 면접 준비 노하우도 알려준다. 개발자 면접을 준비하거나 더 나은 개발자가 되기 위해 CS 전공지식을 배우고 싶다면 이 책으로 시작하자.
필자는 IT 대기업 면접을 준비할 때 “탄탄한 CS 전공지식이 필요하다.”라는 말을 듣고 수많은 전공 서적과 전공 강의들을 보며 CS 전공지식을 쌓으려고 노력했습니다. 그때는 무엇이 필요하고 필요 없는 지식인지 알 수 없어 다 외우려고 했지만 정말 많은 양이었기 때문에 너무 힘들었습니다. 또한, 인터넷에 있는 CS 전공지식들은 몇 개씩은 틀리기 마련이라 공부하다가 헷갈려서 다시 찾아보는 등의 어려움도 겪었습니다.
이 책은 그러한 문제점들을 해결하는 책입니다. 한 권만으로 CS 전공지식의 전반적인 내용을 학습할 수 있으며, 더 나아가 실제로 개발할 때 필요한 CS 전공지식을 담았습니다.
이 책의 장점은 다음과 같습니다.
? 면접에 나올 법한 CS 전공지식을 포함한 CS 전공지식의 전반을 다룹니다.
? 필자의 실제 개발 경험이 녹아 있어 이론에만 치우친 CS 전공지식이 아닌 이론과 실무가 아우러진 전공지식을 선사합니다.
? 필자의 수많은 면접 경험을 바탕으로 한 면접 노하우가 책 곳곳에 녹아 있습니다.
? 구글, 네이버, 카카오 등 탑티어급의 회사에 합격한 필자의 포트폴리오가 소개되며 포트폴리오 작성 노하우를 알려줍니다.
각 장은 다음과 같은 내용을 담고 있습니다.
? 1장에서는 디자인 패턴을 다룹니다. 이론뿐만 아니라 실제로 어떻게 디자인 패턴이 쓰이고 있는지를 서술했습니다. 예를 들어 ‘전략 패턴은 passport 라이브러리에서 사용된다’처럼 실무에서 어떻게 사용되고 있는지를 구체적으로 알려줍니다. 예시 코드로는 자바, 자바스크립트 두 가지의 언어로 구성했고, 코드의 난이도를 최대한 낮추면서도 디자인 패턴을 잘 표현하도록 노력했습니다.
? 2장에서는 네트워크를 다룹니다. 네트워크의 전반적인 내용을 설명하며 네트워크에서 중요한 IP, HTTP 부분은 따로 빼서 좀 더 자세하게 설명하여 중요한 부분은 깊게, 중요하지 않은 부분은 핵심만 설명합니다.
? 3장에서는 운영체제를 다룹니다. 운영체제의 핵심 요소 중 하나인 시스템콜이나 커널을 조금 더 쉽게 설명하고자 노력했으며, 프로세스와 스레드를 중심으로 설명합니다.
? 4장에서는 데이터베이스를 다룹니다. ERD나 트랜잭션, 인덱싱 등 데이터베이스에서의 중요한 부분들을 중점적으로 설명합니다.
? 5장에서는 자료 구조를 설명합니다. 먼저 시간 복잡도와 공간 복잡도를 설명하여 자료 구조의 기초를 알아보고 큐, 스택 등 필수적인 자료 구조를 전부 다룹니다.
? 6장에서는 필자의 포트폴리오를 중심으로 포트폴리오를 쓰는 팁과 인성 면접을 준비하는 팁을 알려줍니다.
이 책이 탄탄한 CS 전공지식을 갖춘 훌륭한 개발자가 되기 위한 첫걸음이 되길 바랍니다.
“이 책을 만들기까지 총 13명의 개발자 최범석(네이버 리서치 엔지니어), 김찬호(라인 백엔드 개발자), 이성준(쿠팡 시니어 소프트웨어 엔지니어), 남승원(당근마켓 백엔드 개발자), 이태훈(배달의 민족 백엔드 개발자), 이태우(휴먼스케이프 CTO), 송성빈(삼성전자 소프트웨어 엔지니어), 이승철(NHN 백엔드 개발자), 김인범(CNCITY 데이터 엔지니어 / MongoDB Korea 운영진), 김재엽(스타트업 데이터 엔지니어), 김건우(클래스101 백엔드 개발자), 조유빈(이스트소프트 IOS 개발자), 오규영(한전 KDN 소프트웨어 엔지니어) 님이 도와주셨습니다.
AI 핀테크 스타트업, 어비스의 리드 개발자이자 설립자이다. 이전에는 네이버의 로그 플랫폼 쪽에서 일했으며, 대한민국 공항, 공군에서 쓰는 실시간 모니터링 시스템을 만들었다. 국방부 등에서 군 SW 발전에 기여한 공로로 참모총장상, 사령관상, 단장상을 수상했으며 카카오 프런트엔드 챌린지 6위, 스타트업 해커톤 1위, 백준 알고리즘 상위 1%의 실력을 보유하고 있다. 자바스크립트 테스트 프레임워크 Mocha.js의 기여자(contributor)이며 『실시간 모니터링 시스템을 만들며 정복하는 MEVN』(비제이퍼블릭, 2021)을 집필했고, 인프런에서 ‘10주 완성 C++ 코딩 테스트’ 강의를 진행하고 있다.
블로그: https://blog.naver.com/jhc9639
유튜브: https://www.youtube.com/c/kundol/
1장. 디자인 패턴과 프로그래밍 패러다임
1.1 디자인 패턴
__1.1.1 싱글톤 패턴
__1.1.2 팩토리 패턴
__1.1.3 전략 패턴
__1.1.4 옵저버 패턴
__1.1.5 프록시 패턴과 프록시 서버
__1.1.6 이터레이터 패턴
__1.1.7 노출모듈 패턴
__1.1.8 MVC 패턴
__1.1.9 MVP 패턴
__1.1.10 MVVM 패턴
1.2 프로그래밍 패러다임
__1.2.1 선언형과 함수형 프로그래밍
__1.2.2 객체지향 프로그래밍
__1.2.3 절차형 프로그래밍
__1.2.4 패러다임의 혼합
예상 질문
2장. 네트워크
2.1 네트워크의 기초
__2.1.1 처리량과 지연 시간
__2.1.2 네트워크 토폴로지와 병목 현상
__2.1.3 네트워크 분류
__2.1.4 네트워크 성능 분석 명령어
__2.1.5 네트워크 프로토콜 표준화
2.2 TCP/IP 4계층 모델
__2.2.1 계층 구조
__2.2.2 PDU
2.3 네트워크 기기
__2.3.1 네트워크 기기의 처리 범위
__2.3.2 애플리케이션 계층을 처리하는 기기
__2.3.3 인터넷 계층을 처리하는 기기
__2.3.4 데이터 링크 계층을 처리하는 기기
__2.3.5 물리 계층을 처리하는 기기
2.4 IP 주소
__2.4.1 ARP
__2.4.2 홉바이홉 통신
__2.4.3 IP 주소 체계
__2.4.4 IP 주소를 이용한 위치 정보
2.5 HTTP
__2.5.1 HTTP/1.0
__2.5.2 HTTP/1.1
__2.5.3 HTTP/2
__2.5.4 HTTPS
__2.5.5 HTTP/3
예상 질문
3장. 운영체제
3.1 운영체제와 컴퓨터
__3.1.1 운영체제의 역할과 구조
__3.1.2 컴퓨터의 요소
3.2 메모리
__3.2.1 메모리 계층
__3.2.2 메모리 관리
3.3 프로세스와 스레드
__3.3.1 프로세스와 컴파일 과정
__3.3.2 프로세스의 상태
__3.3.3 프로세스의 메모리 구조
__3.3.4 PCB
__3.3.5 멀티프로세싱
__3.3.6 스레드와 멀티스레딩
__3.3.7 공유 자원과 임계 영역
__3.3.8 교착 상태
3.4 CPU 스케줄링 알고리즘
__3.4.1 비선점형 방식
__3.4.2 선점형 방식
예상 질문
4장. 데이터베이스
4.1 데이터베이스의 기본
__4.1.1 엔터티
__4.1.2 릴레이션
__4.1.3 속성
__4.1.4 도메인
__4.1.5 필드와 레코드
__4.1.6 관계
__4.1.7 키
4.2 ERD와 정규화 과정
__4.2.1 ERD의 중요성
__4.2.2 예제로 배우는 ERD
__4.2.3 정규화 과정
4.3 트랜잭션과 무결성
__4.3.1 트랜잭션
__4.3.2 무결성
__4.4 데이터베이스의 종류
__4.4.1 관계형 데이터베이스
__4.4.2 NoSQL 데이터베이스
4.5 인덱스
__4.5.1 인덱스의 필요성
__4.5.2 B-트리
__4.5.3 인덱스 만드는 방법
__4.5.4 인덱스 최적화 기법
4.6 조인의 종류
__4.6.1 내부 조인
__4.6.2 왼쪽 조인
__4.6.3 오른쪽 조인
__4.6.4 합집합 조인
4.7 조인의 원리
__4.7.1 중첩 루프 조인
__4.7.2 정렬 병합 조인
__4.7.3 해시 조인
예상 질문
5장. 자료 구조
5.1 복잡도
__5.1.1 시간 복잡도
__5.1.2 공간 복잡도
__5.1.3 자료 구조에서의 시간 복잡도
5.2 선형 자료 구조
__5.2.1 연결 리스트
__5.2.2 배열
__5.2.3 벡터
__5.2.4 스택
__5.2.5 큐
5.3 비선형 자료 구조
__5.3.1 그래프
__5.3.2 트리
__5.3.3 힙
__5.3.4 우선순위 큐
__5.3.5 맵
__5.3.6 셋
__5.3.7 해시 테이블
예상 질문
6장. 포트폴리오와 면접
6.1 포트폴리오
__6.1.1 첫 문장이 중요하다
__6.1.2 숫자로 말하라
__6.1.3 기술의 숙련도를 나눠서 표기하라
__6.1.4 리드미를 잘 작성하라
__6.1.5 오픈 소스 컨트리뷰터가 되자
__6.1.6 블로깅을 하자
6.2 면접
__6.2.1 꼬리에 꼬리를 무는 질문
__6.2.2 대답을 바꾸지 말자
__6.2.3 모르는 것은 모르는 것
__6.2.4 압박을 버텨라
__6.2.5 공식 사이트를 봐라
__6.2.6 또렷한 발음으로
__6.2.7 장점, 단점, 차이는 필수다
__6.2.8 업무를 예측하라
__6.2.9 체크리스트를 만들어 준비하라
__6.2.10 인성 면접