이 미션은 자동차 경주 게임을 웹 애플리케이션으로 전환하고 DB를 연동하는 미션입니다.
레벨1때 구현한 자동차 경주 게임 코드를 가져와서 웹으로 전환하고 DB와 연동하여 기록을 저장하고 조회할 수 있도록 개발해야 합니다.
이 미션은 자동차 경주 게임에서 추가적인 기능을 구현하고 기존 기능을 수정하는 리팩터링 미션입니다.
플레이 이력 출력 기능을 추가로 구현하고 console application과 web application의 중복 코드를 제거하도록 개선합니다.
일반적으로 ExceptionHandler를 통해 원하는 응답으로 바꿔준다.
Dao의 조회값이 없을때를 대비하여
=> Service에서 수신하여 Optional.empty인지 빈리스트인지 확인하고 예외처리 (orElseThrow 등)
Dao에 대한 테스트를 진행할 때
@Test
void 게임_저장_테스트() {
long gameId1 = gameDao.save(3);
long gameId2 = gameDao.save(5);
Integer size = jdbcTemplate.queryForObject("SELECT count(*) FROM game", Integer.class);
assertAll(
() -> assertThat(gameId1).isEqualTo(1),
() -> assertThat(gameId2).isEqualTo(2),
() -> assertThat(size).isEqualTo(2)
);
}
이런식으로 또다른 query를 날려서 검증하는 것 보다는
@Test
void 자동차_저장_테스트() {
carDao.saveAll(cars);
List<RacingCarDto> queriedCars = carDao.findCarsById(1);
assertThat(queriedCars).hasSize(2);
}
이런식으로 findById를 이용해 검증하는 것이 좋다.
(+ 그러면 대부분의 메소드 테스트가 findById에 의존하게 될 것 같은데 괜찮나? -> 괜찮다)
(+ 어플리케이션 코드에서 쿼리는 될 수 있으면 피해야 한다. 왜냐하면 코드가 리팩토링 되어도 쿼리는 변경되지 않기 때문에 지속적인 유지보수가 필요해지기 때문. 그리고 쿼리가 복잡해지면 오류 가능성도 늘어난다)
1) Mock
2) 통합 테스트
도메인의 흐름들을 조합해주고, 데이터 영역과 주고받으며 이에 따른 응답으로 변환해주는 역할
1) Controller에서 들어온 요청을 기반으로 도메인 행위를 순서대로 수행한다.
2) DAO에게 데이터 저장 및 조회를 요청한다.
3) Controller에게 적절한 응답을 반환해준다.
Q. RandomNumberGenerator를 Bean으로 등록해야 하는가?
A.
Q. RandomNumberGenerator는 도메인인데 Bean으로 등록해도 될까?
참고) Bean만 Bean을 주입받을 수 있다
객체 안의 특정 필드로만 값을 비교하고 싶을 때, extracting
메소드를 사용해 해당 필드값만 추출해서 비교가 가능하다
레벨2 첫 미션인 '웹 자동차 경주 미션'을 끝냈다.
레벨2는 공부해야 하는 양이 너무 많아서 자신한테 맞는 공부방법을 찾는 것이 중요하다고 한다.
그래서 첫주차에 깃짱, 이리내와 이번 레벨을 어떤식으로 보내야 할까
, 어떤식으로 학습해야할까
에 대해 많은 대화를 나눴다.
우리가 내린 결론은 괜히 이것저것 잡다하게 건드리지 않고, 중요한 키워드에 대한 공부를 정확하게 하자
이다.
우리는 처음 스프링을 배우기 때문에 스프링의 동작원리, 내부 구현 등 너무 깊게 공부하고자 애쓰기 보다는 (애초에 두달안에 절대 불가능) 사용법을 정확하게 익히기로 했다. 괜히 깊은 내용들을 애매하게 건들다가는 기본 사용법마저 난잡하게 꼬인 상태로 이번 레벨을 마무리하게 될 것 같았다.
우리의 목표 해야할 공부를 정확히 하자
를 이루기 위해
또한 깃짱, 이리내, 콩하나, 에코와 '서울 단후회'를 결성했다.
해야할 공부를 정확히 하자
이다.레벨1에서 하던 '소소한 코드리뷰 스터디'도 여전히 참여 중이다.
체인저의 섭외를 받아서 '레벨 인터뷰 스터디'에 참여하게 되었다.
결론만 말하자면 레벨2 첫 2주가 너무 만족스럽다! 목표(해야할 공부를 정확히 하자)를 이루기 위해, 이번 미션의 중요한 키워드들을 날짜별로 적절히 분배해서 매일매일 꾸준히 공부했다.
특히 내가 공부한 내용들을 글로 다 정리해서 매우 만족스럽다! 내용이 너무 방대해서 머리에 들어오지 않았었는데, 나름 연관있는 주제를 나누고 그 주제 안에서 의미있는 목차를 정하기 위해 고민하는 과정을 거쳤더니, 나만의 공식문서가 만들어진 것 같다😋 (2주 동안 무려 13개의 게시글을 업로드했다)
요즘 공부하는 것이 너무 즐겁다! 마구마구 공부해서 똑똑해져야지!!!!!! 우하하