우아한테크코스/레벨2
[학습로그] 지하철 - map
nauni
2021. 5. 19. 21:58
[Q & A] 피드백 1
질문과 답변-1
- Q. Void 타입으로 body없는 경우도 많이 리턴하나요??
- 필요하면 void로 반환하기도 한다.(수정, 삭제가 제대로 됐는지 검증하는건 서버가 가져야 할 책임이지 클라이언트가 확인할 필요는 없다.)
- 보통은 빈 response body를 내려주는 경우가 많음.
- Q. Optional 사용에 대한 의견
- 쿼리 호출 횟수를 줄이는게 당연히 좋지만 그전에 읽기 좋은 코드를 작성하는게 먼저임
- 쿼리 한 번 더 호출했다고 서버 응답이 엄청 느려지고 그러진 않는다. 하지만 읽기 어려운 코드는 개발자가 수정하는데 많은 시간이 들기 때문에 더 큰 비용이 든다.
- optional은 외부와 통신하면서 null이 발생할 수 밖에 없는 상황이 있을 때 어떻게 처리할지 결정 할때만 사용합니다.
- optional을 로직에 포함시키면 코드 복잡해진다.
- Q. Dao의 이름 관례
- 관례적으로 세부사항을 앞에 명시. (예시 - InMemoryLineDao, JdbcLineDao)
태그
- 클린코드, 객체지향
[Q & A] 피드백 2
질문과 답변 -2
- Q. 인수테스트에서 하나의 api 테스트에서 다른 여러 api들을 호출
- 인수테스트는 사용자가 실제로 기능하는 상황을 구현. 따라서 service, persistence layer 가 개입되면 안 됨. 사용자(고객)은 브라우저에서 api로 호출하니 동일한 환경을 만드는 것이 의미가 있음.
- Q. 테이블의 정보를 조합하는 방식
- 쿼리를 여러번 사용해서 객체를 조합하는 것도 괜찮음. 사용자가 몇명이고, 성능이 얼마나 필요한지에 따른 측정이 먼저 필요.
- Q. 테스트 시 잔여정보 처리를 위한 테이블 초기화
- A3. drop table 절대금지. 테스트라고 하던 쿼리를 실수로 운영이나 베타에서 사용할 가능성 있음.
- Q. dao에서 쿼리문을 여러번 처리
- dao(Data Access Object)는 데이터베이스 관련 처리만 맡김.
- 여러개의 정보를 처리하고 싶으면 id 등을 list로 전달하고 IN절을 활용 또는 서비스에서 조합하여 활용
- Dao에는 DB 관련 이외의 로직을 넣지 않는다.
태그
- 클린코드, 객체지향
[Layered Architecture] 레이어의 역할
Controller
- http 접근 관련 로직을 담당
Service
- DB와 도메인 사이에서 비지니스 로직을 담당
- 연결 및 Transaction을 관리
- DB 데이터를 사용하는 절차지향적 로직과 도메인을 사용하는 객체지향적 로직 사이의 중계를 담당
Dao
- DB 접근 로직을 담당
- 테이블과 1:1 매칭되는 것이 좋음
Domain
- 객체로서 비지니스 로직을 담당
- 각 객체의 역할에 따른 유효성 검증 및 로직을 수행
- DB에서의 로직과 도메인의 로직
태그
- layered architecture
[Test] 테스트
인수테스트
- 사용자가 사용할 환경을 테스트한다.
- 느리고 비싸기 때문에 단위테스트를 충분히 거친다면 예외 상황들에 대한 테스트는 단위테스트로 대체가능하기도 하다.
각 레이어 테스트
- 단위테스트를 작성하였는데, 인수테스트에서 통과되지 못하는 케이스가 발생
- 원인은 DAO에서 update 쿼리의 WHERE 절이 문제였다. 이런 다른 부분에서의 버그를 찾기 위해서라도 각 레이어가 제대로 동작하는지 테스트하는 것은 의미가 있음
단위테스트
- 도메인 객체에 대해서는 단위테스트를 작성한다.
- 작은 단위 테스트들은 이후, 복합적인 상황에서 디버깅을 쉽게 할 수 있게 해준다.
태그
- 테스트
[StatusCode] 상태코드
상태코드
- 200: Ok, 201: Created, 204: NoContent
- 400: BadRequest, 401: Unauthorized, 404: NotFound
- 500: InternalServerError
태그
- Status code