[스프링 부트란?]
스프링 부트는 스프링에서 파생된 여러 서브 프로젝트에서 시작해서 완전한 메인 프로젝트가 되버린 케이스이다.
스프링 부트의 중요한 특징으로 자동설정이 있다.
- 데이터베이스와 관련된 모듈을 추가하면 자동으로 데이터베이스관련 설정을 찾아서 실행한다.
- 별도의 서버 설정 없이 개발 및 실행이 가능하다.
스프링 MVC에서는 JSP 대신 Thymeleaf라는 템플릿 엔진을 활용하는 경우가 많다.
또한 MyBatis도 사용 가능하지만, JPA를 주로 이용한다.
스프링 부트에서는 main()메서드를 통해 단독으로 실행이 가능하고 자동으로 내장된 톰캣이 실행된다.
서블릿과 스프링은 root-context, servlet-context.xml파일을 따로 만들어서 빈을 설정해주었지만,
스프링 부트는 application.properties파일에 설정해주면 자동으로 연결이 된다.
만약 별도로 지정하고 싶은 설정이 있다면 @어노테이션을 통해 설정해주면 된다.
spring.application.name=b01
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:5306/webdb
spring.datasource.username=webuser
spring.datasource.password=webuser
server.port=12000
swagger.port = 12000
logging.level.org.springframework=info
logging.level.org.zerock=debug
#logging.level.org.hibernate.sql=trace
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.show-sql=true
위와같이 데이터베이스 설정을 해주면 톰캣이 자동적으로 실행된다.
참고로 스프링 부트에서는 기본적으로 HikariCP를 사용한다.
Respository란?
- DAO 처리(JPA, JPQL, Querydsl)를 위한 영역
- @Entity로 만든 필드로 데이터베이스 구조를 만들었다면 어떻게 사용할건지 정의해주는 계층
https://velog.io/@jybin96/Controller-Service-Repository-가-무엇일까
[실제 실행되는 MVC 구조]
이때 Domain → Repository → Service 영역으로 전달될 때 엔티티 객체들이 DTO로 변환되서 넘겨줘야 하기 때문에
ModelMapper를 이용하여 엔티티 객체를 선언해놓은 DTO와 자동연결 해준다.
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
@Controller
@Log4j2
public class SampleController {
@GetMapping("/hello")
public void hello(Model model) {
log.info("hello................");
model.addAttribute("msg", "HELLO WORLD");
}
위의 코드를 보았을 때
- 컨트롤러에서 /hello 경로에 들어오게 된다면 hello()메서드를 출력한다.
- 처리된 로직에 대한 값을 model 객체에 추가
- model객체를 view에게 전달하기 위해서 HTML파일에서 타임리프 설정
- 그렇게 되면 model → view에게 전달되서 화면에 랜더링 성공
[Thymeleaf]
- 순수 HTML 구조를 유지한다.
- 서버상에서 동작하지 않아도 HTML 파일의 내용을 바로 확인이 가능하다.
- 작성은 단순하지만 오류 발생 시 원인을 찾기 힘들기 때문에 < - -/…/ - - >를 추천
- Thymeleaf :템플릿 엔진의 일종으로 컨트롤러가 전달하는 데이터를 동적(HTML)로 랜더링하는데 사용
- Thymeleaf는 제어문의 형태로 th:if/th:unless/th:switch를 이용할 수 있다.
<section>
<div th:if="${posts.isEmpty()}">
<p>게시물이 존재하지 않습니다.</p>
</div>
<div th:each="post : ${posts}" class="carrotBox" th:if="${not posts.isEmpty()}">
<div class="image-section">
<a th:href="@{/post/carrotDetail(postId=${post.postId})}">
<img th:if="${post.imageDTOs != null && !post.imageDTOs.isEmpty()}"
th:src="@{'/api/photo/' + ${post.imageDTOs[0].uuid} + '_' + ${post.imageDTOs[0].fileName}}"
alt="사용자가 게시한 이미지"
th:onerror="@{/images/default.jpg}">
<img th:if="${post.imageDTOs == null || post.imageDTOs.isEmpty()}"
src="@{/images/default.jpg}" alt="Default Image">
</a>
</div>
<div class="text-section">
<span class="board-title" th:text="${post.title}">거래 제목</span>
<div class="additional-text">
<p id="dateCSS">[[${#temporals.format(post.registerDate, 'yyyy-MM-dd')}]]</p>
<p th:text="${post.commentCount} + ' replies'">댓글수</p>
<p th:text="${post.views} + ' views'">조회수</p>
</div>
</div>
</div>
</section>
위의 예시 코드처럼 컨트롤러부터 들어오는 데이터를 동적으로 처리할 수 있다.
'스터디 > Spring Boot' 카테고리의 다른 글
RDBMS, NoSQL이란 (0) | 2024.08.16 |
---|---|
모놀리식 아키텍처 (0) | 2024.08.15 |
[Spring Boot] JPA란 (0) | 2024.05.19 |