✏️ 2023-03-29 Today I Learn

@mitoconcrete · March 29, 2023 · 3 min read

MSA란?

MSA(Micro Service Arcitecture)란 어떠한 서비스를 하나로 묶어 관리하는 것이 아니라, 기능단위로 쪼개 배포/관리하는 아키텍처를 의미합니다. 보통은 여러개의 도커 컨테이너를 띄워서 관리하며, 더욱 관리를 쉽게 하기 위해 쿠버네티스를 이용해 컨테이너들을 관리합니다. 마이크로서비스 아키텍쳐의 장점은 확장성이 뛰어나며, 기능단위로 쪼개어 관리하기 때문에 배포속도가 빠르며, 언어에 종속되지 않는 유연성을 지니고 있습니다. 또한, 어떤 기능이 고장나도, 기능이 각자 분리되어 있기 때문에, 전체 서비스 장애의 피해를 최소화 시킬 수 있습니다. 또한, 각각의 기능들을 업데이트하고 유지보수하는 것이 다른 기능들에 영향을 주지않습니다. 따라서, 무중단 배포가 가능합니다. 단점은, 매우 작은 기능들이 많이 배포되어 관리되기 때문에, 개발 외적으로 리소스가 많이 들어갑니다. 또한, 중앙로그를 관리하기가 어렵기 때문에, 기능들간 관계가 복잡하게 얽혀있는 경우 기능고장이 일어났을 때, 어떤 기능에서 기능고장이 일어났는지 찾기가 어렵습니다. 또한, 각 기능 간 소통은 API로 일어나기 때문에 오버헤드 발생이 우려됩니다. 주로 관리적인 측면에서 복잡도가 올라가기 때문에, 초기 설계 시 주의하며 설계하는 것이 중요합니다.

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

제네릭은 자바에서 메소드나 클래스에 사용될 데이터의 타입을 컴파일시점에 미리 지정하는 방법입니다. 제너릭을 사용하게 되면 컴파일러가 제공하는 타입체크 기능을 사용하게 되어, 타입안정성을 보장할 수 있게 되어 코드의 안정성과 무결성 보장이 가능하게 됩니다. 컬렉션 클래스에서 제너릭을 사용하게 되면, 내부에 저장되는 인자에 대한 체크를 런타임이 아닌 컴파일 시점에 하는 것이 가능해지기 때문에, 런타임 오류를 방지할 수 있습니다. 또한 인자의 타입을 정의하기 때문에 코드의 가독성이 증가한다는 장점도 있습니다.

@mitoconcrete
어제보다 조금 더 성장하기 위해 기록합니다.