싱글톤 패턴
- 하나의 인스턴스만 생성되며 전역에서 그 인스턴에 접근이 가능하도록 만든 패턴입니다.
- 생성자는 private로 선언하여 외부 클래스로부터 인스턴스 생성을 차단하며, static 메서드로 전역에서 싱글톤 인스턴스에 접근이 가능합니다.
- 단점 및 주의
- private 생성자이기 때문에 테스트가 어렵습니다.
- 의존 관계상 클라이언트가 구체 클래스 의존합니다.
- 같은 인스턴스를 공유하기 때문에 상태를 유지하게 설계하면 안되고, 가급적 읽기만 가능하게 해야합니다.
빌더 패턴
- builder의 인스턴스를 만들고 빌더에서 객체를 대신 만들도록 하는 방식입니다. 이때 단계별로 객체를 생성합니다.
- 장점
- 필요한 데이터만 설정할 수 있습니다. (빌더 패턴이 아닌 경우, 파라미터에 따라 dummy값을 넣어주거나 생성자를 따로 만들어줘야 합니다.)
- 유연성을 확보할 수 있습니다.
- 가독성을 높일 수 있습니다.
팩토리 메서드 패턴
- 객체를 생성하는 인터페이스는 미리 정의하고, 인스턴스를 만들 클래스의 결정은 서브 클래스 쪽에서 내리는 패턴입니다.
- 장점
- 클라이언트 코드로부터 서브 클래스의 인스턴스화를 제거하여 결합도를 느슨하게하고, 확장이 용이하게 합니다.
전략 패턴
- 행위에 대한 클래스들이 인터페이스를 통해 동적으로 행동을 바꿀 수 있는 패턴입니다. 객체지향 설계 원칙 중 개방 폐쇄 원칙에 부합한 패턴입니다.
브릿지 패턴
- 추상부와 구현부를 분리하는 디자인 패턴입니다. 해당 패턴을 통해 각자 독립적으로 수정 및 확장이 가능해집니다.
- 전략 패턴 vs 브릿지 패턴
전략 패턴과 브릿지 패턴이 비슷한 구조이지만 목적성의 차이가 있습니다. 전략 패턴은 캡슐화를 통한 행위의 유연성에 목적이 있고 브릿지 패턴은 추상과 구현의 분리를 통한 개발의 용이성에 목적이 있습니다.
어댑터 패턴
어댑터를 사용해서 호환되지 않는 인터페이스를 호환하도록 하는 패턴입니다.
인터페이스가 바뀌더라도 변경된 내용이 어댑터 안에 캡슐화되므로 수정할 필요가 없습니다.
CI / CD
CI/CD는 서비스 빌드부터 배포까지의 과정을 자동화하는 과정입니다.
예) github로 코드 커밋하였을 때 동작을 감지하여 jenkins가 자동으로 빌드합니다.
코드가 정기적으로 빌드와 테스트를 거쳐 공유 Repository에 병합되는 과정을 CI라합니다.
변경 사항을 Repository에서 이를 운영 서버까지 배포하는 과정을 CD라고 합니다.
CI/CD 제공 Tool로는 Jenkins / Bamboo 등이 있습니다.
Scale Up / Scale Out
서버 확장의 두 가지 방법으로 두 가지가 있습니다.
1. Scale Up
서버 자체의 성능을 향상시키는 것을 의미합니다. 성능 확장에 한계가 있습니다.
모든 처리가 서버 한대의 집중되기 때문에 데이터 갱신이 빈번하게 일어나는 DB 서버에 적합한 방식입니다.
2. Scale Out
컴퓨터(서버) 여러 대를 추가하여 시스템을 확장(증설)하는 방법입니다. 서버가 증설되기 때문에 로드밸런싱이 동반되어야하고 데이터 변화가 적은 웹 서버에 적합한 방식입니다.
Scale-Out 방식은 확장이 유연하고 비용적 측면에서 Scale-Up보다 좋습니다. 또한 서버 한 대가 장애로 다운되더라도 다른 서버로 서비스 제공이 가능하다는 장점이 있습니다.
하지만 서버의 수가 늘어날 수록 관리가 힘들어지고 아키텍처 설계하는 번거로움이 있습니다.
어떤 방식이 더 좋다고는 할 수 없습니다. 개발자는 어플리케이션의 종류나 스토리지 용도 등에 따라 어느 방식을 적용할지 선택하면 됩니다.
로드 밸런싱
서버에 가해지는 부하를 적절하게 분산시켜주는 것을 의미합니다.
서버 트래픽이 많을 때 다른 여러 서버에 분산시키기 위해 사용합니다.
로드 밸런싱 대표적인 알고리즘
- 라운드 로빈 : 우선순위를 두지 않고 순서대로 시간 단위로 배정하는 알고리즘입니다.
- 최소연결방식 : 가장 연결이 적은 서버에 배정하는 알고리즘입니다.
L4 로드 밸런싱 / L7 로드 밸런싱
- L4 로드밸런싱
4계층의 정보를 바탕으로 트래픽을 분산합니다. 정보를 보지 않고 패킷 레벨에서만 트래픽을 분산하기 때문에 속도가 빠르고 효율성이 높습니다. - L7 로드밸런싱
7계층의 정보를 바탕으로 요청을 분산합니다. 사용자가 요청한 정보들을 바탕으로 트래픽을 분산하기 때문에 섬세한 라우팅이 가능하고 비정상적인 트래픽을 판별할 수 있습니다.
CDN
원격 서버로부터 컨텐츠를 받을 때 가까운 서버에서 받는 것보다 시간이 오래 걸립니다. 이를 위해 사용자와 가까운 캐시 서버에 컨텐츠를 캐싱하고, 요청 시 해당 캐시 서버가 응답해주는데 이를 CDN 서버라합니다.
즉 CDN이란 컨텐츠 빠르고 효율적인 전송을 하게하는 네트워크입니다.
라이브러리 / 프레임워크
라이브러리
개발자가 개발하는데 필요한 도구들로 개발 시 필요한 기능을 호출하여 사용할 수 있습니다.
자주 사용되는 기능들을 구현해놓고 가져오기 때문에 개발자가 빠르게 개발할 수 있도록 돕습니다.
프레임워크
만들고자하는 서비스의 기본적인 틀을 제공해주는 것입니다, 개발자는 필요한 코드를 규칙에 따라 작성해주어야 합니다.
차이점
라이브러리와 프레임워크의 가장 큰 차이점은 흐름에 대한 제어권이 어디에 있느냐 입니다.
라이브러리 같은 경우 개발자가 제어권을 갖고 상황에 맞게 필요한 도구들을 가져다 쓴다면 프레임워크는 전체적인 흐름을 자체적으로 갖고 개발자가 그 안에 필요한 코드를 작성합니다.
→ 프레임워크에는 IoC(제어의 역전)이 적용되어 있습니다.
MSA / 모놀리식
MSA
독립적인 서비스를 연결한 구조입니다.
개별 서비스 단위로 나누어져 있어 시스템 전체의 중단 없이 필요한 부분만 업데이트 및 배포가 가능하고. 유연한 대응이 가능해 확장이 용이합니다.
모놀리식
하나의 통합된 패키지로 개발하는 방식입니다.
폭포수 모델
- [요구사항 분석-설계-개발-테스트] 단계로 순차적인 소프트웨어 개발 프로세스입니다.
- 각 단계를 순차적으로 처리하기 때문에 현재 단계에 대한 이해가 빠르고 단계 별로 문서 관리가 용이합니다.
- 반면 각 단계가 종결되어야 다음 단계가 진행되기 때문에 병행 작업이 어렵고, 사용자 의견이 달라지거나 테스트 단계에서 결함 발생 시 대응이 어려워집니다.
애자일 방법론
- 일정 주기 마다 실질적인 코딩을 통해 작업하고 그때그때 요구사항을 더하고 수정하는 유연한 개발 방법론입니다.
- 초기에 변화하는 요구사항과 문제점을 빠르게 파악할 수 있습니다.
- 계획이 확정되지 않아 변화하는 요구사항으로 인해 반복적인 유지보수 작업이 많아져 효율이 떨어질 수 있습니다.
'CS > 면접 준비' 카테고리의 다른 글
알고리즘 면접 준비 (0) | 2023.02.06 |
---|---|
웹과 네트워크 면접 질문 (0) | 2022.12.23 |
운영체제 면접 질문 (0) | 2022.12.22 |
Database 면접 질문 (0) | 2022.12.22 |
Spring & Spring Boot 면접 질문 (0) | 2022.12.22 |