Spring 3 Layer Architecture

johaS2·2025년 2월 4일

3 Layer Architecture

현재 작성한 메모장 프로젝트는 Controller 클래스 하나에 모든 API를 처리하고 있다
그래서 Controller, Service, Repository 3개로 분리하는 것을 3 Layer Architecture라 한다.

Controller - Service 분리

@PostMapping("/memos")
    public MemoResponseDto createMemo(@RequestBody MemoRequestDto requestDto) {
        MemoService memoService = new MemoService(jdbcTemplate);
        return memoService.createMemo(requestDto);
    }
private final JdbcTemplate jdbcTemplate;

    public MemoService(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public MemoResponseDto createMemo(MemoRequestDto requestDto) {
        // RequestDto -> Entity
        Memo memo = new Memo(requestDto);

        // 기존 Controller 코드 옮기기 ...

        return memoResponseDto;
    }

Service - Repository 분리

public class MemoService {

    private final JdbcTemplate jdbcTemplate;

    public MemoService(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public MemoResponseDto createMemo(MemoRequestDto requestDto) {
        // RequestDto -> Entity
        Memo memo = new Memo(requestDto); // 메모 객체

        // DB 저장
        MemoRepository memoRepository = new MemoRepository(jdbcTemplate);
        Memo saveMemo = memoRepository.save(memo);

        // Entity -> ResponseDto
        MemoResponseDto memoResponseDto = new MemoResponseDto(memo);

        return memoResponseDto;
    }
public class MemoRepository {

    private final JdbcTemplate jdbcTemplate;

    public MemoRepository(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    public Memo save(Memo memo) {
        // DB 저장
        KeyHolder keyHolder = new GeneratedKeyHolder(); // 기본 키를 반환받기 위한 객체
		//...생략
        // DB Insert 후 받아온 기본키 확인
        Long id = keyHolder.getKey().longValue();
        memo.setId(id);

        return memo;
    }
}

정리

계층역할설명
Controller사용자 요청 처리요청을 받아서 Service에 전달하고 결과를 응답
Service비즈니스 로직 처리데이터 처리, 검증, 트랜잭션 관리
RepositoryDB 접근DB에서 데이터를 저장하거나 조회
profile
passionate !!

0개의 댓글