@Autowired와 @Mock은 스프링 프레임워크와 Mockito 라이브러리에서 사용되는 애노테이션으로, 각각 스프링의 의존성 주입과 목 객체(Mock Object)를 다루는 데 사용됩니다.@Autowired 애노테이션은 스프링 프레임워크에서 사용되며, 의존성 주입(Dependency Injection)을 수행하는 데 사용됩니다. 클래스의 필드, 생성자, 메서드에 붙여서 해당 컴포넌트나 빈을 주입할 수 있게 해줍니다. 스프링은 이 애노테이션을 사용하여 자동으로 필요한 빈(Bean)을 찾아서 주입합니다.
@Mock 애노테이션은 Mockito 라이브러리에서 사용되며, 목 객체(Mock Object)를 생성하는 데 사용됩니다. 목 객체는 실제 객체를 흉내내면서 특정 동작을 시뮬레이션하거나, 객체 간의 상호작용을 검증하는 데 사용됩니다. 테스트할 때 실제 객체 대신 목 객체를 사용하여 행위나 상태를 확인하고 테스트하는 것이 가능해집니다.
@InjectMocks는 Mockito 프레임워크에서 사용되는 애노테이션으로, 테스트 대상 객체(클래스)에 목(Mock) 객체를 주입해주는 역할을 합니다. 주로 테스트 대상 객체에 목 객체를 주입하여 테스트 환경을 구성할 때 사용됩니다.
예를 들어, 아래와 같은 클래스가 있다고 가정해봅시다:
javaCopy code
public class CommentController {
private CommentService commentService;
// 생성자와 메서드 등
}
위의 CommentController 클래스에서 CommentService 객체에 대한 의존성이 있습니다. 이 클래스를 테스트할 때 실제 CommentService 객체 대신 목 객체를 주입하고 싶다면 @InjectMocks를 사용할 수 있습니다.
javaCopy code
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
public class CommentControllerTest {
@InjectMocks
private CommentController commentController;
@Mock
private CommentService commentService;
// 테스트 메서드들
}
위의 예시에서 @InjectMocks는 CommentController 객체에 @Mock로 선언한 CommentService 객체를 주입해줍니다. 이렇게 하면 테스트할 때 commentController 내부에서 commentService 객체를 목 객체로 사용하게 됩니다.
주의: @InjectMocks는 필드 주입을 사용하여 객체를 주입하므로, 주입받을 필드는 private이어야 합니다. 생성자 주입과 같은 다른 주입 방법과는 약간 다른 접근 방식이므로, 코드 품질과 유지보수성을 고려하여 사용하시면 됩니다.
@Test: JUnit 프레임워크에서 테스트 메서드임을 나타내는 애노테이션입니다. 테스트 메서드로 인식되어 실행됩니다.@Before / @BeforeEach: 각각 JUnit 4와 JUnit 5에서 사용되는 애노테이션으로, 각 테스트 메서드 실행 전에 실행할 초기화 작업을 지정합니다.@After / @AfterEach: 각각 JUnit 4와 JUnit 5에서 사용되는 애노테이션으로, 각 테스트 메서드 실행 후에 실행할 마무리 작업을 지정합니다.@BeforeClass / @BeforeAll: 각각 JUnit 4와 JUnit 5에서 사용되는 애노테이션으로, 해당 클래스 내의 테스트 메서드들이 실행되기 전에 한 번만 실행할 초기화 작업을 지정합니다.@AfterClass / @AfterAll: 각각 JUnit 4와 JUnit 5에서 사용되는 애노테이션으로, 해당 클래스 내의 테스트 메서드들이 모두 실행된 후에 한 번만 실행할 마무리 작업을 지정합니다.@DisplayName: JUnit 5에서 사용되는 애노테이션으로, 테스트 메서드의 이름을 가독성 좋게 변경할 수 있습니다.@Disabled: JUnit 4와 JUnit 5에서 사용되는 애노테이션으로, 특정 테스트 메서드를 비활성화시킬 때 사용합니다.@RunWith: JUnit 4에서 사용되는 애노테이션으로, 사용자 지정 테스트 실행기(runner)를 설정할 때 사용합니다. JUnit 5에서는 @ExtendWith를 사용합니다.@ExtendWith: JUnit 5에서 사용되는 애노테이션으로, 테스트 확장(extension)을 설정할 때 사용합니다. 예를 들어, Mockito 확장이나 Spring 확장을 사용할 수 있습니다.@Mock: Mockito에서 사용되는 애노테이션으로, 목(Mock) 객체를 생성할 때 사용합니다.@InjectMocks: Mockito에서 사용되는 애노테이션으로, 테스트 대상 객체에 목 객체를 주입할 때 사용합니다.@SpringBootTest: Spring Boot에서 사용되는 애노테이션으로, 통합 테스트를 위해 Spring Boot 애플리케이션 컨텍스트를 로드합니다.@WebMvcTest: Spring Boot에서 사용되는 애노테이션으로, 웹 계층을 테스트할 때 필요한 빈들만 로드합니다.@DataJpaTest: Spring Boot에서 사용되는 애노테이션으로, JPA 레포지토리를 테스트할 때 필요한 빈들만 로드합니다.@MockBean: Spring Boot에서 사용되는 애노테이션으로, 목(Mock) 빈을 생성하고 애플리케이션 컨텍스트에 주입합니다.TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)는 둘 다 인터넷 프로토콜 스위트에서 사용되는 전송 계층 프로토콜로, 데이터 통신을 제어하고 관리하는 역할을 합니다. 그러나 이 둘은 서로 다른 특징과 용도를 가지고 있습니다.
TCP (Transmission Control Protocol):
UDP (User Datagram Protocol):
요약하면, TCP는 신뢰성과 데이터 순서 보장을 중요시하는 상황에서 사용되며, UDP는 빠른 데이터 전송이 중요한 상황에서 사용됩니다.
TCP 예제:
웹 브라우징, 이메일 전송, 파일 전송 등에서 사용됩니다. 데이터 신뢰성이 중요한 상황에 적합합니다.
예를 들어, 웹 브라우징에서 사용되는 HTTP 프로토콜은 TCP 위에서 동작합니다. 클라이언트(브라우저)가 서버에 웹 페이지를 요청하면 서버는 해당 페이지 데이터를 신뢰성 있게 전송하여 올바른 내용이 정확한 순서로 표시되도록 합니다.
UDP 예제:
실시간 온라인 게임, 음성 및 비디오 스트리밍, DNS(Domain Name System) 등에서 사용됩니다. 데이터 전송 속도가 중요한 상황에 적합합니다.
예를 들어, 온라인 게임에서는 빠른 데이터 전달이 필요하므로 UDP를 사용하여 게임 서버와 클라이언트 간의 실시간 데이터 교환을 수행합니다. 게임에서는 속도가 중요하기 때문에 일부 데이터의 손실이나 순서 변경이 큰 문제가 되지 않을 수 있습니다.
이처럼 TCP와 UDP는 각각의 특성에 따라 다양한 분야에서 활용되며, 데이터의 신뢰성과 전송 속도에 따라 선택하여 사용합니다.
스케줄러 (Scheduler):
스케줄러는 주로 운영 체제에서 사용되는 개념으로, 프로세스나 작업의 실행 순서와 우선순위를 관리하는 역할을 합니다. CPU 스케줄러, 디스크 스케줄러, 네트워크 스케줄러 등 다양한 종류의 스케줄러가 있습니다. CPU 스케줄러는 준비 상태에 있는 프로세스 중 어떤 것을 실행시킬지 결정하며, 디스크 스케줄러는 디스크에 입출력 요청이 있을 때 어떤 요청을 먼저 처리할지 결정합니다.
스케줄링 (Scheduling):
스케줄링은 더 일반적인 개념으로, 어떤 작업을 어느 순서로 처리할 것인지 결정하는 과정을 의미합니다. 이는 운영 체제뿐만 아니라 다양한 분야에서 사용될 수 있습니다. 예를 들어, 작업 관리, 자원 할당, 프로젝트 일정 관리 등에서 스케줄링이 사용됩니다.
요약하면, 스케줄러는 특정 작업을 처리하는 역할을 하며 주로 운영 체제에서 사용되며, 스케줄링은 작업들을 어떤 순서로 처리할지 결정하는 일반적인 개념으로 다양한 분야에서 사용됩니다.
→ 월요일로!
→ 금요일에(목요일 것으로) 스케줄링에 대해서 발표하신 부리더님(리더님도 준비!), 내가 오늘 스케줄러, 스케줄링이 나와서 월요일에 이야기 해보기로!