오늘의 루틴
- 3 Layer Architecture에 대한 강의 내용 학습 (O)
- 개인과제 필수조건까지 코드를 작성 (O)
- 저번에 배운 Spring 복습 (△)
3 Layer Architecture란 무엇일까?
- Controller, Service, Repository 3개로 분리
-------------------------------------------------------
🔻 Controller
- 클라이언트의 요청 받기
- Request에 대한 처리는 'Service'에서!
-------------------------------------------------------
🔻 Service
- 사용자의 요구사항을 처리
- DB에 저장 or 조회는 'Repository'에서!
-------------------------------------------------------
🔻 Repository
- DB 관리 (연결, 해제, 자원 관리)
- CRUD를 처리
-------------------------------------------------------

1. Controller
@RestController
@RequestMapping("/api")
public class MyScheduleServerController {
private final JdbcTemplate jdbcTemplate;
public MyScheduleServerController(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@PostMapping("/schedules")
public MyScheduleResponseDto createSchedule(@RequestBody MyScheduleRequestDto myScheduleRequestDto) {
MyScheduleService myScheduleService = new MyScheduleService(jdbcTemplate);
return myScheduleService.createSchedule(myScheduleRequestDto);
}
2. Service
public class MyScheduleService {
private final JdbcTemplate jdbcTemplate;
public MyScheduleService(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public MyScheduleResponseDto createSchedule(MyScheduleRequestDto myScheduleRequestDto) {
MySchedule mySchedule = new MySchedule(myScheduleRequestDto);
MyScheduleRepository myScheduleRepository = new MyScheduleRepository(jdbcTemplate);
MySchedule saveMySchedule = myScheduleRepository.save(mySchedule);
MyScheduleResponseDto myScheduleResponseDto = new MyScheduleResponseDto(mySchedule);
return myScheduleResponseDto;
}
3. Repository
public class MyScheduleRepository {
private final JdbcTemplate jdbcTemplate;
public MyScheduleRepository(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public MySchedule save(MySchedule mySchedule) {
KeyHolder keyHolder = new GeneratedKeyHolder();
String sql = "INSERT INTO schedule (task, manager, password, created_day, updated_day) VALUES (?, ?, ?, ?, ?)";
jdbcTemplate.update(con -> {
PreparedStatement preparedStatement = con.prepareStatement(sql,
Statement.RETURN_GENERATED_KEYS);
preparedStatement.setString(1, mySchedule.getTask());
preparedStatement.setString(2, mySchedule.getManager());
preparedStatement.setString(3, mySchedule.getPassword());
preparedStatement.setTimestamp(4, mySchedule.getCreatedDay());
preparedStatement.setTimestamp(5, mySchedule.getUpdatedDay());
return preparedStatement;
},
keyHolder);
Long id = keyHolder.getKey().longValue();
mySchedule.setId(id);
return mySchedule;
}
- 오늘의 후기
- 전체적으로 코드를 작성하면서 필수 조건들(CRUD) 등을 구현하고 이를 3 Layer Architecture로 역할 분리하였다. 전체적으로 만들었지만 세부적인 부분을 수정해야 할 것 같다.(ex 등록할 때 등록한 내용 출력 등)