오늘은 스프링부트에서 롬복(Lombok)을 활용한 코드 리팩터링과 로깅 기능에 대해 학습했다. 롬복은 코드를 간소화하고 반복을 최소화해주는 라이브러리로, 이를 통해 코드의 가독성과 유지보수성을 크게 향상시킬 수 있다.
롬복은 자바 코드에서 반복적으로 사용되는 필수 코드를 줄여주는 라이브러리이다. 이를 통해 코드를 간소화하고, 반복적인 코드 작성을 최소화할 수 있다. 특히, 롬복을 사용하면 로깅(logging) 기능도 쉽게 추가할 수 있는데, 이는 println
메서드를 대체하여 프로그램의 수행 과정을 기록으로 남기는 역할을 한다.
이번 실습에서는 롬복을 활용하여 기존 코드를 리팩터링하고, println
메서드를 로깅으로 변환하는 작업을 진행했다.
먼저, 롬복을 설치해야 한다. build.gradle
파일의 dependencies
부분에 다음 코드를 추가한다:
dependencies {
// 롬복 추가
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-mustache'
implementation 'org.springframework.boot:spring-boot-starter-web'
runtimeOnly 'com.h2database:h2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
이렇게 의존성을 추가하면, 롬복 라이브러리를 사용할 수 있다. 최신 IntelliJ IDE에서는 롬복 플러그인이 기본적으로 포함되어 있으므로, 별도의 플러그인 설치는 필요하지 않다.
첫 번째 리팩터링 대상은 DTO이다. dto/ArticleForm
파일에서 생성자와 toString
메서드를 롬복을 사용해 간소화할 수 있다.
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);
}
}
@AllArgsConstructor
@ToString
public class ArticleForm {
private String title;
private String content;
public Article toEntity() {
return new Article(null, title, content);
}
}
이렇게 하면 코드가 간결해지고, 가독성이 향상된다.
두 번째 리팩터링 대상은 엔티티이다. DTO와 마찬가지로, entity/Article
파일에서 롬복 어노테이션을 사용해 코드를 간소화한다:
@Entity
public class Article {
@Id
@GeneratedValue
private Long id;
@Column
private String title;
@Column
private String content;
public Article(Long id, String title, String content) {
this.id = id;
this.title = title;
this.content = content;
}
@Override
public String toString() {
return "Article{" +
"id=" + id +
", title='" + title + '\'' +
", content='" + content + '\'' +
'}';
}
}
@Entity
@AllArgsConstructor
@ToString
public class Article {
@Id
@GeneratedValue
private Long id;
@Column
private String title;
@Column
private String content;
}
생성자와 toString
메서드를 롬복 어노테이션으로 대체하여 코드를 간결하게 만들었다.
세 번째 리팩터링 대상은 컨트롤러이다. 현재 ArticleController
에서는 println
을 사용해 데이터를 확인하고 있다. 하지만, 실제 서버 환경에서는 println
을 사용하는 것이 적합하지 않다. 이는 기록이 남지 않고 성능에도 악영향을 미치기 때문이다.
이러한 문제를 해결하기 위해 로깅 기능을 사용한다. @Slf4j
어노테이션을 추가하면, log.info()
메서드를 사용할 수 있다:
@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()); // println() 으로 데이터 확인
Article article = form.toEntity();
System.out.println(article.toString()); // println() 으로 데이터 확인
Article saved = articleRepository.save(article);
System.out.println(saved.toString()); // println() 으로 데이터 확인
return "";
}
}
@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()); // println() 을 로깅으로 대체!
Article article = form.toEntity();
log.info(article.toString()); // println() 을 로깅으로 대체!
Article saved = articleRepository.save(article);
log.info(saved.toString()); // println() 을 로깅으로 대체!
return "";
}
}
println
메서드를 log.info()
로 대체함으로써, 로그를 남기고 코드의 가독성을 높일 수 있다.
이번 학습을 통해 롬복을 활용한 리팩터링과 로깅 기능을 익혔다. 롬복을 사용하여 반복적인 코드를 줄이고, 코드의 가독성을 높일 수 있었다. 또한, println
을 로깅으로 대체하여 로그 시스템을 간단하게 구현할 수 있었다.