▶ ContactController
Logger 설정: 코드 상단에는 Logger 객체가 설정되어 있습니다.
이것은 로깅을 위한 것으로, 코드 실행 중에 중요한 정보를 로그로 남기는 데 사용됩니다.
ContactService 주입: ContactController 클래스는 ContactService를 주입받습니다.
이것은 비즈니스 로직을 처리하는 서비스 레이어입니다.
URL Mapping: 각 메서드에 @GetMapping 또는 @PostMapping 어노테이션을 사용하여 URL을 매핑하고,
해당 URL로 들어온 요청을 처리합니다.
/contact/list.do: 연락처 목록을 조회하는 페이지를 렌더링합니다.
/contact/write.do: 새 연락처를 작성하는 페이지를 렌더링합니다.
/contact/add.do: 새 연락처를 추가합니다.
/contact/detail.do: 특정 연락처의 상세 정보를 조회합니다.
/contact/modify.do: 연락처 정보를 수정합니다.
/contact/delete.do: 연락처를 삭제합니다.
Model 객체: Model 객체를 사용하여 뷰로 데이터를 전달합니다. 연락처 목록 조회 결과를 contactList라는 이름으로 모델에 추가합니다.
RedirectAttributes: 리다이렉트 시에도 데이터를 전달하기 위해 RedirectAttributes를 사용합니다. 연락처 추가, 수정, 삭제 결과를 addResult, modifyResult, deleteResult라는 속성으로 추가합니다.
매개변수 사용: @RequestParam 어노테이션을 사용하여 HTTP 요청 파라미터를 메서드의 매개변수로 받아옵니다.
리다이렉트: 리다이렉트는 사용자를 다른 페이지로 보내는 기능을 합니다. 예를 들어, 연락처를 추가한 후에는 연락처 목록 페이지로 리다이렉트됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
package com.gdu.app09.controller;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.gdu.app09.dto.ContactDto;
import com.gdu.app09.service.ContactService;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@Controller
public class ContactController {
// ContactController를 실행할 때 org.sl4f.Logget가 동작한다.
private static final Logger logger = LoggerFactory.getLogger(ContactController.class);
private final ContactService contactService;
@GetMapping(value="/contact/list.do")
public String list(Model model) {
List<ContactDto> contactList = contactService.getContactList();
model.addAttribute("contactList", contactService.getContactList());
logger.info(contactList.toString());
return "contact/list";
}
@GetMapping(value="/contact/write.do")
public String write() {
return "contact/write";
}
@PostMapping(value="/contact/add.do")
public String add(ContactDto contactDto, RedirectAttributes redirectAttributes) {
int addResult = contactService.addContact(contactDto);
redirectAttributes.addFlashAttribute("addResult", addResult);
return "redirect:/contact/list.do";
}
@GetMapping(value="/contact/detail.do")
public String detail(@RequestParam(value="contact_no", required=false, defaultValue="0")int contact_no, Model model) {
model.addAttribute("contact", contactService.getContactByNo(contact_no));
return "contact/detail";
}
@PostMapping(value="/contact/modify.do")
public String modify(ContactDto contactDto, RedirectAttributes redirectAttributes) {
int modifyResult = contactService.modifyContact(contactDto);
redirectAttributes.addFlashAttribute("modifyResult", modifyResult);
return "redirect:/contact/detail.do?contact_no=" + contactDto.getContact_no();
}
@PostMapping(value = "contact/delete.do")
public String delete(@RequestParam(value="contact_no", required=false, defaultValue="0")int contact_no, RedirectAttributes redirectAttributes) {
int deleteResult = contactService.deleteContact(contact_no);
redirectAttributes.addFlashAttribute("deleteResult", deleteResult);
return "redirect:/contact/list.do";
}
}
|
cs |
XML 구성 파일은 Logback이라는 로깅 프레임워크를 사용하여 로그를 설정하는 데 사용됩니다.
Appenders (로그 출력 대상 설정):
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">:
콘솔에 로그를 출력하는 Appender 설정입니다. 콘솔에 로그를 출력하는 데 사용됩니다.
<appender name="file" class="ch.qos.logback.core.FileAppender">:
파일에 로그를 출력하는 Appender 설정입니다. /log/app09_log.log 파일에 로그를 저장하며,
기존 로그에 이어서 기록하도록 설정되어 있습니다.
<appender name="rolling" class="ch.qos.logback.core.rolling.RollingFileAppender">:
매일 새로운 로그 파일을 만드는 RollingFileAppender 설정입니다.
로그 파일 이름은 날짜 및 숫자 인덱스로 구성되며, 로그 파일 크기가 100MB를 넘으면 새 파일을 만듭니다.
최대 30일치 로그를 유지하고, 총 로그 파일 크기는 3GB로 제한됩니다.
Log 패턴 설정:
<encoder> 내부의 <pattern>: 로그 출력 패턴을 설정합니다.
패턴 내에 %d, %level, %logger, %msg 등의 특수 문자열을 사용하여 로그 출력 형식을 지정합니다.
%d는 로그 기록 시간, %level은 로그 레벨, %logger는 로그를 찍는 클래스, %msg는 로그 메시지를 의미합니다.
Logger 설정:
<logger name="com.gdu.app09" level="info" />:
com.gdu.app09 패키지에 속하는 클래스의 로그 레벨을 info로 설정합니다.
이 패키지의 클래스들은 info 레벨 이상의 로그를 출력합니다.
<logger name="org.springframework" level="info" />: Spring Framework의 로그 레벨을 info로 설정합니다.
<logger name="log4jdbc" level="info" />: log4jdbc 라이브러리의 로그 레벨을 info로 설정합니다.
이 라이브러리는 JDBC 쿼리 실행과 관련된 로그를 출력합니다.
다른 <logger> 요소들은 JDBC 관련 로그를 자세하게 제어합니다.
예를 들어, jdbc.sqlonly는 쿼리문을 출력하고, jdbc.sqltiming은 쿼리문과 실행 시간을 출력합니다.
Root Logger 설정:
<root>: Root Logger의 설정입니다. Root Logger는 모든 로그에 대한 기본 설정을 나타냅니다.
Root Logger의 로그 레벨은 warn으로 설정되어 있으며,
콘솔과 RollingFileAppender에 로그를 출력하도록 설정되어 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- Appenders : 로그를 출력하는 Appender 모음 -->
<!--
%d{날짜시간패턴} : 로그기록시간 (SimpleDateFormat과 같은 날짜시간패턴)
%level : 로그 레벨 (OFF > ERROR > WARN > INFO > DEBUG > TRACE)
%logger : 로그를 찍는 클래스 (어떤 클래스가 동작할 때 로그가 남겨지는가?)
%msg : 로그 메시지
%n : 줄 바꿈
-->
<!-- Console에 로그를 찍는 Appender -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%d{HH:mm:ss, Asia/Seoul}] %-5level:%logger - %msg%n</pattern>
</encoder>
</appender>
<!-- File에 로그를 찍는 Appender -->
<appender name="file" class="ch.qos.logback.core.FileAppender">
<file>/log/app09_log.log</file>
<append>true</append>
<immediateFlush>true</immediateFlush>
<encoder>
<pattern>[%d{HH:mm:ss, Asia/Seoul}] %-5level:%logger - %msg%n</pattern>
</encoder>
</appender>
<!-- 매일 새로운 로그 파일을 만드는 RollingFileAppender -->
<appender name="rolling" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>/log/app09.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>[%d{HH:mm:ss, Asia/Seoul}] %-5level:%logger - %msg%n</pattern>
</encoder>
</appender>
<!-- Application Loggers -->
<logger name="com.gdu.app09" level="info" />
<!-- 3rdparty Loggers -->
<logger name="org.springframework" level="info" />
<logger name="log4jdbc" level="info" />
<logger name="jdbc.sqlonly" level="info" /> <!-- 쿼리문 출력하기 -->
<logger name="jdbc.sqltiming" level="off" /> <!-- 쿼리문 + 실행시간 출력하기 -->
<logger name="jdbc.resultsettable" level="info" /> <!-- SELECT 결과를 테이블 형식으로 출력하기 -->
<logger name="jdbc.connection" level="off" /> <!-- Connection 연결/종료 정보 출력하기 -->
<logger name="jdbc.audit" level="off" /> <!-- ResultSet을 제외한 jdbc 호출 정보 출력하기 -->
<logger name="jdbc.resultset" level="off" /> <!-- ResultSet을 포함한 jdbc 호출 정보 출력하기 -->
<!-- Root Logger -->
<root>
<priority value="warn" />
<appender-ref ref="console" />
<appender-ref ref="rolling" />
</root>
</configuration>
|
cs |
'코딩기록 저장소 🐕 > spring(JPA)🌱' 카테고리의 다른 글
Spring AOP (0) | 2023.10.11 |
---|---|
Springjdbc (0) | 2023.10.11 |
jdbcJunitTest (0) | 2023.10.10 |
Spring ajax2 (0) | 2023.10.06 |
Spring DI ajax (0) | 2023.10.05 |