2022-08-18-TIL
2022-08-18-TIL
Today I Learned
게시판 상단고정
게시판의 상단고정은 공지사항 같은 글을 정렬 순서와 상관없이 목록 맨 위에 두는 기능이다. 구현 방법을 찾아보면 대부분 게시글에 “고정 여부”나 “고정 순서” 값을 따로 두고, 목록을 조회할 때 그 값을 첫 번째 정렬 기준으로 쓰는 방식이다.
1
2
3
SELECT id, title, created_at
FROM post
ORDER BY is_pinned DESC, created_at DESC;
MySQL에서는 여러 컬럼으로 정렬할 때 DESC가 바로 앞의 컬럼에만 적용된다. 그래서 고정 여부와 작성일 양쪽에 각각 방향을 적어 줘야 한다(MySQL: Sorting Rows).
고려할 점은 페이지네이션이다. 고정글을 첫 페이지에만 보여 줄지, 모든 페이지 위에 반복해서 보여 줄지에 따라 쿼리가 달라진다. 모든 페이지에 반복한다면 고정글 목록과 일반글 목록을 따로 조회해서 합치는 편이 페이지 크기 계산이 단순하다.
- https://sir.kr/g5_tip/14858
- https://hambre.tistory.com/9
- https://dlgkstjq623.tistory.com/391
- https://parkhyeonchae.github.io/2020/04/09/django-project-22/
Zookeeper
모든 API와 페이지 접근을 막으려면 인터셉터나 AOP를 사용하는 방법이 있다. 그게 아니라면 Zookeeper를 사용하면 된다고 한다.
ZooKeeper는 분산 애플리케이션을 위한 코디네이션 서비스다. 공식 문서는 이렇게 소개한다.
“ZooKeeper is a distributed, open-source coordination service for distributed applications.”
분산 애플리케이션을 위한 오픈소스 코디네이션 서비스라는 설명이다. 데이터는 파일 시스템처럼 계층 구조를 이루는 znode에 저장되고, 클라이언트는 znode에 watch를 걸어 두면 값이 바뀔 때 알림을 받는다. 설정 관리, 네이밍, 그룹 멤버십, 동기화 같은 용도에 쓰인다(ZooKeeper Overview).
내가 이해하기로는 두 방법이 맡는 일이 다르다. 요청을 실제로 막는 일은 여전히 인터셉터나 필터가 한다. 서버가 여러 대일 때 “지금 점검 중인가”라는 상태를 한곳에서 바꾸고 모든 서버가 동시에 알아야 하는데, 이 공유 상태를 znode에 두고 각 서버가 watch로 변경을 받는 데 ZooKeeper를 쓸 수 있다. 서버가 한 대라면 설정값이나 DB 플래그만으로도 충분하다.
- https://data-engineer-tech.tistory.com/4
댓글
아직 댓글이 없습니다