[Interview] 면접 관련 정리12
RDBMS와 NoSQL은 언제 사용하는 것이 좋은가?
- RDBMS
- 관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션의 경우
- NoSQL은 여러 컬렉션을 모두 수정해야 하기 때문에 비효율적이다.
- 변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우
- 관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션의 경우
- NoSQL
- 정확한 데이터 구조를 알 수 없거나, 변경/확장될 수 있는 경우
- 읽기를 자주 하지만, 데이터 변경은 자주 없는 경우
- DB를 수평적으로 확장해야 하는 경우(대용량 데이터를 다루는 경우)
Transaction
DB의 상태를 변화(DML)시키기 위해 수행되는 작업 단위
작업 단위 : 많은 SQL 명령문을 사람이 정하는 기준에 따라 정하는 것.
특징
- 원자성(Atomicity)
- 트랜잭션이 DB에 모두 반영되거나, 전혀 반영되지 않아야 한다.
- 일관성(Consistency)
- 트랜잭션의 작업 처리 결과는 항상 일관성 있어야 한다.
- 독립성(Isolation)
- 둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 때, 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없다.
- 지속성(Durability)
- 트랜잭션이 성공적으로 완료되었으면, 결과는 영구적으로 반영되어야 한다.
Transaction Isolation Level
Isolation Level : 트랜잭션에서 일관성 없는 데이터를 허용하도록 하는 수준
필요성
DB는 ACID 특징과 같이 트랜잭션이 독립적인 수행을 하도록 한다.
따라서, Locking을 통해 트랜잭션이 DB를 다루는 동안 다른 트랜잭션이 관여하지 못하도록 막는것이 필요하다.
하지만, 무조건 Locking으로 동시에 수행되는 많은 트랜잭션을 순서대로 처리하는 방식으로 구현하면, DB의 성능이 떨어진다.
종류
- Read Uncommitted(레벨 0)
- SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸리지 않는 계층
- Ex) 사용자1이 데이터 A -> B로 변경하는 동안 사용자2는 커밋되지 않았지만 데이터 B를 읽을 수 있다.
- DB의 일관성 유지 X
- Read Committed(레벨 1)
- SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸리는 계층
- Ex) 사용자1이 데이터 A -> B로 변경하는 동안 사용자2는 해당 데이터에 접근이 불가능하다.
- 트랜잭션이 수행되는 동안 다른 트랜잭션은 접근할 수 없어 대기한다.
- commit이 이루어진 트랜잭션만 조회 가능
- 대부분의 SQL 서버가 Default로 사용하는 Level.
- Repeatable Read(레벨 2)
- 트랜잭션이 완료될 때 까지 SELECT 문장이 사용하는 모든 데이터에 Shared Lock이 걸리는 계층
- 트랜잭션이 범위 내에서 조회한 데이터 내용이 항상 동일함을 보장
- 다른 사용자는 트랜잭션 영역에 해당되는 데이터에 대한 수정 불가
- MySQL에서 Default로 사용하는 Level.
- Serializable(레벨 3)
- 트랜잭션이 완료될 때 까지 SELECT 문장이 사용하는 모든 데이터에 Shared Lock이 걸리는 계층
- 완벽한 읽기 일관성 모드 제공
- 다른 사용자는 트랜잭션 영역에 해당되는 데이터에 대한 수정 및 입력 불가.
선택 시 고려사항
동시성이 높아질수록 데이터 무결성에 문제가 발생한다.
레벨을 높게 조정할수록 비용이 증가한다.
OSI 7 계층
네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것.
7 계층으로 나눈 이유
통신이 일어나는 과정을 단계별로 파악할 수 있고, 특정한 곳에 이상이 생기면 그 단계만 수정할 수 있기 때문이다.
단계
1.물리(Physical)
이 계층에서는 단지 데이터를 전달만 할 뿐, 전송하려는(또는 받으려는) 데이터가 무엇인지, 어떤 에러가 있는지 등에는 전혀 신경쓰지 않는다.
단지 데이터 전기적인 신호로 변환해서 주고받는 기능만 할 뿐이다.
Ex) 케이블, 리피터, 허브를 통해 데이터 전송.
2.데이터 링크(Data Link)
물리 계층을 통해 송수신되는 정보의 오류와 흐름을 관리하여 안전한 정보의 전달을 수행할 수 있도록 도와주는 역할을 한다.
따라서, 통신에서의 오류도 찾아주고, 재전송도 하는 기능을 가지고 있다.
Ex) 브릿지, 스위치
3.네트워크(Network)
데이터를 목적지까지 가장 안전하고 빠르게 전달하는 기능(라우팅)을 담당한다.
라우터를 통해 이동할 경로를 선택하여 IP 주소를 지정하고, 해당 경로에 따라 패킷을 전달한다.
Ex) 라우터, IP
4.전송(Transport)
TCP와 UDP 프로토콜을 통해 통신을 활성화하기 위한 계층이다.
보통 TCP 프로토콜을 이용하며, 포트를 열어서 응용프로그램들이 전송을 할 수 있게 한다.
만약 데이터가 왔다면 4계층에서 해당 데이터를 하나로 합쳐서 5계층으로 넘겨준다.
5.세션(Session)
데이터가 통신하기 위한 논리적인 연결을 담당하며, 통신을 하기위한 대문이라고 생각하면 된다.
하지만, 4계층에서도 연결을 맺고 종료할 수 있기 때문에, 어느 계층에서 통신이 끊어졌는지 판단하기에는 한계가 있다.
그러므로 세션 계층은 4계층과 무관하게 응용 프로그램 관점에서 봐야한다.
세션 설정, 유지, 종료, 전송 중단 시 복구 등의 기능이 있다.
Ex) API, Socket
6.표현(Presentation)
데이터 표현에 대한 독립성을 제공하고, 암호화하는 역할을 담당한다.
파일 인코딩, 명령어를 포장, 압축, 암호화한다.
Ex) JPEG, MPEG 등
7.응용(Application)
최종 목적지로 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행한다.
HTTP, FTP, SMTP 등과 같은 프로토콜이 있으며, 통신 패킷들은 프로토콜에 의해 모두 처리되며, 우리가 사용하는 브라우저나, 메일 프로그램은 프로토콜을 보다 쉽게 사용하게 해주는 응용 프로그램이다.
따라서, 모든 통신의 양 끝단은 응용 프로그램이 아닌 HTTP와 같은 프토토콜이다.
DNS
DNS(Domain Name System)는 범국제적 단위로 웹사이트의 IP 주소와 도메인 주소를 이어주는 환경/시스템이다.
- 웹사이트에 접속할 때 어려운 IP 주소 대신 도메인 이름을 사용한다.
- 도메인 이름을 사용했을 때 입력한 도메인을 실제 네트워크상에서 사용하는 IP 주소로 바꾸고, 해당 IP 주소로 접속하는 과정이 필요하다.
- 이러한 과정, 전체 시스템을 DNS라고 한다.
- 상위 기관에서 인증된 기관에게 도메인을 생성하거나, IP 주소로 변경할 수 있는 권한을 부여한다.
댓글남기기