(참고사이트)
Spring Framework는 Java 개발을 위한 오픈 소스 애플리케이션 프레임워크입니다. 이 프레임워크는 대규모 엔터프라이즈급 애플리케이션을 만드는 데 사용됩니다. Spring Framework는 다양한 모듈로 구성되어 있으며, 이러한 모듈은 각각의 기능을 수행합니다.
Spring Boot는 Spring Framework를 기반으로하는 프레임워크입니다. Spring Boot는 스프링 애플리케이션을 보다 쉽게 개발하고 실행할 수 있도록 도와주는 도구입니다. Spring Boot는 애플리케이션을 더 빠르고 쉽게 시작할 수 있도록 기본 설정과 구성을 제공합니다. 또한 Spring Boot는 애플리케이션의 의존성을 관리하고 내장 서버를 제공하여 애플리케이션 배포를 간단하게 만듭니다.
즉, Spring Framework는 Java 애플리케이션을 개발하기 위한 프레임워크이고, Spring Boot는 Spring Framework를 기반으로하는 개발 도구이며, 스프링 애플리케이션을 보다 쉽게 개발하고 실행할 수 있도록 도와줍니다.
스프링 프레임워크의 핵심 기능 중 하나는 IoC(Inversion of Control, 제어의 역전) 컨테이너입니다. 이 컨테이너는 애플리케이션의 객체를 관리하고, 객체 간의 의존성을 해결하여 개발자가 객체 생성과 관리에 대한 부담을 덜어줍니다.
스프링에서는 컨테이너가 생성하고 관리하는 객체를 '스프링 빈(Spring Bean)'이라고 부릅니다. 스프링 빈은 일반적으로 자바 클래스로 구현되며, 스프링의 어노테이션을 사용하여 정의됩니다.
@Component 어노테이션은 스프링에서 빈으로 등록할 클래스에 붙이는 가장 기본적인 어노테이션입니다. @Controller, @Service, @Repository 등은 @Component 어노테이션을 확장한 것으로, 해당 클래스가 각각 컨트롤러, 서비스, 리포지토리 역할을 한다는 것을 명시적으로 표현합니다. 예를 들어, 다음과 같이 @Component 어노테이션을 사용하여 클래스를 스프링 빈으로 등록할 수 있습니다.
@Component public class MyService { // 서비스의 기능을 구현한 코드 }
위 코드에서 @Component 어노테이션을 사용하여 MyService 클래스를 스프링 빈으로 등록하였습니다. 이제 MyService 클래스의 객체는 스프링 컨테이너에서 관리되고, 다른 빈에서 이 객체를 참조할 수 있습니다.
1.명령 팔레트
2.spring initializer maven project (Boot 환경)
3.버전 : 2.7.9 (스냅샷 x)
4.언어 : Java
5.메인 : ex) com.원하는이름 ~~
6.jar
7.java ver : 아무거나 필요한 거 (ex. 17)
8.dependencies : 필요한 거 추가 ex. web, devtools, lombok 등등...
9.pom.xml에 spring boot thymeleaf 2.7.9 ver 추가 (url 매핑 위해)
10.application.properties .... > server.port=9090 (서버 충돌 방지)
11.DemoApplication에서 main함수 run 돌려서 웹 실행되는지 확인
server.port=9090
spring.thymeleaf.check-template-location=true
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.cache=false
# 어플리케이션 설정 : YAML 버전
server:
port: 9090
spring:
thymeleaf:
check-template-location: true
prefix: classpath:/templates/
suffix: .html
cache: false
# 포트 번호 변경
server:
port: 9090
# 디버그 콘솔 색 넣기
spring:
output:
ansi:
enabled: always
# 디버그 레벨 정하기
logging:
level:
'[com.jjang051.ch02]': DEBUG # ERROR로 바꾸면 ERROR 관련 사항만 뜬다
@Controller는 경로에 해당하는 파일을 찾는다
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "home";
}
}
/** Controller + ResponseBody = RestController */
@GetMapping("/toJson01")
@ResponseBody
public String toJson() {
return "Hello Json";
}
@Controller + @ResponseBody
로 사용했지만, 지금은 불가피한 경우가 아니면 @RestController 사용.@RequestParam은 스프링 프레임워크에서 제공하는 어노테이션 중 하나로, HTTP 요청에서 파라미터 값을 추출하기 위해 사용됩니다. 보통 HTTP 요청에서 파라미터는 URL 쿼리 스트링, 폼 데이터, HTTP 헤더 등을 통해 전달됩니다. @RequestParam 어노테이션을 사용하면 이러한 파라미터 값을 스프링 컨트롤러 메서드의 매개변수로 바로 주입받을 수 있습니다.
@GetMapping("/info/{id}") //request mapping 있으니 member/info
public String memberInfo(@PathVariable("id") String userId) {
//이 경우는 @RequestParam이 아님
// Restful한 경우 : url이 쿼리스트링이 아니라 sdfs.com/info/kim1234 이런 식으로 됨
System.out.println(userId);
return "/member/login";
}
<!-- <input type="hidden" name="reGroup" value="${replyBoardDto.reGroup}" />
<input type="hidden" name="reLevel" value="${replyBoardDto.reLevel}" />
<input type="hidden" name="reStep" value="${replyBoardDto.reStep}" /> -->
<input type="hidden" name="reGroup" th:value="${param.reGroup}" />
<input type="hidden" name="reLevel" th:value="${param.reLevel}" />
<input type="hidden" name="reStep" th:value="${param.reStep}" />
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data // @Getter + @Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Member {
private String id;
private String name;
private String addr;
}
.
.
@GetMapping("/member/list")
public String list(Model model) {
ArrayList<Member> memberList = new ArrayList<>();
memberList.add(new Member("admin01", "운영자", "서울특별시 은평구"));
memberList.add(new Member("alba01", "알바생", "서울특별시 중구"));
memberList.add(new Member("customer01", "고객님", "서울특별시 송파구"));
model.addAttribute("memberList", memberList);
return "/member/list";
}
.
.
<!DOCTYPE html>
<html xmlns="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Member List</title>
<style>
.table {
text-align: center;
}
</style>
</head>
<body>
<h1> 고객 명단 </h1>
<hr>
<table class="table">
<colgroup>
<col width="100px" height="30px" style="background: #ffffff" />
<col width="300px" height="30px" style="background: #eeeeee" />
<col width="400px" height="30px" style="background: #999999" />
</colgroup>
<tr>
<th>아이디</th>
<th>이름</th>
<th>주소</th>
</tr>
<tr th:each="member : ${memberList}">
<td th:text="${member.id}"></td>
<td th:text="${member.name}"></td>
<td th:text="${member.addr}"></td>
</tr>
</table>
</body>
</html>