Spring MVC 클라이언트 요청이 들어오면 ViewResolver를 통해 클라이언트에게 text/html 타입의 view 응답을 보낸다. RESTful 클라이언트의 요청이 들어오면 MessageConverter를 통해 application/json이나 text/plain 등 알맞은 형태로 리턴한다. 차이점 : 기존 MVC는 DispatcherServlet을 거쳐 view를 응답하지만 RESTful은 DispatcherServlet을 거치지 않고 json 형식의 데이터를 응답한다.
외부설정파일에는 yml 과 properties 파일이 있다 나는 yml 파일을 자주 사용하기 때문에 자세한 설명에 대한 것은 yml 파일 기준으로 작성하였다 자동 구성 별도의 코드 작성 없이 스프링이 알아서 감지하여 빈을 생성하는 기능 자동구성의 예: 스프링을 사용할 경우 DataSource 생성과 연결을 위한 메소드를 작성하고 @Bean 어노테이션을 붙임으로써 스프링 어플리케이션 컨텍스트에 빈을 생성하였다. 하지만 스프링부트에서는 의존성 라이브러리(예를들어 H2)를 pom.xml에 작성한다면 런타임 시점에 스프링부트가 해당 빈을 자동으로 찾아 스프링 애플리케이션 컨텍스트에 생성한다. 이처럼 별도의 코드 작성 없이 알아서 감지하여 빈을 생성하는 스프링의 기능을 자동-구성 기능이라고 한다. 스프링 외부 설..
영속성(Persistence) 애플리케이션이 종료되더라도 사라지지 않는 데이터의 특성 영속성을 가지지 않는 데이터는 애플리케이션 메모리에만 존재하기 때문에 애플리케이션을 종료하면 사라진다. 이러한 문제를 해결하기 위해 관계형 데이터베이스, 객체 데이터베이스 등을 활용하여 데이터를 영구적으로 저장하여 데이터에 영속성을 부여한다. Persistence FrameWork JDBC 프로그래밍의 복잡함없이 간단한 작업으로 데이터베이스와 애플리케이션을 연동할 수 있는 프레임워크 기준을 SQL Mapper 와 ORM으로 나눌 수 있다 모든 Persistences FrameWork는 내부적으로 자바가 지원하는 JDBC API를 이용한다 SQL Mapper 와 ORM 차이 ORM은 데이터베이스 객체를 자바 객체로 매핑함..
책에 나왔던 용어들 정리 및 요약 - 웹MVC 개발 클래스 수준에서의 @RequestMapping 사용 : 해당 컨트롤러의 루트 경로를 지정 / 해당 컨트롤러의 처리 요청 종류를 나타냄 @PostMapping / @GetMapping의 차이 : 전자는 폼형식으로 데이터를 요청하고 , 후자는 url의 파라미터 형식으로 데이터를 요청 @Slf4j : 컴파일 시에 해당 클래스에 자동으로 Logger을 생성함 / 책에서는 주문 내역로그를 보기 위해 선언 유효성 검사 - java.validation.constraints.* 필드에 알맞은 유효성 어노테이션을 붙여줌 컨드롤러에서 요청시 사용되는 클래스에 @valid 어노테이션을 붙여 유효성 검사를 활성화시켜줌 Error 파라미터를 통해 오류가 있으면 오류 확인 가능..
1.1 스프링의 동작 구조 스프링 동작 이해를 위한 기본 개념 용어 - 스프링 애플리케이션 컨텍스트(spring application context) : 애플리케이션의 컴포넌트들을 생성하고 관리하는 컨테이너 컴포넌트 또는 빈들은 컨테이너 내부에서 서로 연결되어 있어 완전한 애플리케이션을 만든다 - 의존성 주입(Dependency Injection) 방식: 빈들의 상호 연결은 의존성 주입 패턴을 기반으로 수행한다 하나의 빈에서 외부의 빈을 필요로 할때 직접 가져다쓰거나 만들어 쓰는 것이 아닌 외부(컨테이너)에게 필요한 빈을 요청하고 외부(컨테이너)는 필요한 빈을 주입시켜주는 방식이다 예전의 스프링 컨텍스트의 빈 관리는 XML 파일을 통해 이루어졌다 그러나 최신 버전의 스프링에서는 자바 기반의 구성이 더 많..
상속 관계 JpaRepository > PagingAndSortingRepository > CrudRepository PagingAndSortingRepository 는 페이징 처리를 위한 메소드를 제공해준다 아래의 코드는 PagingAndSortingRepository 인터페이스의 내부 구조이다 @NoRepositoryBean public interface PagingAndSortingRepository extends CrudRepository { /** * Returns all entities sorted by the given options. * * @param sort * @return all entities sorted by the given options */ Iterable findAll(S..
테스트 코드 작성 중 에러발생 cannot deserialize from Object value 가 핵심 에러인 듯하여 찾아보니 Object Mapper로 매핑이 안되었던 것 같아 확인해 본 결과 *)자바의 객체를 json으로 변환하는 작업을 serialize(직렬화), json을 자바의 객체로 변환하는걸 deserialize(역직렬화)라고 한다. 첫번째 오류, 기본 생성자를 만들지 않았다 ,,,, Json를 객체에 파싱할 때 객체의 프로퍼티 정보를 알기 위해서는 객체 생성을 위한 기본 생성자(접근 제한자 무관)가 반드시 존재해야 하고, Getter/Setter/Field 중에 접근 제한자가 위 조건을 만족하는 것이 하나라도 있어야 한다. (Dto에서 Builder 패턴 사용할 때 AllArgsConst..
1. @webMvcTest 를 사용한 스프링 부트 테스트 @RunWith(SpringRunner.class) @WebMvcTest(controllers = HelloController.class) public class HelloControllerTest { @Autowired private MockMvc mockMvc; @Test public void hello() throws Exception { String hello = "hello"; mockMvc.perform(get("/hello")) .andExpect(status().isOk()) .andExpect(content().string(hello)); } } @RunWith(SpringRunner.class)는 스프링부트 테스트와 Junit 사..