Java Spring - 개념 공부 4

김재현·2022년 7월 22일
0

Programmers

목록 보기
5/28
post-thumbnail

Logging

로깅

  • 시스템을 작동할 때 시스템의 작동 상태의 기록과 보존, 이용자의 습성 조사 및 시스템 동작의 분석 등을 하기 위해 작동중의 각종 정보를 기록해둘 필요가 있다. 이 기록을 만드는 것을 로깅이라 한다.
    즉 로그 시스템의 사용에 관계된 일련의 「사건」을 시간의 경과에 따라 기록하는 것이다.
  • 프로그램을 개발 중, 혹은 완료 후에 발생할 수 있는 오류에 대해 디버깅, 운영 중인 프로그램 상태를 모니터링 하기 위해 필요한 정보를 계속 기록하는 것.
    ex. 버그가 발생했을 때 실행 중인 어플리케이션에 무슨 일이 일어났는지 알 수 없기 때문에 로그를 기록, 어떤 일이 있었는지 추측할 수 있다.
  • 로그를 찍을 때 print를 사용하면 성능 문제를 일으킬 수도 있음.

Logging Framework

  • Apache Commons logging
  • Log4J
  • Logback
  • SLF4J(Simple Logging Facade for Java)

SLF4J

  • SLF4J(Simple Logging Façade For Java)란 Logging Framework들을 추상화해 놓은 것이며, Facade Pattern을 이용한 Logging Framework입니다.

    퍼사드 :
    프랑스어 Façade 에서 유래된 단어로 건물의 외관이라는 뜻. 건물의 외벽에서 보면 안의 구조는 보이지 않음.
    퍼사드 패턴은 많은 서브시스템(내부 구조)을 거대한 클래스(외벽)로 만들어 감싸서
    편리한 인터페이스를 제공해 줍니다.

  • SLF4J가 제공하는 인터페이스가 외부의 벽을 만들어, 하부에 어떤 Logging Framework가 있는지 알 수 없게 함.
  • 새로운 Logging Framework가 나올때마다 코드를 변경해야 한다면 그것도 엄청난 소요가 될 수 있음.
    SLF4J를 사용할 경우 Binding만 바꿔주면 코드를 변경할 필요 없이 성능적 이점을 얻을 수 있다.

로깅 프레임워크의 Binding 모듈

  • SLF4J가 다양한 로깅 프레임워크를 지원하는데 이는 바인딩 모듈을 통해서 처리된다.
    바인딩 모듈은 로깅 프레임워크를 연결하는 역할을 하며, 대표적으로 logback-classic(logback), slf4j-log4j12(log4j2) 등등이 있다.
  • 어플리케이션은 SLF4J를 이용해 로깅 라이브러리가 어떤 것이든 같은 방식으로 로그를 남길 수 있게 해줌.
  • 필요할 때마다 Binding을 바꾸고 Underlying framework를 바꿔서 성능 이점, 업그레이드 등을 진행할 수 있음.

Log Level

  • 어떠한 상황, 환경 별로 Log를 어느정도까지(빈도, 횟수, 양 등) 남길까 결정하는 것.
  1. trace : 흐름 추적.
  2. debug : 디버깅.
  3. info : 정보 수집.
  4. warn : 경고.
  5. error : 심각한 것.
  • log 레벨을 바꿔가며 로그를 기록하는 정도를 조절할 수 있다.

Logger

  • Logger는 이름 기반으로 생성.

logback 설정하기

  • logback 설정파일 찾는 순서
  1. logback-test.xml 파일을 먼저 찾습니다.
  2. 없다면 logback.groovy 을 찾습니다.
  3. 그래도 없다면 logback.xml을 찾습니다.
  4. 모두 없다면 기본 설정 전략을 따릅니다.
  • test - resources 폴더에 logback-test.xml을 넣음.
  • resources 두 개가 충돌이 날 수 있음.
  • test에서 test코드가 실행될 때 logback-test.xml가 우선 적용되도록 함.
  • test안에 있는 resources 에는 logback-test.xml를 넣음.
  • 밖에 있는 resources 폴더에는 logback.groovy, logback.xml을 넣을 수 있음.
  • Basic한 logback은 공식 문서에 있음
    Basic configuration
  • appender은 어디에 어떤 포맷으로 로그를 남길 수 있는지 설정한다.
    다양한 방식으로 로그 기록 가능.
  • 패키지에서 어느 레벨의 로거를 출력하느냐를 정의함으로써 레벨에서 벗어난 로그는 출력하지 않을 수 있다.
  • appender가 중첩되면 결과도 중복돼서 출력된다.
    additivity = “false”를 사용하면 이 중첩을 방지할 수 있다.
  • 웬만하면 appender가 중첩되지 않도록 주의하도록 하자.

pattern 레이아웃

  • name과 name에 해당하는 value를 정의할 수 있다.
  • 프로퍼티를 일종의 변수처럼 정의하고, 설정을 가져다 쓸 수 있음.
  • ${}을 사용해서 치환할 수 있음.

Layouts

  • 로거에서 만드는 것은 로깅 이벤트.
    실제 로그백 프레임워크 내에서는 로깅이벤트가 만들어짐. 레이아웃 패턴이 로깅 이벤트를 갖고 문자열로 변환. 이때 문자열을 변환할 때 conversion word를 이용해서 로깅 이벤트가 문자열로 변환됨.
    Conversion Ward

file appender

  • 로그를 개별 파일로 남기는 법.
    어떤 파일에 로그를 남길지 지정해주어야 하며 패턴을 정의해 주어야 함. 프로퍼티를 지정하면 같이 쓸 수 있음.
  • 실행할 때마다 로그를 적는 것이 기본 설정.
    append에 false 값을 주면 실행할 때 덮어쓰기하도록 설정할 수 있다.
    라인들을 이어서 추가할지, 아닌지 append를 false하는 것으로 조절할 수 있다.
  • 로그가 추가될 때마다 파일이 만들어지게 할 수도 있는데, 특정 타임스탬프를 만들고 키를 줌으로 파일이 일일이 생성되게 설정할 수도 있다.
    데이터 패턴으로 파일명을 설정할 수 있다.

RollingFile Appender

  • 배포하는 입장에서는 어플리케이션의 배포가 어떻게 이뤄질지 모른다.
    일반적으로 어플리케이션은 장시간 동안 구동되고, 로그가 너무 많아질 수 있음. 로그 파일의 용량이 너무 커질수도 있고, 이렇게 커진 로그 파일은 읽기도 어렵다.
  • 일반적으로 1일 단위로 로그를 분할시킨다.
  • rollingPolicy 와 triggerPolicy를 정의해주어야 한다.
    rollingPolicy : 무엇을 만들건지, 어떻게 만들건지, 어떤 파일을 만들건지 결정.
    triggerPolicy : 언제 트리거를 발동시켜 만들것인지.
  • TimeBaseRollingPolicy : rollingPolicy와 triggerPolicy를 모두 구현. 시간이 지나면 파일을 만들어준다.
  • 이 외에 용량이 커지면 만들어지게 하거나, 시간과 용량을 합쳐서 만들수도 있다.

ConversionRule

  • ConversionRule을 이용해 컨버전 문자를 추가할 수 있음.
    Conversion Class를 정의하는 것도 가능하지만, SpringBoot에서 제공하는 것도 있음.
  • ConversionRule은 사용하기 위한 이름이 필요하다. 이름을 정의해야지 컨버터에 의해서 이벤트가 적용될 때 적용이 되기 때문.
    ex. ConversionWord = "clr"
    ()를 사용해서 범위를 지정할 수 있다.

Spring Boot

  • 스프링부트의 특징은 공식 문서를 참조하자.
    공식문서
  • springbootStarter
    공식문서2
  • springApplication : 쉽게 실행하게 해주고, 서버구현과 어플리케이션 설정을 도와줌.

SpringBootStarter

  • 스프링부트 스타터를 활용하면 dependency를 간략하고 깔끔학 처리할 수 있다. 노하우가 없고 많이 다뤄보지 않았다면 중복되는 등 dependency가 번잡해질 수 있다.
  • 스프링부트 스타터는 일종의 pom파일이나 maven설정만 들고 있는 프로젝트.
  • 스프링부트 스타터를 이용하면, 스프링의 기본적인 dependency를 설정해준다. 스프링 애플리케이션을 빠르게 설정하고 시작할 수 있게 해준다.
  • 스프링부트는 다양한 종류의 스타터 모듈을 제공한다.

SpringBoot Application

어떻게 구현되어 있는지?

  • SpringBootConfiguration은 Configuration을 사용
    Configuration은 빈을 등록하는 클래스로 사용되고, SpringBootConfiguration도 마찬가지.
    둘의 차이점은 스프링부트의 경우 테스트환경에서 스프링부트가 자동으로 찾아짐.
  • SpringBoot Application에는 대체로 단 하나의 SpringBoot Application을 작성하고, 별도의 컨피규레이션은 용도에 따라 작성함. 최상의 앱 컨피규레션이 되고 딱 하나만 있어야 함.
    딱 하나의 스프링부트 컨피규레이션은 스프링부트 애플리케이션을 단 클래스가 하나라는 뜻. 그게 메인메서드가 있는 애플리케이션 클래스가 된다.
  • 스프링부트 애플리케이션을 달면 자동으로 컴포넌트 스캔이 사용되기 때문에, 자동으로 모든 패키지 스캔이 됨.
  • 스프링에플리케이션 클래스에 run이라는 메서드 전달. 빈을 등록하면 context에 자동으로 등록.
    스프링애플리케이션 런에서 반환되는 것은 Application Context.
  • Logger도 사용 가능.
  • 별다른 설정 없이 외부 리소스도 사용 가능. YAML 등.

설정보다 관례를 중시

  • 관례에 따라 기본적으로 설정이 되고, 특별히 적용해야 할 것들에만 설정을 적용하자.
    단순성을 확보하고 유연성을 잃지 않을 수 있음.

배너 바꾸기

배너 바꾸기

logging level

  • 스프링부트의 로그백을 상속받을수도 있음.
  • 별도의 log appender을 만들 수도 있고, 로그의 레벨을 바꿀 수도 있음. 원하는 형태로 바꿀 수 있다.

외부설정 가져오기

  • 스프링에서 외부 설정을 가져올 때는 순서가 있다.
    번역 링크

SpringBoot에 맞게 실행하기

  • 스프링 실행을 프로그램에서 인식함.
    실행에 스프링부트에 맞는 섹션이 있음. 프로파일을 직접 입력.
    인텔리제이에서도 쉽게 프로파일을 추가하거나, 다른 여러 가지 기능들을 사용 가능.

0개의 댓글