면접 스터디(MSA/제네릭/List, Set, Map, HashMap)

2023. 2. 23. 15:12스터디/면접

MSA(MicroService Architecture)란?
기존의 Monolithic Architecture의 문제점을 보완하기 위해 등장했습니다. 대규모 애플리케이션을 더 작고 독립적인 서비스로 나누는 복잡한 소프트웨어 시스템 구축을 위한 아키텍쳐 스타일입니다. 각각의 서비스는 모듈화되어 있으며, API를 통해 상호작용합니다. 이러한 방식은 각 서비스를 독립적으로 개발, 배포 및 관리를 가능하게 하며 시스템의 확장성, 안정성 등을 개선하는데 도움이 됩니다. 그러나 서비스 배포 시, 다른 서비스와의 연계가 잘 이루어지고 있는 지에 대한 확인과 통합 테스트가 어렵다는 단점이 있습니다.

 

1. Monolithic Architecture

  • SW의 모든 구성요소가 한 프로젝트에 통합되어 있는 형태입니다.
  • 소규모 프로젝트에서 사용됩니다.
  • 웹 개발을 예로 들면, 웹 프로그램을 개발하기 위해 모듈별로 개발하고, 개발이 완료된 웹 어플리케이션을 하나의 결과물로 패키징하여 배포되는 형태를 말합니다.

2. 모놀리식 어플리케이션의 한계

일정 규모 이상의 서비스, 혹은 수백명 이상의 개발자가 투입되는 프로젝트에서 한계를 보입니다.

  1. 부분 장애가 전체 서비스의 장애로 확대될 수 있다.
    • 개발자의 잘못된 코드 배포 또는 갑작스런 트래픽의 증가로 인해 성능에 문제가 생겼을 때, 서비스 전체의 장애로 확대될 수 있다.
  2. 부분적인 Scale-out(여러 server로 나누어 일을 처리하는 방식)이 어렵다.
  3. 서비스의 변경이 어렵고, 수정 시 장애의 영향도 파악이 힘들다.
    • 여러 컴포넌트가 하나의 서비스에 강하게 결합되어 있기 때문에 수정에 대한 영향도 파악이 어렵다.
  4. 배포 시간이 오래 걸린다.
    • 규모가 커짐에 따라 작은 변경에도 높은 수준의 테스트 비용이 발생하기도 하며, 많은 사람이 하나의 시스템을 개발하여 배포하기 때문에 영향을 줄 수 밖에 없다.
  5. 한 Framwork와 언어에 종속적이다.

3. MSA의 특징

  • API를 통해서만 상호작용할 수 있다.
  • end-point(접근점)을 API 형태로 외부에 노출하고, 실질적인 세부 사항은 모두 추상화한다.

4. 장점

  1. 각각의 서비스는 모듈화 되어있으며, 모듈끼리 RPC 또는 message-driven API 등을 이용하여 통신함. 이러한 MSA는 각각의 개별 서비스 개발을 빠르게 하며, 유지보수도 쉽게 가능하다.
  2. 팀 단위로 적절한 수준에서 기술 스택을 다르게 가져갈 수 있다.
  3. 서비스별로 독립적 배포가 가능하므로, 지속적인 배포 CD도 모놀로식에 비해 가볍게 할 수 있다.

5. 단점

  1. 모놀리식에 비해 상적으로 많이 복잡하다.
  2. 통합 테스트가 어렵다. 개발 환경과 실제 운영환경을 동일하게 가져가기 쉽지 않다.
  3. 실제 운영환경에 대해서 배포하는 것이 어렵다. 서비스 1개를 재배포한다고 하면 다른 서비스들과의 연계가 정상적으로 이루어지고 있는지 확인해야한다.

Reference

https://www.nginx.com/blog/introduction-to-microservices/

 

Introduction to Microservices | NGINX

Microservices are currently getting a lot of attention. This blog post is the first in a 7-part series about designing, building, & deploying microservices.

www.nginx.com

https://medium.com/@Dopedev/microservice-architecture%EB%9E%80-ca9825087050

 

Microservice Architecture란?

Architcecture의 필요성

medium.com

https://velog.io/@tedigom/MSA-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-1-MSA%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-3sk28yrv0e

 

MSA 제대로 이해하기 -(1) MSA의 기본 개념

lego-708086_1920.jpg 마이크로 서비스 아키텍쳐를 한마디로 다음과 같이 표현할 수 있습니다. "하나의 큰 어플리케이션을 여러개의 작은 어플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아

velog.io

 

제네릭에 대해서 설명하고, 컬렉션 클래스에서 왜 제네릭을 사용하는 지 설명해주세요.
제네릭은 특정 타입만 다루지 않고, 여러 종류의 타입으로 변신할 수 있도록 클래스나 메소드를 일반화 시키는 기법입니다. 컬렉션 클래스에서 제네릭을 사용하면 코드를 보다 유연하고 재사용 가능하며 유지 관리하기 쉽게 만드는 등의 이점이 있습니다.

1. 제네릭Generic

데이터의 타입을 일반화하는 것(Generalize)을 의미합니다.

  • 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법입니다.
  • 클래스나 메소드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있습니다.
  • 반환 값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있습니다.

2. 컬렉션

  • 객체들의 모음, 컨테이너
  • 제네릭 기법으로 구현되어 있다.
  • 고정 크기의 배열이 가지는 단점을 극복하고 가변 개수의 객체들을 쉽게 삽입, 삭제, 검색 가능함.

예를 들면, Map, Array, Set의 입출력하는 컴포넌트를 만들때, 각각의 자료 구조에 대해 하나씩 만들었다면, 제네릭 타입을 사용하면 하나의 컴포넌트로 3가지 자료구조에 대해 입출력이 가능하므로, 코드가 유연해지고 재사용이 가능해진다.

 

List, Set, Map, HashMap의 차이에 대해서 설명해주세요.
List는 순서가 있고 중복을 허용하지 않는 반면 Set은 순서가 없고 고유한 요소를 포함합니다.
Map과 HashMap은 키-값 쌍의 모음이지만 해시맵은 빠른 엑세스를 위해 해시 함수를 사용하여 배열의 인덱스에 키를 매핑합니다.
List와 Set은 일반적으로 키로 액세스할 필요가 없는 데이터 모음을 저장하는 데 사용하는 반면, Map과 HashMap은 고유 키를 기반으로 데이터를 저장하고 검색하는 데 사용됩니다. 

1. List / Set

List동일한 값이 두 번 이상 발생할 수 있는 유한한 수의 정렬된 값을 나타내는 추상 데이터 유형입니다.
Set: 특별한 순서 없이 고유한 값을 저장할 수 있는 추상 데이터 유형이며, 유한 집합의 수학적 개념을 컴퓨터로 구현한 것입니다.

2. Map / HashMap

Map: 키를 값에 매핑하는 객체이다. 중복 키를 포함할 수 없으며, 각 키는 최대 하나의 값에 매핑할 수 있다. 리스트나 배열처럼 순차적으로 해당 요소 값을 구하지 않고, key를 통해 value를 얻는다.
HashMap: Map 인터페이스를 구현한 대표적인 Map 컬렉션이다. 내부에 key와 value를 저장하는 자료 구조를 가지고 있다. 해시 함수를 통해 저장되는 위치를 결정하므로, 사용자는 위치를 알 수 없고, 삽입 순서와 들어있는 위치 또한 관계가 없다. 해시 함수를 사용하여 많은 양의 데이터를 검색하는데 있어 뛰어난 성능을 보인다.

 

Reference

https://en.wikipedia.org/wiki/List_(abstract_data_type) 

 

List (abstract data type) - Wikipedia

From Wikipedia, the free encyclopedia Abstract data type used in computer science This article is about sequential data structures. For random-access data structures, see Array data type. In computer science, a list or sequence is an abstract data type tha

en.wikipedia.org

https://en.wikipedia.org/wiki/Set_(abstract_data_type) 

 

Set (abstract data type) - Wikipedia

From Wikipedia, the free encyclopedia Abstract data type for storing unique values In computer science, a set is an abstract data type that can store unique values, without any particular order. It is a computer implementation of the mathematical concept o

en.wikipedia.org

https://docs.oracle.com/javase/tutorial/collections/interfaces/map.html

 

The Map Interface (The Java™ Tutorials > Collections > Interfaces)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Java Language Changes for a summary of updated

docs.oracle.com

https://coding-factory.tistory.com/556

 

[Java] 자바 HashMap 사용법 & 예제 총정리

HashMap 이란? HashMap은 Map 인터페이스를 구현한 대표적인 Map 컬렉션입니다. Map 인터페이스를 상속하고 있기에 Map의 성질을 그대로 가지고 있습니다. Map은 키와 값으로 구성된 Entry객체를 저장하는

coding-factory.tistory.com