우아한테크코스/레벨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