JUnit Controller + Security 테스트
Spring Security를 사용하게 되면, Controller는 인증/인가와 밀접한 관계를 가지게 됩니다. 따라서 각 Controller마다 인증/인가 관련 테스트 코드를 통합해서 작성하기보다는, Security 설정을 불러와 Controller와 함께 테스트하는 방식이 테스트 관리면에서 효율적이라고 판단했습니다. 이 글에서는 Controll...
Spring Security를 사용하게 되면, Controller는 인증/인가와 밀접한 관계를 가지게 됩니다. 따라서 각 Controller마다 인증/인가 관련 테스트 코드를 통합해서 작성하기보다는, Security 설정을 불러와 Controller와 함께 테스트하는 방식이 테스트 관리면에서 효율적이라고 판단했습니다. 이 글에서는 Controll...
프로젝트에서 지도와 관련된 부스 정보를 저장할 때, 각 부스가 운영되는 일차에 해당하는 날짜 정보를 별도의 매핑 테이블에 저장할 필요가 있었습니다. 기존 구현 방식의 SQL문을 살펴보니, 하나의 부스를 저장할 때 운영 날짜가 N개 있다면, 부스 정보를 저장하는 1개의 Insert SQL 이외에도 운영 날짜와 부스를 연결하는 매핑 데이터를 저장하는...
애플리케이션 개발 초기에 AWS 클라우드를 이용해 처음 서비스를 배포했던 시점부터 현재의 인프라 구조에 이르기까지 어떤 고민과 이유로 인프라를 발전시켜 왔는지 단계적으로 설명하고, 최종적으로 구축된 AWS 아키텍처를 소개하겠습니다. 1. 초보 개발자의 인프라 구축 처음 서비스를 배포할 때, 지식이 부족하여 가장 쉽게 접근할 수 있는 ...
이전 글에서는 중단점 테스트를 통해 서버의 한계 지점이 동시 접속자 500명임을 확인했습니다. 이번 글에서는 500명 가상 사용자 환경에서의 자원 사용량을 분석하고 자원이 적절하게 사용되고 있는지, 혹은 성능이 현재가 최선의 상태인지 확인해 보고 개선해보겠습니다. 1. 초기 환경에 대한 부하 테스트 가장 먼저 저번 빌드 파일에서 변경...
1. 들어가며.. 예상치 못한 순간에 찾아온 트래픽 폭주는 개발자의 악몽과도 같습니다. 이전에 런칭했던 서비스는 일정에 쫓겨 부하테스트 없이 급하게 배포했고, 사용자가 몰렸을 때 속수무책으로 당할 수밖에 없었습니다. "다시는 같은 실수를 반복하지 말자." 새롭게 준비 중인 서비스에는 사용자 행동 패턴과 Google 애널리틱스를 바탕으로 부하테스트...
프로젝트 배포 환경에 부하테스트를 진행하기 위해 부하테스트 툴로 Locust를 결정하게 된 이유와 Locust를 사용하는 방법에 대하여 학습한 내용을 적어보았습니다. 1. 부하테스트 툴 선정 (Jmeter, k6, locust) 부하테스트를 진행하기 위해 가장 먼저 직면했던 과제는 적절한 테스트 도구의 선정이었습니다. 이전에 Jmeter를 ...
JWT를 사용하기로 결정하였을 때, jjwt 라이브러리를 선택하여 학습하고 공식문서의 가이드라인에 맞게 리팩토링하는 과정을 진행했습니다. github readme를 기반으로 학습하였는데 공식문서의 설명이 매우 친절하였으며 제가 사용할 JWT 토큰에 대한 이해도를 높일 수 있었습니다. 1. jjwt 선택 여러 JWT 라이브러리가 존재하...
AWS에는 많은 기능이 있다고 생각됩니다. 그 중, 실제로 애플리케이션 서버가 돌아가는 EC2를 어떤 기준으로 선택해야 하는지 알아보며 실제 제가 프로젝트에 사용했던 클라우드 구조의 비용을 낮춰보려고 합니다. 1. 요금 플랜 선택 (온디맨드, 절감형, 스팟) EC2를 구매하는 방법에는 시간,초 단위로 서버 자원을 지불하는 온디맨드...
진행했던 프로젝트에서 파일 업로드를 발전시킨 과정에 대해서 써보려고 합니다. 파일은 어떻게 전송되고, Spring Boot에서 어떻게 받아와서 어떤 식으로 저장하는지에 대해서 고려했던 점들과 Locust와 Prometheus + Grafana를 이용하여 파일 업로드 기능의 성능을 모니터링 해보려고 합니다. 1. 파일이 Client에서 서버...
프로젝트에서 로그인 기능을 OAuth2로 구현하는 도중, 인증 과정에서 JWT와 세션이라는 두 가지 선택지에서 어떤 기준으로 JWT를 선택하는지 고민해 보았습니다. 최종적으로 (HttpOnly=True, SameSite=Lax 쿠키 1개(Access, Refresh) + HttpOnlye=False 쿠키 1개 (CSRF 토큰) + XSS 검증...