2022 Masters Course/Web Backend Course

2022 마스터즈 코스(백엔드) 44일차 회고(2022. 3. 10.) - "코드 리뷰를 통해 부족한 점 발견하기"

ikjo 2022. 3. 10. 18:50

해당 글은 코드스쿼드 2022 마스터즈 코스 "Java 웹 백엔드" 과정을 수강하면서 학습한 내용 등에 대한 회고 글입니다. :)

 

수강 회고

지난주에 이어서 이번주 역시 스프링 부트 미션 과제를 수행 중에 있는데 이번 미션에서는 우연히 코드스쿼드 리뷰어 Dion과 연이 닿아 저번주와 이번주 역시 Dion으로부터 코드 리뷰를 받는 중에 있다. 단계별로 미션 과제를 수행하면서 나름대로 설계하고 코드를 작성하며 Pull Request를 보내지만, 막상 코드 리뷰를 받아보면 내가 안다고 생각했었지만 잘못 이해하고 있었던 부분 그리고 아에 미처 고려하지 못했던 부분들이 정말 많았다는 것을 알게 될 수 있었다.

 

만일 나 혼자서만 프로그램을 개발하고 있었다면 나의 한정된 지식과 경험만으로는 이러한 부분들을 절대 발견하지 못했을 것이다. 단순히 프로그램 기능을 구현하는 것은 시간만 있으면 해낼 수 있겠지만 이러한 부분들은 나 보다 경험이 많은 사람이 제 3자의 시선으로 봐주지 않는다면 발견하지 쉽지 않을 것이라고 생각된다.

 

코드스쿼드에 오기 전에는 개발 공부를 한다고 하면 주로 "기능 구현"에만 초점이 맞춰져 있었던 것 같다. 하지만 코드스쿼드에 온 이후에는 단순 "기능 구현" 보다도 어떻게 하면 가독성이 좋고 유지보수가 용이하게 코드를 작성할 수 있을지(객체지향 프로그래밍 등)를 더 많이 고민할 수 있게 되었다. 특히, 이번 Web 과정(특히 스트링 부트 미션 과정)에서는 테스트 코드 작성의 중요성도 많이 느끼고 있다.

 

 

학습 회고

  • 스프링 부트 관련 미션 과제 풀이
    • Java 웹 백엔드 클래스 내 소모임원과 zoom 회의실에서 학습

 

Logger의 사용 목적

게시 글 생성, 조회 등의 기능과 관련한 사용자 요청에 대해 관련 Service 객체 메서드를 호출해주고 응답해주는 ArticleController가 있다. 이때 사용자의 게시글 생성 요청(HTTP 메서드, URL 등)에 대해 로그를 남기고자 하여 다음과 같이 Logger를 사용했었다.

 

@Controller
public class ArticleController {

    private Logger logger = LoggerFactory.getLogger(ArticleController.class);

    @PostMapping("/questions")
    public String createArticle(Article article) {
        // 잘못된 예 : logger.info("POST /questions {}", article.toString());
        // 올바른 예 : logger.info("POST /questions {}", article);
        articleService.upload(article);

        return "redirect:/";
    }
}

 

이때 사용자로부터 요청받은 Article 객체(form 태그 내 데이터 저장) 내 데이터를 로그에 나타내기 위해 Artice 클래스의 toString() 메서드를 오버라이드하고 이를 호출하여(article.toString()) 인자로 전달해주었다. 하지만 이때 굳이 toString()을 호출할 필요는 없다. 왜냐하면 logging API들은 기본적으로 toString()을 자동으로 호출해주기 때문이다.

 

예를 들어 info 메서드의 선언부는 public void info(String format, Object... arguments)와 같은데도 logging API들은 다음과 같은 기본 원칙에 따라 빌드된다. 

LOG.info(someObject.toString());

 

이러한 Logger의 특성은 Looger의 목적이 애플리케이션 내에서 발생하는 다양한 이벤트에 관해 사람(개발자)이 읽기 쉬운 형태의 메시지로 출력해주는데 목적이 있기 때문으로 볼 수 있다. 이때 잦은 toString은 생각보다 애플리케이션 성능에 많은 영향을 줄 수 있다. 그러므로 로그를 출력할 때 불필요하게 toString()을 호출하여 이를 인자로 전달해줄 필요는 없다. 아울러, toString()이 아닌 + 문자열 연산자 직접 문자열을 연산하여 이를 인자로 전달해줄 필요도 없다. 물론 그럼에도 불구하고 로그 결과는 같겠지만 말이다.

 

 

좋았던 점

  • 저번 주에 이어서 이번 주 역시 코드 리뷰를 통해 많이 배우고 성장하는 기분입니다.

 

 

아쉬웠던 점

  • 오늘 오전에 개인 사정이 있어서 오전 호눅스 마스터 클래스 강의를 듣지 못했던 점이 아쉬웠습니다.

 

 

이전 보다 개선되었던 점

  • 그동안 프로그래밍을 하면서 관습적으로 Logger 기능을 사용하고 있었는데 이번 코드 리뷰를 통해 Logger 기능의 사용 목적과 세부 동작 원리 등을 학습할 수 있어서 유익했습니다.