문제&해결

문제&해결

Redis 도입하기 : CI/CD 파이프라인 수정기 (Blue/Green 무중단 배포)

서론팀 프로젝트에 OAuth 기능을 도입하며 Redis를 추가할 상황이 생겼습니다.⬇️ OAuth 소셜 로그인 안전하게 구현하기 (redirect_uri, redis, token)서론OAuth의 기본 개념 소개OAuth의 핵심은 인증과 인가를 구분하는 것인증 : 사용자가 자신의 신원을 증명하는 것ex) id, pw로 로그인인가: 인증된 사용자에게 특정 리소스에 대한 접근 권한을 부여shout-to-my-mae.tistory.com 이 과정에서 기존 인프라를 수정할 필요가 있었는데, redis 도입 과정에서 겪은 트러블슈팅을 정리했습니다. 기존 인프라 구성도커 기반의 컨테이너된 환경에서 운영되고 있습니다.Blue/Green 무중단 배포 전략이 사용되었습니다.CI/CD 파이프라인은 github action에..

문제&해결

OAuth 소셜 로그인 안전하게 구현하기 (redirect_uri, redis, token)

서론OAuth의 기본 개념 소개OAuth의 핵심은 인증과 인가를 구분하는 것인증 : 사용자가 자신의 신원을 증명하는 것ex) id, pw로 로그인인가: 인증된 사용자에게 특정 리소스에 대한 접근 권한을 부여하는 과정ex) access token인증과 인가를 구분함으로써 인증과 인가 로직을 따로 설정할 수 있습니다.인증은 2단계 인증으로, 인가는 세밀한 권한 제어 설정이 가능합니다.OAuth가 탄생한 이유는 보안 수준이 검증되지 않은 여러 플랫폼에 동일한 로그인 정보를 사용하는 위험을 줄이기 위해서입니다.신뢰할 수 있는 플랫폼이 인증과 권한 부여를 담당함으로써, 사용자는 더 안전하게 여러 서비스를 이용할 수 있게 됩니다. 로그인 방식1. 프론트엔드에서 직접 소셜 로그인 요청을 보내는 방식구현이 간단하고 빠..

문제&해결

테스트 작성 부담감 극복하기 - POJO와 통합 테스트 중심의 전략

서론저를 포함한 많은 개발하시는 분들이 테스트 코드 작성에 부담감을 느끼는 것 같습니다.그 중 한가지 이유로 여러 종류의 테스트(통합 테스트, 컨트롤러, 서비스, 도메인 등)를 모두 작성해야 한다는 부담감 때문입니다. 이 글에서는 제가 테스트 코드를 작성하면서 오해했던 부분들과 공부를 통해 깨달은 점들을 공유하고자 합니다.또한, 효과적인 테스트 작성을 위한 우선순위에 대해서도 작성해보았습니다. (부담감이 줄어들길 바라면서..!) 올바르지 않은 정보가 있을 수 있습니다. 댓글로 알려주시면 감사하겠습니다 🙇‍♀️ 테스트에 대한 오해와 깨달음테스트 기법에 대해 과도하게 집중했습니다.처음에는 다양한 테스트 기법을 배우는 데 집중했습니다.하지만 테스트를 작성하면서 깨달은 점은, 가장 중요한 것은 프로덕션 코드의..

문제&해결

Spring WebSocket 예외 처리 - @MessageExceptionHandler, StompSubProtocolErrorHandler

서론Spring WebSockets 라이브러리를 사용하면서 예외 발생시 클라이언트에게 적절히 응답을 보내줄 필요가 있었습니다. 그래서 공식문서, 깃허브, StackOverFlow 등 여러 방법을 찾아 예외 처리 코드를 구현했습니다. 레퍼런스가 많지 않아서 웹소켓 예외를 처리하는 적절한 방법을 정리해보았습니다. 웹소켓에서 발생하는 예외웹소켓에서 발생하는 예외는 크게 초기 연결 시 발생하는 인증 예외와 비즈니스 로직에 대한 검증 예외로 나눌 수 있습니다. 초기 연결시 발생하는 예외 - 인터셉터에서 발생하는 예외 처리웹소켓 초기 연결시 인터셉터에서 클라이언트로부터 전달받은 토큰을 검증하고, 토큰이 유효하지 않을 경우나 만료될 경우 예외를 발생시킵니다. (더 자세한 내용은 아래 글에서 확인해보세요 ! )http..

문제&해결

Spring WebSocket 애플리케이션에 Spring Security 적용하기(simpUser, Interceptor, handler)

서론프로젝트에서 실시간 채팅 기능을 구현하면서 WebSocket을 사용시 JWT를 인증을 처리하는 방법을 작성해보았습니다.혹시 글을 읽고 해결이 안되시는 분들은 댓글로 남겨주시면 도와드릴게요 !! 라이브러리 버전Spring boot 3.2.5Spring security 3.2.5jwt 0.12.3websocket 10.1.20spring security messaging 6.2.4 build.gradle implementation 'org.springframework.boot:spring-boot-starter-websocket' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'o..

문제&해결

[Test] @Mock, @InjectMocks 동작 원리 및 주의 사항

@Mock과 @InjectMocks @Mock Mock 객체(가짜 객체)를 생성한다. @InjectMocks Mock 객체를 해당 필드에 주입한다. @Mock 어노테이션이 붙은 필드와 일치하는 생성자를 찾아 객체를 자동으로 생성해준다. @InjectMocks 동작 원리 @Mock private MusicRepository musicRepository; @InjectMocks private MusicService musicService; @InjectMocks는 테스트 대상 클래스의 인스턴스를 생성하고, @Mock 필드를 생성자나 setter 메서드를 통해 주입한다. musicRepository라는 mock 객체를 musicService 생성자에 주입한다. 추가 매개변수가 있는 생성자 하지만 만약 @Inj..

문제&해결

브라우저 보안 메커니즘 : CORS 정책의 한계

CORS(Cross-Origin Resource Sharing) 교차 출처 리소스 공유라는 뜻이다. 한 출처에 있는 자원에서 다른 출처에 있는 자원에 접근하도록 한다. 출처(Origin) 동일 출처란 프로토콜 + host + port가 같은 것이다. path가 다른 것은 상관이 없다. 동일 출처 http://m1.com:80 http://m1.com/login http://m1.com 모두 같은 출처이다. 다른 출처 기준 : http://m1.com 프로토콜이 다르다 : https://m1.com host가 다르다 : http://www.m1.com 포트가 다르다 : http://m1.com:8080 다른 출처 요청의 위험성 , , 등이 웹에 등장하면서, 페이지 로딩 이후에 다른 출처로부터의 요청을 가져..

문제&해결

[Test] 비즈니스 로직 정확도 향상 전략 및 공통 테스트 유틸리티 클래스 활용

문제 문제 상황 @BeforeEach로 테스트 환경을 설정하는 메서드가 비즈니스 로직을 제대로 반영하지 못하는 문제가 발생한다. 예를 들어 회의 생성 로직에서는 단순히 회의 엔티티를 생성하는 것뿐만 아니라, 회의를 생성한 사람도 회의 참가자 리스트에 포함해야 한다. 하지만 이러한 로직이 테스트 환경 설정 메서드에 반영되지 않을 경우 실제 애플리케이션과 다른 상태에서 테스트가 진행되어 에러를 발생시킬 수 있다. 문제 분석 문제 발생 코드 - createTestMeeting @BeforeEach에서 호출되어 테스트 환경을 생성하는 메서드이다. public Long createTestMeeting(Member hostMember) { Meeting meeting = Meeting.builder() .hostM..

mint*
'문제&해결' 카테고리의 글 목록