전체 글
-
Rabbit MQ 분배 패턴과 멀티 컨슈머Message Queue 2021. 8. 14. 01:01
공부용 포스팅입니다 틀린 부분이 있을 수 있습니다. RabbitMQ 분배 패턴 Round-Robin Dispatching - 모든 Consumer에게 공정하게 메시지를 분배하는 패턴 - 같은 Queue의 메시지를 소비하는 Consumer들에게 Queue의 메시지를 하나씩 분배한다 - 1번 메시지는 Consumer 1에게, 2번 메시지는 Consumer 2에게 ... RabbitListner 하나의 Queue를 2개의 Consumer가 소비 @RabbitListener(queues = "fanout-test") public void fanoutTest(String testStr) throws IOException{ log.info("Consumer 1 : "+testStr); } @RabbitListene..
-
Rabbit MQ에 대해Message Queue 2021. 8. 14. 00:13
Rabbit MQ를 공부하고, 정리하기 위한 포스팅으로 설치 과정은 담지 않았습니다. RabbitMQ RabbitMQ는 Advanced Message Queueing Protocol ( AMQP )을 따르는 메시지 브로커입니다. 장점 1. 메시지 ( 데이터 )를 여러 사용자에게 전달해야 할 때 용이함 2. 빠른 응답 처리로 성능이 뛰어남 3. 어플리케이션 간 결합도를 낮출 수 있음 4. Queue이기에 메시지 누락이 적고 순서를 보장함 5. 외부 의존성이 없음 6. 동시성이 뛰어남 7. Scale out Clerstering이 쉬움 8. STOMP 등 웹 소켓 프로토콜을 지원함 9. 비동기적으로 동작 10. 멀티 스레드로 동작 Rabbit MQ의 키워드 1. Producer 메시지를 생성하고 발송하는 주..
-
Scale out 분산 환경에서의 세션 관리SpringBoot 2021. 8. 13. 19:49
후에 Scale out 분산 서버를 구축해보기 위해 작성한 포스팅입니다. 몇 가지의 토이 프로젝트들을 진행하면서 단일 서버로만 구축해 진행해보았습니다 개발을 해 나가면서 수많은 사용자들이 사용하는 서비스들은 어떻게 구축되었고, 어떤 방법들이 있는지에 대해 궁금해져 찾아보고 정리해보고 분산 서버 환경에서의 Session 관리는 어떻게 되는지 공부해보기로 했습니다. 먼저 단일 서버로 구현된 서비스는 많은 사용자가 몰려 서버가 감당할 수 없거나, 서버에 장애가 발생하면 치명적인 손실로 다가올 수 있을 것 같습니다. 그렇기에 많은 서비스들이 여러 대의 서비스를 두어 사용하는 것으로 알고 있는데 먼저 서버의 확장 방법은 Scale up, Scale out이 있습니다. 확장 방법 1. Scale up 수직적 확장 ..
-
ShMarket - Redis 캐싱 전략과 장애 대비ShMarket 2021. 7. 31. 20:22
ShMarket 프로젝트에서는 Redis를 사용하고 있습니다. 그로 인해 발생할 수 있는 문제점들과 해결 방법을 생각해보는 포스팅입니다. Redis를 도입한 이유 1. ShMarket에서 커뮤니티 게시글, 상품 게시글을 조회하기 위해 현재 사용자의 주변 동네 리스트 조회가 필수지만 가장 요청이 많은 기능으로 주변 동네를 구하는 것은 전국 행정동 DB를 계속해서 조회해야 하기 때문에 속도 저하가 발생할 수 있을 거라 생각해 Redis 캐시에 저장해서 사용하기 위해 선택 2. String뿐만 아닌 다양한 데이터 타입을 사용하기 때문 Redis가 관여하고 있는 기능 1. 사용자의 주변 동네 저장 2. 사용자의 정보 저장 ( FCM 토큰, 사용자 ID ) 3. 사용자의 최근 검색 ( 구현 예정 ) Redis 캐..
-
ShMarket - 푸시 알림과 성능 개선ShMarket 2021. 7. 5. 22:03
ShMarket의 주요 기능은 사용자 간의 물품 거래입니다. 물품을 거래하기 위해 사용자 간 소통할 때 알림이 제 때 오지 않는다면 답답하고 쾌적한 거래를 할 수 없을뿐더러 원하는 물품을 키워드로 등록해 알림을 기다릴 때 역시 제 때 오지않는다면 다른 사용자가 먼저 선점하는 등의 문제가 발생할 수 있다고 생각해 푸시 알림을 도입하고자 했습니다. 푸시 알림 기능은 Firebase Cloud Messaging (FCM)을 사용해 웹을 기반으로 사용자에게 푸시 알림을 전송할 수 있도록 제작하였습니다. 앞서 푸시 알림이 필요한 상황을 채팅과 키워드 알림으로 예를 들었는데 FCM을 사용함으로써 이 모두를 충족할 수 있다고 생각했습니다. 1. 채팅 채팅시 1:1로 주고받는 대화를 진행하고 이는 특정 대상에 대해 메..
-
ShMarket - 조회 성능 최적화 기록기ShMarket 2021. 6. 21. 22:13
프로젝트 개발 중 적은 수의 더미 데이터로 테스트를 하던 중 사용자가 많아져 상품, 커뮤니티 ( 게시글 )가 많아진다면 성능 이슈가 발생하지 않을까라는 생각에 나름 대용량 데이터를 넣고 성능을 비교해가며 개선 과정을 기록한 포스팅입니다. 테스트 데이터 : 백만 개 기준 대상 : Board, Product 중 Board로 포스팅을 진행합니다. Board.java public class Board { ...// @OneToMany(mappedBy = "board", cascade = CascadeType.ALL) private Set comments = new LinkedHashSet(); @OneToMany(mappedBy = "board", cascade = CascadeType.ALL) private ..
-
ShMarket - 이슈 #1 N+1문제와 그로 파생되는 문제 해결ShMarket 2021. 6. 20. 00:09
N+1로 인해 의도하지 않은 쿼리들이 발생하는 현상을 접함. Board Entity public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "board_id") private Long id; private String title; private String content; private String area; private String category; private Long thumbnailId; private String thumbnail; private LocalDateTime createDate; private LocalDateTime updateDate; private int read; ..
-
ShMarket - 프로젝트 소개ShMarket 2021. 6. 19. 21:17
Spring Boot 기반의 웹 프로젝트 개발 기록입니다. 프로젝트 소개 당근 마켓을 모티브로 만들어본 프로젝트로 회원가입 시 설정한 지역( 대한민국 행정동 DB 기반 )을 바탕으로 지역 주변 N Km 이내의 거주하는 회원들 간의 상품 판매, 커뮤니티 등의 서비스를 제공합니다. 사용 기술 Back Java, Spring Boot, Spring Data JPA, Spring Security, Json Web Token Firebase Cloud Messaging, Rabbit MQ, Redis SMTP, Swagger Front Javascript, Vue, Vuex, Vuetify, Axios 프로젝트 진행 백엔드 개발자를 희망하지만 프론트에도 관심 있고, 어느 정도는 사용할 줄 안다면 좋다고 생각하여 ..