ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 기술 면접 스터디 - 3일차(MSA, 제네릭)
    [기술 면접 준비] 2023. 3. 29. 13:34

    Q. MSA(Microservice Architecture)란?

     

    A. MSA 란 하나의 애플리케이션을 느슨하게 결합된 서비스의 모임으로 구조화하는 소프트웨어 개발 기법입니다. 마이크로서비스는 완전히 독립적으로 배포가 가능하고, 다른 기술 스택(개발 언어, 데이터베이스 등)이 사용 가능한 단일 사업 영역에 초점을 둡니다.

     

    MSA의 특징으로는 API를 통해서만 상호작용 할 수 있다는 것입니다.

    마이크로 서비스는 서비스의 end-point를 API 형태로 외부에 노출하고, 실질적인 세부사항은 모두 추상화 하게 됩니다. 따라서 내부의 구현로직이나 구조는 API에 의해 철저하게 가려지게 됩니다.

     

    또한, 제대로 설계된 MSA는 하나의 비즈니스 범위에 맞춰 만들어지므로 하나의 기능만을 수행합니다.

    하나의 기능만을 수행하기 때문에 서비스별로 개별 배포나 확장이 가능하고, 일부 장애가 전체 서비스로 확장될 가능성이 적다는 측면에서 유리함을 얻을 수 있습니다. 또한 새로운 기술을 적용하기에도 유연하다는 장점이 있습니다.

     

    반대로 단점도 존재하는데요, MSA는 모놀리식에 비해 상대적으로 설계가 많이 복잡합니다. 서비스가 모두 분산되어 있기 때문에 개발자는 내부 시스템 통신을 어떻게 가져갈지 정해야하고, 이로인해 설계가 어려워 진다는 단점이 존재합니다.

    또한 서비스 간 호출 시 API를 사용하므로 통신 비용이나 latency에 대한 이슈가 존재합니다. 또한, 각각의 서비스가 가지고있는 프로그래밍 언어라든지 DB도 각기 다를 수 있기 때문에 서비스의 연결을 위한 트랜잭션을 유지하는게 어렵고, 통합테스트가 어렵다는 점도 단점입니다.

     

     

    Q. 제네릭에 대해서 설명하고, 컬렉션 클래스에서 왜 제네릭을 사용하는 지 설명해주세요.

     

    A. 제네릭이란 데이터의 타입을 일반화 한다는 것을 의미합니다. 특정 타입만 다루지 않고 여러 종류의 타입으로 변신할 수 있도록 클래스나 메소드를 일반화시키는 기법입니다. 

    클래스 내부에서 타입을 정하는 것이 아닌 사용자 호출에 의해 타입이 지정되게 됩니다.

     

    제네릭은 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하게 되는데요, 이렇게 컴파일 시에 미리 타입 검사를 수행하면 얻을 수 있는 이점이 있습니다.

     

    1. 클래스나 메소드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있습니다.

    2. 반환 값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있습니다.

     

    따라서 컬렉션 클래스에서 값을 다룰 때 제네릭을 사용하게 되면

    1. 여러 타입의 파라미터를 삽입해 객체를 생성할 수 있기 때문에 코드를 간결하게 하고 재사용성을 높입니다.

    2. 컴파일 시 타입체크를 하기 때문에 컴파일 시 에러를 발견할 수 있게 됩니다.

    3. 컴파일러가 형변환을 해주기 때문에 개발자가 형변환을 따로 하지 않아도 됩니다.

     

    이와 같은 이점으로 인해서 컬렉션 클래스에서 제네릭을 사용한다고 할 수 있습니다.

Designed by Tistory.