MSA , 제네릭(3일차)

2023. 3. 30. 00:47·스파르타 기술면접

MSA(Microservice Architecture)란?

💡 **MSA(Microservice Architecture)**란 소프트웨어 시스템을 작고 독립적인 서비스 단위로 나누어 구축하는 아키텍처 디자인 패턴입니다. 각각의 서비스는 자체적인 데이터베이스를 가지고 있으며, 독립적으로 배포, 확장, 개발될 수 있습니다. 또한, 서비스 간 통신은 경량화된 프로토콜을 사용하고, RESTful API를 통해 이루어지기 때문에, 더욱 높은 유연성과 확장성을 제공할 수 있습니다.

장점

  • 더 나은 확장성
    • 각각의 서비스가 독립적으로 배포 및 확장이 가능
  • 높은 유연성
    • 독립적 → 다른 서비스에 영향 없이 필요에 따라 개발 및 수정이 가능
  • 생산성 증가
    • 각각의 서비스가 작고, 독립적으로 개발 → 개발 생산성과 테스트 생산성이 높아짐
  • 기술적인 다양성
    • 다양한 기술을 적용할 수 있음
    • 개별적 서비스를 개발 → 프로젝트 전체적으로 종속성이 줄어듦
  • 안정성 향상
    • 각각의 서비스가 독립적으로 운영 → 전체 시스템 안정성 향상

단점

  • 구현 및 운영 복잡도 증대
    • 관리 및 운영이 복잡해 질 수 있음
  • 테스트 증대
    • 다수의 서비스에 대해 테스트를 진행해야 함

비교

  • 모노리스(monolithic) 아키텍처
    • 애플리케이션을 단일 코드 베이스로 구축하고 배포하는 방식.
    • 이와 달리 MSA는 작고 독립적인 서비스로 분할되며, 각 서비스는 서로 다른 데이터베이스와 통신.
  • SOA(Service Oriented Architecture)
    • SOA도 마찬가지로 서비스를 독립적으로 개발하고 배포하며, 이들 서비스는 표준 인터페이스를 통해 통신
    • 그러나 MSA는 SOA보다 더 작고 독립적인 서비스 단위를 사용하고, 더 가볍고 빠른 배포를 지향합니다. 또한 MSA는 컨테이너 기반 환경에서 구축되는 것이 일반적이며, 이는 자동화된 배포 및 확장이 가능하게 해줍니다

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

💡 **제네릭(Generic)**은 자바에서 클래스나 메소드를 정의할 때, 타입(type)을 일반화(일반적인 형태)시켜서 다양한 타입의 객체들을 다룰 수 있도록 하는 기법입니다. 제네릭은 클래스나 메소드를 작성할 때 구체적인 타입 대신 타입 매개변수(type parameter)를 사용하여 클래스나 메소드에서 사용될 실제 타입을 나중에 지정하는 방식입니다.

컬렉션 클래스에서 제네릭을 사용하는 이유는 다양한 타입의 객체를 컬렉션에 저장할 수 있기 때문입니다. 예를 들어 ArrayList 클래스는 객체를 배열 형태로 저장하는 자료구조이며, 컬렉션에 저장되는 객체의 타입을 미리 지정해주지 않으면 모든 타입의 객체를 저장할 수 있습니다. 이렇게 되면 컬렉션에서 객체를 꺼내올 때 형변환을 해야 하는 번거로움이 발생합니다. 제네릭을 사용하면 컬렉션에 저장되는 객체의 타입을 미리 지정해주므로, 객체를 꺼내올 때 형변환을 할 필요가 없어 편리합니다.

또한, 제네릭을 사용하면 컴파일러가 타입 검사를 수행하여 프로그램에서 발생할 수 있는 런타임 오류를 컴파일 시점에 잡아낼 수 있습니다. 따라서 타입 안정성(type safety)을 보장하고, 프로그램의 안정성과 유지보수성을 높일 수 있습니다.

예시

ArrayList list = new ArrayList();
list.add("hello");
String str = (String) list.get(0); // 타입 캐스팅 필요

위 코드에서는 ArrayList에 문자열 타입의 데이터를 추가한 후, get 메서드로 데이터를 가져와 사용함. 하지만 list.get(0)으로 가져온 데이터는 Object 타입으로 반환되기 때문에, String 타입으로 사용하기 위해서는 강제 형변환이 필요하게 됨. 이 때문에 컴파일러는 타입 안정성을 보장할 수 없으며, 런타임 시 예외가 발생할 수도 있습니다.

 

아래는 제네릭 코드를 사용.

ArrayList<String> list = new ArrayList<String>();
list.add("hello");
String str = list.get(0); // 타입 캐스팅 불필요

위 코드에서는 ArrayList를 생성할 때 타입 파라미터로 문자열(String) 타입을 지정함. 이렇게 타입 파라미터를 사용하면 ArrayList에 추가한 데이터를 get 메서드로 가져올 때, 강제 형변환을 할 필요 없이 바로 사용가능. 이를 통해 컴파일러는 타입 안정성을 보장할 수 있고, 런타임 시 타입 관련 예외가 발생할 가능성이 낮아집니다.

'스파르타 기술면접' 카테고리의 다른 글

Filter / Interceptor / AOP  (0) 2023.04.11
DI의 방식 중 필드 vs 생성자 주입 방식  (0) 2023.04.11
DI 방식, FIlter / Interceptor / AOP  (0) 2023.03.30
DI , DB에서의 인덱스 사용(2일차)  (0) 2023.03.30
객체지향 프로그래밍(OOP) , REST API(1일차)  (0) 2023.03.30
'스파르타 기술면접' 카테고리의 다른 글
  • DI의 방식 중 필드 vs 생성자 주입 방식
  • DI 방식, FIlter / Interceptor / AOP
  • DI , DB에서의 인덱스 사용(2일차)
  • 객체지향 프로그래밍(OOP) , REST API(1일차)
yeah구리
yeah구리
백엔드를 공부하는 초심자입니다.
  • yeah구리
    개발일지_헤맨만큼 내땅이다
    yeah구리
  • 전체
    오늘
    어제
    • 분류 전체보기 (114)
      • 스파르타 부트캠프(spring) (75)
      • 스파르타 기술면접 (10)
      • 코딩연습 (0)
      • 항해 (10)
      • 개발일지 (4)
        • 개인 회고 (1)
        • 개발로그 (실무) (2)
      • 공부노트 (0)
      • 코딩테스트 (0)
        • 프로그래머스 (0)
        • 백준 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    비전공개발자 #개발로그 #커리어
    X(Twitter) API #캐싱 #트러블슈팅 #개발
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
yeah구리
MSA , 제네릭(3일차)
상단으로

티스토리툴바