1부 이야기 - 세션 상태

2021. 7. 28. 15:48·서적/엔터프라이즈 애플리케이션 아키텍처 패턴

마틴 파울러의 엔터프라이즈 애플리케이션 아키텍처 패턴을 읽고 정리한다.

1부 이야기에서는 다양한 개념과 발전 과정을 말한다.

작성 시점은 20년 전으로 당시와 지금의 용어 & 개념이 다를 수 있고, 더 이상 사용 안 하는 것도 있을 수도 있다.

자세한 내용이 궁금하면 읽어보는 걸 권한다.

 

엔터프라이즈 애플리케이션 아키텍처 패턴(재출간판) - 교보문고

엔터프라이즈 애플리케이션 구축을 위한 객체지향 설계의 원리와 기법 | 이 책은 『엔터프라이즈 애플리케이션 아키텍처 패턴』의 재출간판이다. 『리팩토링』의 저자로도 잘 알려진 마틴 파

www.kyobobook.co.kr


상태 비저장의 가치

엔터프라이즈 애플리케이션에서의 상태 비저장 서버는 요청 간에 상태가 유지되지 않는 객체를 의미하며, 많은 사람들은 상태 저장 서버를 재앙으로 인식한다. 

가장 큰 문제는 서버 리소스에 대한 것으로 모든 상태 저장 서버 객체는 대기하면서 사용자의 상태를 유지하는데, 상태 비저장 객체는 세션의 다른 요청을 처리할 수 있다. 즉, 접속된 사용자마다 상태를 저장하려면 같은 객체가 지속적으로 필요하며 다른 일을 할 수 없게 된다. 상태 비저장은 객체를 풀링해 많은 처리를 할 수 있다.

 

클라이언트 상호작용에는 상태 저장인 것이 많다. 간단한 예로 쇼핑몰의 장바구니를 생각해보자, 장바구니는 사용자의 전체 세션동안 유지되어야 한다. 상태 저장 비즈니스 트랜잭션을 수행해야 하니 세션도 상태 저장이다. 사용자가 구매를 안 하면 필요 없겠지만 구매를 하려면 저장해야 한다. 


세션 상태

장바구니의 세부 사항은 세션 상태로 장바구니 안의 데이터는 특정 세션으로 세션 상태는 한 비즈니스 트랜잭션에 포함되므로 ACID 속성을 가진다.

세션이 저장하는 모든 데이터가 세션 상태인 것은 아니다. 꼭 저장할 필요가 없는 데이터도 캐싱으로 성능 향상을 할 수 있다.

세션 상태는 올바른 동작을 위해 저장해야 하지만 캐시는 없어도 동작에 방해되지 않는다.

 

세션 상태를 저장하는 방법

세션 상태 저장 방법은 세가지가 있다.

- 클라이언트 세션 상태 : 클라이언트에 저장하는 데이터로 쿠키, URL 인코딩 데이터, HTML의 hidden 태그 등을 이용한다. 문제점은 암호화하지 않으면 악성 사용자가 악용해 범죄를 저지를 수 있다.

- 서버 세션 상태 : 요청 간 데이터를 메모리에 저장하는 방법이다.

- 데이터베이스 세션 상태 : 데이터를 테이블과 필드로 분리하고 데이터베이스에 저장하는 방법이다. 

저장하는 방법을 선택하는 기준으로는 저장할 데이터의 양, 사용자 수에 따른 처리량, 성능, 시스템의 문제 등이 존재한다.

위의 세 방식은 상호배타적인 방식은 아니며, 서로 혼합해 사용할 수 있다.

 

 

 

'서적 > 엔터프라이즈 애플리케이션 아키텍처 패턴' 카테고리의 다른 글

1부 이야기 - 종합  (0) 2021.08.02
1부 이야기 - 분산 전략  (0) 2021.08.02
1부 이야기 - 동시성  (0) 2021.07.28
1부 이야기 - 웹 프레젠테이션  (0) 2021.07.26
1부 이야기 - 관계형 데이터베이스 매핑  (0) 2021.07.26
'서적/엔터프라이즈 애플리케이션 아키텍처 패턴' 카테고리의 다른 글
  • 1부 이야기 - 종합
  • 1부 이야기 - 분산 전략
  • 1부 이야기 - 동시성
  • 1부 이야기 - 웹 프레젠테이션
loop-study
loop-study
오늘도 공부하자
  • loop-study
    개발 공부할래?
    loop-study
  • 전체
    오늘
    어제
    • 분류 전체보기 (187)
      • 목표 및 회고 (26)
      • 세미나 & 워크샵 (1)
      • 교육 및 인강 (67)
        • TDD, Clean Code with Java (5)
        • ATDD, 클린 코드 with Spring (6)
        • DDD 세레나데 (3)
        • 인프라 공방 (6)
        • 이규원의 현실 세상의 TDD (19)
        • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (18)
        • 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 (0)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한 (8)
        • 코딩으로 학습하는 GoF의 디자인 패턴 (1)
        • 스프링 시큐리티 완전정복 6.x (1)
      • 서적 (62)
        • 객체지향의 사실과 오해 (1)
        • 객체지향과 디자인패턴 (7)
        • 만들면서 배우는 클린 아키텍처 (3)
        • 테스트 주도 개발로 배우는 객체 지향 설계와 실천 (1)
        • 오브젝트: 코드로 이해하는 객체지향 설계 (17)
        • 리팩토링 : 코드 구조를 체계적으로 개선하여 효율적인 리팩터링 구현하기 (0)
        • 토비의 스프링 (3)
        • 엔터프라이즈 애플리케이션 아키텍처 패턴 (9)
        • 개발자의 글쓰기 (1)
        • 소프트웨어 장인 (17)
        • Real MySQL 8.0 (2)
        • JVM 밑바닥까지 파헤치기 (0)
      • 개발 & 방법론 (29)
        • Java (13)
        • TDD (5)
        • ATDD (3)
        • DDD (6)
        • 인프라 (2)
        • SQL (0)
      • 개인이야기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 백엔드 로드맵
  • 인기 글

  • 태그

    TDD
    자바
    현실세상의 TDD
    Test Driven Development
    nextstep
    fastcampus
    소프트웨어 장인
    테스트 주도 개발
    엔터프라이즈 애플리케이션 아키텍처 패턴
    마틴 파울러
    ATDD
    백기선
    추상화
    DDD 세레나데
    모든 개발자를 위한 HTTP 웹 기본 지식
    인프라공방
    study
    java
    Patterns of Enterprise Application Architecture
    이규원
    장인정신
    인프런
    오브젝트
    넥스트스탭
    조영호
    JUnit
    스프링
    스터디
    김영한
    객체지향
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
loop-study
1부 이야기 - 세션 상태
상단으로

티스토리툴바