Day5

이한주·2023년 2월 27일
0

@SpringBootTest와 @WebMvcTest의 차이점을 설명해 주세요.

=> @SpringBootTest를 사용하게 되면 웹 애플리케이션 컨텍스트에 대한 모든 구성이 로드된다.
애플리케이션의 모든 Bean을 스캔해 로드하기 때문에 실제 환경과 동일하게 테스트 할 수 있으나, 시간이 오래걸린다.
주로 통합 테스트에서 사용되는 애노테이션이다.

=> @WebMvcTest는 Web Layer만 테스트할 때 사용한다.
@WebMvcTest(ContollerClassName.class)로 특정 컨트롤러만 인스턴스화 하여 테스트하는 것도 가능하다.
컨트롤러의 의존성은 @MockBean으로 모의 의존관계 생성 및 주입한다.
MockMvc객체를 주입받아 해당 객체를 이용하여 테스트 진행한다.

트랜잭션이 무엇인지 설명해 주세요.

=> 트랜잭션은 DB에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말한다.
즉 여러 쿼리들을 하나로 묶는 단위를 말한다.
트랜잭션의 특징은 ACID가 있다.

=> 원자성 (Atomicity)

  • 트랜잭션과 관련된 일이 모두 수행되거나 되지 않음을 보장하는 특징이다.
  • 트랜잭션 수행 도중 문제가 발생하면 롤백하여 모두 수행되지 않음을 보장한다.

=> 일관성 (Consistency)

  • 허용된 방식으로만 데이터를 변경해야 하는 것을 의미한다.
  • DB에 기록되는 데이터는 여러 조건에 따라 유효함을 가져야 한다.

=> 격리성 (Isolation)

  • 트랜잭션 수행 시 다른 트랜잭션과 서로 끼어들지 못하는 것을 말한다.
  • 복수의 트랜잭션이 서로 격리되어 병렬적으로 작동해야 한다.

=> 지속성

  • 성공적으로 수행된 트랜잭션은 영원히 반영되어야 한다는 것을 말한다.
  • DB에 시스템 장애가 발생해도 원래대로 복구하는 회복 기능이 있어야 함을 뜻한다.
  • DB는 체크섬, 저널링, 롤백등을 지원해준다.

격리 수준

  1. READ UNCOMMITED
  • 가장 낮은 격리 수준이다.
  • 하나의 트랜잭션이 커밋되기 이전에 다른 트랜잭션에 노출되는 문제가 있지만 가장 빠르다.
  • 데이터 무결성을 위배하므로 사용하지 않는 것이 좋다.
  1. READ_COMMITED
  • 가장 많이 사용되는 격리 수준으로 MySQL, PostreSQL, SQL Servier, Oracle 등에서 기본값으로 설정돼 있다.
  • 다른 트랜잭션이 커밋하지 않은 정보는 읽을 수 없다.
  • 한 트랜잭션이 접근한 행을 다른 트랜잭션이 수정할 수 있다.
  1. REPEATABLE_READ
  • 한 트랜잭션이 수정한 행을 다른 트랜잭션이 수정할 수 없도록 막아준다.
  • 새로운 행을 추가하는 것은 막지 않는다.
  1. SERIALIZABLE
  • 트랜잭션을 순차적으로 진행시킨다.
  • 여러 트랜잭션이 동시에 같은 행에 접근할 수 없다.
  • 교착상태가 일어날 확률도 많고 가장 성능이 떨어진다.

TCP와 UDP의 공통점과 차이점을 설명해보세요.

=> TCP와 UDP 모두 전송 계층에 속하며 데이터를 보내기 위한 프로토콜이다.
데이터 오류검사를 위한 체크섬을 존재한다.

=> TCP는 패킷 사이의 순서를 보장하여 연결지향 프로토콜을 사용해서 연결을 하므로 신뢰성을 구축해 수신 여부를 확인하며 가상회선 패킷 교환 방식을 사용한다.
3-way handshaking 과정을 통해 연결을 확보하고 4-way handshaking을 통해 연결을 해제한다.

=> UDP는 패킷 순서를 보장하지 않고 수신 여부를 확인하지 않으며 단순히 데이터만 주는 데이터그램 패킷 교환 방식을 사용한다.

가상회선 패킷 교환 방식

  • 각 패킷에 가상회선 식별자가 포함되며 모든 패킷을 전송하면 가상회선이 해제되고 패킷들은 전송된 순서대로 도착하는 방식을 말한다.

데이터그램 패킷 교환 방식

  • 패킷이 독립적으로 이동하며 최적의 경로를 선택하여 가는데, 하나의 메시지에서 분할된 여러 패킷은 서로 다른 경로로 전송될 수 있고 도착한 순서가 다를 수 있는 방식을 뜻한다.

TCP 연결 과정

  • 3-way hanshake 작업을 진행한다.
  1. SYN 단계
  • 클라이언트는 서버에 ISN을 담아 SYN을 보낸다.
  1. SYN + ACK 단계
  • 서버는 SYN을 수신하고 서버의 ISN을 보낸다.
  • 승인번호로 클라이언트 ISN + 1을 보낸다.
  1. ACK 단계
  • 승인번호로 서버의 ISN + 1한 값으로 ACK를 보낸다.

TCP 해제 과정

  • 4-way hanshake 작업을 진행한다.
  1. 클라이언트가 서버에게 FIN을 보낸다. 클라이언트는 FIN_WAIT_1 상태로 들어간다.
  2. 서버는 클라이언트에게 ACK를 보낸다. 그리고 CLOSE_WAIT 상태에 들어간다.
    클라이언트는 ACK를 받으면 FIN_WAIT_2 상태가 된다.
  3. 서버는 ACK를 보내고 일정 시간 이후에 FIN을 보낸다.
  4. 클라이언트는 TIME_WAIT 상태가 되고 서버로 ACK를 보낸다.
    서버는 CLOSED 상태가 된다.
    클라이언트는 어느 정도 대기한 후 연결이 닫히고 클라이언트와 서버의 모든 자원의 연결이 해제된다.

체크섬

체크섬은 전송된 데이터가 변형이 되지 않았는지 확인하는 값이다.
전송하려는 세그먼트의 값들을 이용해 체크섬을 만들어서 세그먼트에 담아 전송한다.
세그먼트를 받은 상대는 세그먼트의 값들을 이용해 다시 체크섬을 계산하고 세그먼트에 저장된 체크섬 값과 비교한다.
세그먼트의 값들 중 하나라도 변경되면 체크섬 값이 바뀌기 때문에 이 두 값이 다르다면 전송 중 세그먼트의 내용이 변형되었음을 의미한다.

0개의 댓글