1. 3 Layer Architecture
1. 탄생 배경
- Controller 클래스 하나로 모든 API를 처리할 시에, 코드의 추가 혹은 변경 요청이 복잡 할 수도 있다. 이러한 문제점을 극복하기 위해 3 Layer Architecture 생겨났다.
2. 구조
- Controller
- 클라이언트의 요청과 응답을 담당한다.(수문장)
- 요청과 함께온 데이터를 service에게 같이 전달 한다.
- Service
- 사용자의 요구사항을 실질적으로 처리한다.(실세)
- DB 저장 및 조회는 Repository에게 요청
- Repository
- DB 관리, CRUD 작업을 담당한다
3. 예시
- Controller
- 요청에 들어온 데이터와 함께 service 클래스를 사용한다.
public class MemoController {
private final MemoService memoService;
public MemoController(MemoService memoService) {
this.memoService = memoService;
}
@PostMapping("/memos")
public MemoResponseDto createMemo(@RequestBody MemoRequestDto requestDto) {
return memoService.createMemo(requestDto);
}
- Service
- 매개변수로 받은 데이터 처리를 한 후 , 저장을 위해 repository를 사용한다.
public MemoResponseDto createMemo(MemoRequestDto requestDto) {
Memo memo = new Memo(requestDto);
Memo saveMemo = memoRepository.save(memo);
MemoResponseDto memoResponseDto = new MemoResponseDto(saveMemo);
return memoResponseDto;
}
- Repository
- DB와 관련된 작업을 한다.
public Memo save(Memo memo) {
KeyHolder keyHolder = new GeneratedKeyHolder();
String sql = "INSERT INTO memo (username, contents) VALUES (?, ?)";
jdbcTemplate.update(con -> {
PreparedStatement preparedStatement = con.prepareStatement(sql,
Statement.RETURN_GENERATED_KEYS);
preparedStatement.setString(1, memo.getUsername());
preparedStatement.setString(2, memo.getContents());
return preparedStatement;
},
keyHolder);
Long id = keyHolder.getKey().longValue();
memo.setId(id);
return memo;
}
출처
내일배움캠프 Spring Master