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. 스프링 부트 프로젝트 생성

  1. New - Spring Starter Project로 프로젝트 설정을 활성화한다.
  2. 각 항목의 선택 사항들을 체크한다.
  3. 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>