본문 바로가기

개발자 면접준비

[Daily] 3월 31일 데일리 과제

Q. 프로세스와 스레드의 차이에 대해 설명해 주세요

A. 프로세스(Process)와 스레드(Thread)는 컴퓨터에서 실행되는 여러 작업들을 관리하기 위한 용어입니다.

프로세스는 운영체제로부터 자원을 할당받아 실행 중인 프로그램의 인스턴스를 의미합니다. 즉, 프로그램을 실행하기 위한 메모리, CPU 시간, 파일, 네트워크 연결 등의 시스템 자원을 할당받고, 각각 독립된 메모리 영역을 가지고 실행됩니다. 프로세스는 다른 프로세스와 독립적으로 실행되며, 프로세스 간 통신(IPC)을 통해 서로 통신할 수 있습니다.

 

반면에 스레드는 프로세스 안에서 실행되는 작은 실행 단위를 의미합니다. 즉, 스레드는 프로세스 내에서 동시에 실행되는 작업 단위입니다. 스레드는 부모 프로세스의 자원을 공유하며, 프로세스 내에서 다른 스레드와 메모리를 공유할 수 있습니다. 이러한 특징 때문에 스레드는 프로세스보다 경량화되어 있으며, 실행 속도가 빠릅니다

 

스레드는 동시에 실행되므로 멀티태스킹에 유용하며, 프로세스 간 통신보다는 스레드 간 통신이 더 효율적입니다. 하지만 스레드 간 동기화와 교착상태 등의 문제도 발생할 수 있기 때문에, 잘 설계된 멀티스레드 프로그램을 작성하기 위해서는 스레드 간의 동기화와 관련된 문제를 잘 이해하고 처리해야 합니다

 

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

A. @SpringBootTest는 애플리케이션 컨텍스트를 로드하는 데 사용되는 어노테이션입니다. 이 어노테이션을 사용하면 스프링 부트 애플리케이션을 실행하고, 애플리케이션의 모든 빈을 로드하여 사용할 수 있습니다. 이 어노테이션은 스프링 애플리케이션의 전체적인 동작을 검증하고, 애플리케이션과 상호작용하는 통합 테스트를 작성하기에 적합합니다.

 

@WebMvcTest는 스프링 MVC 웹 애플리케이션의 테스트를 작성하는 데 사용되는 어노테이션입니다. 이 어노테이션은 애플리케이션의 웹 레이어만 로드하므로, 테스트를 더 빠르게 실행할 수 있습니다. 이 어노테이션은 특정 컨트롤러의 동작을 검증하거나, 웹 레이어와 상호작용하는 유닛 테스트를 작성하기에 적합합니다.

따라서, @SpringBootTest는 전체 애플리케이션의 통합 테스트를 작성할 때 사용하며, @WebMvcTest는 특정 컨트롤러나 웹 레이어의 유닛 테스트를 작성할 때 사용됩니다.


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

A. TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)는 인터넷에서 주로 사용되는 프로토콜로, 데이터를 전송하는 방식이 서로 다릅니다.

 

TCP는 연결 지향적인 프로토콜입니다. 즉, 데이터 전송 전에 먼저 연결을 수립한 후, 데이터를 전송합니다. 

반면, UDP는 비연결성 프로토콜로, 데이터를 전송하기 전에 연결을 수립하지 않습니다.


TCP는 신뢰성을 중시하는 프로토콜로, 오류 검사와 재전송 기능 등의 기능을 갖추고 있습니다. 

반면, UDP는 속도를 중시하는 프로토콜로, 오류 검사와 재전송 기능을 제공하지 않습니다.


TCP는 전송되는 데이터의 크기에 제한이 있습니다. 

반면, UDP는 크기 제한이 없으며, 대신 데이터의 손실 가능성이 높습니다.


TCP는 스트리밍 데이터를 전송하기에 적합합니다. 반면, UDP는 실시간 데이터 전송에 적합합니다.


따라서, TCP는 신뢰성을 중시하는 데이터 전송에 적합하며, UDP는 빠른 전송 속도와 실시간 전송이 필요한 경우에 적합합니다.