프로젝트

프로젝트

[SpringBoot] Bucket4j를 이용하여 간편하게 특정 API 트래픽 제한해보기

최근 '모띠클' 이라는 아카이빙 서비스를 개인 프로젝트로 진행을 하고 있습니다. 더불어 아침마다 책을 두 권씩 읽고 있는데, 그중 '가상 면접 사례로 배우는 대규모 시스템 설계 기초' 책을 읽고 있습니다. 어제도 여느날과 마찬가지로 책을 읽다가 '4장. 처리율 제한 장치의 설계' 부분을 읽게 되었습니다. 해당 파트에서는 챕터명 그대로 미들웨어를 활용해서 처리율을 제한을 두어 시스템에 부하를 덜어주는 것에 대하여 알려줍니다. 해당 파트를 읽다가 내 프로젝트에도 접목을 시켜볼 수 있을 것 같았습니다. 그래서 해당 부분을 공부 해보고 프로젝트에 접목시켜 본 것을 남겨보려고 합니다. 들어가기 앞서 서론에서 보았듯이 개인 프로젝트의 특정 API 호출에 트래픽을 제한해보려고 한다. 내 프로젝트에서 트래픽 제한을 걸..

프로젝트

[성능 개선기] 2. 스프링 부트에서 Caffeine Cache를 이용하여 95.08%의 Latency 개선해보기

0. 들어가기 앞서 이전글에서 링크의 HTML 메타 데이터 파싱시에 Stream부터 ParallelStream, CompletableFuture까지 성능을 개선시켜 보았다. 이번엔 간단하게 Caffeine Cache를 도입하여 성능을 개선시킨 후기를 적어볼까 한다. 이전글을 꼭 읽어보고 오는걸 추천한다! Caffeine Cache 도입 CompletableFuture까지 적용시켜 성능을 개선했지만, 그냥 단순하게 생각해보니 캐싱 전략 같은건 우선 제외하고 링크의 주소들을 캐싱해두고 불러오면 일단 Latency를 줄어들지 않을까? 하는 생각이 들었다. 또한 보통 사용자가 아티클을 등록/수정을 하게되면 당연히 DB에 영향이 가게 된다. 하지만 내가 개선 시키려는 Latency는 DB와는 큰 연관이 없고, 캐..

프로젝트

[성능 개선기] 1. 스프링 부트에서 HTML 메타 데이터 파싱시 ParallelStream vs CompletableFuture

0. 들어가기 앞서 평소 백엔드 성능 개선에 관심을 가지고 해당 프로젝트의 성능을 향상시키기 위해 다양한 방법을 시도하고 있다. 이번 글에서는 데이터 처리 속도를 개선하기 위해 몇가지 여정을 지나 CompletableFuture을 적용한 사례를 살펴보려고 한다. 사이드 프로젝트를 진행하고 있다. 주요 서비스는 내 아티클(링크,글귀,이미지)을 태그를 통해 분류하고 관리하는 것이다. 또한 공개여부를 통해 내 아티클을 공유할 수 있고, 등록된 나의 태그를 기반으로 다른 사용자들이 올려놓은 아티클들을 볼 수 있다. 여기서 특징적인 기능이 있다. 링크 타입의 아티클을 등록 및 조회가 될 경우에는 사용자가 링크 주소만을 보여주는 것이 어색하다고 판단했다. 보통 우리가 링크를 공유하거나 했을 땐 이렇게 썸네일, 해당..

프로젝트

[SpringBoot] 검색 서비스를 위한 성능 향상 개선기 (MySQL Like문 부터 SQL FullText, QueryDSL NoOffset, ElasticSearch까지)

소상공인들의 당일 폐기 예정 식품의 할인 정보 공유 및 구매/판매 서비스 소상 공인들의 당일 폐기 예정 식품의 할인 정보 공유 및 구매/판매 서비스를 팀 프로젝트로 진행 중이다. 팀 프로젝트를 수행하던 중, 나는 전반적인 업체 관리 및 검색 파트를 맡게 되었다. 아래 내용은 검색을 위한 기능을 구현하던 중 성능 개선을 위해 내가 시도했던 방법들을 적어본다! 목차 0. 들어가기 앞서 1. Like문(No QueryDSL) VS Full Text 쿼리 2. Like문(feat. QueryDSL) VS Full Text 쿼리 3. 우리 서비스에서 MySQL Index 적용시 문제점 4. ElasticSearch 도입 우선 들어가기 앞서서, 우리 서비스의 검색 관련 시스템에 간략하게 소개해주려고 한다. 간단하게..

프로젝트/RestApi_CRUD

RestApi 게시판 CRUD 연습 (5) - PostMan

마지막으로 각 api들이 요청에 맞게 잘 응답하는지 확인해 보자! PostMan Test 1. 게시물 등록 - 2개 2. 게시물 전체 조회 3. 게시물 단건 조회 4. 게시물 수정 5. 게시물 삭제

프로젝트/RestApi_CRUD

RestApi 게시판 CRUD 연습 (4) - 유닛 테스트 : Controller 테스트 with MockMvc

Service 테스트에 이어 이번언 Controller 테스트이다. 바로 코드로 확인하자. PostControllerTest @SpringBootTest @AutoConfigureMockMvc class PostControllerTest { @Autowired MockMvc mockMvc; @Autowired PostRepository postRepository; @Autowired ObjectMapper objectMapper; @BeforeEach void clean() throws Exception { postRepository.deleteAll(); } } MockMvc를 사용하므로 MockMvc 주입을 위해 @AutoConfigureMockMvc를 선언해 준다. JSON 형식을 사용할 때, 응답..

프로젝트/RestApi_CRUD

RestApi 게시판 CRUD 연습 (3) - 유닛 테스트 : Service 테스트

기본적인 CRUD의 로직 구현은 끝이 났다. 이제 각 단위들을 테스트해 볼 차례이다. 우선 이번 포스트에서는 Service 로직을 테스트해 보자! PostServiceTest @SpringBootTest class PostServiceTest { @Autowired PostService postService; @Autowired PostRepository postRepository; @BeforeEach void clean() throws Exception { postRepository.deleteAll(); } 우선 클래스 상단에 들어가는 기본적인 세팅이다. 테스트할 PostService와 그에 필요한 PostRepository를 주입받는다. @BeforeEach를 통하여 각 테스트를 시작하기 전 po..

프로젝트/RestApi_CRUD

RestApi 게시판 CRUD 연습 (2) - Service / Controller

바로 Service부터 확인해 보자 PostService package hongxeob.restapi_crud.service; import hongxeob.restapi_crud.Post; import hongxeob.restapi_crud.repository.PostRepository; import hongxeob.restapi_crud.request.CreatePostDto; import hongxeob.restapi_crud.request.PostConvert; import hongxeob.restapi_crud.request.UpdatePostDto; import hongxeob.restapi_crud.response.PostListResponse; import hongxeob.restapi_cr..

맹수호빵
'프로젝트' 카테고리의 글 목록