Restcontroller와 ResponseEntity에 대해서 공부해보세요


Restcontroller가 ResponseBody와 controller 어노테이션을 모두 갖고 있어서, 이 관계에 대해서 다시한번 생각해보라는 리뷰였던 거 같다.
@Query(value = "SELECT id FROM accommodation " +
"WHERE ST_Distance_Sphere(COORDINATE, :point) <= 100000000 " +
"AND MAX_GUEST_COUNT >= :maxGuestCount " +
"AND MAX_INFANT_COUNT >= :maxInfantCount", nativeQuery = true)
List<Long> findIdsByCoordAndHumanCount(Point point, Integer maxGuestCount, Integer maxInfantCount);
이렇게 작성한 쿼리에 대해서
@Query(value = """
SELECT id FROM accommodation \
WHERE ST_Distance_Sphere(COORDINATE, :point) <= 100000000 \
AND MAX_GUEST_COUNT >= :maxGuestCount \
AND MAX_INFANT_COUNT >= :maxInfantCount""", nativeQuery = true)
List<Long> findIdsByCoordAndHumanCount(Point point, Integer maxGuestCount, Integer maxInfantCount);
이런식으로 해주는 게 가독성이 더 좋을것이라는 리뷰도 있었다.
post 메서드에 requestparam 이 있는 것에 대해 어떻게 생각하시나요?
이런 리뷰도 있었다. 리퀘스트 param으로 주고받을 떄가 있었는데 post니까 body를 쓰는 게 나을듯하다.
CREATE table TMP_SAMPLE(
phone_num varchar(255) not null,
opening_date timestamp,
insert_date timestamp DEFAULT CURRENT_TIMESTAMP,
now_date timestamp DEFAULT CURRENT_TIMESTAMP,
primary key(phone_num, insert_date, opening_date)
) charset = utf8;
이렇게 여러개의 키를 pk로 만드는 것을 복합키라고 한다.
통계성 조회에 이런 복합키를 많이 쓴다고 한다.



그럼 실무에서는 어떤 방식으로 복합키를 사용할까?

인프런에 이런 질문이 있었다.
안녕하세요. 김동희님, 공식 서포터즈 David입니다.
실무에서는 프로젝트의 요구 사항, 팀의 코딩 스타일, 데이터베이스 설계에 따라 선택이 달라지기 때문에 일관된 기준은 없습니다. 그러나, 일반적으로 객체 지향적인 접근을 선호하는 경우가 많으므로 @EmbeddedId를 사용하는 경우가 더 많이 보입니다.
@EmbeddedId를 사용하면, 복합 키를 하나의 객체로 취급할 수 있어 객체 지향적인 코드를 작성하는 데 도움이 됩니다. 또한, 복합 키 클래스를 재사용할 수 있고 코드의 가독성도 높아질 수 있습니다.
그러나 프로젝트와 팀의 선호도에 따라 @IdClass를 사용하는 경우도 있으므로, 두 방식을 모두 이해하고 적절한 상황에 맞게 선택하는 것이 필요합니다.
객체지향적인 방식이라는 게 뭔 말인지 감이 잡히긴 한다. 하나의 객체를 만들어서 사용하는 방식이니..

다만 영한샘도 거의 사용하지는 않으신다고 한다.

다른 질문도 있었는데
영한샘은

라고 답변해주셨다.
복합키를 쓰면 다른 테이블에 여러개의 칼럼이 들어가게 되고, 이 복합키를 수정할 때 모든 테이블에 변화가 더 만히 생기니 2번 방식을 쓴다는 말인 거 같다.
나중에 복합키를 사용할 때는
https://techblog.woowahan.com/2595/
이글을 참고해서 만들도록 하자.
위 글에 따르면, 조회할 때 복합키를 순서대로(처음 지정했던)넣지 않거나 일부만 넣으면 인덱스를 타지 않을 수 있다고 한다.

*카디널리티가 낮다는 건 중복이 많다는 뜻이다.
jpa는 알파벳순서대로 복합키를 구성하는데 이렇게 되면 개발자의 의도대로 복합키 설계를 하지 못하게 될 수 있다고 한다.
wowwwwww