4.1 서비스 계층 (findAll)

스프링의 서비스(Service) 계층은 컨트롤러와 레포지토리 사이에서 애플리케이션의 비즈니스 로직을 수행하는 핵심 영역입니다. 컨트롤러로부터 요청과 데이터를 전달받아 필요한 연산이나 규칙을 적용하고, 레포지토리를 호출해 데이터 저장·조회 작업을 수행합니다.

서비스 계층을 두면 요청 처리(컨트롤러)와 데이터 접근(레포지토리)의 책임이 분리되어, 구조가 명확하고 유지보수가 쉬워집니다.

board 폴더에 BoardService.java 파일을 생성합니다.

src > main > java > com > metacoding > springv1 > board

1.png

1.png

다음의 코드처럼 BoardService 를 작성해줍니다.

@Service 어노테이션을 통해 해당 클래스를 컴포넌트 스캔의 대상이자 스프링 관리 빈(Bean)으로 등록합니다.

의존성 주입(Dependancy Injection) 시 생성자 주입 방식을 적용하기 위해 @RequiredArgsConstructor와 final 필드 패턴을 사용합니다.

BoardService.java

package com.metacoding.springv1.board;

import org.springframework.stereotype.Service;

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@Service
public class BoardService {

    private final BoardRepository boardRepository;
    
    // 메서드 작성
}

<aside> 💡

**@RequiredArgsConstructor 와 final을 함께 사용하면 생성자 주입을 자동으로 구현하면서 주입된 의존성을 불변으로 보장합니다. 이는 객체 생성 시 반드시 필요한 의존성을 강제해 null 인 객체를 참조할 때 발생하는 오류를 방지하고, 런타임 중 의존성 변경을 방지해 코드의 안정성과 유지보수성을 높입니다.

따라서 우리는 @Autowired 보다 @RequiredArgsConstructor + final 패턴을 사용하도록 하겠습니다.**

</aside>

BoardService에 게시글목록() 메서드를 생성합니다. BoardRepository의 findAll() 메서드를 통해 전체 데이터를 조회합니다.

BoardService.java

public List<Board> 게시글목록() {
    List<Board> boards = boardRepository.findAll();
    return boards;
}

4.2 컨트롤러 계층 (findAll)