1. Log4j
1-1. 로깅의 정의
- 시스템을 작동할 때 시스템의 작동 상태의 기록과 보존.
- 이용자의 습성 조사 및 시스템 동작의 분석 등을 하기 위해 작동중의 각종 정보를 기록.
1-2. 로깅의 기준
: 시간 및 로깅레벨 패키지까지를 포함하여 나타낸다.
1-3. 기존 System.out.println()의 단점
: 에러 및 장애 발생 시 추적할 수 있는 최소한의 정보가 없다.
1-4. Log4j
- 단순히 System.out.println()으로 처리시 뿌려야 되는 정보가 많기 때문에 이를 처리하기 위해 나온 라이브러리.
- STS 생성시 기본으로 생성된다.
1-5. Log4j의 요소
- Logger : 출력할 메시지를 Appender에 전달한다.
- Appender : 전달된 로그를 어디에 출력할 지 결정한다. (콘솔 출력, 파일 기록, DB 저장 등)
- Layout : 로그를 어떤 형식으로 출력할 지 결정한다.
1-6. Log4j의 레벨
- FATAL: 매우 심각한 에러를 발생한 상태를 나타낸다.
- ERROR: 어떠한 요청을 처리하는 중 문제가 발생한 상태를 나타낸다.
- WARN: 프로그램의 실행에는 문제가 없지만, 향후 시스템 에러의 원인이 될 수 있는 경고성메시지를 나타낸다.
- INFO: 어떠한 상태변경과 같은 정보성 메시지를 나타낸다.
- DEBUG: 개발시 디버그 용도로 사용하는 메시지를 나타낸다.
- TRACE: 디버그 레벨이 너무 광범위한것을 해결하기 위해서 좀 더 상세한 이벤트를 나타낸다.
1-7. PatternLayout 클래스에서 사용되는 여러 가지 출력 속성들
- %c: 전체 패키지 및 파일 이름 출력
- %C: 로깅 이벤트가 발생한 클래스의 풀네임명을 출력
- %M: 로깅 이벤트가 발생한 메서드명을 출력
- %F: 로깅 이벤트가 발생한 클래스의 파일명을 출력
- %l: 로깅 이벤트가 발생한 클래스의 풀네임명.메서드명(파일명:라인번호)를 출력
- %d: 로깅 이벤트의 일자와 시간을 출력,\SimpleDateFormat클래스에 정의된 패턴으로 출력 포맷 지정가능
- %L: 로깅 이벤트가 발생한 라인 번호를 출력
- %m: 로그문에서 전달된 메시지를 출력
- %n: 줄바꿈
- %p: 로그 레벨 이름 출력
- %r: 로그 처리시간 (milliseconds)
- %t: 로깅 이벤트가 발생한 스레드명을 출력
- %%: %를 출력하기 위해 사용하는 패턴
2. 스프링 부트(Spring Boot)
2-1. 스프링 부트의 탄생 배경
: 기존 스프링 레거시에서 있는 환경설정(xml) 및 개발환경의 어려움으로 인해 이를 보완하는 목적으로 나옴
2-2. 스프링 부트의 특징
- 단독으로 실행이 가능한 스프링 애플리케이션을 생성
- 톰캣, Jetty, Undertow와 같은 WAS를 내장
- 기본설정이 되어있는 starter 컴포넌트를 제공
- 가능한 자동으로 설정되어있음
- 상용화에 필요한 통계, 상태 체크, 외부 설정등을 제공
- 설정을 위한 xml코드를 생성하거나 요구하지 않음(컨플릭트 최소화의 이점!)
- RESTful을 기본적으로 개발(@RestController)
- jsp가 아닌 thymeleaf를 권장화
2-3. 스프링 부트 프로젝트 생성
- New - Spring Starter Project로 프로젝트 설정을 활성화한다.
- 각 항목의 선택 사항들을 체크한다.
- Spring Boot Version와 모듈들을 선택한다.
2-4. ServletInitializer 객체
: web.xml을 대신하는 객체
2-5. SpringBootBoardApplication 객체
: 스프링 부트 내부에서 설정한 것들을 메인 메소드로 관리하는 객체
2-6. application.properties
: Server Port 및 기타 어플리케이션들을 설정할 수 있는 파일.
※ Oracle 드라이버 설정이 안되면 여기서 별도로 추가하고 pom.xml에서 repository 추가하자…(권장 x)
2-7. springboot app
: Run As 할 때 톰캣 서버가 내장되었으므로 별도 과정이 필요없다.
2-8. View단 구현(jsp)
- application.properties에서 설정값을 추가한다.
spring.mvc.view.prefix = /WEB-INF/views/ spring.mvc.view.suffix = .jsp server.jsp-servlet.init-parameters.development = true
- src-main-webapp 디렉토리에서 WEB-INF-views 순으로 경로를 추가한다.
2-9. View단 구현(Thymeleaf)
- src-main-resources-templates 디렉토리에서 html 문서를 생성한다.
- 상단의 html 태그에 xmlns:th=”http://www.thymeleaf.org” 를 추가한다.
<html xmlns:th="http://www.thymeleaf.org"> ...
- 다음과 같이 구현문에 해당되는 타임리프의 속성들을 적용한다.
- 표현식
- 변수 : ${…}
- 선택 변수 : *{…}
- 메시지 : #{…}
- Link URL : @{…}
- 리터럴
- 텍스트 : ‘one text’, ‘Another one’,…
- 숫자 : 0, 34, 1.0, …
- boolean : true, false
- Null : null
- token : one, sometext, main, …
- text opeation
- 문자열 연결 : +
-
문자 대체 : The name is ${name}
- 연산
- Binary : +, -, *, /, %
- 마이너스 : -
- boolean 연산
- Binary : and, or
- 부정 : !, not
- 비교 연산
- 비교연산자 : >, <, >=, <= (gt, lt, ge, le)
- 균등연산자 : ==, != (eq, ne)
- 조건 연산
- if-then : (if) ? (then)
- if-then-else : (if) ? (then) : (else)
- Default : (value) ?: (defaultValue)
- 표현식
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
...
<tr th:each="vo : ${list}">
<td><span th:text="${vo.bId}"></span></td>
<td><span th:text="${vo.bName}"></span></td>
<td><span th:text="${vo.bTitle}"></span></td>
<td><span th:text="${vo.bDate}"></span></td>
<td><span th:text="${vo.bHit}"></span></td>
</tr>
...
</html>
※ html 태그의 어버이 - 자식 관계
<!-- 부모자식 관계가 형성되지 않았으므로 *{} 선택자가 구현되지 않는다 -->
<p th:object="${board}"></p>
<p th:text="${board.bName}"></p>
<p th:text="${board.bTitle}"></p>
<p th:text="*{bContent}"></p>
<!-- html 자식관계가 형성됨을 인지하고 타임리프를 구현하자. -->
<div th:object="${board}">
<p th:text="${board.bName}"></p>
<p th:text="${board.bTitle}"></p>
<p th:text="*{bContent}"></p>
</div>
'WebDev > 본과정' 카테고리의 다른 글
Sourcetree 사용법 (0) | 2021.05.17 |
---|---|
Spring Boot의 테스트와 깃 형상관리 (0) | 2021.05.17 |
스프링 시큐리티의 세션, 공격기법 대처 및 소셜 로그인 (0) | 2021.05.17 |
스프링 시큐리티를 이용한 로그인 (0) | 2021.05.17 |
카카오톡 소셜로그인 (0) | 2021.05.17 |
최근댓글