[카우치코딩]포트폴리오 만들기 4주차

Yongjun Lee·2022년 9월 4일
0

환경설정이 마무리되고 API 개발을 시작했다. 대부분의 API가 인증토큰이 필요해서 로그인 API가 먼저 필요했다. 프로젝트 동료분이 로그인을 맡으셨는데 나는 로컬에서 로그인 API를 따로 작성해봤다. 하지만 일정상 완성하지 못하고 뒤로 미뤘고 인증이 필요없는 프로젝트 조회 API를 작성했다.

API 코드 작성은 복붙에 가까웠다. 요구사항이 비슷한 레퍼런스 코드가 있으면 로직을 그대로 가져와서 사용 가능했다. 프로젝트 조회 API는 Pageable을 사용한다는 점에서 기존에 찾아볼 레퍼런스가 더러 있었지만 데이터를 여러 테이블에서 가져온다는 점에서는 레퍼런스를 찾지 못했다.

여기서 막히니 코드 작성이 아니라 관련 레퍼런스를 찾는 데 시간을 많이 허비했다. 이때 만약 알려줄 사람이 옆에서 즉각 피드백을 준다면 시간 절약이 되겠다는 생각이 들었다. 즉각 피드백이 가능한 개발환경이 지속적으로 가능하다면 빠르게 배울 수 있을까 싶었다. 알고리즘 문제는 혼자 풀어봐야 뇌에 회로가 생겨서 혼자 고민해야 하는 시간이 도움이 되지만 API 코드 같은 Best Practice가 정해져 있고 이를 가져다 쓰는 방식의 코딩은 누가 알려주는 게 시간 효율상 더 좋은 게 아닌가 하는 생각이다.

변경 가능성

조회 API를 완전히 완성하지 못해서 Test 코드만 작성하고 생성 API로 넘어가 레퍼런스를 참고해 작성했다. 그런데 다른 프로젝트 동료분이 내가 작성한 Test 코드로 인해 빌드가 안 되는 고통을 받으셨다는 피드백을 들었다. 그리고 미완성으로 DTO를 남겨 놓은 점 등도 고통에 한 몫을 했다는 이야기를 들었다.

막상 이렇게 되니 멘토님이 Entity, Service는 개발하면서 바뀔 가능성이 높다고 테스트코드를 작성한다면 변경 가능성을 고려해야 한다는(?) 이야기가 떠올랐다. 의존성 하나만 추가되어도 모킹이 바뀌므로 테스트 코드보다 API를 실제 요청해서 테스트하라는 맥락으로 기억한다. 진즉 말을 잘 알아듣고 테스트 코드는 나중에 작성을 해야 했다. 뭔가 테스트코드가 필수라는 상황을 무시한 만능주의에 빠져서 우를 범하지 않았나 싶다.

게다가 지금 프로젝트는 보통 1인이 가능한 분량(?)인 것 같은데 백엔드를 3명이서 하다 보니 업데이트 속도도 빨라서 처음에는 git flow를 적용하다가 이제는 바로 푸시 머지한다. 그러고 나니 충돌해결에 시간이 안 들어서 좋았다. 여기서도 남들이 쓰는 git flow 만능이 아니라 현재 상황에 맞게 최적화한 게 더 낫다는 생각이 들었다.

페이징

org.springframework.data.domain.Pageable

Pageable을 사용하면 반환타입으로 Listorg.springframework.data.domain.Page를 사용할 수 있다. Page는 전체 데이터 건수를 조회하는 count 쿼리를 추가로 호출한다.

// count 쿼리 사용
Page<Member> findByName(String name, Pageable pageable);

// count 쿼리 사용 X
List<Member> findByName(String name, Pageable pageable);
  • Repository에 Page 정의
public interface MemberRepository extends Repository<Member, Long> {
	Page<Member> findByNameStartingWith(String name, Pageable pageable);
}
  • Page 사용 예제
PageRequest pageRequest = new PageRequest(0, 10, new Sort(Direction.DESC, "name"));

Page<Member> result = memberRepository.findByNameStartingWith("김", pageRequest);

List<Member> members = result.getContent(); // 조회된 데이터

피드백

  • Entity에는 기본타입보다 참조타입을 쓴다. 기본타입은 null이 없기 때문에 디폴트로 0에 준하는 값이 들어간다.
  • 테스트 코드 작성은 시간이 걸릴 수 있으니 가짜 데이터를 넣어서 테스트해보라. DBeaver

Source

0개의 댓글