전체 글 60

[기타] Nginx란

1. nginx란 경량 웹서버로 2가지 역할로 활용 된다. HTTP Web Server :클라이언트로부터 요청을 받았을 때 was를 거치지 않고 요청에 맞는 정적 파일을 응답 Reverse Proxy Server : WAS 서버의 부하를 줄일 수 있는 로드 밸런서 2. Apache 서버와 다른점 Apache 웹서버는 클라이언트로부터 받은 요청을 처리할 때 새로운 프로세스 또는 스레드를 생성하여 처리한다. 따라서 요청마다 스레드가 생성되므로 접속하는 사용자가 많으면 스레드가 그만큼 생성되어 CPU와 메모리자원의 소모가 크다는 단점이 있다. 반면에, Nginx는 Event handler를 통해 동작하기 때문에 한개 또는 고정된 프로세스만 진행 후, 비동기방식으로 요청들을 처리할 수 있다. 위의 그림에서 보이..

[Spring] RequestMapping

1.RequestMapping이란? - 특정 url로 요청을 보내면 Controller에서 어떤 방식으로 처리할지 정의하는데, 이 때 들어온 요청을 특정 메서드와 매핑하기 위해 사용하는 것이 @RequestMapping이다. 2. 예시 @RequestMapping(value = "/hello", method = RequestMethod.GET) - method는 어떤 요청으로 받을 지 정의함(GET, POST, PUT, DELETE 등) 3. 메소드 단위 지정/ 클래스 단위 지정 1) 메소드 단위 지정 - 다음과 같이 메소드 단위로 RequestMapping을 지정하게 되면 같은값이 중복되고 불필요한 코드를 반복한다는 느낌이 든다. @RestController public class HelloContro..

FrameWork/Spring 2022.01.27

[tomcat] PUT, DELETE 파싱 오류

1. 문제 상황 나의 로컬 서버 HTTPS 메소드 UPDATE로 request body를 이용하여 spring 컨트롤러에 요청을 보냈다. parameterMapping값과, propertykey들이 전부 "null"로 넘어갔다. 2. 문제점 나는 로컬 서버 HTTP에 tomcat 설정을 해놓았는데 HTTPS로 계속 테스트했던 게 문제였다. + 추가로 POST 일때만 파싱하는 경우도 있어서 다른 메서드일 때 작동을 안한다면 아래와 같이 코드를 수정하자 3. 코드 확인 (TOMCAT) PORT설정부분 4. 해결 톰캣 서버 server.xml에 해당 소스 추가 (위 소스도 o) 4-1. 해결 분석 Connector.java 아래 그림을 보면 parseBodyMethods의 디폴트 값이 POST이라서, HTTP..

[Issue] log4j 취약점

1. 문제원인 - 제품의 취약점이 발견된 버전은 Log4j 2.0-beta9 ~ 2.16.0 버전이다. 취약점 공격은 Log4j를 사용하는 응용 프로그램에서 layout patter과 쓰레드 컨텍스트 기능이 사용되는 경우 발생할 수 있다. 취약한 환경과 이 환경을 공격하는 기법을 알아보자. 2. 취약한 환경 - 응용프로그램이 layout pattern에서 쓰레드 컨텍스트를 조회하는 기능을 사용하도록 설정된다. 여기서, 이 layout pattern에서 참조하는 값을 외부 값으로 저장한다. 3. 취약점 공격 - 공격자가 특정 문자열을 포함한 요청을 서버에 전송하는 경우, log4j에서는 로그를 저장하는 과정에 stack overflow 오류가 발생하여 프로세스가 종료될 수 있다. 4. 취약점 해결 - Lo..

[JavaScript] 이벤트 루프

자바스크립트 특징 ‘단일 스레드’ 기반언어 → 동시에 하나의 작업만을 처리 가능 동시에 여러가지 작업을 처리하기 위해서 → 이벤트 루프 사용 따라서, 이벤트 루프를 이용해 비동기 방식으로 동시성을 지원 ex) function delay() { for (var i = 0; i < 100000; i++); } function foo() { delay(); bar(); console.log('foo!');// (3) } function bar() { delay(); console.log('bar!');// (2) } function baz() { console.log('baz!');// (4) } setTimeout(baz, 10);// (1) foo(); → setTimeout함수 이벤트 요청 후 스택에서 ..

[Algorytm-개념] 이분탐색

1. 이분탐색(Binary Search)란 ? 이분탐색 = 이진탐색 이며, 정렬되어 있는 배열에서 데이터를 찾으려 시도할 때, 범위의 가운데 값을 검사하여 원하는 값이 나올 때까지 반씩 줄여나가며 찾는다. 2. 예시 1, 2, 3, 4, 5, 6이라는 값에서 6을 찾고자 한다면 배열의 중간에 위치한 3이라는 값과 6을 비교한다. 6은 3보다 크므로, 3의 왼쪽에 위치하는 값들은 찾을 필요가 없어 3의 오른쪽에 있는 값을 대상으로 탐색을 재시도한다. 이제 4, 5, 6이 남았고 그 중 가운데 값인 5와 6을 비교한다. 6은 5보다 크므로 5의 오른쪽 값을 대상으로 탐색을 재시도한다. 6과 6을 비교하면 값이 일치하므로 탐색을 종료한다. 3. 시간복잡도 문제 처음부터 끝까지 원하는 값을 찾을 때까지 탐색을 ..

Algorytm 2021.10.18

[퍼즐문제] 열려 있는 락커 개수

Q. 어떤 복도에 락커가 100개 있고, 모두 문이 닫혀있다고 해보자.그 복도를 지나가면서 처음에는 100개의 락커 문을 모두 연다. 그런 후 짝수 번째 락커를 모두 닫는다. 다시 이번에는 3의 배수 번째 락커가 열려 있으면 닫고 닫혀있으면 연다.(이 과정을 토글이라 하자) 복도를 100번 지나고 나면 열려있는 락커는 총 몇 개일까? . . . . . . . . . . . A. 10번째 락커를 생각해보자. 10번 락커는 몇 번째 지나갈 때 토글될까? 우선 첫 번째를 지나갈 때는 모든 락커를 토글하니 당연히 토글되고, 10번 째 지나갈 때도 토글 될 것이다. 이제 두 번째부터 9번째까지를 살펴봐야하는데, 두 번째를 지나갈 때는 2, 4, 6, 8, 10번째 락커를 토글하고 세 번째는 3, 6, 9 네 번째..

[Algorythm-개념] 동적 계획법

1. 동적 계획법이란? 동적 계획법(dynamic programming)이란 복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법을 말한다. 이것은 부분 문제 반복과 최적 부분 구조를 가지고 있는 알고리즘을 일반적인 방법에 비해 더욱 적은 시간 내에 풀 때 사용한다. - wikipedia *DP라고도 불림 2. 동적 계획법 등장 배경 동적 계획법 등장 배경은 피보나치 수열을 통해 알 수 있다. 제2항까지는 1, 제3항부터는 바로 앞의 두 항을 더한 수로 정의된다. 제0항은 생략되기도 한다. (0), 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89... 프로그래밍에서 피보나치 수열은 보통 재귀함수를 통해 표현한다. 아래는 피보나치 수열을 이용한 N번째 수를 구하는 함수이다. fibo(..

Algorytm/기초 2021.09.28

[Algorythm-개념] 완전탐색

1. 완전탐색이란? - 모든 경우의 수를 고려하는 탐색 알고리즘 - 영어로는 Exhaustive Search라고 한다. 가능한 모든 경우의 수를 다 해보는 것이다. 알고리즘을 풀 때 가장 확실한 방법이지만 그만큼 가장 시간이 오래걸리는 기법이다. ex) 4자리 암호를 풀기 위해 0000~9999까지 모두 시도해보는 것 ( 가장 확실하지만, 가장 오래걸린다 ) - 해당 기법을 문제해결 알고리즘에 사용 할 때, 2가지 규칙을 적용한다. 1. 사용된 알고리즘이 해당 문제를 해결하기에 적절한가? 2. 효율적으로 작동하는가? 대부분의 경우 2번에서 미충족된다. 다양한 문제를 이 기법으로 해결 하기에는 비효율적이라는 것이다. 따라서 완전탐색 기법을 사용 시 그 문제에 대한 파악이 중요! 2. 완전탐색 기법의 종류 ..

Algorytm/기초 2021.09.26