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)
  • 블로그 메뉴

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

  • 공지사항

    • 백엔드 로드맵
  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바