Notice
Recent Posts
Recent Comments
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

Lombok 본문

Spring/게시판 만들기

Lombok

빌드이너프 2023. 9. 12. 10:28

Lombok: 코드를 간소화해 주는 라이브러리

getter(), setter(), constructor(), toString()과 같은 메서드를 작성하는 것은 귀찮은 면이 있다

그래서 lombok을 사용하면 해당 과정을 간단하게 작성할 수 있고, println() 문을 로깅 기능을 통해 개선할 수 있다

@Data: 코드 반복 최소화

@Slf4j: 로깅 기능 지원

 

lombok을 활용해 리팩터링하기

form 데이터를 작성하기 위해 controller, dto, entity, repository 등을 작성하였다

lombok을 활용해 늘어진 코드를 간소화하고 println() 문을 로깅으로 변환

 

lombok 설치

build.gradle 파일에 dependencies {} 블록에 추가

compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'

 

새로고침

코끼리 모양 아이콘 클릭

 


DTO 리팩터링

com.example.firstproject>dto>ArticleForm에 ArticleForm() 생성자와 toString() 메서드가 있다

ArticleForm() 생성자 코드를 지운다

ArticleForm 클래스 위에 @AllArgsConstructor 어노테이션 추가(클래스 안쪽의 모든 필드, title과 content를 매개변수로 하는 생성자가 자동으로 만들어진다)

package com.example.firstproject.dto;

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

@AllArgsConstructor
public class ArticleForm {
    private String title;
    private String content;


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

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

 

toString() 메서드 간소화

toString() 메서드 코드 전체를 지운다

@ToString 어노테이션을 추가한다(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;

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

 

서버 실행

localhost:8080/articles/new 에서 제목(qwert), 내용(12345) 입력

 

DB확인

localhost:8080/h2-console 에서 로그인

ARTICLE 테이블 실행(SELECT * FROM ARTICLE;)


Entity 리팩터링

com.example.firstproject>entitry>Article

Article() 생성자와 toString() 메서드 지우기

Article 클래스 위에 @AllArgsConstructor 어노테이션(클래스 안쪽의 모든 필드[id, title, content]를 매개변수로 하는 생성자가 자동생성됨)

toString() 메서드를 대체하는 @ToString 어노테이션을 붙인다'

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;


@AllArgsConstructor
@ToString
@Entity
public class Article {
    @Id
    @GeneratedValue
    private Long id;
    @Column
    private String title;
    @Column
    private String content;
}

 

Controller 리팩터링

com.example.firstproject>controller>ArticleController

println() 문으로 데이터를 출력하는데 이러면 안됨

package com.example.firstproject.controller;

import com.example.firstproject.dto.ArticleForm;
import com.example.firstproject.entity.Article;
import com.example.firstproject.repository.ArticleRepository;
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
public class ArticleController {
    @Autowired
    private ArticleRepository articleRepository;

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

    @PostMapping("/articles/create")
    public String createArticle(ArticleForm form) {
        System.out.println(form.toString());
        // 1. DTO를 entity로 변환하기
        Article article = form.toEntity();
        System.out.println(article.toString());

        // 2. Repository로 엔티티를 DB에 저장
        Article saved = articleRepository.save(article);
        System.out.println(saved.toString());
        return "";
    }
}

 

println() 문을 사용하면 데이터를 바로 출력해 볼 수 있지만, 나중에 따로 찾아볼 수 없다

로깅기능을 사용하면 나중에라도 그동안 찍힌 로그들을 찾아볼 수 있다

ArticleController 위에 @Slf4j 어노테이션 추가(로깅 기능 사용)

System.out.println(); 대신 log.info(); 문 작성

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;

@Slf4j
@Controller
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());

        // 1. DTO를 entity로 변환하기
        Article article = form.toEntity();
        log.info(article.toString());

        // 2. Repository로 엔티티를 DB에 저장
        Article saved = articleRepository.save(article);
        log.info(saved.toString());
        return "";
    }
}

 

서버 재시작
localhost:8080/articles/new에서 제목(aaaaa), 내용(11111) 입력

log로 출력하면 ArticleController에서 어떤 데이터가 언제 저장돼었는지 시간정보도 확인 가능하다

즉, lombok을 사요하면 단순한 출력 기능을 log 시스템으로 바꿀 수 있다

 

'Spring > 게시판 만들기' 카테고리의 다른 글

데이터 목록 조회하기  (0) 2023.09.12
게시글 읽기 Read  (0) 2023.09.12
데이터 조회  (0) 2023.09.11
H2 DB 접속하기  (0) 2023.09.11
DTO를 데이터베이스에 저장하기  (0) 2023.09.10