분류 전체보기 315

Nginx의 의미, 특징, 사용 방법 훑어보기

NGINX가 무엇일까? nginx는 WAS (Web Application Server)의 하나의 종류며, 흔히, nginx가 뭐냐고 물을때, 같이 세트로 설명하는게 Apache Tomcat이다. 그야 당연하게도, 스프링이 기본적으로 Apache Tomcat 을 지원하고, 대학교 학부생이나 , 코딩을 처음 접하는 사람은 전부 Tomcat으로 시작했기 때문이다. Apache vs Nginx Apache의 문제: 웹서버의 선두주자는 Apache 였다. 그렇다면 Apache 쓰다가 Nginx으로 왜 넘어왓을까? 그야 당연히 Apache에 기술적인 한계를 맞이하여서 Nginx로 편승 할 수 밖에 없는 상황이 와서 그렇다. Apache가 무적이면 굳이 시간과 돈을 들여 기술을 바꿀 의미가 없으니까 Apache의 기..

잡다한지식 2024.04.22

DDOS가 무엇이고 대처방법은?

DDOS : Distributed Denial of Service => 분산하여 서비스를 공격 사진과 같이 어디 어느곳에서도 모르는 PC, 모바일 플랫폼에서 하나의 IP로 집중공격을 거는것이 DDOS다. 그래서 이게 뭐가 문제인가? 일반적으로 서비스는 1초마다 받아들일수있는 요청이 제한되어있다. 예시를 들어 1초마다 1만개 정도의 요청을 받을수있으면, 이때 DDOS가 10만개요청을 보내면 어떻게될까? 서비스는 버퍼링 , 렉이 걸리거나 심하면 서비스가 중단된다. 결국 손해만보는건 서비스를 담당하는 기업이다. 고객은 서비스를 제대로 받지못하니 떠나기 마련이고, 기업은 수익이 줄어들기 마련이다. 그에따라 법적으로도 DDOS공격에 벌금과 징역을 주고있는데, 아직까지도 줄지 않고있다. DDOS범을 잡을순없나? 결..

잡다한지식 2024.03.03

[PCCP 기출문제] 아날로그 시계

문제 분석 문제 목표 : 초침이 시침/분침이 만나는 횟수 구하기 할말이 많은 문제다. 이 문제를 어떻게 접근할것인가 큰 문제다. 결론부터 말하자면, 대부분의 사람들이 이 문제를 "사고력"으로 접근하였다. 즉, 매 초 각도계산하면서 시침/분침과 겹치는지 완전탐색같은건 안돌린다는것이다. => 사고력으로 접근한다는것은 규칙이 있다. 하나의 예시를 줬는데 이걸 잘 이용해 먹어야한다. 간단하게 규칙을 계산해 보자. 1. 1분에 초침은 1바퀴를 돈다. 2. 1바퀴를 돌면, 일반적으로 시침과 분침을 만나게 된다. 3. 즉, 1분이 자나가면 알람이 2번은 울린다. 이 규칙대로면 1시간 = 120번, 24시간 = 2880번이다. 잃어버린 28번은 무엇인가? 이걸 잘 찾아내는것이 문제의 핵심이다. 우선 분침이 정각이 되기..

[PCCP 기출문제] 석유 시추

문제 분석: 1. 석유가 고여있는 부분을 그룹화한다. 2. 주어진 모든 열을 시추를 하였을때, 가장 많이 석유를 뽑을수 있는 열을 고른다. 문제의 독해력도 어렵진 않고 , 구현법은 DFS/BFS 만 알고 있으면 풀 수 있는 문제다. 단, 효율성이 걸려있기때문에 어떻게 완전탐색 로직을 최적화 할지는 고민해봐야한다. 단순하게 생각해서 1번열부터 8번열까지 시추를 시작하여, 석유블록을 발견할때마다 완전탐색(채굴)을 행한뒤 , 가장 높은 석유량을 기록하는 값을 구하면된다. 하지만, 다음과같이 전략을 잡는다면, 이미 1번열에서 채굴한 정보를 2번에서 또다시 채굴을 한다. 즉, 중복이 많이일어난다. 좀 더 효율적인 접근 => 그렇다면 이미 한번 석유채굴한 구역은 메모이제이션 => 어딘가에 저장해둔다. 제일 첫번째 ..

[PCCP 기출문제] 붕대 감기

문제 분석 붕대감기 문제 요약 1. 플레이어는 hp가 최대치가 아니면 붕대감기 스킬을 시전한다. 2. 붕대는 1초마다 x만큼 회복하며, 특정한 t초 연속으로 붕대를 감았다면 y만큼 보너스로 회복한다. 3. 공격을 받으면 붕대감기는 취소댄다. 4. 최종적으로 현재 체력을 반환한다. hp가 0이 내려가면 -1를 반환한다 문제 풀이 전형적인 구현 문제이다. 정리해놓은 순서대로 하나씩 구현을 해나가면 된다. 여기서 1초마다 hp를 체크해 나갈것인지, 공격을 받는 구간만 계산하는지 두가지 전략이 있다. 하지만, 1초마다 체크해 나가는 전략은 효율성이 매우 떨어지니, 조금 복잡하더라도 공격을 받는 구간에 hp잔여량을 계산하기로 하자. 우선 hp가 최대치일 경우만 붕대감기를 적용시킨다. 그리고, 공격을 받는 시간과,..

Open Feign VS Apache Kafka

Open Feign과 Apache Kafka 간의 특징과 장단점을 소개시켜드리기 위해 이 글을 작성합니다. 두 기술의 공통점 1. MSA 환경에서 서비스간의 통신이 가능하게 한다. 2. 1번에 의하여 테스트를 하기 매우 까다롭다. Open Feign만의 특징 Kafka와 비교하여 가장 뚜렷한 특징은 Response가 있는겁니다. A서비스가 B서비스로 통신을 보낼때, B서비스에서 다시 Response가 날아옵니다. 이 특징으로부터 오는 장단점이 있습니다. 장점: Response가 오기 때문에 검증적으로 확실하다 이유 : 응답이 성공적이면 로직을 처리하고, 응답이 오류가 오면 재시도나 에러처리를 유도 할 수 있음. 단점: 코스트 (비용)이 많이든다. 이유: 여기서 말하는 코스트는 개발자의 노력,시간 비용과,..

카테고리 없음 2023.12.18

MSA의 개요 및 장단점

MSA : 마이크로 소프트 아키텍처의 약자 모놀리식 아키텍처는 대부분의 프로젝트가 행하고 있는 모습이다. 즉 하나의 서버의 모든 서비스가 들어가있는 마치 일체형 프로그램 이라고 생각하면 편하다. 반대로, MSA는 여러개의 서버로 분리한뒤, 서비스를 여러개로 분산할수있다. 예시를 들어보자면, 유저 서비스 , 매칭 서비스 , 전투 서비스 , 뽑기 서비스, ..등등 기능 별로 나누거나 카카오톡을 예로들면, 카카오 헬스, 카카오 지갑, 카카오 뱅크 , 카카오 맵 등등 예를 들 수 있다. 즉 서비스마다 서버를 하나씩 두어 독립적으로 관리하는 개념이다. MSA의 장점 : 1. 독립적으로 서비스를 관리할수 있기에, 코드 유지보수가 매우 좋다. 오류가 있다면 모놀리식처럼 집약된것보다 코드나,패키지를 찾기 편하며, 기능..

카테고리 없음 2023.12.10

SpringCloudGateway (SCG) 사용한 프로젝트

SpringCloudGateway (SCG) 란? MSA를 위한 기술이다. MSA는 간략하게 설명하자면, 하나의 큰 어플리케이션을 서비스 단위로 분해한뒤, 독립적으로 관리하는것이다. Gateway는 이 분해된 서비스들의 중개역 역할을 한다. Eureka 서버 SCG와 더불어 Eureka 서버도 같이 사용하면 좋다. SCG는 앞서 말한듯, 서비스들의 중개역을 하나 두는것이라면, Eureka 서버는 서비스들이 제대로 몇개의 인스턴스가 켜져있는지 상태관리를 시각적으로 도와주는 서버다. 이것이 Eureka 서버의 화면 일부분이다. 현재는 Find-Service의 인스턴스가 1개 올라와있다. 만약 Find-Service가 여러개 필요하다면 어떻게할까? Find 서비스의 서버를 하나 더 키면된다. 그러면 다음과같이..

스프링 Rest Docs 사용법

Spring Rest Docs란? Spring REST Docs는 스프링 프레임워크 기반의 프로젝트에서 API 문서를 생성하고 유지 관리하기 위한 도구입니다. 이 도구를 사용하면 API 엔드포인트 및 요청-응답 예제를 포함한 문서를 생성할 수 있습니다. Spring REST Docs는 테스트 코드와 결합하여 API의 동작을 검증하고 그 결과를 문서화하는 방식으로 작동합니다. 간단히 말하자면, Controller 패키지를 테스트를 한뒤, 테스트가 성공했을때만 API 문서를 작성해주는 도구다. REST DOCS 설정: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 plugins { i..

스프링 Jacoco 코드 커버리지

Jacoco란? 내가 작성한 코드들을 테스트를 하였을때, 그 테스트가 전체 코드중에서 얼마만큼 성공이되었고, 몇퍼센트 통과가 되었는지 자세하게 통계를 보여주는 라이브러리다. Jacoco는 테스트 실패, 성공여부를 모두 보여주기에, 테스트 작성에 분석 및 보고를하는데 효율적이다. 사용법: Jacoco는 사용법이 매우 간단하다. 라이브러리만 잘 받아오고 세팅만 하면된다. build.gradle에 들어가서 다음과같이 세팅한다. 플러그인에 Jacoco를 사용하겠다 선언한다. Jacoco의 버전 설정 받고싶은 파일 형식을 설정할수있다. html을 받고싶으니 true로 설정하였다. 또한, html의 생성 위치를 설정한다. $buildDir은 프로젝트에 build패키지안에 생성이된다. Jacoco 파일을 생성하는방법..