-
이것저것 공부한거 (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