전체 글(196)
-
Ajp Protocol packetSize 제한 오류
최근 Tomcat과 Apache를 연동하는 도중에 Apache에서 다음과 같은 에러 메시지가 나타났습니다. [Fri May 13 19:09:51 2022] [79415:140343571771968] [error] ajp_connection_tcp_get_message::jk_ajp_common.c (1409): (node2) wrong message size 65536 [Fri May 13 19:09:51 2022] [79415:140343571771968] [error] ajp_get_reply::jk_ajp_common.c (2289): (tomcat) Tomcat is down or network problems. Part of the response has already been sent to t..
2022.05.19 -
Spring Security - Rest API에 csrf protection을 사용하지 않는 이유
CSRF란 CSRF 링크 Rest API 에서 csrf를 disable하는 이유 CSRF의 취약점은 공격자가 사용자가 의도하지 않는 요청을 수행하게 하는 취약점입니다. 즉 공격자는 사용자가 가지고 있는 권한 범위 내에서 악의적인 행위를 할 수 있습니다. 일반적으로 해당 권한은 쿠키와 세션을 이용해서 인증을 하고 있기 때문에 발생하는 일입니다. 하지만 Rest API를 이용한 서버라면, session 기반 인증과는 다르게 stateless하기 때문에 서버에 인증 정보를 보관하지 않습니다. 일반적으로 jwt 같은 토큰을 사용하여 인증하기 때문에 해당 토큰을 Cookie에 저장하지 않는다면 csrf 취약점에 대해서는 어느 정도 안전하다고 말할 수 있습니다.
2022.05.02 -
MYSQL 5.7 특징
JSON 지원 일반적으로 text 컬럼에 json 데이터를 넣으면 나중에 검색할 때 어려움이 많습니다. 데이터를 모두 읽어서 다시 파싱하고, 특정 항목을 찾아서 테이블의 별도 컬럼에 저장한 다음에 그 컬럼으로 인덱스 생성하는 등 작업할게 많습니다. 하지만 이제 native json 데이터 타입 컬럼에 넣어두면 이 모든 작업을 간편하게 진행할 수 있습니다. 쿼리 성능 향상 임시 테이블 엔진 변경 기존에는 sub query를 사용할 때 만들어지는 임시 테이블이 MyISAM이었습니다. 그런데 MYSQL 5.7부터는 INNODB 엔진으로 바꾸면서 성능이 더 좋아졌습니다. UNION ALL 수정 더 이상 UNION ALL을 진행할 때, 임시 테이블을 생성하지 않습니다. Optimizer Hint 수정 Optimi..
2022.04.23 -
asnyc & await
async async 키워드는 function 앞에 위치합니다. function 앞에 async를 붙이면 해당 함수는 항상 Promise를 반환합니다. Promise가 아닌 값을 반환하더라도 이행 상태의 Promise로 값을 감싸 이행된 Promise가 반환되도록 합니다. 아래의 예시로 테스트해보면 f()와 t() 모두 같은 결과를 보여줍니다. async function f() { return 1; } f().then(alert); async function t() { return Promise.resolve(1); } t().then(alert); await awiat은 async 함수 안에서만 동작합니다. JavaScript는 await 키워드를 만나면 Promise가 처리될 때까지 기다립니다. 결과..
2022.04.20 -
Clustering Factor
Clustering Factor란 Clustering Factor란 Index의 테이블에 대한 정렬 정도를 의미합니다. 정렬 정도를 측정하기 위해 DB는 Index를 scan하는 동안 방문하게 되는 Table의 데이터 블록의 갯수로 나타냅니다. 이는 Clustering Factor가 높아지면 읽어들이는 Data Block의 갯수가 많아지기 때문에 Physical Read가 높게 나온다는 것을 의미합니다. Physical Read는 성능과 밀접한 관련이 있기 때문에 Clustering Factor를 최소화하는 것이 튜닝의 중요 요소 중 하나라고 할 수 있습니다. Good Clustering Factor Good Clustering Factor란 Index 순서와 Table의 순서가 거의 완벽하게 일치하는 ..
2022.04.17 -
Optimizer
Optimizer의 개념 Optimizer란 SQL 개발자가 SQL을 작성하고 실행할 때, Optimizer는 SQL을 어떻게 실행할 것인지를 계획합니다. Optimizer는 SQL 실행 계획을 수립하고 SQL을 실행하는 DBMS의 소프트웨어입니다. 동일한 결과가 나오는 SQL도 어떻게 실행하느냐에 따라 설능이 달라집니다. Optimizer 특징 Optimizer는 데이터 딕셔너리에 있는 오브젝트 통계, 시스템 통계 등의 정보를 사용해서 예상되는 비용을 산정합니다. Optimizer는 여러 개의 실행 계획 중에서 최저 비용을 가지고 있는 계획을 선택해서 SQL을 실행합니다. Optimizer의 필요성 개발자가 작성한 SQL문을 어떻게 실행하느냐에 따라 성능이 달라집니다. Optimizer가 비효율적으로 ..
2022.04.03