섹션2
테스트 코드가 중요해지는 추세라서 main과 test로 나뉨
스프링 부트가 제공하는 Welcome Page 기능
static/index.html
을 올려두면 Welcome page 기능을 제공한다.
https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-
boot-features.html#boot-features-spring-mvc-welcome-page
springboot - devtools: html 파일을 컴파일만 해주면 서버 재시작 없이 View 파일 변경이 가능
빌드하기
섹션3
정적 컨텐츠 제공 기능
정적 파일 반환 - 프로그래밍 불가
localhost:8080/파일명
MVC와 템플릿 엔진
타임리프의 장점: 서버없이 파일을 불러와서 실행할 수 있고, 소스코드 확인 가능
command+P : 파라미터 정보
mvc 방식 → name= :
`@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
API
@ResponseBody: 이 어노테이션이 붙은 파라미터에는 http 요청의 본문(body)이 그대로 전달됨
command + shift + enter : 코드 완성
control + enter : 생성자, Getter, Setter 등 만들 수 있음
@ResponseBody: 사용 원리
섹션4
섹션5
스프링 빈과 의존 관계
스프링 빈을 등록하는 2가지 방법
컴포넌트 스캔 원리
`@Component` 애노테이션이 있으면 스프링 빈으로 자동 등록된다.
`@Controller` 컨트롤러가 스프링 빈으로 자동 등록된 이유도 컴포넌트 스캔 때문이다.
- `@Component` 를 포함하는 다음 애노테이션도 스프링 빈으로 자동 등록된다.
`@Controller`
`@Service`
`@Repository`
Bean?
```
빈(Bean)빈(Bean)은 스프링 컨테이너에 의해 관리되는 재사용 가능한 소프트웨어 컴포넌트이다.즉, 스프링 컨테이너가 관리하는 자바 객체를 뜻하며, 하나 이상의 빈(Bean)을 관리한다.빈은 인스턴스화된 객체를 의미하며, 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다.@Bean 어노테이션을 통해 메서드로부터 반환된 객체를 스프링 컨테이너에 등록한다.빈은 클래스의 등록 정보, Getter/Setter 메서드를 포함하며, 컨테이너에 사용되는 설정 메타데이터로 생성된다.
```
> 스프링(Spring) 컨테이너가 관리하는 자바 객체를 빈(Bean)이라 한다.
>
스프링의 특징에는 [제어의 역전(IoC)](https://velog.io/@falling_star3/SpringBoot-%EC%8A%A4%ED%94%84%EB%A7%81%EA%B3%BC-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8)이 있다.
제어의 역전이란, 간단히 말해서 객체의 생성 및 제어권을 사용자가 아닌 스프링에게 맡기는 것이다. 지금까지는 사용자가 new연산을 통해 객체를 생성하고 메소드를 호출했다. IoC가 적용된 경우에는 이러한 객체의 생성과 사용자의 제어권을 스프링에게 넘긴다. 사용자는 직접 new를 이용해 생성한 객체를 사용하지 않고, 스프링에 의하여 관리당하는 자바 객체를 사용한다. 이 객체를 '빈(bean)'이라 한다.
@Autowired
참고 및 주의
참고: DI에는 필드 주입, setter 주입, 생성자 주입 이렇게 3가지 방법이 있다. 의존관계가 실행중에 동적으 로 변하는 경우는 거의 없으므로 생성자 주입을 권장한다.
참고: 실무에서는 주로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔을 사용한다. 그 리고 정형화 되지 않거나, 상황에 따라 구현 클래스를 변경해야 하면 설정을 통해 스프링 빈으로 등록한다.
주의: @Autowired
를 통한 DI는 helloController
, memberService
등과 같이 스프링이 관리하 는 객체에서만 동작한다. 스프링 빈으로 등록하지 않고 내가 직접 생성한 객체에서는 동작하지 않는다.
섹션7
implementation 'jakarta.persistence:jakarta.persistence-api:3.1.0'
⇒ build.gradle 의존성 추가 이렇게 바꿔줬는데도 테스트에서 오류가 나서섹션8
기타오류 해결 ( 블로그 참고! )