[Spring Boot] 02. 간단한 페이지 연습

shr·2022년 2월 8일
0

Spring

목록 보기
2/23
post-thumbnail

💡 스프링 프로젝트의 구성

스프링 프로젝트는 @Controller, @Service, @Repository의 3 계층으로 구성된다.

@Controller
사용자 입출력 ex) 가입 기간 (가입 후 1105일째)

@Repository
데이터베이스 입출력 ex) 가입일 저장

@Service :
업무 로직 처리 ex) 가입일을 가지고 가입 기간을 계산

우선 수정 혹은 생성해야 하는 파일을 살펴보면 다음과 같다. (🤗 표시 참고) 대략적인 설계는 다음과 같다.

methodurlviewmodelparameterreturn
Get/board/listOOXModelAndView
Get/board/readOObnoModelAndView
Get/board/writeOXXvoid
Post/board/writeredirect to readXBoardString
Post/board/updateredirect to readXBoard, passwordString
Post/board/deleteredirect to listXbno, passwordString


작업을 시작하기 전에 src/main/resource 폴더에 있는 application.properties를 다음과 같이 수정한다.

server.port=8081

spring.datasource.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.url=jdbc:log4jdbc:oracle:thin:@localhost:1521:XE
spring.datasource.username=scott
spring.datasource.password=1234


src/main/java 폴더에 프로젝트를 생성할 때 만든 com.example.demo 패키지 (기본 설정 파일이 들어 있음) 외에 com.example.demo.controllercom.example.demo.vo 패키지를 추가한다.


com.example.demo.vo 패키지에 Board 클래스를 생성한다. 내용은 아직 추가하지 않을 것이기 때문에 건드리지 않는다.


com.example.demo.controller 패키지에 BoardController를 생성한다. 코드는 다음과 같다.

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import com.example.demo.vo.Board;

@Controller
public class BoardController {
	@GetMapping({"/", "/board/list"})
	public ModelAndView list() {
		return new ModelAndView("board/list");
	}
	
	@GetMapping("/board/read")
	public ModelAndView read(@RequestParam(required=true, defaultValue="1") Integer bno) {
		return new ModelAndView("board/read").addObject("bno", bno);
	}
	
	@GetMapping("/board/write")
	public void write() {
	}
	
	@PostMapping("/board/write")
	public String write(@ModelAttribute Board board) {
		return "redirect:/board/read";
	}
	
	@PostMapping("/board/update")
	public String update(@ModelAttribute Board board, @RequestParam String password) {
		return "redirect:/board/read";
	}
	
	@PostMapping("/board/delete")
	public String delete(@RequestParam Integer bno, @RequestParam String password) {
		return "redirect:/";
	}
	
}


이제 src/main/resource 폴더에 board 폴더를 만들고 그 안에 list.html, read.html, write.html을 다음과 같이 생성한다.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" xmlns:th="http://www.thymeleaf.org">
<title>Insert title here</title>
</head>
<body>
	리스트 페이지입니다.
	<a href="/board/read?bno=1">1 번 글입니다.</a>
	<a href="/board/write">글쓰기</a>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" xmlns:th="http://www.thymeleaf.org">
<title>Insert title here</title>
</head>
<body>
	읽기 페이지입니다.
	<p>글 번호 <span th:text="${bno}"></span></p>
	<form action="/board/update" method="post">
		<input type="text" name="password" value="1234">
		<button>변경하기</button>
	</form>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" xmlns:th="http://www.thymeleaf.org">
<title>Insert title here</title>
</head>
<body>
	<form action="/board/write" method="post">
		<button>보내기</button>
	</form>
</body>
</html>


이제 src/main/resource 폴더에 log4jdbc.log4j2.properties, logback-spring.xml 파일을 복붙해 준다.

<!-- log4jdbc.log4j2.properties 파일 -->
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0
<!-- logback-spring.xml 파일 -->
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern> %d{HH:mm:ss.SSS} %highlight(%-5level) %magenta(%-4relative) --- [ %thread{10} ] %cyan(%logger{40}) : %msg%n </pattern>
		</encoder>
	</appender>
	<!--  내가 만든 클래스에 대한 로깅 설정 -->
	<logger name="com.icia" level="info" />
	
	<!--  3rd party 로깅 설정 -->
	<logger name="org.springframework" level="info" />
	<logger name="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" level="trace" />
	
	<!--  log4jdbc 로깅 설정 -->
	<logger name="jdbc.connection" level="warn"/>
	<logger name="jdbc.resultsettable" level="info"/>
	<logger name="jdbc.audit" level="warn"/>
	<logger name="jdbc.sqltiming" level="warn"/>
	<logger name="jdbc.resultset" level="warn"/>
	<root level="info">
		<appender-ref ref="console" />
	</root>
</configuration>


마지막으로 pom.xml 파일에 아래 코드를 추가해 준다.

	<dependencies>
	<!-- 오라클 로깅을 위한 log4jdbc : 드라이버를 log4jdbc로 변경한다 -->
	<dependency>
		<groupId>org.bgee.log4jdbc-log4j2</groupId>
		<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
		<version>1.16</version>
	</dependency>
profile
못하다 보면 잘하게 되는 거야 ・ᴗ・̥̥̥

0개의 댓글