본 글은 Youtube - 홍팍님의 강의를 참고하여 작성하였습니다.
코드를 간소화 시켜주는 라이브러리
(Getter, Setter, Constructor(), toString())
리팩토링이란, 코드의 구조, 성능을 개선하는 작업.
로깅은 프로그램의 수행과정을 기록
ex. 자동차 블랙박스
롬복을 사용하기 위해 depencies에 코드를 추가해줍니다.
dependencies { // 롬복 추가 compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok'
Sync Now 와 같은 새로고침을 통해 gradle을 적용해주고 잘 적응 됐는지 확인해줍니다.
롬복이 추가되었습니다.
IntelliJ IDEA가 2020.03 이후로 부터 롬북 플러그인을 추가할 필요 없이 자체 설치되어있습니다.
Preference에 들어가서 Build, Execution, Deployment에 들어가
Enable annotation processing을 체크하여줍니다.
이제 롬복을 사용하여 리팩토링 할 준비는 끝났습니다.
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()
을 사용하여 로그를 찍으면 안될 뿐더러, 서버 운영에 안 좋은 영향을 주기 때문에 다른 방법을 사용합니다.
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()
를 찍어 로그를 찍어줍니다.
그럼 위와 같이 값이 출력되면서 로그가 찍히는 것을 볼 수 있습니다.