이 글에서는 Lombok 라이브러리를 활용하는 방법과 Spring Boot를 이용하여 게시판 구현에 필요한 CRUD(데이터 생성,조회,수정,삭제) 기능을 핵심 개념 중심으로 정리하였습니다.
📖 참고 자료: 《코딩 자율학습 스프링 부트 3 자바 백엔드 개발 입문》
Lombok은 반복적인 코드 작성을 줄여, 코드 작성과 유지보수를 쉽게 해주는 라이브러리입니다.
자바에서는 getter(), setter(), constructor(), toString()등의 메서드를 매번 작성해야 하는 불편함이 있습니다. Lombok을 사용하면 이러한 필수 메서드를 자동으로 생성해주므로, 코드가 깔끔해지고 유지보수가 쉬워집니다. 또한 로깅 기능을 활용하여 프로그램의 실행 과정을 손쉽게 기록할 수 있습니다.
@Getter, @Setter: 필드의 getter/setter 자동 생성@ToString: toString() 메서드를 자동 구현@AllArgsConstructor, @NoArgsConstructor: 생성자를 자동으로 생성@Slf4j: 로그(logging) 기능을 쉽게 사용할 수 있도록 지원build.gradle 파일의 dependencies 블록에 다음 코드를 추가dependencies {
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
...
}
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String name;
@Column
private String email;
}
CRUD는 데이터의 기본적인 조작 기능을 의미하며, 다음과 같은 네 가지 기능을 포함합니다.
<form>을 통해 입력한 데이터를 DTO(Data Transfer Object) 에 담아 서버로 전송합니다.name 속성을 부여하여 DTO의 필드와 매핑합니다.toEntity() 메서드를 구현해, 폼 데이터를 엔티티 객체로 변환한 후 DB에 저장합니다.Spring Data JPA의 CrudRepository를 상속받은 리파지터리를 통해 데이터 생성, 조회, 수정, 삭제 작업을 수행합니다.
CrudRepository<Article, Long>
JPA에서 제공하는 인터페이스로 이를 생성해 엔티티를 관리(생성, 조회, 수정, 삭제)할 수 있습니다. 이는 2개의 제네릭 요소를 받습니다.
- 첫 번째 제네릭 요소 : 관리 대상 엔티티의 클래스입니다. (Article)
- 두 번째 제네릭 요소 : 관리 대상 엔티티의 대푯값 타입입니다. (Long)
예시:
public interface ArticleRepository extends CrudRepository<Article, Long> {
@Override
ArrayList<Article> findAll();
}
@Autowired 를 통해 리파지터리 객체를 주입(DI)받아 사용합니다./articles 또는 /articles/{id})을 입력해 서버에 데이터를 요청GET /articles/{id})하면, 해당 ID에 맞는 데이터를 조회합니다.findById()메서드를 사용합니다. 형식은 다음과 같습니다. // 1. id를 조회해 데이터 가져오기
Article articleEntity = articleRepository.findById(id).orElse(null); // 값이 없으면 null 저장
2.조회된 데이터를 모델에 등록합니다.
addAttribute() 메서드를 사용합니다. 형식은 다음과 같습니다.// name이라는 이름으로 value 객체 추가
model.addAttribute(String name, Object value)
articles/show)에 전달하고 반환합니다. findAll() 메서드를 활용합니다. 형식은 다음과 같습니다.// 1. 모든 데이터 가져오기
List<Article> articleEntityList = articleRepository.findAll();
❗️ findAll() 메서드는 기본적으로 Iterable 타입을 반환하는데, 작성한 타입은 List이므로 서로 타입이 불일치한다는 오류가 발생합니다.이를 해결하는 방법은 3가지가 있습니다.
반환 데이터 타입 불일치 문제 해결 방법
articles/index)에서 반복문을 통해 출력합니다.Mustache 문법을 사용하여 데이터를 출력하며, {{#article}}...{{/article}} 또는 {{#articleList}}...{{/articleList}}와 같이 데이터를 반복 출력할 수 있습니다.
GET 또는 DELETE)delete() 메서드로 엔티티 삭제addFlashAttribute()메서드를 사용하여 일시적 메시지를 전달할 수 있습니다.rttr.addFlashAttribute("msg","삭제되었습니다!"); // 삭제 완료 메시지 남기기