Gradle은 의존관계가 있는 라이브러리를 함께 다운로드 한다.
- 스프링 부트 라이브러리 -
- spring-boot-starter-web
- spring-boot-starter-tomcat: 톰캣(웹 서버)
- spring-webmvc: 스프링 웹MVC
- spring-boot-stater-thymeleaf: 타임리프 템플릿 엔징(View)
- spring-boot-stater(공통): 스프링 부트 + 스프링 코어 + 로깅
- spring-boot
- spring-core
- spring-boot-stater-loggin
- logback + slf4j
- spring-boot
- 테스트 라이브러리 -
- spring-boot-starter-test
- junit: 테스트 프레임워크
- mockito: 목 라이브러리
- assertj: 테스트 코드 작성의 편리함 제공
- spring-test: 스프링 통합 테스트 지원
- thymeleaf 템플릿엔진 동작 -
- 컨트롤러에서 리턴 값으로 문자 반환 -> 뷰 리졸버('viewResover')가 화면을 찾아 처리
- 스프링부트 템플릿엔진 기본 viewName 매핑
- 'resources:templates/' + {ViewName} + '.html'
- * 반환하는 값이 찾아가야할 경로
<spring-boot-devtools 라이브러리 - 별도의 서버 재시작 없이 View 파일 변경>
- thymeleaf 템플릿엔진 동작 -
- 컨트롤러에서 리턴 값으로 문자 반환 -> 뷰 리졸버('viewResover')가 화면을 찾아 처리
- 스프링부트 템플릿엔진 기본 viewName 매핑
- 빌드 -
- ./gradlew build
- cd build/libs
- jar 파일 실행
- 스프링부트에서 API동작 -
- '@ResponseBody'를 사용
- 서버 요청시에 @ResponseBody가 있다면,
- HTTP의 BODY에 return 내용을 직접 반환
- 기본 문자처리: 'StringHttpMessageConverter'
- 기본 객체처리: 'MappingJackson2HttpMessageConverter' (JSON)
- 등 여러 형식에 대해 HttpMEssageConverter가 기본으로 등록되어 있음
- 객체처리 Controller 예제코드
package winterlimited.hellospring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello; // 객체 반환
}
// 객체 생성
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
- 테스트진행 -
- 전체 테스트코드 실행 시에 일괄적으로 진행됨
- store에 저장된 값이 공유되어 버림
- @AfterEach(메소드 진행 이후마다 실행됨)를 이용해 store(저장 공간)의 저장값을 비워 테스트를 진행
- @BeforeEach(메소드 진행 이후마다 실행됨)를 이용해 constructor에 직접 repository를 넣어줌 (DI를 이용해 테스트 진행)
- 스프링 빈 -
- 생성자에 @Autowired가 있으면 스프링이 연관된 객체를 스프링 컨테이너에 찾아 넣어줌 (DI: Dependency Injection 이라고 함)
- 기본적으로 @Component 단위에 의해 이루어짐 (기본적으로 메인 SpringApplication의 package폴더 내에서만 스캔함)
- @Controller
- @Service
- @Repository
- 해당 annotation들은 모두 @Component annotation 처리가 되어 있음
- SpringConfig
- @Bean 을 이용하여 스프링빈에 직접 등록해줄 수 있음
'웹 > Spring' 카테고리의 다른 글
[Spring] Spring과 JPA를 사용해보기 - 학식 취향분석 프로그램 (1) (0) | 2023.07.04 |
---|---|
[메모] Spring 원리 (3) 빈 생명주기 콜백, 빈 스코프 (0) | 2023.05.26 |
[메모] Spring 원리 (2) 컴포넌트 스캔, 의존관계 자동주입 (0) | 2023.05.20 |
[메모] Spring 원리 (1) 싱글톤 (0) | 2023.05.20 |
[메모] Spring 입문(2) (0) | 2023.05.15 |