0. 배경프로젝트 진행 중, 프론트엔드 개발자분이 로그인 API가 Swagger 문서에 없다는 말씀을 하셨고, 확인해보니 Swagger 문서에 API가 존재하지 않았습니다.이번 프로젝트에서는 Security를 활용하여 인증/인가를 구현하였고, Springdoc은 Spring Security 필터를 자동으로 등록해주지 않습니다./login 엔드포인트를 문서에서 확인하기 위해서는 추가 설정이 필요합니다. Swagger를 보다 효율적으로 활용하기 위한 과정입니다. 1. 문제점이 존재하는 방법 - yml 설정 파일로 end-point 추가https://springdoc.org/#how-can-i-make-spring-security-login-endpoint-visible OpenAPI 3 Library for..
0. 배경웹소켓을 이용하여 실시간 매칭 시스템을 구현하고 동시에 여러 사용자가 접근하는 테스트를 하는 여러 에러를 겪었고, 서비스에 큰 문제가 생길 수 있기 때문에 해결하는 과정을 정리하였습니다.1. 동시성 문제가 어떻게 발생할까동시성 문제가 발생하는 상황을 시뮬레이션 해보겠습니다. 이 상황에서 여자 1명이 대기 중이고, 남자 2명이 동시에 웹소켓 매칭 시스템에 접속하면 어떤 문제가 발생할 수 있는지 설명하겠습니다.1.1 상황 설정1. 여자 사용자 A가 매칭 대기 중2. 남자 사용자 B, C가 동시에 웹소켓 매칭 시스템에 접속3. 시스템은 1:1 매칭을 해야 한다.1.2 동시성 문제 시나리오대기 상태 [A]이며 B, C가 동시에 매칭 요청을 보냅니다. 사용자 B의 매칭 요청 처리 -> A를 선택하여 B와..
0. 배경Spring에 내장된 Simple Message Broker는 서버 내부 메모리에서 동작합니다.메세지 발행 시 서버가 다운 되어 메세지 전송을 실패하게 된다면, 인메모리 기반으로 동작하는 메세지 큐로 인해 메세지를 유실할 가능성이 높고, scale-out 상황에서 메세지를 못 받는 경우가 발생하였습니다. 메세지를 받지 못하는 상황을 개선하기 위한 과정입니다. 1. 서버가 다른 경우 메세지 수신이 안 되는 상황2개의 서버가 존재하고 각각 다른 서버에서 구독을 하고 있다는 상황을 가정하였습니다.내장된 SimpleMessageBroker를 사용하면 스프링 부트 서버의 내부 메모리에서 동작하게 됩니다. 서버간 채팅을 공유할 수 없는 상태입니다.서버가 다른 경우 메세지를 수신할 수 없습니다. 채팅 전용 ..
배경 현재 제가 진행 중인 프로젝트 Test 상황입니다. Persistence Layer와 Business Layer에서 스프링을 통으로 띄워서 통합테스트를 진행했습니다. 그리고 기존 Presentation Layer 테스트를 작성할 때 같은 환경에서 테스트를 진행했습니다. 이러한 방식은 서버를 띄우는 시간과 사용 중인 Bean을 모두 불러오고 중복된 테스트 작성이 발생하기 때문에 시간이 오래 걸리고 비효율적인 테스트 작성입니다. Presentation Layer 테스트 범위에 대한 생각과 리팩토링 과정을 작성하겠습니다. Presentation Layer에서 무엇을 테스트할까? 진행 방식 Presentation Layer를 테스트 할 땐, Persistence Layer와 Business Layer를 M..
배경 토큰을 어디에 저장하는 것이 좋은지 찾다가 관련된 보안 내용이 많아서 정리하게 되었습니다. Cookie를 이용하여 XSS 공격을 막는 방법은 작성하였고, CSRF 공격에 대한 방어가 필요하기 때문에 추가 학습 후 작성하였습니다. CSRF 공격에 대해 알아본 후, 어떤 방법으로 토큰을 효율적으로 관리하고 CSRF 공격을 방어하는지에 대해 알아보겠습니다. http.csrf(AbstractHttpConfigurer::disable) CSRF란? 사이트 간 요청 위조(Cross-site request forgery, CSRF)는 웹사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격을 말한다. - 위키백과 일반 ..