작성
·
48
0
안녕하세요. 수업 열심히 잘 듣고 있습니다 (__)
다름이 아니라, postman 실습 할 때마다 느끼는게, 특정 id 값에 해당하는 값을 update 하였을 때, 별도의 정렬 조건 없이 find 하여 나오는 get 요청의 결과값 리스트에 항상 update 된 row이 최하단으로 정렬되어 나오는 걸 볼 수 있었습니다.
그래서 개인적으로 추측해보기에 updateColumn()으로 지정된 updatedAt이 row가 업데이트 될 때마다 같이 갱신되므로, find에 아무런 정렬 조건을 기재하지 않았을 때, updatedAt 기준으로 알아서 맞춰서 정렬을 해주나보다 싶었는데,
updatedAt 컬럼을 삭제하고 데이터베이스 초기화 후 다시 해봐도 똑같이 update 된 row가 마지막에 나오네요. 실제로 실무에서는 order를 거의 기재를 하면서 진행 하기에 문제는 없겠지만, 이렇게 동작하는 이유에 대해 궁금합니다.
감사합니다.
답변 2
1
안녕하세요!
아래 글 참고해보시면 order by를 지정하지 않았을때 선택되는 방식에대해 설명이 돼있습니다.
https://aashishpeepra-ap.medium.com/whats-the-default-order-by-for-a-database-58069fa40fb8
하지만 실제 프로덕션 앱에서 order by를 지정하지 않는건 현실적이지 않은 부분 참고 부탁드립니다.
감사합니다!
0
안녕하세요, 인프런 AI 인턴입니다. 흔들거북이님.
질문해 주신 내용에 대해 답변드리겠습니다. 기본적으로 데이터베이스에서 find
연산을 수행할 때, 명시적인 정렬 조건이 없을 경우 결과의 순서는 보장되지 않습니다. 그러나 대부분의 데이터베이스 시스템에서는 자연 정렬(natural order)에 따라 결과를 반환하게 됩니다. 유사하게, 데이터베이스 엔진은 종종 행(row)이 업데이트되면 해당 데이터를 테이블의 끝에 재배치하게 되어, 업데이트된 행이 리스트의 하단에 나타날 수 있는 상황이 발생할 수 있습니다.
여기서 자연 정렬은 데이터가 추가된 순서대로 행을 반환하는 것을 의미하며, 일반적으로 마지막으로 갱신되거나 추가된 데이터가 결과 리스트의 하단에 나타날 수 있습니다. 하지만 이는 데이터베이스 엔진의 내부 동작에 따라 달라질 수 있으며, 명시적인 정렬 조건이 없을 경우에는 절대적인 보장성은 없다고 할 수 있습니다.
위 모든 것은 각 데이터베이스 시스템의 내부 구현에 의존하므로, 사용 중인 특정 DBMS의 문서를 참고하거나 개발 환경에서 직접 실험해보는 것이 가장 정확합니다.
이와 관련하여 도움이 될 수 있는 두 개의 질문이 있어 공유드립니다:
정렬에 대한 질문 - 정렬과 관련된 기본적인 개념과 자연 정렬에 대한 정보를 얻을 수 있습니다.
@VersionColumn() save 관련 질문 - 데이터베이스의 내부 동작에 대해 더 많은 정보를 제공하는 답변입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
답변 감사드립니다~