스프링 부트 의존성 버전문제로 인한 오류 해결 스프링 부트에서 프로젝트를 실행하는데 잘되던 의존성 주입이 갑자기 안 되는 문제가 발생했다. 1. 기존 코드 기존에 Elasticsearch와 통신하기 위해 추가한 의존성이다. plugins { id 'java' id 'org.springframework.boot' version '2.7.9' } dependencies { ... implementation 'org.springframework.data:spring-data-elasticsearch:4.4.0.RELEASE' } 2. 에러 메시지 3. 문제 해결 Spring Boot는 의존성 버전 관리를 자동으로 해주기 때문에 아래처럼 코드를 수정하면 자동으로 버전을 관리한다. //elasticsearch i..
Spring/Spring Boot
RequestDTO로 Controller에서 요청받을 때 @RequestBody 어노테이션 작성해야 하는 경우와 작성하지 않아야 하는 경우 @RequestBody 어노테이션을 작성해야 하는 경우 JSON/XML 요청 처리: 클라이언트가 'application/json' 또는 'application/xml' 형식으로 복잡한 데이터 구조를 전송할 때, Spring은 이를 RequestDTO 객체로 매핑하기 위해 @RequestBody를 사용한다. 복잡한 데이터 구조: HTTP 요청의 본문이 복잡한 객체 구조를 가지고 있을 때, @RequestBody를 사용하여 이러한 복잡한 구조를 자동으로 Java 객체로 변환한다. @RequestBody 어노테이션을 작성하지 않아야 하는 경우 폼 데이터 처리: 클라이언트가..
이해하기 쉬운 CORS 및 API 개발 안내서 (Access-Control-Allow-Headers) 웹 개발을 하다 보면 'CORS'라는 용어를 자주 접하게 된다. CORS 관련 에러도 자주 마주치다 보니 한번 제대로 이해해 보는 시간을 가져보자! CORS는 Cross-Origin Resource Sharing의 약자로, 한 출처에서 불러온 웹 페이지가 다른 출처의 리소스와 상호 작용할 수 있게 하는 보안 메커니즘이다. 이 글에서는 CORS가 왜 중요한지, 어떻게 작동하는지, 그리고 실제 API 개발에 어떻게 적용되는지를 알아보자! 1. 출처(Origin)란 무엇인가? 웹에서 "출처"는 리소스가 어디에서 왔는지를 식별하는 중요한 개념이다. 출처는 URL의 세 가지 주요 구성 요소인 프로토콜(예: ht..
Custom Annotation 만들기 - AOP(Aspect-Oriented Programming) 이전에 작성했던 포스트에 이어서 커스텀 어노테이션을 만드는 방법 중에서 AOP를 이용해서 커스텀 어노테이션을 만들어보자. 1. AOP를 이용한 방법 Spring AOP를 사용해서 어노테이션을 처리하는 로직을 분리한다. 이 방법은 비즈니스 로직과 어노테이션 처리 로직을 분리하여 유지보수가 쉽고, 코드가 깔끔해진다. 특히 Spring 프레임워크에서 많이 사용되며, @Transactional, @Cacheable 등이 이러한 방식으로 구현되어 있다. @Aspect public class MyCustomAspect { @Around("@annotation(MyCustomAnnotation)") public Ob..
Custom Annotation 만들기 - 메타 어노테이션 회사 프로젝트에서 로그인 안 한 유저와 로그인 한 유저가 사용할 수 있는 기능을 하나의 Controller에 모두 모여있는 상황이었다. 그래서 로그인을 해야만 사용할 수 있는 기능에 인가된 회원인지 확인하는 어노테이션을 커스텀으로 만들어보려고 한다. 1. 간단 프로세스 설명 해당 프로젝트에서 사용자 인증에 JWT를 사용하고 있다. 로그인에 성공하면 accessToken을 요청의 'Authorization' 헤더에 담아 보내고, 로그인한 사용자의 아이디를 토큰의 'claim'에 추가해 준다. 인가된 회원인지 확인하는 방법은 Controller 단계에서 요청이 들어온 header에 Authorization 요소가 있는지 확인하고, 그 토큰에서 use..