📘 Spring Boot 주요 구성요소 정리
🧩 1. Entity (엔티티)
- 데이터베이스의 테이블과 1:1로 매핑되는 클래스입니다.
- 실제로 저장되는 데이터의 구조를 정의합니다.
- JPA 어노테이션(
@Entity
, @Id
, @GeneratedValue
등)을 통해 테이블과 컬럼을 설정합니다.
import jakarta.persistence.*;
import lombok.*;
import java.time.LocalDateTime;
@Entity
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String title;
private String content;
private String author;
private LocalDateTime createdAt;
@PrePersist
public void setCreatedAt() {
this.createdAt = LocalDateTime.now();
}
}
🗃️ 2. Repository (레포지토리)
- 데이터베이스에 접근하는 계층입니다.
- JPA가 제공하는
JpaRepository
를 상속받아 사용하며, 기본적인 CRUD(Create, Read, Update, Delete) 기능을 자동으로 제공합니다.
- 복잡한 쿼리가 필요한 경우에는 메서드를 직접 정의하거나 @Query 어노테이션으로 JPQL을 사용할 수 있습니다.
package com.example.demo.repository;
import com.example.demo.domain.Board;
import org.springframework.data.jpa.repository.JpaRepository;
public interface BoardRepository extends JpaRepository<Board, Long> {
}
🧠 3. Service (서비스)
- 비즈니스 로직을 처리하는 계층입니다.
- Controller로부터 요청을 받아 필요한 작업을 수행한 뒤, 결과를 다시 Controller로 전달합니다.
- 트랜잭션 처리, 데이터 가공, 유효성 검사 등 핵심 로직이 이 계층에 포함됩니다.
import com.example.demo.domain.Board;
import com.example.demo.repository.BoardRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
@RequiredArgsConstructor
public class BoardService {
private final BoardRepository boardRepository;
public List<Board> getAllBoards() {
return boardRepository.findAll();
}
public Optional<Board> getBoardById(Long id) {
return boardRepository.findById(id);
}
public Board createBoard(Board board) {
return boardRepository.save(board);
}
public Board updateBoard(Long id, Board updatedBoard) {
return boardRepository.findById(id)
.map(board -> {
board.setTitle(updatedBoard.getTitle());
board.setContent(updatedBoard.getContent());
return boardRepository.save(board);
})
.orElseThrow(() -> new IllegalArgumentException("Board not found with id: " + id));
}
public void deleteBoard(Long id) {
boardRepository.deleteById(id);
}
}
🌐 4. Controller (컨트롤러)
- 클라이언트로부터의 HTTP 요청을 받아 처리하는 계층입니다.
- URL과 HTTP 메서드(GET, POST, PUT, DELETE 등)를 기반으로 Service를 호출하고, 응답을 반환합니다.
- 사용자와의 인터페이스 역할을 담당하며, 주로
@RestController
, @RequestMapping
, @GetMapping
등의 어노테이션을 사용합니다.
import com.example.demo.domain.Board;
import com.example.demo.service.BoardService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Optional;
@RestController
@RequiredArgsConstructor
@RequestMapping("/boards")
public class BoardController {
private final BoardService boardService;
@GetMapping
public List<Board> getBoardList() {
return boardService.getAllBoards();
}
@GetMapping("/{id}")
public Optional<Board> getBoard(@PathVariable Long id) {
return boardService.getBoardById(id);
}
@PostMapping
public Board createBoard(@RequestBody Board board) {
return boardService.createBoard(board);
}
@PutMapping("/{id}")
public Board updateBoard(@PathVariable Long id, @RequestBody Board updatedBoard) {
return boardService.updateBoard(id, updatedBoard);
}
@DeleteMapping("/{id}")
public void deleteBoard(@PathVariable Long id) {
boardService.deleteBoard(id);
}
}