ShMarket
-
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 프로젝트 진행 백엔드 개발자를 희망하지만 프론트에도 관심 있고, 어느 정도는 사용할 줄 안다면 좋다고 생각하여 ..