JAVA52 OAuth2 인증 및 JWT 관련 트러블슈팅 정리 🔥 1. OAuth2 인증 시 네이버와 구글의 DefaultOidcUser 차이로 인한 문제 🛑 문제 상황네이버와 구글에서 받아오는 OAuth2 유저 객체가 다름.구글은 OIDC 기반이라 DefaultOidcUser를 반환하지만, 네이버는 OIDC 지원이 없어 DefaultOAuth2User를 반환함.CustomOAuth2UserService에서 DefaultOidcUser로 캐스팅 시 예외 발생. 💡 해결 방법OAuth2User 인터페이스를 기준으로 핸들링하는 팩토리 패턴을 적용.OAuth2UserFactory를 만들어 제공자별 OAuth2Attribute 변환. ✅ OAuth2UserFactory 구현@Component@RequiredArgsConstructor@Slf4jpublic class.. JAVA/Spring Security 2025. 2. 20. Django vs Spring 검증 기능 비교 - 무엇이 더 편할까? 백엔드 개발을 하다 보면 입력값을 검증하는 기능이 필수적이다. Django와 Spring은 각각 강력한 검증 기능을 제공하지만, 사용 방식에는 차이가 있다. 특히 Django는 검증 메시지를 자동으로 생성해 주는 반면, Spring은 대부분 커스텀해야 한다. 이번 글에서는 두 프레임워크의 검증 기능을 비교해 보겠다. 1. Django의 검증 기능Django에서는 serializer.is_valid()를 호출하면 자동으로 필드별 검증이 수행된다. 필드 타입과 제약 조건에 따라 적절한 오류 메시지가 생성되므로, 개발자가 직접 메시지를 작성할 필요가 없다.예제 코드from rest_framework import serializersclass UserSerializer(serializers.Serializ.. JAVA 2025. 2. 17. Querydsl로 효율적으로 JPA 조건 쿼리 작성하기 Querydsl로 효율적으로 JPA 조건 쿼리 작성하기 JPA를 사용할 때, Criteria API가 기본적으로 제공되지만 실무에서는 복잡하고 가독성이 떨어지는 문제로 인해사용이 어렵다. 이를 해결하기 위해 많은 개발자들이 **Querydsl**을 선택한다. Querydsl은 타입 세이프하며,가독성이 뛰어난 쿼리 작성 방식을 제공한다. Querydsl이란? Querydsl은 Java 기반 ORM 프레임워크에서복잡한 동적 쿼리를 간결하고 가독성 있게 작성할 수 있도록 돕는 라이브러리다. JPQL 기반의 쿼리를 Java 코드로 작성하며, 컴파일 시점에 오류를 검출할 수 있어 안정성을 높인다. Querydsl을 사용하는 이유 1. 가독성Criteria API는 메서드 체이닝 방식으로 .. JAVA/Spring 2025. 1. 21. PersistenceContext와 PersistenceUnit의 차이 / @Transactional(readOnly = true)의 효과 PersistenceContext와 PersistenceUnit의 차이PersistenceContext란?PersistenceContext는 JPA에서 EntityManager를 관리하는 범위를 의미한다. 쉽게 말해, 데이터베이스와의 작업을 관리하는 영속성 컨텍스트를 나타낸다.특징영속성 컨텍스트는 엔티티의 생명 주기를 관리한다.1차 캐시를 사용하여 성능을 최적화하며, 동일한 트랜잭션 내에서 동일한 엔티티를 조회하면 데이터베이스를 재조회하지 않는다.@PersistenceContext 어노테이션을 통해 주입받을 수 있다.import jakarta.persistence.EntityManager;import jakarta.persistence.PersistenceContext;public class UserSe.. JAVA/Spring 2025. 1. 17. @RequiredArgsConstructor와 @AllArgsConstructor 비교 [spring 의존성 주입] Spring Dependency Injection: @RequiredArgsConstructor와 @AllArgsConstructor 비교 스프링 프레임워크에서 의존성 주입(Dependency Injection)은 객체 간 결합을 줄이고 코드의 유연성과 테스트 용이성을 높이는 중요한 패턴이다. 스프링에서 의존성 주입 방법은 다양하며, 특히 최근에는 생성자 주입 방식이 트렌드로 자리 잡았다. 이 글에서는 @RequiredArgsConstructor, @AllArgsConstructor, 그리고 @Autowired를 사용한 주입 방식을 비교하고, Spring Data JPA와 관련된 주요 내용을 다룬다. 1. 의존성 주입 방법의 종류1-1. 필드 주입(Field Injection)@Autowiredpriv.. JAVA/Spring 2025. 1. 17. 관계별 "연관관계 편의 메서드" 적용 가능성 1.1. ManyToOne 관계ManyToOne 관계에서는 주로 자식 엔티티에서 부모 엔티티를 참조한다.이 경우, 자식 엔티티가 연관관계의 주인이므로 편의 메서드를 작성할 수 있다.@Entitypublic class Order { @ManyToOne @JoinColumn(name = "member_id") private Member member; public void setMember(Member member) { this.member = member; member.getOrders().add(this); // 양방향 관계 설정 }} 1.2. OneToMany 관계OneToMany는 기본적으로 양방향 관계일 때 주인이 아닌 엔티티가 되므로, 주로 읽기.. JAVA/메서드 정리 2025. 1. 15. JPA 연관관계 편의 메서드, 사용하면 어떤 이점이 있을까? JPA 연관관계 편의 메서드, 꼭 필요한가?JPA를 사용하다 보면 엔티티 간의 관계를 설정하는 과정에서 연관관계 편의 메서드라는 개념이 자주 등장한다. 연관관계 편의 메서드는 양방향 연관관계를 보다 효과적으로 관리하기 위해 사용된다. 이 글에서는 연관관계 편의 메서드의 개념, 필요성, 장점, 구현 방식, 그리고 예제를 통해 이를 이해해보고, 추가로 알아두면 좋은 내용까지 함께 다뤄본다. 1. 연관관계 편의 메서드란?연관관계 편의 메서드는 JPA에서 양방향 연관관계의 일관성을 유지하기 위해 제공되는 메서드를 말한다. 양방향 관계에서는 두 엔티티 간의 관계를 모두 설정해주어야 하는데, 편의 메서드를 사용하면 한 곳에서 관계를 관리할 수 있어 편리하다.예를 들어, Order와 Member 간의 관계를 .. JAVA/메서드 정리 2025. 1. 15. Spring WebSocket의 기본 개념과 [클라이언트-서버] 연결 Spring WebSocket의 기본 개념과 클라이언트-서버 연결 WebSocket은 서버와 클라이언트 간의 양방향 실시간 통신을 가능하게 하는 기술이다. 이를 통해 클라이언트와 서버는 연결이 유지되는 동안 자유롭게 데이터를 주고받을 수 있다.Spring에서는 @Configuration과 TextWebSocketHandler를 사용해 WebSocket 서버를 간편하게 구축할 수 있다. 이번 포스트에서는 Spring WebSocket의 주요 개념과 이를 통해 어떻게 클라이언트 연결을 관리하고 메시지를 전송하는지에 대해 다뤄본다. 1. WebSocketSession과 TextMessageWebSocketSessionWebSocketSession은 WebSocket 연결을 추적하고 관리하는 핵심 객체.. JAVA/Spring 2025. 1. 1. Java에서 외부 프로세스 실행: Runtime.getRuntime().exec() 메서드 사용법 Java에서 외부 프로세스 실행: Runtime.getRuntime().exec() 메서드 사용법Java는 내장된 Runtime 클래스를 통해 외부 프로세스를 실행할 수 있다.이 메서드를 사용하면 Java 프로그램 외부에서 명령어를 실행할 수 있으며, 외부 시스템 명령을 실행한 결과를 처리할 수 있다. 주로 파일 컴파일이나 시스템 명령어 실행을 자동화할 때 유용하다. Runtime.getRuntime().exec() 메서드exec() 메서드는 주어진 명령어를 외부 프로세스에서 실행하는 역할을 한다.이를 통해 운영 체제의 명령줄 명령어를 Java 프로그램에서 실행할 수 있다. 예를 들어, Java 파일을 컴파일하는 javac 명령어를 실행할 수 있다. 예시 코드아래 예시 코드는 Java 프로그램에서.. JAVA/메서드 정리 2024. 12. 31. Jackson과 Lombok @Data 어노테이션을 이용한 JSON 데이터 처리 Jackson과 Lombok @Data 어노테이션을 이용한 JSON 데이터 처리자바에서 JSON 데이터를 자바 객체로 변환할 때는 Jackson 라이브러리를 많이 사용한다. Jackson은 ObjectMapper를 사용하여 JSON 데이터를 쉽게 자바 객체로 변환할 수 있게 해준다. 이번 포스팅에서는 Jackson을 활용해 JSON 데이터를 객체로 변환하는 방법과, Lombok의 @Data 어노테이션을 사용하여 자동으로 생성된 메서드들이 어떻게 유용하게 작동하는지 살펴보겠다. 또한, 여러 클래스에 @Data 어노테이션을 사용할 경우에도 어떻게 정확하게 값을 추출할 수 있는지에 대해 설명할 것이다. Jackson을 이용한 JSON 데이터 변환Jackson은 JSON 데이터를 자바 객체로 변환하는 데 매.. JAVA/Spring 2024. 12. 31. Java에서 ProcessBuilder와 클래스패스 설정에 대한 이해 Java에서 ProcessBuilder와 클래스패스 설정에 대한 이해Java 프로그램을 외부에서 실행할 때, ProcessBuilder를 사용하여 외부 프로세스를 실행하는 경우가 많다. 하지만, 외부 프로세스에서 클래스를 로드할 때 클래스패스(classpath) 설정과 실행 디렉토리가 일치하지 않으면 예상치 못한 문제가 발생할 수 있다. 특히, java 명령어를 통해 실행할 때, 클래스 파일을 찾는 경로에 대한 이해가 중요하다. 1. 클래스패스 설정의 중요성java 명령어는 클래스를 찾기 위해 클래스패스를 사용한다. 클래스패스는 -cp 옵션을 통해 지정할 수 있다. 이때, 클래스패스를 설정하는 방식에 따라 외부 프로세스에서 클래스를 올바르게 로드할 수 있느냐의 차이가 발생한다. 예를 들어, -cp t.. JAVA/Spring 2024. 12. 30. Spring 의존성 주입: 생성자 주입과 수정자 주입의 동작 원리 Spring 의존성 주입: 생성자 주입과 수정자 주입의 동작 원리Spring을 사용하다 보면 의존성 주입(Dependency Injection)이라는 개념을 반드시 접하게 된다. 이는 객체 간의 의존성을 관리하고 설정하는 강력한 기능으로, 코드의 유연성과 테스트 가능성을 크게 향상시킨다. Spring에서는 의존성을 주입하는 방식으로 생성자 주입(Constructor Injection), 수정자 주입(Setter Injection), 그리고 **필드 주입(Field Injection)**을 제공한다. 이번 글에서는 생성자 주입과 수정자 주입이 함께 사용될 경우의 동작 원리와 각 주입 방식의 특징을 설명한다. 의존성 주입 방식의 종류디테일한 공부를 원하면 아래 링크도 참고하면 좋다!https://min.. JAVA/Spring 2024. 12. 21. 이전 1 2 3 4 5 다음