1. Stateful, Stateless
Stateful (상태 유지)
- 같은 서버가 유지되어야 함
- 요청 트래픽이 몰려 리소스를 많이 소모하면 서버가 종료되거나, 다음 요청에 대한 처리가 느려질 수 있음
Stateless (무상태)
- 같은 서버를 유지할 필요 없음
- Scale Out 수평 확장성이 높음
- 클라이언트가 데이터를 추가 전송해야 하며 전송되는 데이터의 양이 많아짐
- 로그인과 같은 상태를 유지해야 하는 경우 Cookie, Session, Token 등을 활용
2. Connection, Connectionless
Connection (연결)
- 새로운 연결 과정을 거치지 않아도 됨
- 요청에 대한 응답 속도 빠름
- 클라이언트가 지속적으로 요청을 보내지 않으면 연결을 위한 자원이 낭비됨
Connectionless (비연결)
- 클라이언트와 서버는 연결을 유지하지 않음
- 서버 자원 효율적 사용 가능
- 요청이 추가되면 새로 연결(3 way handshake) 해야 하므로 응답 시간 증가
HTTP 지속연결 (Persistent Connections)
- 하나의 요청에 필요한 요청들이 모두 응답될 때 까지 연결을 유지
- 연결을 한번만 맺고 끊기 때문에 Connectionless 방식보다 연결 횟수가 적어 속도 빠름
3. Servlet
Servlet은 HTTP 프로토콜 기반 요청(Request) 및 응답(Response)을 처리하는데 사용되며 JAVA에서는 HttpServlet 클래스를 상속받아 구현됨
@WebServlet(name="ExampleServlet", urlPatterns = "/exmaple")
public class ExampleServlet extends HttpServlet {
@Override
protected void service(
HttpServletRequest request,
HttpServletResponse response
) {
}
}
Servlet Container
: Servlet을 초기화, 생성, 관리, 호출, 종료하는 역할을 수행
- 개발자는 코드만 작성하고 Servlet Container가 Servlet 객체 생성
- Servlet 객체를 싱글톤으로 관리
- 동시 요청에 대한 처리를 위해 Multi Thread 지원
4. SSR, CSR
SSR(Server Side Rendering)
서버에서 동적인 페이지를 완성하여 응답한 것을 브라우저에서 출력
백엔드 개발자 영역에 속하며 Java에서는 JSP, Thymeleaf가 대표적으로 사용됨
- 초기 페이지 로딩이 빠름
- 검색 엔진 크롤러가 완전한 HTML을 즉시 수집할 수 있어 SEO에 유리
- SEO(Search Engine Optimization) : 검색 엔진에서 상위에 노출될 수 있도록 최적화하는 과정
- 서버가 모든 요청에 대해 페이지를 렌더링해야 하므로, 높은 트래픽 상황에서 부하가 크게 증가
CSR(Client Side Rendering)
HTTP API 통신으로 얻은 결과를 통해 브라우저에서 동적으로 화면을 출력
프론트엔드 개발자 영역에 속하는 React, Vue가 대표적으로 사용됨
- 클라이언트 측에서 렌더링하므로 사용자 인터렉션에 빠르게 반응 가능
- 초기 로딩 후 서버와의 통신 없이 페이지 간 전환 가능
- 초기 페이지 로딩이 느림