2025/02 15

2025년 2월 21일 기준 Cannot resolve method 'parseClaimsJws' in 'JwtParserBuilder' 해결방법 Jwts.parserBuilder()

JJWT 0.12.0부터는 Jwts.parserBuilder() 대신 Jwts.parser().build()를 사용해야 한다. 이전 버전(0.11.x)까지는 Jwts.parserBuilder()가 정상적으로 동작했지만, 0.12.x부터는 해당 메서드가 사라지면서 NoSuchMethodError 또는 Method not found 같은 오류가 발생한다.   최신 버전 기준 사용하는 코드 Claims claims = Jwts.parser() .verifyWith(secretKey) .build() .parseClaimsJws(token) .getBody();    잘못된 옛날 코드의 예시Jwts.parser().setSigningKey(secretKey) .p..

Spring 2025.02.21

250220 TIL Auth 구성 & 단위 테스트 하면서 자주 나오는 issue

Auth  JWT 구성 시 1️⃣ Jwts.parserBuilder() 사용 오류 해결 → Jwts.parser().verifyWith(secretKey).build() 적용2️⃣ JWT 검증 시 parseSignedClaims() 사용 (parseClaimsJws() 대신)3️⃣ Clock Skew 설정 추가하여 만료된 토큰 판별 오류 방지 단위테스트 시 나오는 이슈 1️⃣ Spring Security 충돌 방지 (@WithMockUser, @Import(SecurityConfig.class)) 2️⃣ Mocking 충돌 해결 → @MockBean 문제 방지 및 직접 API 호출 방식으로 변경 3️⃣ 테스트 실행 순서 독립성 유지 (@BeforeEach에서 사용자 미리 등록) 4️⃣  데이터 충돌 방지..

TIL 2025.02.20

20250220 TIL JWT 기반 인증 기능 및 단위 테스트 구현

✅ JWT 기반 인증 기능 및 단위 테스트 정리🔹 구현된 주요 기능1️⃣ 사용자 인증 & JWT 발급AuthControllerPOST /auth/login→ 로그인 요청 시, 유효한 사용자면 JWT 토큰 발급POST /auth/register→ 신규 사용자 회원가입2️⃣ JWT 토큰 생성 & 검증JwtUtilgenerateToken(username)→ HMAC SHA 키 기반 JWT 토큰 생성extractUsername(token)→ 토큰에서 사용자 정보(Username) 추출isTokenExpired(token)→ 토큰 만료 여부 확인 (예외 발생 방지)validateToken(token, username)→ 토큰 유효성 검증 (사용자명 일치 여부 포함)3️⃣ Spring Security & JWT ..

Could not autowire. No beans of 'PasswordEncoder' type found. BCryptPasswordEncoder 빈 주입 오류 간단하게 해결하기

@Service@RequiredArgsConstructor@Transactionalpublic class UserService { private final UserRepository userRepository; private final BCryptPasswordEncoder passwordEncoder; public UserResponse registerUser(UserRequest userRequest) { if (userRepository.findByUsername(userRequest.getUsername()).isPresent()) { throw new IllegalArgumentException("이미 사용 중인 아이디입니다."); }..

Spring 2025.02.19

로깅설정 DEBUG -> INFO 가 필요한 이유

로깅 설정을 DEBUG → INFO로 변경해야 하는 이유는 다음과 같음.1. 운영 환경에서 과도한 로그 방지DEBUG 레벨은 개발 및 디버깅을 위한 상세 로그를 남김.운영 환경에서 너무 많은 로그가 쌓이면 성능 저하 및 디스크 사용량 증가 문제가 발생할 수 있음.INFO 레벨로 설정하면 필요한 정보만 로깅하여 불필요한 성능 부담을 줄일 수 있음.2. 로그 가독성 향상DEBUG 로그는 너무 많은 세부 정보를 포함하여 중요한 로그가 묻힐 가능성이 있음.INFO 수준으로 설정하면 **중요한 애플리케이션 흐름(예: 서비스 시작, 주요 작업 완료 등)**만 기록되므로 가독성이 향상됨.3. 보안 및 개인정보 보호DEBUG 로그에는 내부 시스템 동작, SQL 쿼리, API 요청 데이터 등이 포함될 수 있음.운영 환경..

Spring 2025.02.12

NullPointerException이란 무엇이며, 어떻게 해결할 수 있나?

NullPointerException(NPE)란?NullPointerException(NPE)은 Java에서 null인 객체를 사용하려 할 때 발생하는 런타임 예외임.NPE가 발생하는 경우null 객체의 메서드를 호출할 때 String str = null; int length = str.length(); // NPE 발생null 객체의 필드에 접근할 때 class Example { String text; } Example ex = null; System.out.println(ex.text); // NPE 발생null인 배열 요소를 사용할 때 String[] array = new String[5]; array[0].length(); // NPE 발생null이 포함된 리스트나 맵을 사용할 때 List lis..

Spring 2025.02.12

IntelliJ 단축키 모음(Window & Mac)

일반도구 창 열기Alt + #[0-9]⌘0...⌘9각 단축키에 해당하는 도구 창 열기 모두 저장Ctrl + S⌘S모든 파일 저장 동기화Ctrl + Alt + Y⌘⌥YIntelliJ가 파일 시스템에서 최신 변경 사항을 처리하도록 강제 편집기 최대화 토글Ctrl + Shift + F12⌘⇧F12편집기 영역을 최대 크기로 토글 현재 파일 검사Alt + Shift + I⌥⇧I현재 프로필 기준으로 현재 파일 검사 테마 변경Ctrl + `⌃`IntelliJ 테마 변경 설정 열기Ctrl + Alt + S⌘,설정 창 열기 프로젝트 구조 열기Ctrl + Alt + Shift + S⌘;프로젝트 구조 창 열기 액션 검색 및 실행Ctrl + Shift + A⌘⇧A액션을 검색하여 실행 실행 취소Ctrl + Z⌘Z실행 취소 다시..

Basic 2025.02.10

엔터프라이즈 시스템(Enterprise System)이란?

엔터프라이즈 시스템(Enterprise System, ES)은 대규모 조직(기업, 정부, 기관 등)에서 운영되는 정보 시스템으로, 기업의 핵심 비즈니스 프로세스를 지원하고 통합하는 역할을 한다. 이러한 시스템은 다양한 부서(재무, 인사, 영업, 공급망 관리 등)가 원활하게 협업할 수 있도록 데이터와 프로세스를 통합하는 것이 목표다.1. 엔터프라이즈 시스템의 주요 특징① 대규모 데이터 처리기업 전반의 데이터를 관리하며, 수많은 사용자가 동시 접속 가능해야 함고가용성(High Availability) 및 확장성(Scalability) 필요② 복잡한 비즈니스 로직단순 CRUD 이상의 복잡한 트랜잭션, 권한 관리, 승인 프로세스 등을 포함③ 다중 사용자 지원수백~수천 명의 직원이 동시에 사용할 수 있도록 설계부..

Architecture 2025.02.07