분류 전체보기 451

[V3] 캐싱을 통한 쿼리 줄이기

로그를 살펴 보던 중, 글을 등록, 수정, 삭제 할때 마다 Principal을 통해 인증 정보를 가져오기 위해 query가 발생하는 것을 확인할 수 있었다. 수정 빈도가 매우 적은 user 정보를 매번 db에 요청하는 것은 불필요한 부하라는 생각이 들어 user 정보를 캐싱하고 성능 개선이 어느정도 되었는지를 부하 테스트 해보기로 하였다. 캐싱 전 테스트 테스트 종류: 1) Smoke 테스트 VUser: 1 ~ 2 최소의 부하로 시나리오를 검증한다. 2) Load 테스트 평소 트래픽과 최대 트래픽일 때 VUser를 계산 후 시나리오를 검증한다. 3) Stress 테스트 최대 사용자 혹은 최대 처리량인 경우의 한계점을 확인하는 테스트이다. 점진적으로 부하를 증가시켜본다. 테스트 이후 시스템이 수동 개입 없..

부트모아 2024.01.15

[V3] 부하 테스트 세팅

부트모아 사이트의 부하를 테스트 해보고 테스트 바탕으로 성능 개선을 하고자 nGrinder를 사용해 보기로 하였다. https://github.com/naver/ngrinder/releases Releases · naver/ngrinder enterprise level performance testing solution. Contribute to naver/ngrinder development by creating an account on GitHub. github.com 최신 버전의 controller를 다운 받고 java -jar ngrinder-controller-{version}.war --port=8300 실행시켜 주었다. 그 다음, localhost:8300으로 접속해 초기 id, passwo..

부트모아 2024.01.13

[V2] Vault를 사용한 보안 강화

웹 애플리케이션 취약점 중에서 빈도가 많이 발생하는 10가지를 선정한 문서인 OWASP TOP 10을 보던 중 misconfiguration에 대해 알게 되었다. 내 프로젝트에도 보안상 취약한 설정이 있나 살펴보던 중 DB 접근 정보가 github에 그대로 노출 되어있는 것을 확인하였다. 이와 같은 "시크릿"을 어떻게 안전하게 저장할 수 있을까를 살펴보던 중 Hashicorp vault를 알게돼 내 프로젝트에 적용해 보기로 하였다. Hashicorp vault란? vault를 이해하기 전, "시크릿"이라는 개념에 대한 이해가 필요하다. 시크릿은 시스템에 접속할 때 필요한 인증과 인가 정보를 부여하는 모든 것을 의미한다. 대표적인 예시로 계정 비밀번호, DB 인증정보, TLS 인증서가 있다. 이러한 "시크..

부트모아 2024.01.12

[파이썬] Pro 수식 최대화

문제 https://school.programmers.co.kr/learn/courses/30/lessons/67257?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 코드 from copy import deepcopy def operation(num1, num2, op): if op == '+': return str(int(num1) + int(num2)) if op == '-': return str(int(num1) - int(num2)) if op == '*': return str(int(num1) * int(num2))..

문제풀이/기타 2024.01.12

[V2] Spring Security CSRF

부트모아 취약점을 분석 중 대표적인 클라이언트 사이드 취약점인 CSRF를 발견하였다. CSRF 사용자가 자신의 의지와는 상관없이 공격자가 의도한 수정, 삭제, 등록 행위 등 특정 웹사이트에 요청하게 하는 공격 공격자가 위와 같은 스크립트가 포함된 게시글을 작성했을때 위와 같은 게시글이 작성되었다. 관리자는 해당 버튼이 홈페이지 링크인줄 알고 확인차 눌렀더니 관리자의 의도와 상관없이 관리자 이름으로 공지사항이 작성되었다. 대응 요청에 대한 검증을 하기 위해 CSRF 토큰을 직접 만들려 했으나, Spring Security 문서를 읽던 중 관련 기능이 이미 구현되어 있다는 것을 알고 프로젝트에 적용해 보기로 하였다. tokenRepository.loadToken(request) 요청 세션에서 CSRF Tok..

부트모아 2024.01.11

[파이썬] Pro 삼각 달팽이

문제 https://school.programmers.co.kr/learn/courses/30/lessons/68645?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 코드 direction={0:(1,0), 1:(0,1), 2:(-1,-1)} def solution(n): answer = [] arr=[[0]*i for i in range(1,n+1)] x,y=-1,0 num=1 for i in range(n): for j in range(i,n): dx,dy=direction[i%3] x+=dx y+=dy arr[x][y]..

문제풀이/기타 2024.01.11