포스트

갤러리의 “좋아요” 테이블 구조와 설계 핵심

작품 갤러리 서비스에서 “좋아요” 기능을 제대로 구현하려면 누가 어떤 작품에 좋아요를 눌렀는지를 저장하는 구조가 필요하다. 이걸 위해 가장 많이 쓰는 테이블 설계 방식을 정리한다.


테이블 구조 예시 ** 보통 서비스에는 이미 **사용자(users), 작품(artworks) 테이블이 있고, “좋아요(likes)”는 아래처럼 추가로 설계한다.

테이블명주요 컬럼설명
usersid (PK), username사용자 정보
artworksid (PK), title작품 정보
likesid (PK), user_id (FK), artwork_id (FK), liked_at누가, 어느 작품에, 언제 좋아요를 눌렀는지 기록

(user_id, artwork_id) 조합은 UNIQUE로 둬서 한 유저가 ** **같은 작품에 여러 번 누르지 못하게 한다.


실제 SQL 테이블 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
-- 사용자 테이블
CREATE TABLE users (
    id INTEGER PRIMARY KEY,
    username TEXT NOT NULL
);

-- 작품 테이블
CREATE TABLE artworks (
    id INTEGER PRIMARY KEY,
    title TEXT NOT NULL
);

-- 좋아요 테이블
CREATE TABLE likes (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id INTEGER NOT NULL,
    artwork_id INTEGER NOT NULL,
    liked_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    UNIQUE(user_id, artwork_id),  -- 중복 좋아요 방지
    FOREIGN KEY(user_id) REFERENCES users(id),
    FOREIGN KEY(artwork_id) REFERENCES artworks(id)
);

  • 신뢰성 있는 인기 집계 → 한 명이 여러 번 누를 수 없으니, “좋아요 수”가 작품 인기의 신뢰성 있는 지표가 된다.
  • 악용 및 어뷰징 방지 → 스팸 클릭, 봇, 어뷰징에 강하다.
  • 다양한 기능 확장 → 내가 누른 작품 표시, 좋아요 취소(토글), 인기 작품 정렬, 추천인 알림 등 다양한 확장이 쉽다.
  • 언제, 누가, 어떤 작품에 좋아요를 눌렀는지 명확하게 기록할 수 있다.

  • 좋아요 누르기
1
2
INSERT INTO likes (user_id, artwork_id) VALUES (1, 2);

  • 좋아요 누르기
1
INSERT INTO likes (user_id, artwork_id) VALUES (1, 2);
  • 좋아요 취소(토글)
1
DELETE FROM likes WHERE user_id = 1 AND artwork_id = 2;
  • 작품별 좋아요 수 집계
1
SELECT COUNT(*) FROM likes WHERE artwork_id = 2;
  • 내가 좋아요한 작품 목록
1
SELECT artwork_id FROM likes WHERE user_id = 1;

결론 ** **이렇게 “누가 어떤 작품에 좋아요를 눌렀는지”를 별도의 테이블로 관리하면 서비스가 커져도 확장성, 안정성, 신뢰성을 모두 챙길 수 있다. 갤러리 서비스라면 꼭 이렇게 설계하는 걸 추천!

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.