4.1 롬복이란
롬복: 코드를 간소화해주는 라이브러리
롬복을 사용하면 필수 코드를 간편하게 작성할 수 있음
로깅: 프로그램의 수행 과정을 기록으로 남기는 것
리팩터링: 코드의 기능에는 변함이 없이 코드의 구조 또는 성능을 개선하는 작업
4.2 롬복을 활용해 리팩터링하기
롬복 설치하기
1. firstproject > src 아래에 build.gradle 파일명 앞에 코끼리 아이콘이 존재함을 볼 수 있음
이 파일에 롬복 추가 → 더블 클릭하여 코드 열기
2. dependencies {} 블록에 아래의 코드 추가
compileOnly 'org.prjectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
3. 편집기에 나타난 코끼리 모양의 새로고침 아이콘 클릭
(추가한 코드를 감지해 롬복 관련 라이브러리를 인터넷에서 자동으로 다운로드함)
4. 다운로드가 끝난 후 [Gradle] 탭을 클릭하면 롬복이 포함된 것을 확인할 수 있음
DTO 리팩터링하기
1. 프로젝트 탐색기에서 com.example.firstproject > dto > ArticleForm 열기
ArticleForm() 생성자와 toString() 메서드 존재
ArticleForm() 생성자 간소화
- ArticleForm() 생성자 코드 전체 지움
- ArticleForm 클래스 위에 @AllArgsConstructor 어노테이션 추가
title과 content를 매개변수로 하는 생성자가 자동으로 만들어짐
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);
}
}
2. 제대로 동작하는지 확인
localhost:8080/articles/new에 접속한 후 제목과 내용 입력하고 [Submit] 버튼 클릭
[Run] 탭에 가 보면 결과가 잘 출력되는 것을 확인할 수 있음
3. DB에도 잘 들어갔는지 확인
localhost:8080/h2-console 에 접속한 후 JDBC URL 새로 입력해주고 [Connect] 버튼 클릭
4. DB에 접속하여 ARTICLE 테이블을 실행해보면 잘 저장된 것을 확인할 수 있음
엔티티 리팩터링하기
1. com.example.firstproject > entity > Article 열기
Article() 생성자와 toString() 메서드 삭제
2. 삭제할 코드를 대체할 어노테이션 작성
Article 클래스 위에 @AllArgsConstructor 어노테이션 붙임
toString() 메서드 대체하는 @ToString 어노테이션 붙임
package com.example.firstproject.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import lombok.AllArgsConstructor;
import lombok.ToString;
@AllArgsConstructor
@ToString
@Entity
public class Article {
@Id
@GeneratedValue
private Long id;
@Column
private String title;
@Column
private String content;
}
컨트롤러에 로그 남기기
com.example.firstproject > controller > ArticleController 열기
코드 내에서 println() 으로 확인하고 싶은 데이터를 출력하고 있음
실제 서버에서는 println() 문으로 데이터를 검증할 시 기록에 남지 않고 서버의 성능에도 악영향을 끼침
로깅 기능을 사용하여 println() 대체 가능
로깅 기능으로 로그를 찍으면 println()문과 달리 나중에라도 그동안 찍힌 로그를 찾아볼 수 있음
1. println() 문으로 데이터를 확인하는 부분을 로깅으로 대체
ArticleController 클래스 위에 @Slf4j 어노테이션 추가
Slf4j: Simple Logging Facade for Java
2. println() 문 대체
- System.out.println(form.toString()); 주석 처리
- log.info(); 문 작성
info() 괄호 안에는 출력하기 원하는 form.toString() 넣음
@Slf4j 어노테이션을 추가하여도 log 부분에 빨간색으로 오류 표시
→ Settings → Plugins → marketplace에서 lombok을 install 하여 해결함
3. 2와 같은 방식으로 다른 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;
@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());
// System.out.println(form.toString());
//1. DTO를 엔티티로 변환
Article article =form.toEntity();
log.info(article.toString());
//System.out.println(article.toString());
//2. 리파지터리로 엔티티를 DB에 저장
Article saved = articleRepository.save(article);
log.info(saved.toString());
//System.out.println(saved.toString());
return "";
}
}
4. 서버를 재시작한 후 localhost:8080/articles/new에 접속한 후 제목과 내용을 입력하고 [Submit] 버튼 클릭
5. [Run] 탭에서 결과 확인
리팩터링 한 후에는 ArticleController가 어떤 데이터가 언제 저장됐는지 시간 정보도 남아있음을 확인할 수 있음
'백엔드 > 코딩 자율학습 스프링 부트 3 자바 백엔드 개발 입문 1~2장' 카테고리의 다른 글
5장. 게시글 읽기: Read (0) | 2024.12.21 |
---|---|
3장. 게시판 만들고 새 그 작성하기: Create (0) | 2024.12.21 |
2장. MVC 패턴 이해와 실습 (0) | 2024.11.30 |
1장. 스프링 부트 시작하기 (0) | 2024.11.29 |