문제 해결 과정 (Problem Solving Journey) 4

GitHub Actions CI/CD 파이프라인 구축 중 발생한 문제와 해결 방법

최근 프로젝트에서 GitHub Actions를 활용하여 CI/CD 파이프라인을 구축하는 과정에서 다양한 문제를 겪었습니다. 이 글에서는 그 과정에서 마주친 문제들과 해결 방법, 관련 개념 및 유사 명령어를 공유합니다.문제 1: 원격 리포지토리와 로컬 저장소의 히스토리 충돌문제 상황로컬 저장소를 GitHub 리포지토리에 푸시할 때 다음과 같은 오류가 발생했습니다:fatal: refusing to merge unrelated histories원인 분석Git은 기본적으로 관련성이 없는 두 저장소의 히스토리를 병합하지 않도록 설계되었습니다. 이는 실수로 다른 프로젝트의 히스토리를 병합하는 것을 방지하기 위함입니다.해결 방법--allow-unrelated-histories 옵션을 사용하여 히스토리를 강제 병합할 ..

JWT 기반 인증 시스템 개선: 보안과 성능 사이의 균형

들어가며안녕하세요. 이번 포스트에서는 Spring Security와 JWT를 활용한 인증 시스템을 개선하는 과정에 대해 다뤄보겠습니다. 기존 시스템의 문제점을 파악하고, 이를 단계적으로 개선해 나간 과정을 다루어보겠습니다.기존 시스템 분석(1) 시스템 구조기존 인증 시스템은 다음과 같은 구조로 되어 있었습니다:- JwtTokenProvider: JWT 토큰 생성 및 검증- CustomAuthenticationProvider: 사용자 인증 처리- JwtAuthenticationFilter: 요청별 토큰 검증(2) 발견된 문제점들단일 토큰 사용의 한계토큰 탈취 시 즉각적인 대응이 어려움토큰 만료 시 사용자가 재로그인해야 하는 불편제한적인 보안 기능기본적인 토큰 검증만 수행비정상적인 접근에 대한 제어 부재운영..

Spring Data JPA에서 @Param 어노테이션으로 매개변수 바인딩 문제 해결하기

Spring Data JPA를 사용하여 개발을 진행하다 보면 때때로 예상치 못한 문제에 부딪힐 수 있습니다. 최근  겪은 문제 중 하나는 JPA 리포지토리 메서드에서 매개변수 바인딩과 관련된 것이었습니다. 이 글에서는 그 문제의 발생 원인과 해결 과정, 그리고 @Param 어노테이션의 중요성에 대해 설명하고자 합니다.문제 상황다음과 같은 JPA 리포지토리 메서드를 가지고 있었습니다:@Query("SELECT MAX(er.score) FROM ExerciseRecord er WHERE er.member.id = :memberId AND er.exercise.id = :exerciseId")Integer getPersonalBestScore(Long memberId, Long exerciseId);이 메서드..

JWT 토큰 발급 로그인에서 순환 참조 문제 해결

# 스프링 부트에서 순환 참조 문제 해결과 JWT 인증 시스템 구축기 스프링 부트로 프로젝트를 진행하면서 순환 참조(circular reference) 오류와 로그인 실패 문제를 겪었습니다. 이 글에서는 문제의 원인을 파악하고 해결해 나간 과정을 공유하고자 합니다. 특히, 스프링 시큐리티와 JWT를 활용한 인증 시스템을 구축하는 과정에서의 주요 개념과 교훈들을 다룰 예정입니다. 1. 순환 참조 오류와 의존성 주입 방식 개선 - 순환 참조란? 순환 참조는 두 개 이상의 빈(bean)이 서로를 참조하는 경우에 발생하는 문제입니다. 스프링 부트에서는 이런 상황이 발생하면 애플리케이션 실행 시점에 오류가 발생합니다. 저도 프로젝트에서 비슷한 문제가 발생했는데, 이는 필드 주입 방식으로 인해 의존성이 꼬여 발생한..