[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의 멱등성을 고려하여 개발하기
·
Dev/Backend
개요신규로 도입한 어드민 기능에 문제가 발생했다. 아래 두 가지가 부족했기 때문이었다.API의 멱등성사용자 관점에서의 테스트 이 포스팅에서는 API의 멱등성에 대해 상세히 다루고, 앞으로 의식하여 적용할 수 있도록 해볼 것이다! 멱등성(Idempotency)멱등성은 수학 용어로, 여러 번 연산을 적용해도 결과는 달라지지 않는 성질을 말한다.한자도 덮을 멱, 무리 등인데 무리(swarm)의 효과를 덮어버린다! 라는 뜻이다.멱등성의 대표적 예다.절댓값 함수1을 계속 곱하는 것 HTTP의 멱등성기본적으로 HTTP 메소드의 GET, PUT, DELETE 와 같은 메서드는 멱등하다.예를 들어, 여러 번 호출해도 GET 은 항상 같은 결과를 보여준다.PUT 또한 여러 번의 요청에도, 매번 같은 리소스로 업데이트 한..
[DB] TRUNCATE, DELETE | RDBMS 삭제 명령어 비교
·
DB/SQL
개요로컬에 더미로 쌓아둔 데이터가 너무 많고 난잡해서 database 값들을 초기화했는데.. 여기서 문제가 생겼다.  현재 Table 구조는 상당히 복잡하게 연관관계가 매핑되어있다.예를 들어, 유저가 회원가입을 하면 account 테이블이 생성되고, 이와 관련하여 account_a, account_b, account_c… 이런식으로 관계가 정의되어 있기에 update나 insert, delete 등의 명령어는 주의해서 사용해야 한다. 나처럼 무심코 정리했다간 에러지옥에 파묻힐것이다ㅠ.ㅠ 실서버나 staging과 같은 테스트 서버에 데이터를 쉽게/자주 조작하면 안되겠지만,local은 테스트를 위해 이런저런 작업을 하게된다.이때 무심코 delete를 하기보다는… truncate라는 명령어를 사용하는 것이 테..
[Backend] yaml 파일 작성법
·
Dev/Backend
😮‍💨새로 CI가 필요한 프로젝트가 있어서 Cloud Build를 구축하는 도충 계속 아래와 같은 에러가 떴다. "failed unmarshalling build config cloudbuild.yaml: yaml: line 3: did not find expected key" yaml 파일 문법 에러가 발생한 것yaml은 파이썬에서 tab으로 구분하듯이 띄어쓰기가 중요하다.그런데 이러한 띄어쓰기 적용이 툴마다 달라서,,,, 아니 분명 intelliJ로 빌드할 땐 됐는데 외않되지?만 외치고 있다가구글링을 통해 꿀정보 찾음  꿀정보는 아래 사이트인데, yaml -> json 변환 사이트로 yaml 문법이 잘못되면 잡아준다. https://www.json2yaml.com/convert-yaml-to-js..
[spring] null 처리를 위한 spring의 Stringutils
·
Dev/Spring & JPA
개요 서버 단 코드를 구현할 때 null 처리를 미리 해주는 것이 중요하다. 특히 요청과 응답에 대한 코드를 모두 작성하면서, 서버 개발자가 미리 null 처리를 잘 해주면 불필요한 트랜잭션을 막을 수 있음을 알게 되었다. 또한 null이 들어오면 안 되는 상황에서 null을 활용함으로써 적절한 예외 처리를 할 수 있고, 버그를 방지할 수 있다.  Stringutils문서 를 확인해보면 Stringutils는 spring framework에서 제공하는 String 타입에 대한 메소드다. StringUtils.hasText1) ChatSequence에 대한 null 검사public static boolean hasText(@Nullable CharSequence str)  2) String에 대한 null..
[BackEnd] 메일 전송 시 CSS 적용(inline 자동 변환기)
·
Dev/Backend
개요JAVA로 특정 사용자에게 메일을 전송하는 프로그램을 개발하는데, 이때 메일은 html 파일로 템플릿을 만들어서 보낸다.템플릿에 CSS를 적용하면 CSS를 style 태그로 담은 페이지는 정상적으로 잘 작동하지만, 메일 발송을 할 때에는 정상적으로 작동하지 않는다. 이유와 해결방법에 대해 작성하는 포스팅이다.  문제상황과 이유, 해결 방법 메일 전송 시 CSS가 깨지는 이유Gmail, Naver 등의 이메일 서비스는 각 사의 보안상 메일 내용을 일부 변조를 하게된다. 이때 script, style등 head태그 내부에 작성하는 내용들이 메일 전송 시에 배제된다고 한다.  HTML에 CSS를 적용하는 방법은 3가지가 있다.외부 .css 파일을 적용style 태그를 사용하는 임베디드 방식각각의 HTML ..
[git] Github 계정 여러 개 사용 SSH Key
·
Dev
ssh-add ~/.ssh/생성한 개인키 명개요소속을 다르게 해서 프로젝트를 하다보면 깃허브 계정도 다르게 쓰는 경우가 생긴다. 이번 프로젝트에서 다른 아이디를 생성하고 Bitbucket과 Source tree에서 작업을 했는데 ssh key 관련 문제가 계속 발생해서 이번 기회에 정리를 해보자..계속 permission denied가 나서 ssh key를 생성하고 등록해도 해결이 안되는 사람들에게 도움이 될 듯하다. 우선 기억해야 할 것은 프로젝트마다 다른 github 계정을 사용하는 경우라면 SSH Key를 따로 설정해주어야 한다.지금부터 그 과정에 대해 설명한다. SSH Key 생성1. SSH Key를 관리하는 디렉토리로 이동 후, SSH Key 목록을 확인해준다. 일반적으로 아래와 같은 경로에 저..
[BackEnd] API 명세서 작성 가이드 라인 | 작성 예시
·
Dev/Backend
프로젝트에서 API 명세서와 ERD 설계를 맡았다. API 명세서를 작성해본 적이 없어서 최대한 공식적인 자료를 바탕으로 찾아보다가 사막의 오아시스같은 글을 발견해서 정리하고 두고두고 보려고 한다. 이번 프로젝트에서 활용을 당연히 하겠지만 앞으로도 정말 큰 도움이 될 것같다..😍 API는 '서버와 클라이언트가 데이터를 주고 받을 수 있도록 도움을 주는 매개체'이다.API 명세서는 서버와 클라이언트간 특정 기술을 사용하기 위한 약속이다. API 문서화에 들어가야할 내용1) 개요기술 문서의 서론은 독자들에게 본문의 요약, 작성 배경, 관련 개념을 설명해준다. 즉, 독자들을 위한 '가이드'이다. API 문서에도 서론의 역할을 하는 개요(Overview)가 필요하다. API 소개단순히 API에 대한 기능 설명..
sebinChu
'dev' 태그의 글 목록