IT수업/STS3

IT 수업 19주차 (113) Junit 테스트(lombok, @Builder, 로그레벨)

워제하 2024. 4. 29. 16:01

● lombok

Lombok(롬복)은 Java 라이브러리로 반복되는 getter, setter, toString 등의 메서드 작성 코드를 줄여주는 코드 다이어트 라이브러리

여러가지 어노테이션을 제공하고 이를 기반으로 코드를 컴파일과정에서 생성해 주는 방식으로 동작하는 라이브러리이다. 즉 코딩 과정에서는 롬복과 관련된 어노테이션만 보이고 getter와 setter 메서드 등은 보이지 않지만 실제로 컴파일된 결과물(.class)에는 코드가 생성되어 있다는 뜻이다.

 

- 긴 getter, setter, toString 코드를 어노테이션을 사용해서 코드를 생략할 수 있고 @getter, @setter, @toString 대신 @Data 하나만 사용해서 쓸 수 있다.

 

 

 

< 실습하기 >

src/test/java 에서 테스트를 한다.

테스트를 위해 src/test/java의 com.example.app 안에 lombok 패키지를 만든다.

(src/test/java와 src/main/java의 위치를 헷갈리면 안된다.)

 

 

마우스 우클릭으로 new -> Junit Test Case를 선택해 lombokTests를 만든다.

 

 

 

 

안에 이전에 만든 객체들을 사용하기 위해 새로운 변수를 만든 뒤 .set으로 값을 넣어 코드를 작성해준다.

 

그리고 마우스 우클릭으로 run as 의 2Junit Test를 눌러 실행시켜주면 된다.

( 다른 방법으로는 해당 함수 (personDtoTest()) 에 커서를 올린 뒤 run as하면 해당 함수만 실행된다.)

 

 

< 실행화면 >

 

 

 

 

- null 체크

새로운 변수를 만들어 null을 넣고 출력시키면 null 에러가 뜨게 된다.

 

 

 

 

 

 

● @Builder

빌더 패턴(BUilder Pattern)이란 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다.

생성자 인자로 너무 많은 인자가 사용되는 경우, 어떠한 인자가 어떠한 값을 나타내는지 확인하기 힘들고 어떠한 인스턴스의 경우에는 특정 인자만 생성해야 하는 경우가 발생하기 때문에 이러한 문제를 해결하기 위해서 빌더 패턴을 사용한다.

 

- 장점

1. 필요한 데이터만 설정할 수 있다.
2. 유연성을 확보할 수 있다.
3. 가독성을 높일 수 있다.
4. 변경 가능성을 최소화할 수 있다.

 

 

아까 만들었던 PersonDto에 Builder 어노테이션을 추가해준다.

 

그리고 lombokTests로 돌아와 Builder를 사용해본다.

( 실행할때는 해당 함수에 커서를 올려 실행시켜야 해당 함수만 실행된다. )

 

 

 

 

● log4j.xml

- Appenders
: 출력 대상 선정
      - <appender name="console" class="org.apache.log4j.ConsoleAppender">
      - 로그 출력을 Console에 함


: 로그 포맷팅
      - <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p: %c - %m%n" />
        </layout>

 

 

 

 

● 로그레벨 정리 

TRACE -> DEBUG - > INFO - > WARN -> ERROR -> FATAL

 

- TRACE : 가장 상세한 로그 레벨. 코드의 특정 부분이 실행될 때마다 세부 정보를 기록한다. 일반적으로 개발 중 디버깅 목적으로 사용된다. 보통 프로덕션 환경에서는 사용되지 않는다.
- DEBUG : 디버그 목적으로 사용되며, 애플리케이션 실행 중에 중요하지 않은 세부 정보를 기록한다. TRACE보다는 덜 상세하지만 개발 중 디버깅에 유용하다.
- INFO : 일반적인 정보를 기록하는 레벨. 애플리케이션의 주요 이벤트나 실행 정보를 기록한다. 애플리케이션이 예상대로 작동하는지 확인할 때 유용하다.
- WARN : 경고 메시지를 기록하는 레벨. 프로그램의 잠재적인 문제를 나타내지만, 심각한 문제는 아니다. 예를 들어, 잘못된 구성 설정이나 잠재적인 버그와 같은 경우에 사용된다.
- ERROR : 오류 메시지를 기록하는 레벨. 심각한 문제가 발생했음을 나타내며, 애플리케이션의 기능이 올바르게 수행되지 않았음을 알린다. 일반적으로 예외가 발생한 경우 이 레벨을 사용한다.
- FATAL : 매우 심각한 오류를 나타내며, 애플리케이션의 실행이 중단되었음을 나타낸다. 애플리케이션을 중단시켜야 하는 치명적인 오류가 발생한 경우에만 사용된다.

로그 레벨은 보통 위의 순서대로 우선순위가 높아진다. 예를 들어, TRACE 레벨은 가장 낮은 우선순위이며, 
FATAL 레벨은 가장 높은 우선순위이다. 그러므로 설정된 로그 레벨보다 높은 우선순위의 메시지만이 출력된다. 
예를 들어, INFO 레벨을 설정하면 INFO, WARN, ERROR 및 FATAL 메시지가 출력되지만, DEBUG 및 TRACE 메시지는 출력되지 않는다.

 

 

 

< 실습 >

HomeController에 log들을 찍어본다.

 

 

src/main/resources 안에 있는 log4j.xml에 가서 info 대신 warn, debug, trace, error를 찍을 수 있다.

그래서 출력이 어떻게 되는지 확인하면 된다. 

(src/test/resources의 log4j.xml에서 바꾸면 안된다. 적용안됨)

 

모두 info로 했을 경우에 찍히는 콘솔화면이다.

 

이번에는 모두 warn으로 바꿔봤다.

모두 warn으로 바꿨을 때는 info가 아무것도 뜨지 않게 된다. 왜냐하면 warn 가 info보다 상위에 있기 때문이다.

 

 

이번에는 core만 debug로 바꿔봤다.

 

콘솔창을 보면 info 때 보다 훨씬많은 문장들이 출력되는 것을 확인 할 수 있다.

이유는 debug가 info보다 우선순위가 낮기 때문이다.