[Spring] 처리율 제한(Rate Limit)으로 악의적인 공격 차단하기
·
Dev/Spring & JPA
개요KOALA 서비스 회원가입에서는 총 2 가지의 인증이 요구된다.이메일 인증문자 인증 문자 인증은 1 건당 대략 20원 정도 청구된다.만약 누군가 의도적으로 많은 요청을 보내면, 불필요한 요청이 쌓이고 비용이 지불된다.이를 예방하기 위한 처리율 제한 기능을 추가해보자!  처리율 제한(Rate Limit)일정 시간 내에 요청되는 최대 횟수를 제한하는 기술이다.과도한 요청으로 인한 서비스 장애 및 피해를 방지한다. 예시사용자가 5회 이상 잘못된 비밀번호를 입력할 경우, 15분 동안 해당 계정의 로그인 시도를 차단초당 최대 1000명의 사용자가 접속할 수 있도록 제한하며, 초과 시 대기열에 넣거나 "사이트가 과부하 상태입니다"라는 메시지를 표시한 사용자가 특정 API에 1초에 100번의 요청을 보내고자 할 ..
[Spring] HTTP Request Client(webclient, feignclient)
·
Dev/Spring & JPA
개요 HTTP Client에 대해서는 인턴십 때 익히 알고 있었다. 당시 회사 코드는 단순한 MVC 구조가 아니라 모두 HTTP Client 요청을 날렸다.  이때 Webclient를 사용했는데, Asynchronous & Non-blocking으로 리소스 자원의 효율성을 극대화했다. 보통 front → back회사 코드는 front → back → platform  아무튼 그렇게 첫 HTTP Client를 사용했었고.. 이후 KOALA 프로젝트에서 Feign을 접했다. 작년 10월부터 올해 7월, HTTP Client를 사용하며 노션에 정리해둔 내용을 오픈한다...🤗 당시에 feign의 동시성 관련해서 헷갈리는 점이 너무 많았으나, 공식문서와 사례를 읽으면서 모두 정리해봤다!!  1. HTTP Re..
[BackEnd] 커뮤니티 게시물 목록 조회 API 쿼리를 QueryDsl로 구현해보기
·
Dev/Backend
개요코알라 커뮤니티 기능 중 게시판 목록 조회 API를 위해 QueryDsl을 학습 및 구현해보았다.요구사항은 다음과 같다.정렬 (최신순, 조회수, 좋아요수)검색 (제목, 내용, 작성자)페이징 이 세 가지 조건 하에, DB에서 값을 가져오기 위해 QueryDsl을 활용하였다. * JPQL 대신 QueryDsl을 사용한 이유   필요한 Entity, Request게시판 전체 목록을 조회할 때 단순히 GET을 하는 것이 아니라, 개요에서 언급한 3가지 조건을 만족시켜야 한다. 조회 조건을 만족하기 위해 다음과 같은 Request record를 생성한다.@Schema(description = "게시글 목록 검색 요청 객체")public record SearchBoardRequest( @Schema(des..
[BackEnd] API의 멱등성을 고려하여 개발하기
·
Dev/Backend
개요신규로 도입한 어드민 기능에 문제가 발생했다. 아래 두 가지가 부족했기 때문이었다.API의 멱등성사용자 관점에서의 테스트 이 포스팅에서는 API의 멱등성에 대해 상세히 다루고, 앞으로 의식하여 적용할 수 있도록 해볼 것이다! 멱등성(Idempotency)멱등성은 수학 용어로, 여러 번 연산을 적용해도 결과는 달라지지 않는 성질을 말한다.한자도 덮을 멱, 무리 등인데 무리(swarm)의 효과를 덮어버린다! 라는 뜻이다.멱등성의 대표적 예다.절댓값 함수1을 계속 곱하는 것 HTTP의 멱등성기본적으로 HTTP 메소드의 GET, PUT, DELETE 와 같은 메서드는 멱등하다.예를 들어, 여러 번 호출해도 GET 은 항상 같은 결과를 보여준다.PUT 또한 여러 번의 요청에도, 매번 같은 리소스로 업데이트 한..
sebinChu
'Back-end' 태그의 글 목록