[ Spring Boot ] 롬복과 리팩토링

ma.caron_g·2022년 9월 5일
0

스프링 부트

목록 보기
8/9
post-thumbnail

본 글은 Youtube - 홍팍님의 강의를 참고하여 작성하였습니다.

[ 롬복이란? ]

코드를 간소화 시켜주는 라이브러리
(Getter, Setter, Constructor(), toString())

  • 필수 코드의 반복을 최소화
  • 로깅 기능을 통해 println 개선 (리팩토링 가능)

리팩토링이란, 코드의 구조, 성능을 개선하는 작업.
로깅은 프로그램의 수행과정을 기록

ex. 자동차 블랙박스

[ build.gradle ]

롬복을 사용하기 위해 depencies에 코드를 추가해줍니다.

dependencies {
	// 롬복 추가
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'

Sync Now 와 같은 새로고침을 통해 gradle을 적용해주고 잘 적응 됐는지 확인해줍니다.

롬복이 추가되었습니다.

IntelliJ IDEA가 2020.03 이후로 부터 롬북 플러그인을 추가할 필요 없이 자체 설치되어있습니다.

Preference에 들어가서 Build, Execution, Deployment에 들어가
Enable annotation processing을 체크하여줍니다.

이제 롬복을 사용하여 리팩토링 할 준비는 끝났습니다.

[ ArticleForm.java ]

package com.example.firstproject.dto;

import com.example.firstproject.entity.Article;

public class ArticleForm {

    private String title;
    private String content;

    public ArticleForm(String title, String content) {
        this.title = title;
        this.content = content;
    }

    @Override
    public String toString() {
        return "ArticleForm{" +
                "title='" + title + '\'' +
                ", content='" + content + '\'' +
                '}';
    }

    public Article toEntity() {
        return new Article(null, title, content);
    }
}

기존 코드는 다음과 같았습니다.

이를 줄이기 위해 롬북을 사용해줄 것입니다.

생성자와 toString()을 지워주고

클래스 위에 어노테이션을 추가해줍니다.

package com.example.firstproject.dto;

import com.example.firstproject.entity.Article;
import lombok.AllArgsConstructor;
import lombok.ToString;

// 생성자를 자동 생성해주는 어노테이션
@AllArgsConstructor
// toString()을 자동 생성해주는 어노테이션
@ToString
public class ArticleForm {

    private String title;
    private String content;

    public Article toEntity() {
        return new Article(null, title, content);
    }
}

두 어노테이션을 추가함으로써 코드가 한결 간결해졌습니다.

이 처럼 다른 파일에 있는 생성자와 toString() 또한 똑같이 바꾸어 간결하게 만들어줍니다.

[ 로깅 ]

기록을 남기는 것으로써,
실제 서버에서 System.out.println()을 사용하여 로그를 찍으면 안될 뿐더러, 서버 운영에 안 좋은 영향을 주기 때문에 다른 방법을 사용합니다.

[ ArticleController.java ]

package com.example.firstproject.controller;

import com.example.firstproject.dto.ArticleForm;
import com.example.firstproject.entity.Article;
import com.example.firstproject.repository.ArticleRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

@Controller
@Slf4j // 로깅을 위한 골뱅이(어노테이션)
public class ArticleController {

    @Autowired // 스프링 부트가 미리 생성해 놓은 객체를 가져다가 자동 연결!
    private ArticleRepository articleRepository;

    @GetMapping("/articles/new")
    public String newArticleForm() {
        return "articles/new";
    }

    @PostMapping("/articles/create")
    public String createArticle(ArticleForm form) {
        log.info(form.toString());
        //System.out.print(form.toString()); -> 로깅기능으로 대체

        // 1. DTO를 변환! Entity!
        Article article = form.toEntity();
//        System.out.println(article.toString());
        log.info(article.toString());
        // 2. Repository에게 Entity를 DB안에 저장하게 함!
        Article saved = articleRepository.save(article);
//        System.out.println(saved.toString());
        log.info(saved.toString());
        return "";
    }
}

로깅을 남기기위한 어노테이션을 추가해줍니다.
@Slf4j를 추가해줍니다.

그리고 System.out.println()이 존재하는 곳에
log.info()를 찍어 로그를 찍어줍니다.

그럼 위와 같이 값이 출력되면서 로그가 찍히는 것을 볼 수 있습니다.

profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

0개의 댓글