충분히 쌓여가는
Lombok 본문
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 |