Q1. 트랜잭션이 무엇인지 설명해주세요.
트랜잭션은 DB에서 하나의 논리 기능을 수행하기 위한 쿼리 묶음입니다. 트랜잭션의 특징으로는 원자성, 일관성, 격리성, 지속성의 ACID가 있습니다.
원자성이란, "all or nothing"을 의미하며, 커밋과 롤백으로 이를 보장합니다.
일관성은 "허용된 방식"으로만 데이터를 변경하는 것을 의미합니다. 예를 들어, 계좌 잔고가 0원이라면 5만원을 타 계좌로 입금할 수 없습니다.
격리성이란 트랜잭션 중 서로 끼어들지 못하는 것을 의미합니다.
격리 수준에는 SERIALIZABLE, REPEATABLE_READ, READ_COMMITED, READ_UNCOMMITED의 격리 수준이 존재하고, 격리 수준에 따라 한 트랜잭션 내에서 동일한 쿼리를 보냈을 때 해당 조회 결과가 다른 팬텀리드, 한 트랜잭션 내에 같은 행에 두 번 이상 조회가 발생했을 때 값이 다른 반복 가능하지 않은 조회, 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 행의 데이터를 읽을 수 있는 더티 리드 현상이 발생합니다.
마지막으로 지속성이란 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미합니다. 대게 DB는 시스템 장애가 발생해도 복구할 수 있는 여러 기능을 제공하여 지속성을 갖습니다.
Q2. TCP와 UDP의 공통점과 차이점을 설명해보세요.
TCP와 UDP는 TCP/IP 4계층 중 전송계층에 해당하며, 송신자와 수신자 사이의 데이터 전송 방식입니다.
제가 프로젝트에 사용했던 websocket 통신이 바로 TCP 방식으로 실시간 양방향 통신을 하는 방법이었고, websocket외에도 dgram이라는 node 내장 패키지를 사용하면 UDP 방식으로 실시간 양방향 통신이 가능합니다.
TCP는 패킷 사이의 순서를 보장하고 연결지향 프로토콜을 사용하여 연결 신뢰성을 확보하고 수신 여부를 확인하는 '가상회선 패킷 교환 방식'을 사용합니다.
TCP 신뢰성을 확보할 때 3 way handshake 작업을 진행합니다. 우선 SYN 단계로, 클라이언트에서 서버로 자신의 ISN을 담아 요청을 보냅니다. 서버에서는 SYN + ACK 단계로, 이를 받아 서버의 ISN과 승인 번호로 클라이언트의 ISN+1을 보냅니다. 마지막으로 ACK 단계에서 클라이언트는 서버의 ISN+1 값을 승인번호로 담아 서버로 보냅니다.
가상회선 패킷 교환 방식은 각 패킷에 가상회선 식별자가 포함되어 모든 패킷을 전송하면 가상회선이 해제되고 패킷들은 전송된 순서대로 도착하는 방식을 말합니다.
UDP는 메시지 순서를 보장하지 않고 수신여부를 확인하지 않으며 단순히 데이터만 주는 '데이터그램 패킷 교환 방식'을 사용합니다.
데이터그램 패킷 교환 방식은 패킷이 독립적으로 이동하며 최적의 경로를 선택하여 이동하므로, 하나의 메세지에서 분리된 여러 패킷이 전송되는 경로가 다를 수 있고 도착 순서 또한 다를 수 있는 방식을 뜻합니다.
또, UDP에서는 3 way handshake를 하지 않기 때문에 신뢰성이 없는 계층이라고 합니다.
'항해99_10기 > 105일의 TIL & WIL' 카테고리의 다른 글
[기술면접 스터디] [230301] 프로그래밍 패러다임, 시간복잡도 & 공간복잡도 (0) | 2023.03.02 |
---|---|
[기술면접 스터디] [230228] WS & WAS, 자료구조 (stack, queue, array, linked list) (0) | 2023.03.02 |
[기술면접 스터디] [230224] parameter vs argument, process vs thread (0) | 2023.02.24 |
[기술면접 스터디] [230223] MAS / generics / List, Set, Map, HashTable (0) | 2023.02.23 |
[기술면접 스터디] [230222] DI와 DB 인덱스 (0) | 2023.02.22 |