[삽질기록] 온갖 잡다한 삽질기 모음 1🤦🏻‍♀️

케이·2022년 10월 22일
1

삽질기록

목록 보기
4/7
post-thumbnail

프로젝트를 진행하면서 기억에 남는 삽질기를 기록했습니다. 혹시나 틀린 부분이 있다면 지적해주시면 감사하겠습니다. 🙇🏻‍♀️

테스트 실패기..여기에 REST DOCS를 가미한..

테스트를 작성하고 난뒤에 문서 관리를 좀 더 효율적으로 해야겠다고 생각해 늦게나마 REST DOCS를 도입했다. Swagger 같은 경우는 코드가.. 더러워지는 부분이.. 좀 .. 거슬렸다..
그리고 REST Docs의 경우 테스트가 성공해야 문서가 작성 되는데 도입할 당시 테스트를 다 짜놓은 상태여서 바로 적용하기 좋다고 생각했다.
사실 개발과정 처음부터 넣었다면 좋았겠지만.. 시간에 쫓기고 해야할 일들이 많아서 미루고 미뤘다는 어리석은 핑계를 대본다..
각설하고!!

문제 상황과 해결방법

빌드를 하면 테스트 파트에서 application context를 읽어오는데 실패했다는 오류가 자꾸 떴다. 환경변수를 넣어줬음에도 불구하고 실패를 함 + 어플리케이션을 실행했을 때의 빌드과정과 일반 빌드과정(gradle에서 빌드)이 다른것을 발견

-> 인텔리제이 환경설정에 실행전에 해야할 task로 build를 지정하고 제대로 된 위치(인텔리제이에서 Run/Debug Configuration설정에서 Build 선택)에 환경변수를 넣어줌.
(아래그림의 before launch 부분)

-> (Ta-da) 성공!!🎉

Logback 도입기

급하게 개발을 하면서 + 익숙지 않아서 로그를 신경쓸 시간이 없었다(나는 쪼렙이니까..^^;;)
클라이언트 분들이 오류가 났다고 확인해달라고 부탁하실 때마 정말 무더기로 주주루루루루루루룩 쓰여져 있는 로그를 보면서 어디서 오류가 난건지 찾기도 너무 힘들었고... 그때부터였다.. 이러면 안된다는걸..

그래서 도입했다
LOGBACK!!!!!!!!!!!!!!!!!!!

Logback?

Logback은 자바에서 가장 널리 쓰이는 로깅 프레임 워크 중 하나로 우리가 로그관리를 위해서 사용하는 Slf4j의 구현체이다. (참고로 Slf4j는 Facade 패턴)

Logback은 Logger, Appender 그리고 Layout의 세 파트로 나뉘어 있다.

Logger는 로그 메시지를 위한 콘텍스트로 로그 메시지를 생성하는 어플리케이션과 상호작용한다.

Appender는 로그 메시지의 최종 목적지로 Logger는 하나 이상의 Appender를 갖는다. 주로 텍스트 파일의 형태이다.

Layout을 통해 메시지 출력 형태를 세팅할 수 있다.

기본 예제

build.gradle

//janino (for EvaluatorFilter of Logback)
	implementation group: 'org.codehaus.janino', name: 'janino', version: '3.1.6'

logback.xml

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <root level="debug">
    <appender-ref ref="STDOUT" />
  </root>

	<logger name ="org.springframework" level="info" additivity="false>
			<appender-ref ref="console" />
	</logger>

</configuration>

appender를 통해 출력 위치를 정하고 encoder의 pattern에 정의한 형태로 log를 출력한다.
logger를 통해 info 레벨 이상의 로그를 console에 출력한다.
선택한 log이외의 정보들은 root로 설정한다.(log에서 else와 같은 기능을 함)
이외에 파일의 사이즈나 저장 기간등을 설정할 수도 있다. 자세한 건 공식문서를... (정말 공식문서만한 것이 없다!)

로그 레벨

TRACE - DEBUG - INFO - WARN - ERROR
예를 들어 level을 info로 둔다면 info부터 warn, error까지 출력하게 된다.

Example.java

public class Example {

    private static final Logger logger 
      = LoggerFactory.getLogger(Example.class);

    public static void main(String[] args) {
        logger.info("Example log from {}", Example.class.getSimpleName());
    }
}

위에서 처럼 logback.xml을 작성한뒤에 log를 남길 곳에 작성을 하면 된다.

출력결과

20:34:22.136 [main] INFO Example - Example log from Example

문제상황

우리는 로그를 종류별(sql은 sql끼리, error는 error끼리)로 따로 보관하고 싶어서 logback.xml을 작성했다. 특히 SQL 파일이 분리/저장이 되면서 콘솔에는 해당 내용이 출력이 되지 않도록 작성했는데 실제로 실행을 했을 때는 예상했던 것처럼 되지 않아서 어디에서 잘못되었는지 이유를 찾는데 시간이 좀 소요 되었다.

해결 방법

결국 logback.xml 파일에서 아래와 같이 SQL 레벨을 info에서 debug로 수정해주었더니 해결완료..!!

<logger name="org.hibernate.SQL" level="DEBUG" additivity="false">
        <appender-ref ref="FILE_SQL"/>
    </logger>

출처

https://www.baeldung.com/logback
https://logback.qos.ch/manual/index.html

profile
삽질하며 깨닫고 배웁니다. (a.k.a 프로삽질러) + 이 구역의 회고왕

3개의 댓글

comment-user-thumbnail
2022년 10월 22일

로그를 저장할 수 있었다니!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
잃어버린 내 경력이여!!!!!!!!!!!!!!!!!!!
꿀팁 배워갑니다 주인장님

답글 달기
comment-user-thumbnail
2022년 10월 22일

Run/Debug Configuration으로 실행하기 전에 동작을 지정해줄 수 있군요!! 너무 꿀팁이네요
잘봤습니다 케이~~

답글 달기
comment-user-thumbnail
2022년 10월 22일

로깅 신경쓰신게 인상깊네요!!!! 잘 보았읍니다!!

답글 달기