@SpringBootTest
는 프로젝트 내부에 있는 스프링 빈을 모두 등록하며, 실제 운영 환경에서 사용되는 클래스들을 통합해서 테스트를 진행한다.
따라서 실제 환경과 유사하게 테스트가 가능하다는 장점이 있지만, 모든 빈을 등록하기 때문에 느리고 테스트 단위가 커서 디버깅이 까다롭다는 단점이 있다.
@WebMvcTest
는 컨트롤러의 역할만을 테스트하며 Web Layer에 해당하는 빈만 빠르게 생성한다.
@Component를 등록하지 않기 때문에 필요한 빈을 직접 채워야하지만 테스트가 훨씬 빠르다는 장점이 있다.
통합테스트에서 진행이 어려운 경우 Mock으로 테스트할 수 있으나 Mock 객체를 사용하므로 실제 동작과 차이가 있다.
트랜잭션은 데이터베이스의 상태를 변경시키기 위해 수행하는 작업의 단위를 말하며, 원자성/일관성/독립성/지속성의 특징을 가지고 있다.
원자성
은 트랜잭션 내에서 실행한 작업들은 하나의 작업인 것 처럼 모두 성공하거나 모두 실패해야 함을 의미하며, 일관성
은 모든 트랜잭션의 작업 결과가 같아야 한다는 것을 의미한다.
독립성
은 각각의 트랜잭션은 독립적으로 수행되어야 함을 뜻하는데, 동시에 같은 데이터를 수정하지 못하도록 하는 것을 말한다.
또한, 지속성
은 트랜잭션이 성공적으로 완료된다면 변화된 상태가 지속적으로 반영되어야 함을 말한다.
이미 트랜잭션이 진행중일 때 추가 트랜잭션 진행을 어떻게 할 지 결정하는 것을 말한다.
TCP와 UDP는 인터넷 프로토콜 스택의 4계층 중 전송계층에 속하는 전송 제어 프로토콜이다.
둘다 포트 번호를 이용하여 주소를 지정하고, 데이터 오류 검사를 위한 체크섬이 존재한다는 공통점이 있다.
TCP는 연결형 프로토콜이며 UDP는 비연결형 프로토콜이다.
TCP는 신뢰성 있는 데이터 송수신을 지원하지만, UDP는 신뢰성이 낮은 대신 TCP보다 전송 속도가 빠르다는 차이점을 가지고 있다.