카테고리 · Spring
카테고리에 포함된 10개의 글
총 1페이지 중 1페이지
[Kotlin Spring Boot] 롬복(Lombok) 버리기 - OAuth2 핸들러 리팩토링
본 글은 자바에서 코틀린으로 전환하며 롬복을 걷어내고 OAuth2 로그인 성공 핸들러를 리팩토링한 과정을 다룹니다. 주 생성자와 val을 활용해 의존성의 불변성을 보장하고, 안전한 캐스팅(as?)과 엘비스 연산자를 적용해 런타임 널(Null) 에러를 방지했습니다. 또한, if-else 표현식을 사용하여 불필요한 가변 변수를 제거함으로써 코드의 안정성과 가독성을 높였습니다.
[Kotlin Spring Boot] 데이터 정합성을 지키는 코틀린의 스마트함과 JPA Converter의 함정
자바에서 코틀린으로 JPA `AttributeConverter`를 마이그레이션할 때 엘비스 연산자(`?:`)를 사용해 `null`을 빈 문자열(`""`)로 치환하면 데이터베이스 정합성이 깨질 수 있습니다. 이를 해결하기 위해 제네릭 타입을 Nullable 타입(`String?`)으로 명시하고 안전한 호출 연산자(`?.`)를 활용하여 `null` 상태를 온전히 보존해야 합니다. 코틀린의 타입 시스템을 올바르게 신뢰하고 활용하는 것이 코드 단축보다 영속성 계층의 정합성을 지키는 데 중요합니다.
[Kotlin Spring Boot] 스프링 예외 처리 코드 다이어트와 코틀린의 스마트함
자바에서 코틀린으로 전역 예외 처리를 마이그레이션할 때는 어노테이션 누락을 방지하고 `::class` 문법을 정확히 매핑해야 합니다. 예외 발생 시 NullPointerException을 유발하는 `!!` 대신 엘비스 연산자(`?:`)를 활용하여 안전하게 기본값을 처리하는 것이 중요합니다. 또한 단일 표현식과 `.also` 스코프 함수 등을 활용해 보일러플레이트 코드를 줄임으로써 본질적인 예외 처리 로직에만 집중할 수 있습니다.
[Kotlin Spring Boot] Spring Properties에 스마트함 더하기
코틀린 스프링 부트는 자바에 비해 설정 객체 매핑 과정에서 뛰어난 안전성과 간결함을 제공합니다. `data class`와 `val`을 통해 보일러플레이트 없이 완벽한 불변성을 확보하고, 강력한 널 안전성으로 런타임 에러를 부팅 시점에 조기 차단합니다. 이처럼 언어적 강점과 프레임워크의 결합은 시스템의 예측 가능성을 극대화하여 더 안정적인 개발 환경을 제공합니다.
[Spring Data JPA] Spring Data JPA에서 새로운 Entity를 판단하는 방법
Spring Data JPA의 `save()` 메서드는 식별자 값을 바탕으로 새 엔티티 여부를 판단하여 `persist` 또는 `merge`를 실행합니다. 하지만 식별자를 직접 할당하면 새 엔티티임에도 기존 엔티티로 오판되어 불필요한 `SELECT` 쿼리(`merge`)로 인해 성능이 저하될 수 있습니다. 이를 해결하기 위해서는 `Persistable` 인터페이스를 구현하여 `isNew()` 판별 로직을 커스터마이징해야 합니다.
[Spring Boot | JPA] 바쁜 일정 속 복잡한 조회 쿼리 해결기
초기 외래 키 필드 중심의 설계를 객체 지향적 JPA 연관관계 매핑으로 리팩토링하여 쿼리 메서드와 JPQL을 통해 데이터 조회 생산성을 높였습니다. 동적 쿼리 해결을 위해 QueryDSL 도입을 시도했으나, 설정 지연과 일정 압박으로 인해 JPQL의 패치 조인을 활용하여 N+1 문제를 해결하는 방향으로 타협했습니다. 결과적으로 제약 조건 속에서 두 기술을 적절히 혼용해 프로젝트를 완수했으며, 미도입된 QueryDSL은 향후 해결할 기술 부채로 남겼습니다.
[Spring Boot] Redis를 활용한 Refresh Token Rotation(RTR) 구현
JWT의 토큰 탈취 위험을 해결하기 위해 빠른 속도와 TTL 기능을 갖춘 Redis를 활용하여 Refresh Token을 관리하는 것이 효과적입니다. 여기에 토큰 재발급 시 기존 토큰을 폐기하고 새 토큰을 발급하는 RTR 기법을 적용하여 보안을 대폭 강화할 수 있습니다. Spring Boot 환경에서 이를 연동하면 RTR 기반의 안전한 토큰 검증 및 재발급 시스템을 손쉽게 구현할 수 있습니다.
[Spring Boot] OAuth2 + JWT 완벽 가이드 (feat. Kakao Login)
본 글은 Spring Security 6와 OAuth2 Client를 활용해 카카오 로그인을 연동하고 서비스 전용 JWT를 발급하는 방법을 설명합니다. 카카오 로그인 성공 후 사용자 정보를 데이터베이스에 저장 및 갱신하는 비즈니스 로직의 구현 과정을 다룹니다. 최종적으로 인증 완료 시 자체 JWT를 생성해 리다이렉트하는 핸들러를 구성하고 이를 Security 설정에 통합하여 무상태 인증 시스템을 완성합니다.
[Spring Boot] Hibernate 6.x에서 UUIDv7 사용하기
UUIDv7은 시간 순 정렬이 가능한 128비트 식별자로, 분산 환경에서 고유성을 보장하고 DB B-Tree 인덱스의 삽입 성능을 대폭 개선합니다. Java 환경에서 커스텀 생성기로 구현하여 BINARY(16) 타입으로 저장하는 것이 공간 최적화에 유리하며, 조회 시에는 반드시 문자열이 아닌 UUID 객체 타입을 전달해야 합니다. 대규모 분산 시스템이나 대용량 트래픽 환경에서 높은 효율을 발휘하지만, 단순한 소규모 서비스에는 오버엔지니어링이 될 수 있어 상황에 맞는 도입이 필요합니다.
[Spring Boot] AOP, 모듈 분리와 무엇이 다른가?
AOP(관점 지향 프로그래밍)는 핵심 비즈니스 로직에서 반복되는 공통 부가 기능(횡단 관심사)을 분리하여 독립적인 모듈로 관리하는 프로그래밍 패러다임입니다. 핵심 로직이 부가 기능을 직접 호출해야 하는 OOP와 달리, AOP는 핵심 로직의 수정 없이 부가 기능을 자동으로 주입(Weaving)합니다. 이를 통해 '할 일(Advice)'과 '적용 위치(Pointcut)'를 정의한 Aspect로 공통 기능을 관리하여 코드의 가독성과 유지보수성을 극대화합니다.