ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 이것저것 공부한거 (Proxy, Transaction)
    개발 2020. 11. 30. 16:16

    Proxy?

    대리, 혹은 중계의 의미를 가지는 Agent로 봐도 무방, Proxy Server는 Client의 요청을 받아 중계하는 서버를 뜻한다.

    Client Server <-> Proxy Server <-> Web Server

    client가 요청을 보내면 proxy server에서 web server에 접근하여 요청을 보내고 응답을 처리한다.

    이후 proxy server가 응답을 client에 전달한다.

    Proxy Server 특징

    • 익명성으로 보안의 목적으로 사용할 수 있다.
    • 캐시를 사용하여 속도를 개선할 수 있다.
    • 차단되있는 사이트들을 우회적으로 접속할 수 있다.
    • 원치 않는 사이트를 차단할 수 있다.

    Proxy Server 종류

    Forward Proxy Server

    • 일반적인 프록시 서버, Client와 Web Server의 중계하는 역할을 한다.
    • Client 요청시 Proxy 서버는 해당 요청을 Web Server로 중계해 자원을 가져오는 개념.
    • 프록시 서버는 클라이언트가 요청하기 전에는 Web Server의 주소를 알 수 없다.

    Reverse Proxy Server

    • Client와 내부망 (Private Network) 서버 사이에 위치하여 제어하는 역할을 한다.
    • Client 요청시 Proxy Server가 내부망 서버에 요청 후 응답 받은 자원을 Client에게 전달 해주는 개념.
    • Reverse Proxy Server의 경우 실제 Server에 대한 주소들을 매핑하고 있어야 한다.
    • 내부망에 서버에 대해 보안적 용도로 사용하거나 로드밸런싱을 위해 사용되기도 한다.

    Proxy Server 캐시 활용

    Web, HTTP cache는 서버 지연을 줄이기 위해 Web page, Image, 등 Web 문서들을 임시 저장 후 동일한 요청 시

    Proxy Server의 Web Cache에 저장된 정보를 불러와 트래픽이나 서버의 부하를 줄여 클라이언트가 원하는 정보를 빠르게 응답할 수 있다.

     

     

    Transaction?

    • 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위.
    • 한꺼번에 모두 수행되어야 하는 연산들, 즉 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위.
    • 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업단위를 말한다.
    • 하나의 Transaction은 Commit 되거나 Rollback된다.

     

    Transaction의 성질

    Atomicity(원자성)

    • 트랜잭션의 연산은 데이터베이스에 모두 반영되거나 반영되지 않아야 한다.
    • 트랜잭션 내의 모든 명령은 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느 하나라도 실패할 경우 전부 취소가 되어야 한다.

    Consistency(일관성)

    • 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다.
    • 시스템이 가지고 있는 고정된 값은 트랜잭션 수행 전, 후의 상태가 같아야 한다.

    Isolation(독립성, 격리성)

    • 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션 연산이 끼어들 수 없다.
    • 수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션의 수행 결과를 참조할 수 없다.

    Durablility(영속성, 지속성)

    • 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.

     

    Transaction의 연산 및 상태

    Commit 연산

    • Commit 연산은 한개의 논리적 단위(트랜잭션)에 대한 작업이 성공적으로 끝나고, 데이터베이스가 다시 일관된 상태에 있을 때 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산.

     

    Rollback 연산

    • Rollback 연산은 하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 트랜잭션의 일부가 정상적으로 처리되었더라도 트랜잭션의 원자성을 구현하기 위해 이 트랜잭션이 행한 모든 연산을 취소하는 연산.
    • Rollback연산시 해당 트랜잭션을 재시작하거나 폐기한다.

     

    Transaction의 상태

      -> 부분 완료 -> 완료
    활동 ->    
      -> 실패 -> 철회
    • 활동(Active) : 트랜잭션이 실행중인 상태를 말한다.
    • 실패(Failed) : 트랜잭션 실행에 오류가 발생하여 중단된 상태
    • 철회(Aborted) : 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태
    • 부분 완료(Pratially Committed) : 트랜잭션의 마지막 연산까지 실행 했지만, Commit 연산이 실행되기 직전의 상태
    • 완료(Committed) :  트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태

    Spring에서 트랜잭션 처리하는 방법

    • Annotation을 사용하는 방식을 일반적으로 사용한다.
    • @Transactional 을 클래스, 메소드 위에 추가해서 사용하는 선언적 트랜잭션이다.
    • Annotation을 붙이면 클래스에 트랜잭션 기능이 적용된 프록시 객체가 생성된다.
    • 프록시 객체는 어노테이션이 포함된 메소드가 호출 될 경우, PlatformTransactionManager를 사용하여 트랜잭션을 시작한다.

    '개발' 카테고리의 다른 글

    MSA?  (0) 2020.12.04
    Rest API ?  (0) 2020.12.03
    Spring AOP  (0) 2020.11.30
    Spring 기초  (0) 2020.11.28
    Servlet?  (0) 2020.10.23
Designed by Tistory.