본문 바로가기
면접을 위한 CS 전공지식 노트

2022.07.11

by 치우치지않는 2022. 7. 12.

p1~p50

라이브러리 : 공통으로 사용 가능한 특정 기능들을 모듈화한 것. 프레임 워크에 비해 규칙이 없고 자유로움. ex 가위 (내가 직접 컨트롤)

프레임워크: 공통으로 사용 가능한 특정 기능들 모듈화한 것(라이브러리랑 똑같 ㅇㅇ) 폴더명, 파일명에 규칙이 있고 좀 더 엄격. (비행기는 도구이지만 내가 비행기를 컨트롤할 수 없고 나는 가만히 앉아 있는)

 

라이브러리, 프레임워크의 기본 = 디자인 패턴. 어떤 방식으로 로직 구성해야 하는지 = 프로그래밍 패러다임 

디자인 패턴 = 프로그램 설계 시 발생했던 문제들을 객체 간의 상호 관계 등을 이용해 해결할 수 있도록 하나의 규약 형태로 만들어 놓은 것

1. 싱글톤 패턴 = 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴 (주로 데베 연결 모듈에 많이 사용)

장점: 인스턴스 생성 시 발생하는 비용 줄어듦. 단점: 의존성 높아짐 

 자바스크립트는 리터럴 {} 또는 new Object 로 객체 생성 시 다른 어떤 객체와도 같지 않으므로 이 자체만으로 싱글톤 패턴 구현가능

mongoose 의 데베를 연결할 때 쓰는 connect() 함수는 싱글톤 인스턴스를 반환함.  

단점 -> TDD 할 때 걸림돌. 미리 생성된 하나의 인스턴스를 기반으로 구현하는 패턴이므로 각 테스트마다 독립적인 인스턴스를 만들기 어렵기 때문. 

해결법 : 의존성=종속성 주입 (A 가 B 에 의존성이 있다 = B의 변경 사항에 대해 A 또한 변해야 한다.)

의존성 주입의 장점: 테스팅, 마이그레이션 쉬워짐. 애플리케이션 의존성 방향이 일관되고 애플리케이션을 쉽게 추론할 수 있음 + 모듈 간의 관계 더 명확해짐

의존성 주입의 단점: 모듈들이 더 분리되므로 클래스 수 증가로 인한 복잡성 증가 + 약간의 런타임 패널티가 생기기도

의존성 주입 원칙: 상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 함. + 둘 다 추상화에 의존해야 함. 이때 추상화는 세부 사항에 의존하지 말아야 함. 

2. 팩토리 패턴 

객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴이자 상속 관게에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체 내용을 결정하는 패턴 

더 많은 유연성을 가지고 유지 보수성이 증가됨

자바스크립트에서는 new Object() 로 팩토리 패턴 구현 가능 

3. 전략 패턴 = 객체의 행위를 바꾸고 싶은 경우 직접 수정하지 않고 전략이라고 부르는 캡슐화한 알고리즘을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴 

*컨텍스트 = 상황, 맥락, 문맥 개발자가 어떠한 작업을 완료하는 데 필요한 모든 관련 정보 

전략 패턴을 사용한 라이브러리 = passport (Node.js 에서 인증 모듈을 구현할 때 쓰는 미들웨어 라이브러리)

4. 옵저버 패턴 

주체가 어떤 객체의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메서드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인 패턴. 주체 = 객체의 상태 변화를 보고 있는 관찰자, 옵저버 = 객체의 상태 변화에 따라 전달되는 메서드 등을 기반으로 추가 변화 사항이 생기는 객체들을 의미.

주로 이벤트 기반 시스템에 사용하며 MVC 패턴에도 사용됨. 

자바스크립트에서의 옵저버 패턴 -> 프록시 객체를 통해 구현 가능 

프록시 객체 = 어떠한 대상의 기본 동작(속성 접근, 할당, 순회, 열거, 함수 호출 등)의 작업을 가로챌 수 있는 객체. 두 개의 매개변수 가짐 

target = 프록시할 대상, handler = 프록시 객체의 target 동작을 가로채서 정의할 동작들이 정해져 있는 함수 

프록시 서버에서의 캐싱: 캐시 안에 정보를 담아두고, 캐시 안에 있는 정보를 요구하는 요청에 대해 원격 서버에 요청하지 않고 캐시 안의 데이터를 활용-> 불필요하게 외부와 연결하지 않으므로 트래픽 줄일 수 있음. 프록시 서버는 서버와 클라이언트 사이에서 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램임. 

nginx 는 프록시 서버로 쓰며 node.js 서버 앞단의 프록시 서버로 활용됨. 

node.js 의 버퍼 오버플로우 취약점을 예방하기 위해 nginx 를 프록시 서버로 앞단에 놓고 Node.js 를 뒤쪽에 놓는 것이 좋음. 이를 통해 익명의 사용자의 직접적인 서버로의 접근을 차단하고 간접적으로 한 단계를 더 거침으로써 보안성을 강화할 수 있음. 

*버퍼 오버플로우 = 메모리 공간을 벗어나는 경우 

CloudFlare -> CDN 서비스로 DDOS 공격 방어, hTTPS 구축 가능 -> 프록시 서버로 쓰기 때문에 가능. 

CORS, 프론트엔드의 프록시 서버: CORS 는 프론트가 백과 통신할 때 주로 마주치는 에러. 이를 해결하기 위해 프론트에 프록시 서버를 만들기도 함. 

5. 이터레이터 패턴 = 이터레이터를 사용하여 컬렉션의 요소들에 접근하는 디자인 패턴. 이터레이터라는 하나의 인터페이스로 다양한 자료형 순회 가능.

'면접을 위한 CS 전공지식 노트' 카테고리의 다른 글

2022.07.23  (0) 2022.07.24
2022.07.15  (0) 2022.07.16
2022.07.13  (0) 2022.07.14

댓글