본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스
성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.
fastcampus.co.kr
0414 월
학습 내용 정리
[Class 01]Part 22. 좋아요 시스템
Ch 1. 좋아요 시스템
01. 중간테이블 Entity로 직접 생성하기
수강후기
오늘 수강한 [Class 01] Part 22. 좋아요 시스템 강의는 실제 서비스에서 자주 사용되는 기능 중 하나인 '좋아요' 기능을 구현하는 데에 중점을 둔 매우 실용적인 수업이었다. 특히 단순히 Movie와 User 간의 좋아요 관계를 ManyToMany로만 처리하지 않고, **중간 테이블(Entity)**을 직접 생성하여 유연하고 확장 가능한 구조로 설계하는 방식이 인상 깊었다.
이번 강의에서는 먼저 좋아요 중간 테이블을 MovieUserLike라는 독립된 엔티티로 정의하고, 이 엔티티에서 @ManyToOne 관계를 통해 Movie와 User 각각을 참조하게끔 구성했다. 덕분에 단순한 연결만이 아니라, 향후 중간 테이블에 타임스탬프나 기타 메타데이터(좋아요 누른 시간, 누른 방식 등)를 추가하고자 할 때도 확장성이 매우 좋아지는 구조라는 점을 알게 되었다.
초기에는 @PrimaryGeneratedColumn()을 사용하여 MovieUserLike에 별도의 id 컬럼을 생성하는 구조를 구성했지만, 이후에는 보다 실제 데이터베이스의 무결성을 고려하여 컴포짓 프라이머리 키(composite primary key) 방식으로 전환하였다. 즉, Movie의 id와 User의 id를 각각 @PrimaryColumn으로 설정함으로써, 하나의 유저가 동일한 영화에 대해 중복 좋아요를 누를 수 없도록 데이터베이스 레벨에서 제약을 줄 수 있는 점이 매우 좋았다.
또한 이 구조는 단순히 중간 테이블에서 끝나는 것이 아니라, Movie 엔티티 내부에서도 @OneToMany를 통해 MovieUserLike를 역으로 연결해주었고, User 엔티티 쪽에서도 likedMovies라는 컬렉션으로 같은 방식의 연관관계를 설정하는 것으로, 양방향 관계의 이해도와 설계 능력을 높이는 데 큰 도움이 되었다.
추가로 Movie 엔티티에서는 좋아요 수를 집계하는 likeCount 컬럼도 정의되었고, 이는 중간 테이블과는 별도로 실시간 성능 향상을 위한 누적 수치로 활용될 수 있도록 구성되었다. 좋아요 하나당 무조건 테이블 조회가 아닌, 누적 컬럼으로 관리하게 되면 조회 퍼포먼스를 훨씬 개선할 수 있기에 실제 서비스에서 효율적으로 사용할 수 있는 설계라고 느꼈다.
이 외에도 @Transform을 활용해 파일 경로를 서버 주소와 함께 응답하도록 처리하거나, @JoinTable, @JoinColumn 등을 통해 관계형 DB의 다양한 매핑 방식에 대해 익히는 좋은 계기가 되었다.
무엇보다 이번 강의는 단순한 기능 구현을 넘어서 실제 서비스에서 어떻게 효율적이고 확장 가능한 설계를 할 수 있는지에 대한 깊은 통찰을 제공했다는 점에서 매우 만족스러웠다.
특히 중간 테이블을 직접 다루는 경험은 관계형 데이터베이스를 사용하는 실무 프로젝트에 있어 꼭 필요한 역량이기에, 오늘 강의는 실무 감각을 키우기에 최적이었다고 느낀다.
수업 전반적으로 흐름도 매우 깔끔했고, 실습 코드도 이해하기 쉽게 잘 구성되어 있어서 구현과정에서 막힘 없이 따라갈 수 있었다. 추후에는 이 구조를 기반으로 실제 좋아요 등록 및 취소 API, 유저별 좋아요 조회 등 기능 확장도 연습해보고 싶다는 생각이 들었다.
좋아요 시스템을 단순하게만 생각했던 기존의 시야를 넓혀준, 매우 유익하고 실전적인 강의였다.
사진



