본문 바로가기

보유/책

면접을 위한 CS 전공지식 노트 - 주홍철

 

저자 깃허브 : https://github.com/wnghdcjfe/csnote

길번출판사 깃허브: https://github.com/gilbutITbook/080326

저자 유튜브채널: https://www.youtube.com/@kundol

 

디자인 패턴

라이브러리 공통으로 사용할 수 있는 특정한 기능을 모듈화 폴더명, 파일명 등의 규칙 없음 가위 : 내가 직접 컨트롤하여 자름
프레임워크 폴더명, 파일명 등의 규칙 있음 비행기: 이동하지만 내가 컨트롤 하지 않음

 

프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계등을 이용하여 해결할 수 있도록 "규약"형태로 만들어 놓은 것.

 

싱글톤 패턴

하나의 클래스에 오직 하나의 인스턴스를 만들어 다른 모듈들이 공유하여 사용

데이터베이스 연결 모듈

인스턴스 생성 비용 낮으나 의존성이 높아짐

TDD( Test Driven Development ) : 서로 독립적인 단위테스트가 어려움

모듈간의 강한 결합 : 의존성 주입 ( DI, Dependency Injection ) 으로 느슨하게 가능 : 디커플링

 

의존성 주입
원칙 상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 함, 추상화에 의존, 추상화는 세부 사항에 의존 하지 않음
장점 모듈 교체 쉬운 구조 (테스팅, 마이그레이션 용이), 추상화 레이어에 의한 의존성 방향 일관, 관계 명확
단점 클래스 수 증가로 인한 복잡성, 런타임 패널티

 

 

팩토리 패턴

객체를 사용하는 코드에서 객체 생성 부분 분리해 추상화한 패턴

상속관계: 상위클래스(빼대 : 커피 생산), 하위클래스(객체생성: 아메리카노, 라떼..) 

의존성 주입 ( 하위클래스에서 생성한 인스턴스를 상위 클래스에 주입 )

느슨한 결합, 유지 보수성 증가

 

 

전략 패턴=정책 패턴

객체의 행위를 바꾸고 싶은 경우 직접 수정이 아닌 캡슐화한 알고리즘(전략)을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하도록 하는 패턴

결제: 네이버페이, 카카오페이..

Node.js의  passport 라이브러리 ( 인증모듈구현 미들웨어 라이브러리 )

*컨텍스트: 어떠한 작업을 완료하는데 필요한 모든 관련 정보

 

옵져버 패턴

주체가 객체의 변화 상태를 관찰, 변화가 있을 때마다 옵저버 목록에 있는 옵저버들에게 알리는 패턴

트위터

Vue.js 3.0 : ref, reactive로 정의하면 값 변경시 자동으로 DOM갱신

이벤트 기반 시스템, MVC 패턴

상속 extends 부모클래스를 상속받아 자식클래스에서 추가 및 확장 일반 클래스, 추상 클래스
구현 implements 부모인터페이스를 자식클래스에서 재정의 구현 인터페이스 기반

 

 

프록시 패턴

대상 객체에 대한 접근을 가로채 필터링하거나 수정하는 등의 역할을 하는 계층이 있는 패턴

보안, 데이터검증,캐싱, 로깅

프록시 서버로도 활용 : CLOUDFLARE ( 프록시 서버 CDN서비스 ) , CORS(Cross-Origin Resource Sharing) 에러 해결

 

이터레이터 패턴

이터레이터(iterator)를 사용하여 컬렉션(collection)의 요소들에 접근하는 패턴 (자료형의 구조와 관계없음)

 

노출모듈 패턴

즉시 실행 함수를 통해 private, public 같은 접근 제어자를 만드는 패턴

자바스크립트의 CJS(CommonJS)모듈방식

 

MVC패턴

Model-View-Controller

React

Java Spring

 

MVP패턴

Model-View-Presenter

뷰와 프리젠터는 1=1관계로 MVC패턴보다 더 강한 결합

 

MVVM패턴

Model-View-View Model

뷰를 더욱 추상화한 뷰모델, 커맨드와 데이터 바인딩, UI를 별도의 코드 수정없이 재사용, 단위테스트 수월

Vue.js

 

 

프로그래밍 패러다임

프로그래밍 패러다임
선언형 명령형
함수형 객체지향형 절차지향형

 

자바  jdk1.8부터

람다식,생성자 레퍼런스,메서드 레퍼런스 : 함수형

스트림: 선언형

 

선언형-함수형

프로그램은 함수로 이루어진 것

순수 함수 : 출력이 입력에만 의존

고차 함수 : 함수가 함수를 값처럼 매개변수로 받아 로직 생성

                  일급 객체( 변수,메서드에 함수 할당가능, 함수의 매개변수로 함수 할당 가능, 함수가 함수를 반환 가능) 지원 언어만 가능

 

 

객체지향

객체들의 집합으로 프로그램의 상호작용 표현

데이터를 객체로 취급, 객체 내부에 선언된 메서드를 활용

추상화 abstraction 복잡한 시스템으로부터 핵심적인 개념, 기능을 추려내는 것
캡슐화 encapsulation 객체의 속성과 메서드를 하나로 묶고 일부를 외부에서 알수 없게 함
상속성 inheritance 상위 클래스의 특성을 하위 클래스가 이어받아 재사용, 추가, 확장 가능
다형성 polymorphism 메서드나 클래스가 다양한 방법으로 동작 : 오버로딩, 오버라이딩
오버로딩 overloading 같은 이름의 메서드가 여러개 : 메서드 타입, 매개변수의 유형, 개수 ( 컴파일: 정적 )
오버라이딩  overriding 메서드 오버라이딩 : 상위 클래스로부터 상속받은 메서드를 하위 클래스가 재정의 ( 런타임: 동적 )

   

설계원칙 SOLID

단일 책임 원칙
SRP, Single Responsibility Principle
모든 클래스는 각각 하나의 책임만 담당
개방-폐쇄 원칙
OCP, Open Closed Principle
 기존의 코드는 발 변경하지 않으면서 확장은 쉽게
리스코프 치환 원칙
LSP, Liskov Substitution Principle
 부모 객체에 상속된 자식 객체를 넣어도 시스템에 문제 없음
인터페이스 분리 원칙
ISP, Interface Segregation Principle
하나의 일반적인 인터페이스보다 구체적인 여러 개의 인터페이스를 만들어야 함
의존 역전 원칙
DIP, Dependency Inversion Principle
상위 계층은 하위 계층의 변화에 대한 구현으로 부터 독립

 

 

절차형 프로그래밍

로직이 수행되어야 할 연속적인 계산 과정

코드의 가독성이 좋고 실행 속도가 빠름

 

 

네트워크

기초

네크워크 : 노드(서버,라우터,스위치등) 와 링크(유선, 무선)로 서로 연결되어 리소스를 공유하는 집합

처리량(throughput) : 네크워크 내에서 성공적으로 전달되 데이터의 양,  bps( bits per second )

트래픽 : 특정 시점에 링크 내에 흐르는 데이터량

대역폭 : 주어진 시간 동안 네트워크 연결을 통해 흐를 수 있는 최대 비트 수

지연시간(latency)  : 어떤 메시지가 두 장치 사이를 왕복하는데 걸린 시간

링형(ring)토폴로지 : 회선에 장애가 발생하면 전체 네트워크에 크게 영향

메시(mesh)토폴리지 : 한 단말 장치에 장애가 발생해도 여러 개의 경로가 존재하므로 네트워크 계속 사용가능, 트래픽 분산 가능 

 

분류

 LAN -> MAN -> WAN

 

성능 분석 명령어

병목 현상의 주된 원인 : 대역폭, 토폴로지, 서버CPU 메모리 사용량, 비효율적인 네트워크 구성

ping
(Packet INternet Groper)
대상 노드를 향해 일정 크기의 패킷을 전송, 패킷 수신 상태, 도달 시간 확인
TCP/IP의 ICMP프로토콜이용
netstat 접속되어 있는 서비스들의 네크우워크 상태( 라우팅 테이블, 네트워크 프로토콜) 확인
주소 서비스 포트 확인
nslookup 특정 도메인에 매핑된 IP확인, DNS관련 확인
tracert traceroute, 목적지 노드까지의 네크워크 경로 확인

 

 

프로토콜 표준화

IEEE, IETF 제정

IEEE802.3 : 유선 LAN 프로토콜

 

TCP/IP

TCP/IP 4계층 OSI 7계층
애플리케이션 애플리케이션
프리젠테이션
세션
전송 전송
인터넷 네크워크
링크 데이터 링크
물리

 

( 전송 : 중계)

TCP : 패킷 사이의 순서를 보장, 연결지향 프로토콜, 신뢰성 : 가상회선 패킷 교환 방식

UDP : 순서,수신 여부 확인 안함, 단순 데이터 전송 : 데이터그램 패킷 교환 방식

TCP 연결 성립 과정 :  3-웨이 핸드셰이크 : SYN, SYN+ACK, ACK

ISN : 초기 네트워크 연결용 32비트 고유 시퀀스 번호

TCP 연결 해제 과정 : 4-웨이 핸드셰이크 : FIN_WAIT_1, CLOSE_WAIT, FIN_WAIT_2 , TIME_WAIT, CLOSED

 

( 인터넷 )

장치로부터 받은 네크워크 패킷을 IP 주소로 지정된 목적지로 전송

IP, ARP, ICMP

 

( 링크 )

실질적으로 데이터를 전달하며 장치 간에 신호를 주고받는 규칙

유선 LAN : IEEE802.3 : 전이중화 : 트위스트 페이 케이블 : UTP케이블 = LAN 케이블, RJ-45커넥터

                  광섬유케이블

무선 LAN : IEEE802.11 : CSMA/CD : 반이중화

 

이더넷 프레임

Preamble SFD DMAC SMAC EtherType Payload CRC
1byte 1byte 6byte 6byte 2byte   4byte

 

Preamble 이더넷 프레임의 시작
SFD ( Start Frame Delimiter) 다음 바이트부터 MAC주소 필드가 시작됨을 알림
DMAC, SMAC 수신, 송신 MAC주소
EtherType IP프로토콜
Payload 전달 받은 데이터
CRC 에러 확인 비트

 

캡슐화 - 비캡슐화

PDU ( Protocal Data Unit ) :  네크워크 계층에서 계층으로 데이터가 전달될 때의 한 덩어리 단위

 

 

네크워크 기기

애플리케이션 :  L7 : IP, Port,  L4 : IP, Port, URL, HTTP헤더, 쿠키 : 로드밸런서 : 정기적인 헬스 체크

인터넷 : 라우터 : 여러 개의 네크워크를 연결, 분할, 구분

  L2  L3 = 라우터
참조 테이블 MAC 주소 테이블 라우팅 테이블
참조 PDU 이더넷 프레임 IP 패킷
참조 주소 MAC 주소 IP 주소

 

데이터링크 : L2 : 패킷의 IP주소를 읽어 스위칭 : 브리지

물리 : NIC, 리피터(증폭), AP(복사)

 

 

IP주소

IP주소에서 ARP ( Address Resolution Protocol )를 통해 MAC주소를 찾아 MAC주소 기반으로 통신

hop by hop

게이트웨이 :  netstat -r 

 

 

HTTP

1.0 하나의 연결당 하나의 요청 처리
문제: RTT(패킷왕복시간) 증가
해결: 이미지 스플리팅, 코드압축, 이미지Base64인코딩 
1.1 하나의 연결 keep-alive옵션으로 여러요청 처리
문제: HOL Blocking(순차적이므로 대기발생), 무거운 헤더구조
2 멀티플렉싱: 여러 개의 스트림을 사용하여 송수신, 단일 연결로 병렬처리가능: HOL Blocking해결
헤더압축: 허프만 코딩
서버푸시: 클라이언트 요청없이 서버가 리소스를 푸시
HTTPS위에서 동작
SSL/TLS SSL1.0 -> SSL2.0 -> SSL3.0 -> TLS1.0 -> TLS1.3
Secure Socket Layer
Transport Layer Security Protocol
3 UDP기반의 QUIC위의 TLS
초기 연결 설정 시의 3-웨이 핸드셰이크 생략으로 지연 시간 감소

 

 

SEO

캐노니컬 설정

메타설정

페이지속도 개선

사이트맵 관리

HTTPS

 

 

운영체제

역할

CPU, 메모리, 디스크 파일, I/O디바이스 관리

 

modebit : 유저모드1, 커널모드0

유저모드: 유저가 접근 가능한 영역

커널모드: 모든 컴퓨터 자원에 접근

 

컴퓨터

커널: 프로그램을 메모리에 올려 프로세스 작성 → CPU : 메모리에 존재하는 명령어를 해석해서 실행

CPU 제어장치 입출력장치 간 통신제어, 명령어 읽고 해석, 데이터 처리 순서 결정
레지스터 CPU내의 매우 빠른 임시 기억장치
산술논리연산장치 디지털 회로
제어장치: 메모리, 레지스터에 계산 값 로드 → 산술논리연산장치 : 레지스터의 값 계산 → 제어장치 : 레지스터에서 메모리로 저장
DMA컨트롤러 IO디바이스가 메모리에 직접 접근 가능하도록 하는 하드웨어 장치, CPU부하감소
메모리 계층:  레지스터, 캐시, 메모리, 저장장치
타이머  
디바이스 컨트롤러 IO디바이스들의 작은 CPU

 

프로세스: 프로그램이 메모리에 올라가 인스턴스화 된 것

 

컴파일

 

전처리 소스 코드의 주석 제거, #include 등 헤더 파일을 병합하여 매크로를 치환
컴파일러 오류처리, 코드 최적화=> 어셈블리어로 변환
어셈블러 어셈블리어를 목적 코드로 변환
링커 목적코드와 라이브러리를 결합하여 실행파일 작성

 

 

프로세스의 메모리구조

동적 영역
( 런타임 )
스택 지역 변수, 매개변수, 함수
동적할당 변수: vector,  관리: malloc(), free()
정적 영역
( 컴파일 )
데이터 영역 BSS segment: 전역변수,  static, const 선언 0으로 초기화  or 비초기화 변수
Data segment: 전역변수,  static, const 선언 0이 아닌 값으로 으로 초기화
코드 영역 Code segment: 프로그램 코드

 

PCP ( Process Control Block ) : 프로세스에 대한 메타데이터를 저장한 데이터

 

데이터베이스

응용프로그램
DBMS
데이터베이스

 

릴레이션(Relation) : 데이터 데이스에서 정보를 구분하여 저장하는 기본 단위 = (관)테이블 = (NoSQL)컬렉션

관계형 데이터베이스 레코드 - 테이블 - 데이터베이스
NoSQL 도큐먼트 - 컬렉션 - 데이터베이스

 

속성(attribute) : 릴레이션에서 관리하는 구체적이며 고유한 이름을 갖는 정보

ex) 차 : 차 넘버, 바퀴 수, 차 색깔, 차종...

 

도메인(domain) : 속성들의 값의 집합

ex) 성별 : 남, 여

 

정규화

제1정규형 릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값만으로 구성
제2정규형 부분 함수의 종속성을 제거
제3정규형 이행적 함수 종속 ( A->B, B->C 이면 A->C ) 분해
보이스/코드 정규형

 

정규화로 성능이 나빠질 수도 있음, 비정규화도 필요

 

 

트랜잭션

논리적 기능을 수행하기 위한 작업의 단위

원자성 atomicity all or nothing
일관성 consistency 허용된 방식으로만 데이터를 변경햐야 함
격리성  isolation 트랜잭션 수행 시 서로 끼어들지 못함
지속성 durability 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함

 

인덱스최적화

1. 인덱스는 비용: 인덱스 리스트-> 컬렉션 순으로 탐색

2. 테스팅 : explain()

3. 인덱스 생성 순서 :  1) ==, equal  2)정렬  3) <,>   4)카디널리티(유니크한 값의 정도)가 높은 순서

 

조인

MySQL : JOIN 

MongoDB : lookup <-성능이 떨어지므로 되도록 사용하지 않음

 

 

자료구조

효율적으로 데이터를 관리하고 수정,삭제,탐색,저장할 수 있는 데이터 집합

 

자료구조에서의 시간 복잡도

평균

 

최악

 

 

선형자료구조

접근(참조) :  배열 > 연결리스트

추가,삭제  :   연결리스트 > 배열

벡터 : 동적 배열

스택, 큐 : 삽입,삭제 O(1),  탐색 O(n)

 

비선형자료구조

그래프 :  정점, 간선, 가중치    

트리 : 

힙 : 완전 이진 트리 기반, 최대합, 최소합

우선순위 큐 : 

맵 :  키,값

셋 : 특정 순서에 따라 유니크값만 저장

해시테이블 : 

 

 

포트폴리오와 면접

포트폴리오

첫 문장이 중요 ( Intro ) : 한 줄로 자신을 표현, 장점 세가지

숫자로 말하라 ( About ) 

기술의 숙련도를 나눠서 표기

리드미 잘 작성

오프 소스 컨트리뷰터

블로깅

 

면접

꼬리에 꼬리를 무는 질문 : 나는 내 전문 분야에 어느 정도의 시간과 돈을 투자했는가?

MongoDB : NoSQL DB, 12바이트의 ObjectID의 도큐먼트, 리플리카셋은 최소 3대의 서버

ESM : import, export

CJS : require, exports

 

대답을 바꾸지 말자

모르는 것은 모르는 것

압박을 견뎌라

공식 사이트를 분석

또렷한 발음

장점, 단점, 차이는 필수 : TypeScript의 type, interface의 차이

업무를 예측

체크리스트를 만들어 준비

인성면접 : 1분동안 자기소개, 팀원 간 의견 불일치 경험 해결경험, 가장 큰 영향의 프로젝트, 10년 후의 나는 어떤 개발자

               왜 프로그래밍을 시작, 최근 읽은 기술 책은, 본인의 강점은

               프로젝트 일정 계산 팁, 리모트 워크

               모르는 기술의 경우 학습 법, 불가능한 이슈를 수행 한다면, 논쟁이 벌어진다면

               리더에게 필요한 것은, 바빠 보이는 상대방에게 꼭 도움을 청해야 한다면, 기술 스택 선택 기준

               프로젝트의 빠른 호흡

               회사에 궁금한 점

 

반응형