@ParameterizedTest를 언제 사용해야 할까?
2022. 3. 3. 17:55
기타 IT
@ParameterizedTest를 언제 사용해야 할까? @ParameterizedTest와 조합으로 @ValueSource, @CsvSource를 많이 사용할 것이다. 나는 개인적으로는 잘 사용하지 않는 기능이다. 이유는 가독성이 떨어진다고 생각했기 때문이다. 아무래도 여러 케이스를 묶어서 테스트를 작성하다보니, 파라미터만으로 어떤 테스트를 의미하는지 이해하기 불편하다고 생각을 했다. 하지만 모든 것은 장단점이 있기 때문에 이번 기회에 피드백을 받고 사용을 해보며, 어떤 점이 좋을지 찾아보았다. @ParameterizedTest의 장점 여러가지가 있겠지만 내가 느낀 장점은 한 가지였다. 간결하게 작성할 수 있다. 아무래도 중복되는 케이스인데 데이터만 다른데 케이스가 많으면, 관리할 코드가 많아져서 이 ..
Java Comparator, Comparable
2022. 2. 22. 16:26
Java
Java Comparator, Comparable Comparator와 Comparable이란? 객체 정렬에 필요한 메서드를 제공하는 인터페이스 Comparable 객체의 기본 정렬 메서드를 제공하는 인터페이스 public interface Comparable { int compareTo(Object o); // 주어진 객체(o)를 자신과 비교 } Comparator 기본 정렬 기준 외에 다른 기준으로 정렬할 때 사용하는 인터페이스 public interface Comparator { int compare(Object o1, Object o2); } 기본 정렬과 기본 정렬이 아닌 것이 뭘까? 기본 정렬이란 말 그대로 디폴트 정렬을 의미합니다. 특별히 정렬 기준을 설정하지 않는다면, 기본 정렬 기준을 사용..
스프링에서 싱글톤 빈을 사용해도 위험하지 않은가?
2022. 2. 14. 23:26
Spring
스프링은 싱글톤 빈인데 어떻게 여러 요청을 한 번에 처리하지? 이런 생각이 든 이유는 10개의 요청이 들어왔다고 할 때 싱글톤 빈들을 공유할텐데 어떻게 같이 사용하지? 요청당 쓰레드가 할당 되는 것은 맞는데 이상한데?? 모르겠다. 그냥 뭔가 이상했다. 이상한 점 멀티 쓰레드가 하나의 빈을 사용할 수 있나? 기다려야 하는 것 아닌가? 동시에 사용이 가능하다면 값이 변경되면 위험한거 아닌가? 어떻게 한개의 빈이 여러 요청을 처리할 수 있는거지? 해당 글을 읽고나니 당연하게 알고 있는 내용이었다. 그래도 정리 해보자. 멀티 쓰레드가 하나의 빈을 사용할 수 있나? 기다려야 하는 것 아닌가? 멀티 쓰레드는 CPU당 하나의 쓰레드를 기본적으로 생성하게 된다. CPU가 4개이면 8개의 쓰레드를 2개씩 나누어서 한다고..
스프링 HTTP 메시지 컨버터
2022. 2. 14. 22:34
Spring
HTTP 메시지 컨버터 뷰 템플릿으로 HTML을 생성해서 응답하지 않고, HTTP API처럼 JSON 데이터를 HTTP 바디에서 직접 읽거나 쓰는 경우 HTTP 메시지 컨버터를 사용하면 편리하다. HTTP 메시지 컨버터란? 요청 및 응답이 왔을 경우 HttpServlet등을 하위 레벨을 사용하면 직접 request, response 객체에 write도 하고 여러가지 작업을 직접 해야하므로 불편하기 때문에 이를 편리하게 사용할 수 있도록 @ReqeustBody, @ResponseBody 등을 읽어 사용하기 편한 형태로 제공하는 컨버터이다. 스프링 MVC는 어떤 상황에 HTTP 컨버터를 사용할까? @ReqeustBody, HttpEntity(RequestEntity) @ResponseBody, HttpEnt..
스프링의 뷰 리졸버
2022. 1. 24. 12:15
Spring
뷰 리졸버의 동작 방식을 살펴 보자. 먼저 아래와 같이 Controller 인터페이스를 사용한 어댑터로 테스트를 해보자. return new ModelAndView(”new-Form”); 과 같이 사용할 수 있다. @Component("/springmvc/old-controller") public class OldController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println("OldController.handleRequest"); return new Mode..
스프링의 핸들러 매핑과 어댑터
2022. 1. 24. 12:10
Spring
스프링은 어댑터 패턴 기반의 프론트 컨트롤러 패턴으로 컨트롤러를 제공하는 핸들러 매핑과 어댑터를 제공한다. 과거에 사용했던 것들을 알아 보자. Controller 인터페이스 @Controller 아님 package org.springframework.web.servlet.mvc; @FunctionalInterface public interface Controller { /** * Process the request and return a ModelAndView object which the DispatcherServlet * will render. A {@code null} return value is not an error: it indicates that * this object completed r..
스프링 MVC 구조 알아보기
2022. 1. 24. 12:08
Spring
이전 글에서 프론트 컨트롤러 패턴으로 프레임 워크를 구현해봤는데 그 구조는 스프링 MVC와 동일하다. 직접 만든 프레임워크와 스프링 MVC 비교 FrontController → DispatcherServlet handlerMappingMap → HandlerMapping(inerterface) MyHandlerAdapter → HandlerAdapter ModelView → ModelAndView viewResolver → ViewResolver(interface) MyView → View(인터페이스) 디스패쳐 서블릿(DispatchServlet) 구조 지금까지 위의 내용은 스프링 MVC를 아주 간단하게 만든 프레임워크이다. 즉, 스프링에서 DispatcherServlet이 프론트 컨트롤러이며, 가장 핵..
프론트 컨트롤러 패턴
2022. 1. 24. 12:06
Spring
프론트 컨트롤러란? 서블릿 하나로 클라이언트의 요청을 다 받아서 공통 처리를 중복없이 하기 위해 사용된다. 이후 나머지 컨트롤러들은 서블릿이 사용하지 않는다. 프론트 컨트롤러가 요청을 받고 응답하기 때문이다. 프론트 컨트롤러가 받아서 다른 컨트롤러를 사용하기 떄문이다. 스프링도 DispatcherServlet이 FrontController이다. 출처 : 김영한의 MVC1편 위와 같이 프론트 컨트롤러에 모든 요청이 오고 공통 작업을 처리하고 각 컨트롤러를 호출해 주는 것이다. 구조 살펴 보기 구조를 살펴보면 아래와 같다. 프론트 컨트롤러에 요청이 온다. → 프론트 컨트롤러는 HttpServlet을 상속 받는다. 프론트 컨트롤러는 컨트롤러들의 URL 관련 정보들을 갖고 있는데 여기서 조회를 한다. → int..