Rest Template이 뭘까?
Spring에서 지원하는 객체로 간편하게 Rest 방식 API를 호출할 수 있는 Spring 내장 클래스입니다.
Spring 3.0부터 지원되었고, json, xml 응답을 모두 받을 수 있습니다.
Rest API 서비스를 요청 후 응답 받을 수 있도록 설계되어 있으며, HTTP 프로토콜의 메소드들에 적합한 여러 메소드들을 제공합니다.
RestTemplate의 특징
- HTTP 요청 후 JSON, XML, String과 같은 응답을 받을 수 있는 템플릿
- Blocking I/O 기반의 동기방식을 사용하는 템플릿
여기서 Blocking I/O기반의 동기방식이 뭘까요?
Blocking I/O는 입출력 작업을 수행할 떄 사용되는 방식 중 하나입니다. 이 방식에서는 입출력 작업이 완료될 때까지 해당작업을 수행하는 스레드가 블록되어 다른 작업을 수행할 수 없는 상태가 됩니다.
예를 들어, 파일을 읽거나 쓰는 작업을 수행할 때, 데이터가 실제로 읽거나 쓰이기 전까지 해당 작업이 완료될 때까지 스레드가 기다리게 되는 것이 Blocking I/O 방식입니다. 이러한 방식은 단순하고 간단하지만, 하나의 작업이 끝날 때까지 다른 작업을 수행할 수 없기에 여러 작업을 동시에 처리하는데 제약이 따릅니다.
RestTemplate의 경우, Blocking I/O 방식을 사용해서 동기적으로 HTTP 요청을 처리합니다. 이것은 요청을 보내고 응답을 받을 때까지 , 해당 작업이 완료될 때까지 스레드가 블록되어 다른 작업을 수행할 수 없다는 것을 의미합니다.
따라서 하나의 요청이 처리되는 동안 다른 요청을 처리할 수 없으며, 대량의 요청을 동시에 처리해야 하는 경우 성능 저하가 발생할 수 있습니다.
이와는 반대로 Non - Blocking I/O 방식은 입출력 작업이 완료되지 않았더라도 다른 작업을 수행할 수 있는 방식입니다.
Non - Blocking I/O 방식은 주로 비동기적인 처리에 사용되며, 여러 작업을 효율적으로 처리할 수 있는 장점이 있지만 구현이 복잡할 수 있습니다.
싱글톤 패턴
싱글톤 패턴은 소프트웨어 디자인 패턴 중 하나로, 어떤 클래스가 오직 하나의 인스턴스만을 갖도록 보장하는 패턴입니다.
이렇게하면 해당 클래스의 인스턴스가 전역적으로 접근 가능하며, 여러 곳에서 동시에 동일한 인스턴스를 공유하여 사용할 수 있습니다.
싱글톤 패턴을 사용하는 이유는 여러가지가 있습니다. 예를 들어, 설정 정보, 로깅 기능, 데이터베이스 연결과 같이 프로그램 전체에서 하나의 공유된 리소스를 사용해야할 때 유용합니다. 또한 인스턴스 생성과 관리를 중앙에서 처리하여 메모리와 리소스 사용을 효율적으로 관리할 수 있습니다.
싱글톤 패턴의 기본 아이디어는 해당 클래스의 생성자를 private으로 만들어 외부에서 직접적으로 인스턴스를 생성하지 못하게 하고 , 클래스 내부에서 유일한 인스턴스를 생성하고 관리하는 정적 메서드를 제공하는 것입니다. 대표적인 방법으로는 Eager Initialization과 Lazy Initialization은 프로그램이 시작 될 때 바로 인스턴스를 생성하는 방식이며, Lazy Initialization은 인스턴스가 처음 필요한 시점에 생성되는 방식입니다.
싱글톤 패턴을 구현할 때는 스레드 안전성에 주의해야합니다. 싱글톤 패턴을 구현할 때는 스레드 안전성에 주의해야 합니다.
여러 스레드에서 동시에 싱글톤 인스턴스를 생성하거나 접근하는 경우 문제가 발생할 수 있습니다. 이를 방지하기 위해 동기화 기법이나 더 나은 성능을 위한 더블 체크 락킹 등을 사용하여 스레드 안전성을 보장해야 합니다.
싱글톤 패턴은 잘 활용하면 유용한 패턴이지만, 오용할 경우 코드 복잡도를 높이고 테스트가 어려워질 수 있기에 실제로 필요한 경우에만 사용하는 것이 좋습니다