3-Tier 아키텍쳐

- 가장 보편적이고 이해하기 쉬운 아키텍쳐이다.
- 프레젠테이션 레이어 - 사용자와의 접점 제공
- 애플리케이션 레이어 - 트랜잭션 처리를 위한 비즈니스 로직 제공
- 데이터 레이어 - 데이터를 저자, 조회 기능 제공
- 그 외의 장점들
- 프론트, 백엔드 역할 분리에 따른 업무 효율화
- 각 계층을 모듈화해서 다른 계층에 미치는 영향을 최소화하며 확장이 용이함

서비스 사용자가 매우 빠르게 증가하고 있는 상황에서 백엔드 개발자가 할 수 있는 일
- 애플리 케이션의 레이어 서버를 수평 확장
- 그리고 서비스 앞단에 로드 밸런서를 배치하여 트래픽을 분산시킨다.
- 하지만 추가적으로 고려해야 하는 것 - 특정 서버에서 장애가 발생하면 어떤 일이 발생될지?
- 서비스 가용 측면에서는 문제가 없다.
- 하지만 사용자 인증 처리에서 세션을 사용하고, 그 외 특별한 조치가 없었다면?
- 그 일부 사용자는 문제가 될 수 있다 !
- 장애가 발생한 서버에서 인증된 사용자는 인증이 풀리게 되며 다시 인증을 해야하는 번거로움이 발생하게 된다.

HTTP와 Session
- 근본적으로 HTTP는 무상태 프로토콜이다. 즉 어떤 정보도 저장하지 않음.
- 서버는 인증된 사용자 정보를 저장하기 위해 세션이라는 것을 만들고 식별자인 세션아이디를 클라이언트로 응답한다.
- 클라이언트가 웹 브라우저인 경우에 세션아이디는 보통 쿠키에 저장된다.
- 클라이언트는 HTTP요청에 세션 아이디를 포함시켜 서버가 클라이언트를 식별할 수 있도록 해야한다.
- 세션은 서버 메모리를 사용하기 때문에 너무 많아질 경우 서버 메모리 부족이 발생할 수 있다.
- 서버 장애시 복제본이 없는 세션정보는 유실된다.

Sessin Cluster
- 세션 기반 인증 처리의 문제점이 세션이 서버 메모리에 저장되는 것이라면 세션을 별도의 외부 스토리지에 저장한다는 개념이다.
- 외부 스토리지는 조회 속도를 위해 보통 인메모리 데이터베이스를 많이 사용한다.
- Sticky Connection(동일한 사용자가 발생시킨 요청은 동일한 WAS 에서 처리하지 않는다.)제약에서 자유롭다.
- 특정 서버에 문제가 생겨도 다른 정상적인 서버에서 세션을 외부 스토리지에서 가져올 수 있으므로 사용자 인증이 풀리지 않는다.