섹션 5. 싱글톤 컨테이너 수강 완료!!
싱글톤 패턴은 클래스의 인스턴스가 1개만 생성되는 것을 보장한다.
싱글톤 패턴을 사용하면 이미 만들어진 객체를 공유해서 사용하기 때문에 메모리의 낭비를 줄일 수 있다.
하지만 싱글톤 패턴은 구현하는 코드 자체가 많이 들어가고, DIP를 위반하는 등의 문제점이 많다.
스프링 컨테이너는 따로 싱글톤 패턴을 적용하지 않아도 알아서 객체 인스턴스를 싱글톤으로 관리한다.
즉, 스프링 컨테이너가 싱글톤 컨테이너의 역할을 한다.
요청이 올 때마다 객체를 생성하는 것이 아니라 이미 만들어진 객체를 공유해서 효율적으로 재사용하는 것이다.
+) 22. 07. 03. 추가
4계층은 실제로 해당 데이터들이 정상적으로 잘 보내지도록 확인하는 역할을 한다.
즉, 패킷이 유실되거나 순서가 뒤바뀌었을 때 바로잡아 준다.
4계층에서 패킷을 분할할 때 패킷 헤더에 보내는 순서(Sequence Number)와 받는 순서(Acknowledgement Number)를 적어 통신하므로 패킷이 유실되면 재전송을 요청할 수 있고, 순서가 뒤바뀌더라도 바로잡을 수 있다.
이뿐만 아니라 장치 내의 많은 애플리케이션을 구분할 수 있도록 Port Number를 사용해 상위 애플리케이션을 구분한다.
4계층 장비는 TCP와 같은 4계층 헤더에 있는 정보를 이해하고 이 정보들을 기반으로 동작한다.
기존 네트워크 장비와 다른 점을 이해해야 하는데, 세션 테이블과 그 안에서 관리하는 세션 정보가 가장 중요하다.
그래서 4계층 이상에서 동작하는 로드 밸런서, 방화벽과 같은 장비를 ‘세션 장비‘라고 부르기도 한다.
서버나 장비의 부하를 분산하기 위해 사용하는 장비.
IP 주소나 4계층 정보, 애플리케이션 정보를 확인, 수정하는 기능이 있다.
로드 밸런서가 서비스에 사용되는 대표 IP 주소를 서비스 IP로 갖고, 그 밑에 시스템이 늘어나면 로드 밸런서가 각 시스템의 실제 IP로 변경해 요청을 보낸다.
로드 밸런서는 동작하는 계층에 따라 보통 4계층과 7계층으로 나뉜다.
L4 로드 밸런싱
일반적인 로드 밸런서가 동작하는 방식.
TCP, UDP 정보(특히 포트 넘버)를 기반으로 로드 밸런싱을 수행한다.
4계층에 대한 정보로만 분산 처리하는 경우를 L4 로드 밸런싱이라고 한다.
L7 로드 밸런싱
HTTP, FTP, SMTP와 같은 애플리케이션 프로토콜 정보를 기반으로 로드 밸런싱을 수행한다.
HTTP 헤더 정보나 URI와 같은 정보를 기반으로 프로토콜을 이해한 후 부하를 분산한다.
일반적으로 이런 장비를 ADC(Application Delivery Controller)라고 부르며, 프록시 역할을 수행한다.
4계층에서 동작하면서 로드 밸런서 기능이 있는 스위치.
내부 동작 방식은 4계층 로드밸런서이지만, 외형은 스위치처럼 여러 개의 포트를 갖고 있다.
L4 스위치는 부하 분산, 성능 최적화, 리다이렉션 기능을 제공한다.
L4 스위치가 동작하려면 아래 4가지를 설정해야 한다.
가상 서버(Virtual Server): 사용자가 바라보는 실제 서비스
가상 IP(Virtual IP): 사용자가 접근해야 하는 서비스 IP 주소
리얼 서버(Real Server): 실제 서비스를 수행하는 서버
리얼 IP(Real IP): 실제 서버의 IP
여기서 L4 스위치는 가상 IP를 리얼 IP로 바꿔주는 역할을 한다.
사용자는 L4 스위치의 가상 IP를 목적지로 서비스를 요청하고, L4 스위치가 목적지로 설정된 가상 IP를 리얼 IP로 변경해 보내준다.
이 과정에서 부하를 어떤 방식으로 분산할지 결정할 수 있다.
네트워크 중간에 위치해 해당 장비를 통과하는 트래픽을 사전에 주어진 정책 조건에 맞추어 허용(Permit)하거나 차단(Deny)하는 장비.
일반적으로 네트워크 3, 4계층에서 동작하고 세션을 인지, 관리하는 SPI(Stateful Packet Inspection) 엔진을 기반으로 동작하는 장비를 방화벽이라 부른다.
방화벽은 NAT(Network Address Translation) 동작 방식과 유사하게 세션 정보를 장비 내부에 저장한다.
패킷이 외부로 나갈 때 세션 정보를 저장하고, 패킷이 들어오거나 나갈 때 저장했던 세션 정보를 먼저 참조해 들어오는 패킷이 외부에서 처음 시작된 것인지, 내부 사용자가 외부로 요청한 응답인지 가려낸다.
스케일 업(Scale-Up) | 스케일 아웃(Scale-Out) | |
---|---|---|
설명 | 하드웨어 성능 자체를 업그레이드하거나, 더 높은 성능의 시스템으로 마이그레이션 하는 방법. | 여러 대의 서버로 로드를 분산하는 방법. 서비스 자체를 구분해 나누거나 같은 서비스를 분산해 처리하는 방법이 있다. |
장점 | 시스템 설계 변경 없이 서비스 사용량을 쉽게 늘릴 수 있다. (주로 기존 대형 유닉스 시스템에서 사용함.) | 스케일 업 방식보다 적은 비용으로 시스템 확장이 가능하다. 여러 대의 시스템에 로드를 적절히 분산해 하나의 시스템에 장애가 발생하더라도 서비스에 미치는 영향이 없도록 결함허용(Fault Tolerance)을 구현할 수 있다. |
단점 | 부품 추가가 어렵다. 시스템이 커질수록 비용이 기하급수적으로 증가한다. | 스케일 아웃을 위해 별도의 아키텍처를 이해하고 운영해야만 할 수 있다. 프로세스나 네트워크 장비가 추가로 필요할 수 있다. |
+) 22. 07. 05. 추가
2계층과 3계층은 목적지를 정확히 찾아가기 위한 주소 제공이 목적이다.
4계층에서 동작하는 프로토콜은 목적지 단말 안에서 동작하는 여러 애플리케이션 프로세스 중, 통신해야 할 목적지 프로세스를 정확히 찾아가고 패킷 순서가 바뀌지 않도록 잘 조합해 원래 데이터를 잘 만들어내기 위한 역할을 한다.
✔️ 더 자세한 내용은 아래 페이지 참고
IP, TCP, UDP, HTTP
참고 자료
고재성 · 이상훈, IT 엔지니어를 위한 네트워크 입문
세마포어와 뮤텍스에 대해 발표할 예정!!
말이 발표지 사실 공부한 걸 얘기하는 그런 자리지만... 어쨌든 서로 토픽 주제 하나 정해서 가르쳐주는 식으로 진행할 예정.