저자 깃허브 : 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년 후의 나는 어떤 개발자
왜 프로그래밍을 시작, 최근 읽은 기술 책은, 본인의 강점은
프로젝트 일정 계산 팁, 리모트 워크
모르는 기술의 경우 학습 법, 불가능한 이슈를 수행 한다면, 논쟁이 벌어진다면
리더에게 필요한 것은, 바빠 보이는 상대방에게 꼭 도움을 청해야 한다면, 기술 스택 선택 기준
프로젝트의 빠른 호흡
회사에 궁금한 점
'보유 > 책' 카테고리의 다른 글
연봉 앞자리를 바꾸는 개발자 기술면접 노트 - 이남희 (2) | 2024.11.27 |
---|