전체 글 22

좋아요 기능 - 좋아요 구현하기, 좋아요 수 구현하기

좋아요 구현일단 좋아요 모듈을 만들고 전역 settings 파일에서 추가한다.설정 파일 넣는거는 이미 다른 기능 구현하면서 했던 그대로 하면 된다.@Table(name = "article_like")@Getter@Entity@ToString@NoArgsConstructor(access = AccessLevel.PROTECTED)public class ArticleLike { @Id private Long articleLikeId; private Long articleId; // shard key private Long userId; private LocalDateTime createdAt; public static ArticleLike create(Long articleL..

카테고리 없음 2026.01.18

댓글 기능 - 댓글 엔티티, 리포지토리, 서비스, 컨트롤러

일단 답글에 다시 답글을 다는 건 불가능한 구조로 먼저 만들어보도록 하겠다.@Table(name = "comment")@Getter@Entity@ToString@NoArgsConstructor(access = AccessLevel.PROTECTED)public class Comment { @Id private Long commentId; private String content; private Long parentCommentId; private Long articleId; // shard key private Long writerId; private Boolean deleted; private Instant createdAt; public static C..

댓글 기능 - 새 모듈 만들고 설정

지금까지 진행했던 게시글 모듈을 얼추 마무리하고 댓글 모듈을 만들어보려고 한다.서비스 이용자가 적을 때에는 완전한 MSA 방식으로 운영하면 클라우드 서버에서 돈만 더 나가겠지만, 일단 DB를 완전히 분리하는게 아니라 나중에 분리할 수 있는 형태로 만들어놓고 점차 분리하는 방식으로 진행하면 처음 부담이 적게 MSA를 시작하는 것도 가능할 듯.일단 지금까지 만들었던 테스트 코드를 쭉 돌려본다. 데이터 삽입하는 부분만 빼고 다 잘 동작하네. 데이터 삽입은 처음에 멤버를 가입시키는 부분이 있어서 중복 아이디로 인해 실패가 나왔는데 이거 없었으면 용량 터졌을듯.근데 이런걸 보면 데이터 삽입은 테스트 코드에 포함시키면 안될 것 같다.문서 정리도 하긴 해야하는데 개인 프로젝트다보니까 이런부분은 안하게되네.이제 댓글 ..

포스트 CRUD 기능 - 게시글 목록의 무한 스크롤 조회

무한 스크롤은 offset이 아니라 마지막으로 읽은 데이터의 id를 기억해서 스크롤을 내리면 그 지점부터 로딩하는 방식으로 동작한다.왜 이렇게 하냐면, offset방식으로 했다가는 중간에 데이터가 삭제되거나 추가되었을 때 조회가 누락되거나 중복되기 때문이다.보통 페이지네이션 방식은 커뮤니티 사이트들이 쓰고, 무한 스크롤 방식은 SNS에서 쓴다. select * from article where board_id = 1 order by id desc limit 30;이미 인덱스가 id기준 내림차순 정렬이 되어 있으므로 내림차순으로 처음 30개를 조회하면 빠르게 조회된다.select * from article where board_id = 1 and id 그 다음 30개를 조회해보자.30번째 id보다 작은 i..

포스트 CRUD 기능 - 인덱스 생성 및 커버링 인덱스

인덱스를 생성한다.create index idx_board_id_article_id on article(board_id asc, id desc);게시판 id로 내림차순하고 게시글 id로 오름차순해서 정렬하도록 한다. 방금 생성한 인덱스를 기반으로 정렬(order by)하고 필터링(where)해서 조회해보자.select * from article where board_id = 1 order by id desc limit 30 offset 90;0.01초만에 생성되는 것을 볼 수 있다.사실 기본 id로 정렬하는 건 따로 인덱스를 안만들어도 기본 인덱스가 id라서 원래 빠르긴 한데.select * from article where board_id = 1 order by id desc limit 30 offse..

포스트 CRUD 기능 - 쓰레드풀을 써서 게시글 대량 삽입 테스트

데이터 삽입을 해보자.@SpringBootTest@Import(SecurityTestConfiguration.class)@ActiveProfiles("test")public class DataInitializer { @Autowired EntityManager entityManager; @Autowired TransactionTemplate transactionTemplate; Snowflake snowflake = new Snowflake(); CountDownLatch latch = new CountDownLatch(EXECUTE_COUNT); @Autowired MemberRegister memberRegister; Member member; s..

포스트 CRUD 기능 - Snowflake로 게시글 id 만들기

snowflake는 트위터에서 만든 알고리즘인데, MSA(분산 시스템)에서 오름차순 ID를 만들기 위한 알고리즘이다.다만 라이브러리가 아니라 그냥 알고리즘이라서 우리가 코드를 작성해야 한다.public class Snowflake { private static final int UNUSED_BITS = 1; private static final int EPOCH_BITS = 41; private static final int NODE_ID_BITS = 10; private static final int SEQUENCE_BITS = 12; private static final long maxNodeId = (1L 노드 ID와 시퀀스 번호, 타임스탬프를 조합해서 64비트 ID를 만..

대규모 시스템 설계 인강) MSA화 진행하기: 모듈 추가하고 build.gradle 분리

https://www.inflearn.com/course/스프링부트로-대규모-시스템설계-게시판 스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판| 쿠케 - 인프런 강의현재 평점 4.9점 수강생 1,521명인 강의를 만나보세요. 대규모 데이터와 트래픽을 지탱하기 위한 시스템을, 스프링부트로 직접 만들면서 배워봅니다. 대규모 시스템 디자인, Microservice Architecture, Evwww.inflearn.com이 강의를 참고했다.일단 깃헙 리포지토리 분리 없이 멀티모듈로 진행해보고자 한다.서비스 디렉토리를 만들어서 src 폴더를 안에 넣어줬다.build.gradle.kts 파일을 전역설정과 각 서비스별로 분리해줬다.전역 build.gradle.kts에서 dependencies를 제거..