

⇒ 위 두가지는 묶어서 기억하기





→ Bean으로 등록되어 서버 실행 시 Spring Container에 의해 Bean(객체)으로 만들어짐



java -jar .\lombok.jar
-> lo + tab하면 자동완성 됌
⇒ sts4 실행파일을 경로로 설정해주고 설치해주면 끝



⇒ 위와 같이 설정

⇒ 의존성 모듈 추가



⇒ UTF-8로 설정
# 스프링부트 프로젝트 관련 설정을 정의하는 파일 (중요) ⭐⭐⭐
# key:value 형태로 설정하고 싶은 내용을 정의하면 됌
# 해당 파일에 설정 작성 시 프로젝트 전반적으로 설정이 적용됨
# 애플리케이션(프로그램) 이름
spring.application.name=demoProject1
# http의 기본포트 번호 이용 => 80번
# 즉, localhost로 구동시키는 방법
# port 번호를 80으로 변경할 것 (80은 HTTP의 기본 포트 번호, 브라우저에서 포트번호 없이 접속 가능)
server.port=80
# => localhost만 쳐도 창이 나옴
# Spring DevTools (자동 리로드, 서버 재시작) 설정
# 브라우저 자동 새로고침 기능
spring.devtools.livereload.enabled=true
# 코드 변경 시 서버 자동 재시작
spring.devtools.restart.enabled=true
# 타임리프 캐시 비활성화(HTML 파일 수정 시 바로 변경사항 확인할 수 있도록)
spring.thymeleaf.cache=false
# 로그 레벨 지정
logging.level.edu.kh.demo=debug
# 로그레벨을 디버그 레벨로 보겠다는 의미
# 로그 레벨의 6단계⭐⭐⭐
# TRACE : 가장 상세한 로그레벨로, 상세한 정보를 기록
# Ex) e.printStackTrace();
# DEBUG : 디버깅에 유용한 정보를 기록(값 추적)
# INFO : 일반적인 정보 메시지 기록(Spring Boot에서는 자동으로 기본레벨을 INFO를 사용)
# WARN : 경고 메시지를 기록
# ERROR : 오류 메시지를 기록한 레벨로, 심각한 문제가 발생했을 때 사용하는 것
# FATAL : 가장 심각한 오류로, 프로그램 실행 중단의 치명적 오류를 기록하는 것

// https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc11
implementation 'com.oracle.database.jdbc:ojdbc11:23.26.0.0.0'

추가 후

Refresh Gradle Project 실행
package edu.kh.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
// instance : 개발자가 직접 new 연산자를 통해 만든 객체, 관리하는 객체
// bean : Spring Container가 만들고, 관리하는 객체
//-> IOC(제어의 반전) : 객체의 생성 및 생명주기의 권한이 개발자가 아닌
// 프레임워크에게 있다.
// 서버 실행 시 Spring Container가 Component Scan(Bean Scanning) 을 수행하여
// @Component, @Repository, @Service, @Controller 어노테이션이 붙은 클래스를
// 모두 찾아 Bean으로 등록(객체로 생성)
@Controller // 요청/응답을 제어하는 역할인 컨트롤러임을 명시 + Bean 등록(즉, 바로 객체화가 된다는 것)
// @RequestMapping("/test") // /test로 오는 요청을 다 받아주겠다는 의미(클래스 레벨)
public class TestController {
// 기존 Servlet : 클래스 단위로 하나의 요청만 처리 가능했음
// Spring : 메서드 단위로 요청 처리 가능
// @RequestMapping("요청주소")
// - 요청 주소를 처리할 클래스 or 메서드를 매핑하는 어노테이션
// 1) 클래스와 메서드에 함께 작성하는 방법
// - 공통 주소를 매핑한다. ->
// ex) /test/insert, /test/update .. 등
/*
* @RequestMapping("/insert") public void methodA() { // /test/insert 요청을
* methodA가 처리하겠다 }
*
* @RequestMapping("/update") public void methodB() { // /test/updatet 요청을
* methodB가 처리하겠다. }
*
* @RequestMapping("/select") public void methodC() { // /test/select 요청을
* methodC가 처리하겠다. }
*/
// 2) 메서드에만 작성하는 방법 :
// - 요청 주소와 해당 메서드를 매핑
// - GET/POST 가리지 않고 매핑을 해줌
// (속성을 통해서 지정 가능 or 다른 어노테이션 이용 가능)
// @RequestMapping(value = "/test", method = RequestMethod.GET)
// Get방식만 처리하겠다는 의미
@RequestMapping("/test") // /test 요청 시 testMethod가 매핑하여 처리함
// GET/POST 가리지 않고 다 받음
public String testMethod() {
System.out.println("/test 요청 받음");
// Controller 메서드의 반환형은 앞으로 String일 것!
/*
* Controller 메서드의 반환형이 String인 이유!
* -> 메서드에서 반환되는 문자열이
* forward할 html 파일의 경로가 되기 때문!
*
* Thymeleaf : JSP 대신 사용하는 템플릿 엔진(html 형태)
*
* classpath : == src/main/resources
* 접두사 : classpath:/templates/ ⭐⭐⭐
* 접미사 : .html
* */
// src/main/resources/templates/test.html <- 이게 경로가 된다는 의미
return "test"; // 접두사 + 반환값 + 접미사 경로의 html로 forward 하게 됌
}
}

package edu.kh.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
@Controller // 요청/응답 제어하는 역할 명시 + Bean 등록
@RequestMapping("param") // /param으로 시작하는 요청을 현재 컨트롤러로 매핑
@Slf4j
public class ParameterController {
/*
* HttpServletReqeust :
* - 요청 클라이언트의 정보, 제출된 파라미터 등을 저장한 객체
* - 클라이언트 요청시 생성되는 객체
*
* Spring의 Controller 단 메서드 작성 시,
* 매개변수에 원하는 객체를 작성하면
* 존재하는 객체를 바인딩 또는 없으면 생성해서 바인딩
* --> ArgumentResolver가 존재함
* Argument(전달인자) + Resolver(해결사) => 전달인자 해결사
*
* */
@GetMapping("main")
public String paramMain() {
// /param/main Get 방식 요청 매핑
// src/main/resources/templates/param/param-main.html로 forward
return "param/param-main";
}
@PostMapping("test1") // /param/test1 POST 방식 요청 매핑
public String paramTest1(HttpServletRequest req) {
String name = req.getParameter("inputName");
int age = Integer.parseInt(req.getParameter("inputAge"));
String address = req.getParameter("inputAddress");
log.debug("name : " + name);
log.debug("address : " + address );
log.debug("age : " + age);
/*
* Spring에서 Redirect(재요청) 하는 방법!
* - Controller 메서드 반환값에
* "redirect:재요청주소"; 작성
* */
return "redirect:/param/main";
// redirect는 get 방식
}
}
