본문 바로가기

개발/스프링부트

(작성중)[스타트스프링부트(2)] 컨트롤러 세팅

@RestController

json 형태로 데이터 반환.

스프링의 @Controller 어노테이션과 @ResponseBody 어노테이션이 합쳐진것. 

view를 활용하지 않는다.  

 

참고

mangkyu.tistory.com/49

 

[Spring] @Controller와 @RestController 차이

Spring에서 컨트롤러를 지정해주기 위한 어노테이션은 @Controller와 @RestController가 있습니다. 전통적인 Spring MVC의 컨트롤러인 @Controller와 Restuful 웹서비스의 컨트롤러인 @RestController의 주요한 차..

mangkyu.tistory.com

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 컴포넌트에만 집중할 수 있도록 해준다 -> 테스트를 경량화 해준다. 

  docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/autoconfigure/web/servlet/WebMvcTest.html

- @AutoWired란

   : @Autowired란, 스프링 DI(Dependency Injection)에서 사용되는 어노테이션입니다. ...

      즉, 해당 변수 및 메서드에 스프링이 관리하는 Bean을 자동으로 매핑해주는 개념

life-with-coding.tistory.com/433#:~:text=%40Autowired%EB%9E%80%2C,%EC%97%90%EC%84%9C%20%EC%82%AC%EC%9A%A9%EB%90%98%EB%8A%94%20%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98%EC%9E%85%EB%8B%88%EB%8B%A4.&text=%EC%A6%89%2C%20%ED%95%B4%EB%8B%B9%20%EB%B3%80%EC%88%98%20%EB%B0%8F%20%EB%A9%94%EC%84%9C%EB%93%9C,%EC%9C%BC%EB%A1%9C%20%EB%A7%A4%ED%95%91%ED%95%B4%EC%A3%BC%EB%8A%94%20%EA%B0%9C%EB%85%90%EC%9E%85%EB%8B%88%EB%8B%A4.

 

- 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

goddaehee.tistory.com/209

 

[스프링부트 (7)] Spring Boot JPA(1) - 시작 및 기본 설정

[스프링부트 (7)] Spring Boot JPA(1) - 시작 및 기본 설정 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 스프링 부트 JPA 설정 방법] 입니다. : ) 0. 기본개념 JPA를 들어가기 전에 ORM부터 간..

goddaehee.tistory.com

(-) : 복잡한 비즈니스 로직 구현에 적합하지 않다. 

 

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