JavaWeb06SpringBootApplication클래스에 메인메소드 가 있으니 이 클래스의 메인메소드부터 실행되고 SpringApplication가 실행,
자동으로 찾아주는 스프링부트 프로그램이 실행됨
SpringApplication이 application.yaml로 db연결 및 thymeleaf 세팅 불러들이고,
디스패처서블릿으로부터 HomeController클래스가 실행됨. HandlerMapper가 컨트롤러를 찾아 HandlerAdapter에게 요청을 넘김 이후 home.html을 실행,
이후 디스패처가 데이터와 뷰를 합쳐 리턴함.
spring:
# 데이터 접속정보 설정
datasource:
username: root
password: 1234
url: jdbc:mariadb://localhost:3307/profile
driver-class-name: org.mariadb.jdbc.Driver
# 타임리프 설정
#템플릿 폴더가 어디 있는지?
thymeleaf:
prefix: classpath:templates/
suffix: .html
cache: false
application.properties와 applicaton.yaml의 차이
출처 : https://velog.io/@tjswlsdl135/application.properties-vs-application.yml
application.properties
스프링부트가 애플리케이션을 구동할때 자동으로 로딩하는 파일이다. key - value 형식으로 값을 정의하면 애플리케이션에 참조하여 사용할 수 있다.
application.yml
properties와 다르게 계층 구조로 표현할 수 있어서 prefix의 중복 제거가 가능해지고 가독성이 좋다.
SpringBoot프로젝트에는 @SpringBootApplication 어노테이션이 적용된 class가 존재해야한다.
public static main 메소드를 구현하고 SpringApplication.run(현재 클래스)를 호출함으로서 내장 톰캣이 실행, Spring Boot에서 제공하는 starter 라이브러리에 포함된 기본 설정이 자동으로 이루어지면서 서버 실행이 진행된다.
package com.example.demo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
//현재 클래스를 넣고 로거 준비
final Logger logger=LoggerFactory.getLogger(getClass());
@GetMapping("/home")
public void home() {
logger.info("this is home");
return "/home"
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>Spring boot.</p>
</body>
</html>
: 여기서 잠깐!
@Controller와 @RestController의 차이!
@Controller와 @RestController의 주요한 차이는 HTTP Response Body가 생성되는 방식
@Controller의 역할 Model 객체를 만들어 데이터를 담고 View를 반환
@RestController는 단순히 객체만을 반환하고 객체 데이터는 JSON 또는 XML형식으로 HTTP 응답에 담아 전송함.
spring은 @Controller와 @ResponseBody의 동작을 조합한 @RestController를 도입.
1. @Controller는 클래스를 Spring MVC 컨트롤러로 표시하는데 사용되고,
@RestController는 RESTful 웹 서비스에서 사용되는 특수 컨트롤러이며 @Controller + @Response와 동일하다.
2. @Controller와 @RestController의 주요 차이점 중 하나는 @RestController를 표시하면 모든 메소드가 뷰 대신 객체로 작성된다.
3. @Controller는 @Component 주석이 달려있고, @RestController는 아래와 같이 @Controller와 @ResponseBody 주석이 달린 편의 컨트롤러이다.
lombok의 자바 웹개발에 필수적인 라이브러리로 90%이상 프로젝트에서 사용을 한다.
대표적인 class에 @Data를 선언하고 private 변수를 만들고 저장하면 class 컴파일시 setter, getter lombok을 만들어주면서 자동으로 메소드가 생성(.class파일) 된다.
다양한 자동완성 어노테이션을 많이 제공한다
@Data : setter, getter 자동생성
@AllArgsConstrucor : class 내부 변수만큼 생성자를 만들어준다.
@NoArgsConstructor : 기본 생성자 만들어줌
@Builder : 기존 Setter 또는 생성자에 데이터 넣는 부분을 가독성 있는 방법으로 제공.
@Setter : setter만 자동생성
@Getter : getter만 자동생성
왜 autowired 보다 @RequiredArgsConstrucor로 주입하는게 나을까?
빈을 주입하는 순서가 다르기 때문임
생성자 주입(Constructor Injection): 생성자로 객체를 생성하는 시점에 필요한 빈을 주입한다. 조금 더 자세히 살펴보면, 먼저 생성자의 인자에 사용되는 빈을 찾거나 빈 팩터리에서 만든다. 그 후에 찾은 인자 빈으로 주입하려는 빈의 생성자를 호출한다. 즉, 먼저 빈을 생성하지 않는다. 수정자 주입과 필드 주입과 다른 방식이다.
출처 : https://madplay.github.io/post/why-constructor-injection-is-better-than-field-injection
@Autowired->final + 생성자 주입
관련 블로그 : https://blog.naver.com/ghdalswl77/222711099525
Setter객체로 주입하는 방법