W3D5-SpringBootPart1

Onni·2021년 8월 24일
0

TIL

목록 보기
5/21

1.로깅처리하기

1-1 로깅이란?

시스템을 작동할 때 시스템의 작동 상태의 기록과 보존, 이용자의 습성 조사 및 시스
템 동작의 분석 등을 하기 위해 작동중의 각종 정보를 기록해둘 필요가 있다. 이 기록
을 만드는 것을 로깅이라 한다. 즉 로그 시스템의 사용에 관계된 일련의 「사건」을
시간의 경과에 따라 기록하는 것이다.
지금까지는 System.out.println을 이용-> 상황별로 로그 설정 어렵고
출력된로그를 별도로 저장하거나 처리어려움
대량의 로그를 발견했을때 큰 성능문제

1-2 Java Logging Framework

  • java.util.logging
  • Apache Commons logging
  • Log4J
  • Spring Framework 시작하기 󾠱 2
  • Logback
  • SLF4J(Simple Logging Facade for Java)

1-3 SLFJ

  • 여러 로깅을 추상화해둔것
  • 인터페이스를 통해 하위에 어떤 프레임워크를사용하는지 몰라도 사용가능
  • 로깅 라이브러리가 어떤것이든 같은 방법으로 로그를 남길수있음
  • 필요할때마다 바인딩을 바꾸고 underline프레임워크를 바꿔 성능이점,업그레이드 지정 가능
  • SLF4J가 다양한 로깅 프레임워크를 지원하는데 이는 바인딩 모듈을 통해서 처리
  • 바인딩 모듈은 로깅 프레임워크를 연결하는 역할(logback-classic(logback),
    slf4j-log4j12(log4j2) 등등)
  • 어떤로그를 어떤방식으로 남길지 결정하고 로그를 남겨야함
    로그를 어디까지 남길까에 관한것(log level)
  1. trace
  2. debug
  3. info
  4. warn
  5. error

1-4 Logger

  1. static: 오직 이클래스에 해당하는 로그는 단 하나 (인스턴스마다 생성되는것이아니라)
    final: 다른클래스가 못바꾸도록 설정
  2. 이름기반으로 생성(원래는 맨위에처럼 패키지 이름까지 다써줘야함)
    결과에도 보면 패키지경로 모두 써져있는것을 확인 가능

1-5 logback 설정하기

ogback 설정파일 찾는 순서
1. logback-test.xml 파일을 먼저 찾습니다.
2. 없다면 logback.groovy 을 찾습니다.
3. 그래도 없다면 logback.xml을 찾습니다.
4. 모두 없다면 기본 설정 전략을 따릅니다. BasicConfiguration
main-java-resources: logback.groovy, logback.xml
test:logback-test/xml

resources 밑에 logback.xml을 생성
1. appender : 어디에 어떤포맷으로 로그를 남길수 있는지 설정하는것
이설정에따라 콘솔,파일,디비에 남길수 있음
2. ConsoleAppender은 콘솔에다 남기겠다는 설정
ConsoleAppender, FileAppender, RollingFileAppender 등이 있음
pattern:툴력한 내용포맷
3. 별도의 레벨 지정
4. 클래스 패쓰상에 사용되는 모든 로그에 적용

루트레벨이 debug이고, springorder 레벨은 info일때 출력은 어떻게 될까?

OrderTest는 info, OrderProperties는 debug단계
ordertest에서 info로 출력한것만 출력

appender을 추가할때 additivity = "false" 설정이 없으면 두번씩 출력 되는것에 유의하자.
파일에 내용을뽑아서 기록 콘솔에는ㄷ ㅜㄹ다 다 처리 파일만 로그밑에다 어펜드 레벨 추가

1-6 patterLayout

  • 패턴레이아웃을 이용하면 우리가 로거에서 만든 로깅 이벤트
    를 가지고 문자열을 변환
  • 문자열로 변환될때 conversion specifiers 이용(변경이 되기위해 약속되어진 단어)
  1. %d - 로깅 이벤트의 날짜를 출력합니다. %date{ISO8601}, %date{HH:mm:ss.SSS} 이렇
    게 자바에서 제공하는 데이트 타임 페턴을 이용할 수 있습니다.
    https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html
  2. %logger{length} - Logger name의 이름을 축약할 수 있습니다. {length}는 최대 차릿수
    입니다.
  3. %thread - 현재 Thread name
  4. %-5level - log level -5는 출력 고정폭 값
    a. -를 주면 오른쪽에 스페이스로 주어진 숫자보다 작은 문자열이 오면 공백을 채웁니다
    즉 INFO와 같이 4자리면 오른쪽에 1칸 공백 패딩처리가 됩니다

1-7 Conversion


지정해준 경로에 파일이 생성된 것을 볼 수 있다. 이때 로그는 실행할때마다 업데이트 된다.
false설정을 해주면 오버라이딩 되어 한번만 실행된다.


실행화면을 살펴보면 기본적으로 실행할때마다 새로운 로그가 나오는것을 볼 수 있다. 하지만
false을 해주고 실행하면 여러번 실행해도 결과는 한번만 출력한다.

timestamp를 이용하여 시간별로 파일 생성 가능

  1. 파일로 로그를 남기는 경우 대체로 RollingFileAppender를 씀
    장시간 구동되기 때문에 하나의 로그파일에 작성하면 너무 용량이커지기 때문에 일별로 분할함
  2. 파일에 따라 롤링되는 방식이 차이가 있음
  • 있을때: access파일이 만들어지고 날짜가 변경되는 순간에 해당날짜로 바뀌고 새로운 access파일 생성 즉 최신은 다 엑세스로그에 (날짜를몰라도 그날의 로그임을 알수있음)
  • 없을때: 날짜별로 생성
  1. TimeBasedRollingPolicy: rollingPolicy,triggeringPolicy를 둘다 implemets 하고 있음
  • rollingPolicy 뭘만들지, 어떻게 만들지 결정
  • triggeringPolicy 언제 트리거 걸건지 결정

2. SpringBoot

2-1 스프링 부트 이해하기

  • spring-boot-starter (Starter POMs) : 스프링부트는 많은 starter 모드를 제공해주고 있음
  • SpringApplication을 통한 손쉬운 실행
  • Auto Configuration
  • 쉬운 외부 환경 설정 - Properties, YAML, Command line 설정 등
  • 프로파일을 통한 실행환경 관리
  • Packaging Executable Jar
  • Developer Tools
  • MVC스타터를 넣어주면 웹과 관련된 디펜던시가 알아서 구성

  • @SpringBootConfiguration: @ComponentScan 쓰고 있음->Bean Definition 가능
  • Configuration SpringBoodConfiguration 차이점 : 테스트 환경에서 자동으로 찾아진다는 점
  • SpringBoodConfiguration은 단 하나이고 별도의 configuration을 용도에 따라 분류

2-2 Spring Boot Logging 기능

  1. SpringBoot를 이용하면 이와같은 설정을 안해줘도 됨
    즉, 별다른 설정없이 자동으로 yaml, configuration properties 사용가능
  2. SpringBoot는 자동으로 application.yaml파일을 읽을 수 있음. 이때 application.yaml이 아닌 다른이름으로 변경하면 읽을 수 없음

스프링부트가 기능을 제공하는 방식을 COC(conversion over cofiguration) 라고 불린다.
설정보다 관례를 중시 : 모든걸 다설정하면서 애플리케이션을 구성하는거보다는 관례를 따르면서 특별하게 적용해야 하는 것들에 대해서만 설정을 하자(필요한것만 설정 )
단순성 확보, 유연성을 잃어버리지 않는 장점

스프링부트의 기본설정에 의해서 로그가 찎히는것

profile
꿈꿈

0개의 댓글