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

@SpringBootTest는 프로젝트 내부에 있는 스프링 빈을 모두 등록해서 사용해서 테스트가 느리다는 특징이 있습니다. 실제 운영 환경에서 사용되는 클래스들을 통합해서 테스트하기 때문에 실제 환경과 가장 유사하게 테스트가 가능합니다. Service 의 메서드가 변경이 되어도 Mocking 값을 수정하지 않아도 되서 변경이 자유롭습니다. 그러나 테스트 단위가 크기 때문에 디버깅이 어렵다는 단점이 있습니다.

 

@WebMvcTest는 컨트롤러의 역할만을 테스트합니다. Web Layer에 해당하는 빈만 생성해서 테스트하기 때문에 @SpringBootTest보다 빠르다는 장점이 있습니다. 그러나 Mock 객체를 사용해서 실제 동작과는 차이가 날 수 있습니다. 또한 메서드 변경이 일어날 때 Mocking값을 수정해줘야 한다는 번거로움이 있습니다. 

 

 

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

트랜잭션이란 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위를 뜻합니다. 원자성(Atomicity)은 트랜잭션의 가장 큰 특성으로 트랜잭션 안의 작업들이 분리되어 작업불가하고 모두 반영되던가 전혀 반영되지 않아야 합니다. 일관성 트랜잭션이 진행되는 동안 데이터베이스가 변경되었더라도 기준은 트랜잭션을 진행하기 위해 참조한 데이터베이스 정보로 진행되어야 합니다. 고립성은 둘 이상의 트랜잭션이 동시에 실행되고 있을때 서로 트랜잭션 연산에 관여되지 않아야합니다. 지속성은 트랜잭션이 성공적으로 완료 되었다면 그 결과는 영구적으로 반영되어야 합니다.

 

 

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

TCP(Transmission Control Protocol)는 신뢰성 있는 데이터 전송을 지원하는 연결 지향형 프로토콜로 일반적으로 TCP와 IP가 함께 사용되는데, IP가 데이터의 전송을 처리한다면 TCP는 패킷 추적 및 관리를 하게 됩니다. 연결 지향형인 TCP는 3-way handshaking이라는 과정을 통해 연결 후 통신을 시작하는데, 흐름 제어와 혼잡 제어를 지원하며 데이터의 순서를 보장합니다. UDP(User Datagram Protocol)는 비연결형 프로토콜로써, 인터넷상에서 보내는 쪽에서 일방적으로 데이터를 전달하는 통신 프로토콜로 TCP와는 다르게 연결 설정이 없으며, 혼잡 제어를 하지 않기 때문에 TCP보다 전송 속도가 빨라 실시간 동영상 스트리밍 서비스 같은 서비스에 적합합니다. 그러나 데이터 전송에 대한 보장을 하지 않기 때문에 패킷 손실이 발생할 수 있습니다.

 

 

 

+ Recent posts