[Spring Boot] [1] 6. 롬복과 리팩터링

롬복과 리팩터링

목표: 롬복을 활용해 기존 코드를 리팩토링 하기 (기존 코드 간소화)

롬복 (Lombok)

: 코드를 간소화 시켜주는 라이브러리

여러 필수 코드의 반복을 최소화.

리팩터링 (Refactoring)

: 코드의 구조, 성능을 개선하는 작업

Logging: 프로그램의 수행 과정을 기록으로 남기는 것. (자동차의 블랙박스📹 같은)

실습

롬복 설치

먼저 롬복을 설치해야 한다.
build.gradle파일에서 중요한 부분은 dependencies ➡️ 여기에 라이브러리를 추가할 수 있다.
프로그램 생성할 때 추가했던 도구(요리도구)들이 여기 들어가는 것.

Dependencies 안에 아래와 같은 코드를 추가해주고

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

이러한 창이 있는데 코끼리를 눌러 새로고침 및 적용(?) 해주기

아래 사진과 같이 시간이 지나 적용이 되고나면 오른쪽 Gradle 창에서 lombok이 생긴 것을 확인할 수 있다.

플러그인 설치

인텔리제이 ➡️ help ➡️ find action ➡️ plugins 검색 ➡️ lombok 검색

나는 검색해도 나오지 않아서 installed 보니까 되어있네,,?

그리고 annotation processors 해줘야하는데 원래 밑에 경고창이 뜨면서 할 수 있다. 놓친 사람이 있다면
find action ➡️ Annotation Processors 검색 ➡️ Enable annotation processing 체크 박스 체크해기

롬복을 사용할 준비 완료!

DTO 리팩토링

DTO 디렉토리에 ArticleForm 파일을 만들어뒀었다. 여기서 생성자랑 toString()이랑 다 귀찮아. 그러면 이제 과감하게 내용(주석처리 한 내용)을 지우고 다음과 같이 코드(@AllArgs- 와 @ToString)를 작성한다.

package com.example.firstproject.dto;

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

@AllArgsConstructor
@ToString
public class ArticleForm {

    private String title;
    private String content;

    // 1. 생성자 삭제 (DTO 리팩토링)
//    public ArticleForm(String title, String content) {
//        this.title = title;
//        this.content = content;
//    }

    // 2. toString() 메소드도 삭제
//    @Override
//    public String toString() {
//        return "ArticleForm{" +
//                "title='" + title + '\'' +
//                ", content='" + content + '\'' +
//                '}';
//    }

    public Article toEntity() {
        // 새롭게 Article을 생성해 반환해주도록 함
        // Article은 Entity클래스이므로
        return new Article(null, title, content);
    }
}

주석 부분은 다 삭제하도록 하기
이로써 코드의 가독성이 좋아지고 간결해졌다.

이제 서버 재실행 & 데이터 submit & DB를 h2-console로 확인 하면 데이터가 잘 나오는 것을 볼 수 있다. 아, 이때 h2-console url은 또 바뀌었으니 저번 시간처럼 찾아서 바꿔 넣어 connect 해주자.

entity 리팩토링

entity 디렉토리의 Article 파일로 이동

(DTO와 마찬가지로) 아래와 같이 코드 구성(주석 처리된 부분은 완전삭제. 설명을 위해 남김)

package com.example.firstproject.entity;

import lombok.AllArgsConstructor;
import lombok.ToString;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity // DB가 해당 객체를 인식 가능하도록 함
@AllArgsConstructor
@ToString
public class Article {

    @Id // 대표값을 지정 (마치 주민등록번호처럼 title과 content가 달라도 구분짓도록)
    @GeneratedValue // 1, 2, 3 ... 처럼 알아서 어노테이션
    private Long id;

    @Column
    private String title;

    @Column
    private String content;

    // 1. 생성자 삭제
//    public Article(Long id, String title, String content) {
//        this.id = id;
//        this.title = title;
//        this.content = content;
//    }

    // 2. toString method 삭제
//    @Override
//    public String toString() {
//        return "Article{" +
//                "id=" + id +
//                ", title='" + title + '\'' +
//                ", content='" + content + '\'' +
//                '}';
//    }

}

로그 남기기

controller 디렉토리의 ArticleController 파일로 이동

지금껏 System.out.println으로 데이터를 찍어보고 있었다. 그러나 실제론 이렇게 절대 해서는 안된다.
➡️ 로깅 기능으로 대체

로깅: 블랙박스처럼 서버에서 일어나는 일들을 모두 기록할 수 있도록 하는 것

사용법:
public class Arti- {} 위에 @Slf4j코드를 추가. 이는 로깅을 위한 골뱅이(어노테이션)

이걸 해주었으면 이제 System.out.println을 지우고 log.info(원하는 데이터); 으로 바꾸기

즉,

System.out.println(form.toString()); ➡️ log.info(form.toString());
System.out.println(article.toString()); ➡️ log.info(article.toString());
System.out.println(saved.toString()); ➡️ log.info(saved.toString());

으로 코드 수정

📌 서버 실행시 유의점

서버가 동시에 두 개의 서버가 실행되지 않도록 조심!
서버는 한 번에 한 개의 서버만 실행되도록!

결과 확인하기

서버를 재실행 시켜 데이터를 두 개 넣어보았다. 이제 println으로 찍히지 않고 (println보다 다양한 정보를 포함한 채로)로깅으로 찍혀나온다.

좋은 웹페이지 즐겨찾기