Spring16 Public Key Retrieval is not allowed 문제가 발생하는 원인과 해결방법 스프링 애플리케이션을 개발할 때, 데이터베이스 연결 설정 중 "Public Key Retrieval is not allowed" 문제가 발생할 수 있다. 이 문제는 주로 MySQL 데이터베이스를 사용할 때 발생하며, MySQL 서버의 보안 설정과 관련이 있다. 이 글에서는 이 문제의 원인과 해결 방법을 예시와 함께 상세하게 설명하겠다.문제 원인"Public Key Retrieval is not allowed" 문제는 MySQL 서버가 클라이언트로부터 공개 키를 요청하는 것을 허용하지 않기 때문에 발생한다. 이는 MySQL 서버의 caching_sha2_password 인증 방법과 관련이 있으며, MySQL 8.0 이상 버전에서 기본적으로 사용된다. 이 인증 방법은 보안을 강화하기 위해 도입되었지만, 클라.. 2025. 3. 23. Spring Boot 3 + Swagger Codegen 적용하기 Swagger Editor를 활용하여 Spring Boot 3와 Gradle 환경에서 OpenAPI Specification (OAS) YAML 파일을 작성하고 이를 기반으로 API를 구현하는 방법을 단계별로 설명하겠다. 이 과정은 Swagger Editor를 사용하여 YAML 파일을 작성하고, Spring Boot 프로젝트에서 이를 활용하는 방법을 포함한다.1. Swagger Editor를 활용해서 openapi.yaml 파일생성하기Swagger Editor( https://editor.swagger.io/ )에 접근하면 YAML 파일로 작성이 가능하고 즉시 문법확인과 예시를 확인할 수 있다. 2. Swagger Editor에서 YAML 파일 작성 - 기본 구조 설정 Swagger Editor를 열면 .. 2024. 12. 27. [OAS] Swagger Codegen 필요성 (With. Spring Boot) 📗 설계 우선 접근 방식을 적용하기 위한 OAS! 설계 우선 접근 방식(Design-First Approach)은 API 개발 과정에서 API의 설계를 먼저 정의하고, 이를 기반으로 구현을 진행하는 방법론이다. 이 접근 방식은 API의 명확한 정의와 문서화를 통해 개발자 간의 커뮤니케이션을 원활하게 하고, API의 일관성과 품질을 높이는 데 중점을 둔다. OpenAPI Specification(OAS)은 RESTful API를 명확하게 정의하고 문서화하기 위한 표준화된 형식이다. OAS는 API의 엔드포인트, HTTP 메서드, 요청 및 응답 형식, 데이터 모델 등을 JSON 또는 YAML 형식으로 기술할 수 있게 해준다. OAS는 API의 설계, 개발, 테스트, 문서화, 유지보수 등 다양한 단계에서 .. 2024. 12. 26. 양방향 @OneToOne 문제점과 해결 방법 양방향 @OneToOne 연관관계의 문제점 필자는 Spring Data JPA를 사용할 때, 양방향 @OneToOne 연관관계를 사용하는 걸 굉장히 불편해했다. 왜냐하면 부모 엔터티에서 조회하는 쿼리를 발생시키면, 자식 엔터티와 @OneToOne의 FetchType이 LAZY 연관관계 상태로 설정했음에도 불구하고, 자동으로 자식 엔터티를 SELECT 하는 추가 SQL문이 발생했기 때문이다. 해당 문제점 때문에 부모 엔터티만 필요한 경우에도 자식 엔터티를 가져오면서 리소스 낭비와 성능 저하를 초래했다. 그래서 어쩔 수 없이 양방향 @OneToOne 연관관계가 필요할 때, 비즈니스 로직을 고려해서 최대한 호출이 되지 않을 만한 쪽을 부모 엔터티로 설정하려고 했다. 원인 지연 로딩으로 설정해도 항상 즉시 로딩.. 2024. 10. 30. 파라미터 값을 테스트하는 Mockito ArgumentCaptor ArgumentCaptor는 Mockito 라이브러리에서 제공하는 기능으로, 메서드 호출 시 전달된 인수를 캡처하고 검증하는 데 매우 유용하다. 이를 통해 테스트 중에 메서드가 호출될 때 전달된 인수를 확인할 수 있다.ArgumentCaptor란?ArgumentCaptor는 Mockito 라이브러리에서 제공하는 클래스 중 하나로, 메서드 호출 시 전달된 인수를 캡처하여 나중에 검증할 수 있게 해 준다. 이는 특히 메서드 호출 시 전달된 인수가 예상한 대로 전달되었는지 확인하고자 할 때 유용하다. 예를 들어, 특정 메서드가 호출될 때 전달된 객체의 상태나 값을 검증하고 싶을 때 사용할 수 있다.사용법1. 의존성 추가프로젝트에 Mockito 라이브러리를 추가해야 한다. Maven을 사용하는 경우 pom.xm.. 2024. 10. 1. XSS 공격 방지를 위한 필수 도구 Jsoup clean 사용법과 예시 웹 애플리케이션을 개발할 때, 보안은 항상 최우선 과제 중 하나이다. 특히, 크로스 사이트 스크립팅(XSS) 공격은 매우 흔한 보안 취약점 중 하나로, 이를 방지하기 위한 적절한 조치가 필요하다. Jsoup은 Java 기반의 HTML 파싱 라이브러리로, HTML 문서에서 데이터를 추출하거나 HTML을 조작하는 데 유용하다. 특히, Jsoup의 clean() 메서드는 HTML 문서에서 악성 스크립트나 불필요한 태그를 제거하여 안전한 HTML을 생성하는 데 사용된다. 해당 포스트에서는 Jsoup의 clean() 메서드 사용법과 Spring 기반 환경에서의 활용 예시에 대해 상세히 설명한다.XSS란 무엇인가?XSS(Cross-Site Scripting)는 공격자가 악성 스크립트를 웹 페이지에 삽입하여 다른 사.. 2024. 9. 24. Transaction silently rolled back because it has been marked as rollback-only 트랜잭션 처리가 필요한 메서드의 코드에서 Runtime 예외가 발생하고, 그 메서드를 호출하는 메서드에서 해당 부분을 예외 처리를 무시하는 방식으로 넘겼더니 실행 과정에서 "Transaction silently rolled back because it has been marked as rollback-only" 오류가 발생했다. 이 오류는 트랜잭션이 롤백 상태로 표시되어 커밋되지 않고 자동으로 롤백되었음을 의미한다. 이 문제는 주로 트랜잭션 관리와 관련된 설정이나 코드에서 발생할 수 있다. 이 포스트에서는 이 문제의 주요 원인과 해결 방법을 상세히 설명한다. 문제 원인1. 예외 발생트랜잭션 내에서 RuntimeException이나 Error가 발생하면 Spring은 기본적으로 트랜잭션을 롤백한다. 이는 .. 2024. 9. 12. 비동기 환경에서 Spring Security 로그인 정보를 유지시키는 방법 Spring에서는 비동기 처리를 위해 @Async 어노테이션이나 CompletableFuture를 자주 사용한다. 하지만 비동기적으로 실행되는 코드에서는 SecurityContextHolder에 저장된 인증 정보(Authentication)가 기본적으로 전파되지 않기 때문에 보안 컨텍스트를 유지하는 것이 문제가 될 수 있다. 해당 포스트에서는 이 문제를 해결하는 방법을 예제와 함께 설명한다.왜 비동기 환경에서 SecurityContext가 유지되지 않을까?Spring Security는 현재 스레드에 보안 컨텍스트를 저장한다. 하지만 @Async나 CompletableFuture를 사용하면 새로운 스레드가 생성되어 비동기 작업이 수행된다. 이때, 기본적으로 새로운 스레드에는 원래 스레드의 보안 컨텍스트가 .. 2024. 9. 2. 이전 1 2 다음