MSA는 하나의 서비스를 만들 때 도메인별로 서비스를 쪼개어 독립적으로 서비스하고, 배포할 수 있도록 구성하는 아키텍쳐이다.
MSA는 1개의 시스템을 독립적으로 배포 가능한 각각의 서비스로 분할하며, 각각의 서비스는 API를 통해 데이터를 주고 받으며 1개의 큰 서비스를 구성한다.
모든 시스템의 구성요소가 한 프로젝트에 통합되어 있는 Monolithic Architecture의 한계점을 극복하고자 등장하게 되었다.
MSA는 각각의 서비스들을 서로 다른 언어와 프레임워크로 구성할 수 있어 일부 서비스에 장애가 발생해도 전체 서비스에 영향을 끼치지 않고, 확장에 용이하다는 장점이 있다.
반면, 서비스가 분리되어 있기 때문에 테스트나 트랜잭션 처리 등이 어렵고, 서비스 간에 API로 통신하기 때문에 그에 대한 비용이 발생한다는 단점이 있다.
또 서비스 간의 호출이 연속적이기 때문에 디버깅 및 에러 트레이싱이 어렵다.
제네릭이란 클래스에서 다룰 객체를 미리 명시해줌으로써 형 변환을 하지 않고 사용하는 것을 말한다.
만약 제네릭을 사용하지 않을 경우엔 빈번하게 타입 변환이 발생할 수 있으며, 이는 곧 프로그램의 성능을 저하시킬 가능성이 있다.
제네릭을 사용하여 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 객체의 타입을 미리 명시해줌으로써, 번거로운 형변환을 줄여주고 컴파일 시에 객체의 타입을 체크하기 때문에 런타임에 발생할 수 있는 오류를 줄여준다.
제네릭을 사용하기 위해서는 컬렉션 클래스에 <>
부호를 붙이고 타입 변수나 타입을 적어주면 된다.
List는 배열과 유사하게 연속된 공간에 데이터를 저장하며 인덱스로 데이터에 접근이 가능하다.
또한 저장공간이 필요에 따라 자동으로 늘어나고 데이터의 중복을 허용한다.
데이터의 집합이며 순서가 없고 중복된 데이터를 허용하지 않는다.
인덱스가 따로 존재하지 않기 때문에 iterator를 사용하여 데이터에 접근한다.
Key와 Value의 한쌍으로 연관지어 데이터를 저장한다.
Key 값은 중복을 허용하지 않으며 순서를 보장하지 않는다.
Set과 마찬가지로 인덱스가 따로 존재하지 않기 때문에 iterator를 사용하여 데이터에 접근한다.
Map 인터페이스를 구현한 대표적인 Map 컬렉션이다.
HashMap은 특정 데이터의 저장위치를 해시함수를 통해 바로 알 수 있기 때문에 데이터의 검색 성능이 뛰어나며, Key와 Value 값으로 Null을 허용한다는 특징이 있다.