SOAP(Simple Object Access Protocol)은 일반적으로 널리 알려진HTTP,HTTPS,SMTP등을 통해XML기반의 메시지를 컴퓨터 네트워크 상에서 교환하는프로토콜이다.
REST
REST(Representational State Transfer)는월드 와이드 웹과 같은 분산하이퍼미디어시스템을 위한소프트웨어 아키텍처의 한 형식이다.REST 원리를 따르는 시스템은 종종 RESTful이란 용어로 지칭된다
SOAP (Simple Object Access Protocol)
웹서비스 내의 모든 데이터는 XML로 표현된다.
그 데이터들과 이를 다룰 수 있는 오퍼레이션들이 WSDL로 정의되면 UDDI라는 전역적 서비스 저장 소에 등록(publish)되어 누구라도 서비스를 찾을 수 있도록 공개된다.
공개된 웹서비스가 이용될 때, 서비스 요청자와 서비스 제공자 간에 SOAP을 이용하 여 서비스를 호출하고 결과를 돌려받게 된다.
SOAP 메시지는 아래 그림과 같이SOAP 봉투(envelope), SOAP 헤더(header), SOAP 바디(body)로 구성된 하나의 XML 문서로 표현되는 데 이러한 복잡한 구성으로 인해 HTTP 상에서 전 달되기 무겁고, 메시지 인코딩/디코딩 과정 등 웹 서비스 개발의 난이도가 높아 개발 환경의 지원이 필요하다.
WSDL 용어는 XML이라고 보면 되고, UDDI는 일종의 검색 엔진이라고 보면 된다.
WSDL, UDDI는 웹 표준이기에 너무 복잡하게 생각하지 않아도 된다.
++ 추가 정보
SOAP는 다른 언어로 다른 플랫폼에서 빌드된 애플리케이션이 통신할 수 있도록 설계된 최초의 표준 프로토콜입니다. 프로토콜이기 때문에 복잡성과 오버헤드를 증가시키는 빌트인 룰을 적용하므로, 페이지 로드 시간이 길어질 수 있습니다. 그러나 이러한 표준은 빌트인 컴플라이언스를 제공한다는 의미이므로, 기업에서 선호하는 방식이기도 합니다. 빌트인 컴플라이언스 표준에는보안과 안정적인 데이터베이스 트랜잭션의 기본 속성인 원자성, 일관성, 격리성, 내구성(Atomicity, Consistency, Isolation and Durability, ACID)이 포함됩니다.
REST
REST는 HTTP 프로토콜로 데이터를 전달하는 프레임워크이다. 또 한 클라이언트/서버 간의 구성요소를 엄격히 분리하여 구현은 단순화시키고 확장성과 성능은 높일 수 있는아키텍처다.
여기서 리소스 (resource)란 REST 아키텍처의 핵심 요소로서 웹 사이트, 블로그, 이미지, 음악, 이용자, 지도, 검색 결 과 등웹에서 다른 이들과 공유하고자 개방된 모든 자원을 의미한다.
REST 구조에서의 리소스는 그들 의 고유한 URI를 가지며,HTTP의 기본 메소드인 GET/PUT/POST/DELETE만으로 접근할 수 있다.
HTML, XML, 일반 텍스트, JSON과 같은 다양한 형식으로 메시지를 반환할 수있습니다
RESTful 애플리케이션 필요요소
클라이언트, 서버, 리소스로 구성된 클라이언트-서버 아키텍처가 필요합니다.
요청이 통과하는 서버에 클라이언트 콘텐츠가 저장되지 않는스테이트리스(stateless)클라이언트-서버 커뮤니케이션이 필요합니다. 대신 세션의 상태에 대한 정보가 클라이언트에 저장됩니다.
일부 클라이언트-서버 간 상호 작용의 필요성을 제거할 캐시 가능 데이터가 필요합니다.
애플리케이션 요구 사항별로 다른 형식이 아닌, 표준화된 형식으로 정보를 전송할 수 있도록 구성 요소 간 통합된 인터페이스가 필요합니다. REST를 처음으로 제시한Roy Fielding은 이를 "REST 아키텍처 스타일을 다른 네트워크 기반 스타일과 차별화하는 핵심적인 기능"이라고 설명합니다.
클라이언트-서버 간의 상호 작용을 계층적으로 조정할 수 있도록 계층화된 시스템 제약이 필요합니다.
실행 가능한 코드를 전송해 서버가 클라이언트의 기능을 확장할 수 있게 해주는 코드 온디맨드가 필요합니다. 단, 가시성이 감소할 수 있으므로 이는 선택적 가이드라인입니다.
비교 :
대부분의 레거시 시스템에서 SOAP를 준수하며, REST는 그보다 뒤에 고려하거나 웹 기반 시나리오에서의 더 빠른 대안으로 여기는 경우가 많습니다. REST는 유연한 구현을 제공하는 가이드라인 세트고, SOAP는 XML 메시징과 같은 특정 요건이 있는 프로토콜입니다.
REST API는 경량화되어 있기 때문에사물 인터넷(IoT), 모바일 애플리케이션 개발,서버리스(servreless) 컴퓨팅과 같이 보다 새로운 컨텍스트에 이상적입니다. SOAP 웹 서비스는 많은 기업에서 필요로 하는 기본 보안과 트랜잭션 컴플라이언스를 제공하지만, 이로 인해 좀 더 무거운 경향이 있습니다. 또한 Google Maps API와 같은 대부분의 퍼블릭 API는 REST 가이드라인을 따릅니다.
정규화를 통해 불필요한 데이터 (redundancy)를 없앨 수 있고, 삽임/갱신/삭제 시 발생할 수 있는 각종 이상현상들을 방지 할 수 있습니다.
목적 :
1. 불필요한 데이터를 제거
2. 데이터 저장을 "논리적"으로 한다.
함수적 종속이란?
어떠한 릴레이션에서 속성들의 부분 집합을 X, Y라 할때 특정 튜픙레서 X의 값이 Y의 값을 함수적으로 결정한다면 Y가 X에 함수적으로 종속되었다고 합니다.
함수적 종속의 추론 규칙은 아래와 같습니다.
재귀 규칙 : Y가 X의 부분 집합이면 X → Y 이다.
증가 규칙 : X → Y 이면 WX → WY 이고 WX → Y 이다.
이행 규칙 : X → Y 이고 Y → Z 이면 X → Z 이다.
유니온 규칙 : X → Y 이고 X → Z 이면 X → YZ 이다.
분해 규칙 : X → YZ 이면 X → Y와 X → Z 이다.
가이행 규칙 : 만일 W → X 이고 XY → Z 이면 WY → Z 이다.
종류 :
1차 정규화 - 2차 정규화 - 3차 정규화 - BCNF - 4차 정규화 - 5차 정규화
실무적으로는 4차까지 가는 경우는 거의없다고 한다.
1차정규화
각 로우마다 컬럼의 값이 1개씩만 있어야 합니다. 이를 컬럼이 원자값(Atomic Value)를 갖는다고 한다.
위의 그림처럼 Adam이 2가지 속성을 가지고 있어서 분리해야 한다.
이렇게 되면 데이터 redundancy는 증가하게 된다.
2차 정규화
테이블의 모든 컬럼이 완전 함수적 종속을 만족해야 한다.
기본키중에 특정 컬럼에만 종속된 컬럼(부분적 종속)이 없어야 한다.
위 테이블의 경우 기본키는 (Student, Subject) 두 개로 볼 수 있습니다. 이 두 개가 합쳐져야 한 로우를 구분할 수가 있습니다. 근데 Age의 경우 이 기본키중에 Student에만 종속되어 있습니다. 즉, Student 컬럼의 값을 알면 Age의 값을 알 수 있습니다. 따라서 Age가 두 번 들어가는 것은 불필요한 것으로 볼 수 있습니다.
3차 정규화
기본키를 제외한 속성들 간의 이행적 함수 종속이 없는것
풀어서 말하자면, 기본키 이외의 다른 컬럼이 그 외 다른 컬럼을 결정할 수 없는 것.
2차 정규화와 마찬가지로 테이블을 분리하면서 해결가능
정규화 후
BCNF
3차정규형을 만족하면서모든 결정자가 후보키 집합에 속한 정규형
아래와 같은 경우를 생각해보면, 후보키는 수퍼키중에서 최소성을 만족하는 건데, 이 경우 (학생, 과목) 입니다. (학생, 과목)은 그 로우를 유일하게 구분할 수 있습니다. 근데 이 테이블의 경우 교수가결정자입니다. (교수가 한 과목만 강의할 수 있다고 가정) 즉, 교수가 정해지면 과목이 결정됩니다. 근데 교수는 후보키가 아닙니다. 따라서 이 경우에 BCNF를 만족하지 못한다고 합니다. 3차 정규형을 만족하면서 BCNF는 만족하지 않는 경우는 언제일까요? 바로일반 컬럼이 후보키를 결정하는 경우입니다.
학생
과목
교수
학점
1
AB123
김인영
A
2
CS123
Mr.Sim
A
3
CS123
Mr.Sim
A
위와 같이 테이블이 구성된 경우에 데이터가 중복되고, 갱신 이상이 발생합니다. 예를 들어 Mr.Sim이 강의하는 과목명이 바뀌었다면 두 개의 로우를 갱신해야합니다. 이를 해결하기 위해서는 마찬가지로 테이블을 분리합니다.
데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 수행되어야 할 일련의 연산들을 의미한다.
데이터베이스는 정확한 데이터를 유지 및 오류 할 발생 시 빠르게 복구하고, 데이터베이스가 항상 정확하고 일관된 상태를 유지할 수 있도록 다양한 기능을 제공하는데, 그 중심에서 가장 중요한 역할을 하는 것이 바로 트랜잭션이다. - 트랜잭션이라는 것을 관리함으로써 데이터 베이스의 회복과 병행 제어가 가능.
데이터베이스 연산은 SQL문으로 표현되므로 트랜잭션을 작업 수행에 필요한 SQL 문들의 모임으로 이해해도 됨.
트랜잭션의 모든 명령문이 완벽하게 처리되거나 하나도 처리되지 않아야 데이터 베이스 모순이 없는 일관된 상태를 유지.
트랜잭션은 데이터베이스에 장애가 발생했을 때 복구작업을 수행하거나, 다수의 사용자가 동시에 사용할 수 있도록 제어 작업을 하는 데 중요한 단위로 사용.
특징 :
1. 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위이다.
2. 사용자가 시스템에 대한 서비스 요구시 시스템이 응답하기 위한 상태 변호나 과정의 작업단위이다.
3. 하나의 트랜잭션은 Commit 되거나 Rollback된다.
성질 :
원자성(Atomicity)
1. 트랜잭션의 연산은 데이터베이스에 모두 반영 or 한개도 반영 X 둘중 하나이다.
2. 모든 명령은 완벽히 수행되어야 하며, 한개라고 오류가 생기면 전부가 취소되어야 한다.
일관성(Consistency)
1. 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다.
2. 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.
독립성(Isolation)
1. 둘 이상의 트랜잭셔이 동시에 병행 실앻되는 경우, 서로의 연산에 끼어들 수 없다.
2. 수행중인 트랜잭션은 완전히 완료될 떄까지 다른 트랜잭션에서 수행 결과를참조할 수 없다.
영속성(Durability)
1. 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.
연산 종류 :
Commit
1. 한개의 트랜잭션에 대한 작업이 성공적으로 끝났고 DB가 다시 일관도니 상태에 있을때 갱신이 완료되었다고 알려주는 연산이다.
Rollback
1. 트랜잭션 연산중 하나라도 비정상적으로 종료되어 DB의 일관성을 깨뜨렸을 때, 모든 연산을 취소하는 연산이다.
2. Rollback시에는 해당 트랜잭션을 재시작하거나 폐기한다.
상태 :
활동(Active) : 트랜잭션이 실행중인 상태
실패(Failed) : 트랜잭션 실행에 오류가 발생하여 중단된 상태
철회(Aborted) : 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태
부분 완료 (Partially Committed) : 트랜잭션의 마지막 연산까지 실행했지만, Commit 연산이 실행되기 전의 상태
완료(Committed) : 트랜잭션이 성공적으로 졸요되어 Commit 연산을실행한 후의 상태