[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..
[Network] 네트워크 원리(6) 웹 서버에 도착하여 응답 데이터가 웹 브라우저로 돌아간다
·
CS/Network
개요성공과 실패를 결정하는 1% 네트워크 원리를 공부하고 정리한 글이다.  STORY 1 | 서버의 개요1-1) 클라이언트와 서버의 차이점서버 머신은 용도에 따라 다양한 OS, 하드웨어가 있다. 하지만 네트워크에 관한 부분( LAN 어댑터, 프로토콜 스택, 소켓 라이브러리 등)의 기능은 클라이언트와 서버가 같은 구졸르 갖는다.→ TCP/IP 기능은 하드웨어나 OS가 무엇이든지 달라지지 않기 때문에 기능이 통일되어 있다고 봐도 무방하다. ■ 그렇다면 차이점은?소켓 라이브러리의 connection과 데이터 송수신서버 애플리케이션은 동시에 다수의 클라이언트 PC와 대화하나의 프로그램으로 여러 클라이언트를 다루는 것은 X. 보통은 1:1로 대화 1-2) 서버 애플리케이션의 구조(b): 클라이언트가 새로 접속할 ..
[Network] 네트워크 원리(5) 서버측의 LAN에는 무엇이 있는가?
·
CS/Network
개요성공과 실패를 결정하는 1% 네트워크 원리를 공부하고 정리한 글이다.Chapter 5 - 방화벽과 캐시 서버의 탐험   STORY 1 | 웹 서버의 설치 장소1-1) 사내에 설치클라이언트의 POP/프로바이더로부터 오는 패킷을 방화벽에서 한 번 거르는 방법이 보편화되어 있다.특정 서버에서 동작하는 특정 애플리케이션에 액세스하는 패킷만 통과시키고, 그 외 패킷은 모두 차단한다.액세스를 허가한 애플리케이션에 보안 구멍이 있을 수 있지만, 클 to 서구조에 비하면 위험성이 낮다.현재는 이 구조를 빠져나가는 다양한 수법이 많이 생겨셔 더불어서 바이러스 검사, 부정 침입 검사 등의 구조를 함께 사용한다. 1-2) 데이터 센터에 설치데이터 센터로부터 서버를 빌리는 형식데이터 센터는 프로바이더의 중심인 NOC에 접..
[BackEnd] 커뮤니티 게시물 목록 조회 API 쿼리를 QueryDsl로 구현해보기
·
Dev/Backend
개요코알라 커뮤니티 기능 중 게시판 목록 조회 API를 위해 QueryDsl을 학습 및 구현해보았다.요구사항은 다음과 같다.정렬 (최신순, 조회수, 좋아요수)검색 (제목, 내용, 작성자)페이징 이 세 가지 조건 하에, DB에서 값을 가져오기 위해 QueryDsl을 활용하였다. * JPQL 대신 QueryDsl을 사용한 이유   필요한 Entity, Request게시판 전체 목록을 조회할 때 단순히 GET을 하는 것이 아니라, 개요에서 언급한 3가지 조건을 만족시켜야 한다. 조회 조건을 만족하기 위해 다음과 같은 Request record를 생성한다.@Schema(description = "게시글 목록 검색 요청 객체")public record SearchBoardRequest( @Schema(des..
[백준/1987] 알파벳 | DFS와 백트래킹
·
PS/BOJ&Programmers
알파벳오랜만의 백준 포스팅!!코테에서 부족함을 절실히x99 느끼고 다시 알고리즘을 본격적으로 시작했다..🥲🤗 문제 바로 가기  알고리즘 말이 보드를 탐색하는 조건은 다음과 같다.① (1,1)부터 탐색한다.② 지금까지 지나온 모든 칸에 적혀있는 알파벳과 달라야 이동할 수 있다. 이 조건 아래에서 가능한 경로 중 최대한 큰 수를 구하는 것이 목표다.따라서, DFS를 통해 탐색하는 방법을 선택했다.  def dfs(y,x,cnt): visited[y][x] = True alphabet[ord(graph[y][x])-65] = True # print('시작점: ', graph[y][x]) # 현재 위치에서 네 방향의 위치 확인 for dy, dx in dr: ny, nx..
[Network] 네트워크 원리(4) 액세스 회선을 통해 인터넷의 내부로
·
CS/Network
개요성공과 실패를 결정하는 1% 네트워크 원리를 공부하고 정리한 글이다.Chapter 4 - 액세스 회선과 프로바이더의 탐험 5장과 더불어 가장 생소하고 어려웠던 내용.... 🥹 라우터부터 액세스 회선에서 이동하는 부분은 잘 알아두면 좋을 듯하다.  STORY 1 | ADSL 기술을 이용한 액세스 회선의 구조와 동작1-1) 인터넷의 기본은 가정이나 회사의 LAN과 같다.패킷을 중계하는 부분과 라우터의 기본적인 구조/동작은 같다. ■ 인터넷과 LAN의 차이점중계 장치 간의 거리 : 가정이나 회사의 LAN은 멀어봤자 수백미터 정도이지만, 인터넷은 한국과 미국을 연결하는 부분은 태평양을 넘어야 하므로 케이블로 연결하는 것이 어려울 정도로 중계 장치 간의 거리가 멀다.패킷의 중계 대상을 제어하는 부분 - 히 ..
[Network] 네트워크 원리 (3) 케이블의 앞은 LAN 기기였다.
·
CS/Network
개요성공과 실패를 결정하는 1% 네트워크 원리를 공부하고 정리한 글이다.Chapter 3 - 허브와 스위치, 라우터의 탐험  STORY 1 | 케이블과 리피터, 허브 속에 신호가 흘러간다.1-1) 하나하나의 패킷이 독립적으로 동작한다.컴퓨터에서 송신된 패킷은 중계 장치(허브, 라우터 등)에 의해 운반된다. 이때, 중계장치는 어떤 데이터인지 전혀 신경쓰지 않고 전송에만 집중한다.  1-2) LAN 케이블은 신호를 약화시키지 않는 것이 핵심이다.■ 높은 주파수와 낮은 주파수  1-3) ‘꼼’은 잡음을 방지하기 위한 방법이다.트위스티 페어 케이블은 마주 꼬여있는 상태를 통해서 잡음을 막는다. ■ 잡음의 원인은 케이블에서 발생하는 전자파다. 전자파가 금속 등의 도전체에 닿으면 그 내부에 전류가 발생한다. → 케..
[Network] 네트워크 원리(2) - TCP/IP의 데이터를 전기 신호로 만들어 보낸다
·
CS/Network
개요성공과 실패를 결정하는 1% 네트워크 원리를 공부하고 정리한 글이다.Chapter 2 - 프로토콜 스택과 LAN 어댑터 탐험  STORY 1 | 소켓을 작성한다.1-1) 프로토콜 스택의 내부 구조인터넷에서 데이터를 운반할 때는 데이터를 작게 나누어 패킷이라는 형태로 운반한다.패킷을 통신 상대까지 운반하는 것이 IP의 주 역할이다.IP 안에는 ICMP와 ARP라는 프로토콜을 다루는 부분이 포함되어 있다.ICMP: 패킷 운반 통제 및 제어용 메시지 통제ARP: 이더넷의 MAC 주소 1-2) 소켓의 실체는 통신 제어용 제어 정보소켓은 개념적인 것이어서, 실체가 없다. 굳이 말하자면 제어 정보, 즉 제어 정보가 기록된 프로토콜 스택 내부의 메모리 영역이다.제어 정보에는 통신 상대의 IP 주소, 포트 번호, ..
[CloudType] AWS에서 cloudtype으로 DB 마이그레이션하기
·
DevOps/CloudType
개요 앞편에서 cloudtype의 MariaDB를 생성해주었다. 이에 이어서 AWS MySQL로부터 cloudtype MariaDB로 마이그레이션을 함으로써 비용을 절약해보자.  가장 먼저 cloudtype 프로젝트 전체 설정(나의 경우 koala)에서 TCP 허용이 되어있는지 확인하자.    1) RDS 외부 접근을 위한 작업일단 마이그레이션을 하려면 AWS RDS에 직접 내 로컬에서 접근이 가능해야 한다.  1-1) 마스터 암호 설정DB 수정을 통해 마스터 암호를 설정하자.  1-2) 퍼블릭 액세스 허용  1-3) 보안그룹이 설정되어 있다면 인바운드에 나의 IP 등록DB에 보안그룹이 설정되어있다면, 나의 IP가 접근 가능하도록 정보를 등록해준다. 2) 로컬 터미널에서 명령어를 통해 AWS RDS에 접..
[CloudType] cloudtype으로 DB 호스팅 비용 줄이기
·
DevOps/CloudType
개요koala 프로젝트를 하다가 첫 난관(?)이 생겼다..! 바로 서버 비용이 없다는 것 이 설계에 맞춰서 클라우드 환경을 구축하기 전에, "이렇게 가면 비용이 꽤 들 것같은데 우리 얼마 쓰고 있지?" 확인하는 것에서부터 서버 비용에 대한 걱정이 시작되었다.. ㅋㅋ🤣     아예 cloudtype 서비스로 옮겨보자!사실 첫 시도에서는 AWS를 이용하지 않고 아예 cloudtype을 사용하자는 생각이었다. 하지만 cloudtype을 구축하는 과정에서 만난 문제들을 해결하지 못했고, 가장 비용이 많이 드는 RDS만이라도 cloudtype을 이용하자는 결론을 도출하게 되었다.  cloudtype은 비교적 합리적인 비용으로 웹사이트/데이터베이스 등을 호스팅할 수 있는 국내 서비스다. 디스코드 채널에서 실시간으..
[Network] 네트워크 원리(1) 웹 브라우저가 메시지를 만든다.
·
CS/Network
개요성공과 실패를 결정하는 1% 네트워크 원리를 공부하고 정리한 글이다.    STORY 1 |  HTTP 리퀘스트 메시지를 작성한다.1.1) URL 입력과 해독, HTTP 메시지 주고 받기URL(Uniform Resource Locator)URL은 사실 http: 뿐만 아니라 ftp:, file:, mailto:로 시작하는 것 등 여러가지가 있다.보통 우리가 브라우저를 사용할 때는 웹 서버에 접근하는 클라이언트로 사용하지만, 브라우저의 기능은 다양하기 때문이다. 파일을 다운로드/업로드하는 FTP의 클라이언트 기능이나 메일 전송 클라이언트 기능도 가지고 있다.브라우저는 몇 개의 클라이언트 기능을 겸비한 복합적인 클라이언트 소프트웨어다.각종 URL 형식 예시와 공통점가장 앞부분에서 브라우저에 액세스하는 방..
[python] 파이썬으로 진법변환하기
·
언어/PYTHON
개요간단한 듯하면서도 구현을 할 때마다 까먹는 부분이 생겨서 이번 포스팅을 통해 확실하게 잡아보려고 한다.   1) 파이썬 함수를 통해 진법 변환하기십진수를 이진수로, 이진수를 십진수로 파이썬 함수를 통해 변환하는 것은 상당히 간단하다. 1-1) 십진수를 이진수로 변환하기십진수를 이진수로 변환할 때는 bin이라는 함수를 사용한다. 이 함수는 정수를 "0b"가 붙은 이진수로 변환해준다. (문서 참조) Built-in FunctionsThe Python interpreter has a number of functions and types built into it that are always available. They are listed here in alphabetical order.,,,, Built-i..
[DevOps] 멀티모듈 프로젝트 CI/CD 적용 - 설계 구상 편
·
DevOps/DevOps
개요실제 운영 환경 인프라를 구축하기 위해 설계를 팀에 공유해보기로 하였다. 사실 3달 정도 전에 Github Actions + Elastic Beanstalk으로 실습을 해보았으나, 실패했던 경험이 있기에 다시 돌아와서 설계 과정을 세세히 기록해본다. 또한, 이전에는 사용해보고 싶었던 기술(Jenkins)과 추천 받은 기술로 구성하였다면, 이번엔 온전히 내 논리와 지식을 활용하여, 배포를 하자마자 사용자가 생길 우리 서버..🤗의 아키텍처를 구상해보려고 한다.   1) 이전 시도 복기와 현재 상황나에게 가장 까다롭게 다가오는 것은 멀티 모듈 설계와 AWS 사용이다. 이 까다로운 문제를 하나씩 풀어 나가는 과정을 작성해보자..! 1-1) 모듈 구조 파악하기 core(공통 라이브러리)admin(관리자 모듈..
[백준/1547] 공 | 두 수의 전환
·
PS/BOJ&Programmers
공 알고리즘알고리즘을 공부해본 사람이라면 한 번쯤은 겪었을 법한 두 수의 전환을 이용한다.   이 문제에서 주의해야 할 점은 공의 번호와 인덱스를 달리 생각해야 한다는 것이다. 예를 들어, 1번 공과 3번 공의 위치를 바꿀 때 배열의 인덱스는 그대로고 1번 공과 3번 공의 위치만 즉, 인덱스 번호 바뀌는 것이다.   그래서 인덱스로만 다룰 순 없고 for문으로 공의 번호가 저장된 배열을 돌면서 입력으로 주어지는 x,y의 위치를 찾아야 한다. for _ in range(m): x,y=map(int,input().split()) # x 위치 먼저 찾기 for i in range(len(arr)): if arr[i]==x: # x가 있는 위치의 값을 tmp_x ..
sebinChu
'분류 전체보기' 카테고리의 글 목록