초코비니

Synology DS audio 평점 공유: 계정 하나에 평균 평점 자동 반영하기 본문

IT 기타

Synology DS audio 평점 공유: 계정 하나에 평균 평점 자동 반영하기

초코비니 2025. 8. 19. 18:20
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

Synology NAS의 Audio Station/DS audio는 기본적으로 계정별로 평점을 따로 관리합니다.
즉, 가족끼리 같은 음악을 들어도 서로 매긴 별점은 공유되지 않죠.

이 글에서는 새로 만든 "공유용 계정"에 모든 계정의 평균 평점을 자동 반영하는 방법을 정리합니다.
(DSM 7.1.1, Audio Station 7.0.3, DS216+II 기준)


1. 내부 DB 구조 확인

DSM 7 이상에서는 Audio Station이 내부 PostgreSQL을 사용합니다.
SSH로 NAS에 접속해 확인:

 
ssh admin@NAS_IP sudo -i # root 권한 전환 ps aux | grep postgres | grep AudioStation

예시:

 
postgres: AudioStation mediaserver [local] idle

Audio Station은 mediaserver라는 DB를 사용합니다.


2. 평점 저장 테이블 확인

PostgreSQL 접속:

 
sudo -u postgres psql -d mediaserver

테이블 목록 확인:

 
\dt

여기서 rating_track이 평점을 저장하는 테이블입니다.

 
SELECT * FROM rating_track LIMIT 10;

출력 예시:

 
userid | track | star --------+-------+------ 1049 | 18382 | 2 1026 | 17086 | 3 1027 | 17030 | 5

즉, (userid, track, star) 구조입니다.


3. 공유용 계정 만들기

DSM에서 shared 같은 새 계정을 생성 → Audio Station 접근 권한 부여.
그 계정으로 DS audio에 로그인 후 곡 하나에 임의의 평점을 주면, rating_track에 userid가 기록됩니다.
이 userid가 공유용 계정의 내부 ID입니다. (예: 1050)


4. 평균 평점 반영 SQL

공유 계정(userid=1050)에만 평균 평점을 넣는 쿼리:

 
BEGIN; DELETE FROM rating_track WHERE userid = 1050; INSERT INTO rating_track (userid, track, star) SELECT 1050 AS userid, track, LEAST(5, GREATEST(0, ROUND(AVG(star))::int)) AS star FROM rating_track GROUP BY track; COMMIT;
  • 모든 계정의 평점을 평균 내고 반올림
  • 범위를 0~5로 제한
  • 공유 계정에만 삽입

5. 자동화 스크립트

/volume1/job/music_rating/music_rating_avg_shared_only.sh 파일 생성:

 
#!/bin/sh set -eu PSQL='sudo -u postgres sh -c "cd /tmp && psql -X -v ON_ERROR_STOP=1 -d mediaserver -qAt -c"' TARGET_USERID=1050 # 공유용 계정의 userid $PSQL "BEGIN; DELETE FROM rating_track WHERE userid=$TARGET_USERID; INSERT INTO rating_track (userid, track, star) SELECT $TARGET_USERID, track, LEAST(5, GREATEST(0, ROUND(AVG(star))::int)) FROM rating_track GROUP BY track; COMMIT;" echo "[OK] rating_sync_avg -> userid=$TARGET_USERID"

줄바꿈은 반드시 **LF (Unix)**로 저장하세요. (윈도우에서 작성 시 ^M 에러 발생 가능)

권한 부여:

 
chmod +x /volume1/job/music_rating/music_rating_avg_shared_only.sh

6. DSM 작업 스케줄러 등록

  • DSM → 제어판 → 작업 스케줄러 → 생성 → 사용자 지정 스크립트
  • 사용자: root
  • 일정: 매일 06:00
  • 명령:
  •  
    /bin/sh "/volume1/job/music_rating/music_rating_avg_shared_only.sh"

7. 결과 확인

수동 실행:

 
/volume1/job/music_rating/music_rating_avg_shared_only.sh

출력 예시:

 
[OK] rating_sync_avg -> userid=1050

검증:

 
sudo -u postgres psql -d mediaserver -c "SELECT COUNT(*) FROM rating_track WHERE userid=1050;"

DS audio에서 공유 계정으로 로그인 → 모든 곡에 평균 별점이 반영된 걸 확인할 수 있습니다.


마무리

이제 가족 각자 계정의 별점은 그대로 두고, 공유 계정에서는 전체 평균 별점을 확인할 수 있습니다.
재생목록이나 스마트 재생 조건에 “별점≥4” 같은 걸 걸면, 가족의 취향을 평균 낸 결과로 음악을 즐길 수 있겠죠 😊

Comments