@RestController
json 형태로 데이터 반환.
스프링의 @Controller 어노테이션과 @ResponseBody 어노테이션이 합쳐진것.
view를 활용하지 않는다.
참고
White label 에러가 뜨는 경우
src
-- main
-- java
-- com.springboot.springbootpractice
-- ServletInitializer
-- SpringBootPracticeApplication.java
-- resources
-- static
-- templates
-- application.propertis
위 구조에서 SpringBootPracticeApplication는 main 클래스이다. 다른 컨트롤러가 이와 같은 depth에 존재할 경우, main 클래스는 정상 동작하지 않는다. 타 controller를 추가할 경우, root package(여기서는 com.springboot.springbootpractice) 의 하위에 package를 추가 후 그 아래에 controller를 추가해야만 한다.
2. Lombok 추가
Lombok의 역할 : Getter, Setter, 생성자등 클래스 생성시 필수적으로 들어가는 코드들을 annotation만 사용함으로써 자바에서 작성할 필요가 없도록 해준다. 컴파일된 코드에 Getter, Setter 등의 코드가 나타나는 것을 볼 수 있다.
** git ignore 추가하는 법
주의
Data 어노테이션을 쓰면 toString에 exclude를 별도로 설정하지 못해 상호 호출이 일어나는 부작용.
-> stack overflow에 빠지기 쉬우므로 주의
-> Getter, Setter
테스트 추가
스프링부트를 사용시 테스트 환경을 미리 갖추고 있다는 것이 큰 이점.
** 아래 어노테이션 찾아보기 (책 42p)
- RunWith
- WebMvcTest
: Spring MVC test를 하는데, MVC 컴포넌트에만 집중할 수 있도록 해준다 -> 테스트를 경량화 해준다.
- @AutoWired란
: @Autowired란, 스프링 DI(Dependency Injection)에서 사용되는 어노테이션입니다. ...
즉, 해당 변수 및 메서드에 스프링이 관리하는 Bean을 자동으로 매핑해주는 개념
- SpringBootTest
-> SpringBootTest : 모든 의존성을 주입한다. 무겁다.
-> WebMvcTest : controller layer를 모의 테스트 한다.
** SpringRunner.class
@RunWith(SpringRunner. class)는 Spring Boot test 와 JUnit을 연결해주는 역할을 합니다.
-> JUnit Test를 사용한다면 필수로 사용.
What does SpringRunner class do?
@RunWith(SpringRunner. class) provides a bridge between Spring Boot test features and JUnit. Whenever we are using any Spring Boot testing features in our JUnit tests, this annotation will be required
- MockMvc
웹 애플리케이션을 배포하지 않고 스프링 mvc 컨트롤러를 테스트 할 수 있도록 해주는class
# 질문 사항
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
왜 위 두가지는 자동으로 import 되지 않았을까?
* 약어
sout : System.out.println
* JPA란
Java Persistence API(Application Programming Interface)
-> 자바에서 데이터 저장을 영구적으로 하기 위해 정해놓은 interface
(+) : 객체 중심의 설계가 가능하다.
: 비즈니스 로직에 집중할 수 있다.
: DBMS에 대한 종속성이 줄어든다.
: JAVA 설계와 DB 설계 한번에 가능.
참고: www.youtube.com/watch?v=ajZIPOv31yE
(-) : 복잡한 비즈니스 로직 구현에 적합하지 않다.
ORM(Object Relational Mapping)의 개념
객체지향과 관계형 데이터 베이스를 매핑시킨다
JPA
- ORM의 개념을 JAVA에서 구현.
- JDBC를 통해 직접 구현했던 데이터 베이스 관련 작업을 대신 구현해준다.
- 예. Spring Boot에서는 Hibernate 라는 구현체를 사용한다. (책 46p)
JPA를 사용할 경우, 어플리케이션의 DB 통신 방식
Application <-> JPA <-> JDBC <-> DataBase
*엔티티
테이블, 객체
* instance (= record)
데이터 하나하나. = row
*엔티티 매니저
엔티티를 Persistence Context에 넣고 이들의 life cycle을 관리.
* 영속 컨텍스트
-> 책 50p 참고
New, Managed, Detached, Removed
-> 52 페이지에서 이해가지 않은 개념들
* Spring Data JPA
* 동적 프록시 (= Dynamic Proxy)
* Spring AOP
'개발 > 스프링부트' 카테고리의 다른 글
enum을 사용하는 경우 (0) | 2021.05.16 |
---|---|
(작성할 것)DAO, DTO, VO (0) | 2021.05.08 |
(글쓰기)Bean이란 (0) | 2021.05.07 |
(작성해야함) Servelet이란 (0) | 2021.05.07 |
삼항 조건 연산자 (0) | 2019.10.21 |