Spring 33

@FeignClient 요청 및 에러 핸들링

기본 세팅 이전 포스팅 참고https://programmingjun.tistory.com/96 @FeignClient 기본 세팅프로젝트에서 외부 api에 요청을 보내야할 경우들이 있어 FeinClient를 사용해보았다. 이 과정중에 발생한 에러를 해결하며 공부하게된 내용들을 정리해본다. 의존성 관리해당 의존성은 Springboot 3.programmingjun.tistory.com 전역, 부분적으로 request를 핸들링하기 위해서 Configuragion을 활용할 수 있다.예를 들어 전역적인 요청에 header를 세팅한다거나 특정 외부 api를 호출할 때 동일하게 header를 세팅해야 할 경우 전역 RequestInterceptor 설정@Configuration을 통해 전역의 요청을 설정할 수 있다...

Spring 2024.05.22

@FeignClient 기본 세팅

프로젝트에서 외부 api에 요청을 보내야할 경우들이 있어 FeinClient를 사용해보았다. 이 과정중에 발생한 에러를 해결하며 공부하게된 내용들을 정리해본다. 의존성 관리해당 의존성은 Springboot 3.2.4에 해당하는 의존성이다.openfeign 라이브러리는 spring cloud 기반의 라이브러리이다. 때문에 spring cloud 의존성이 필요하며 spring cloud는 spring 과 호환성이 중요함으로 버전관리에 신경써야한다. 아래 공식 문서로 확인 가능하다.https://spring.io/projects/spring-cloudext { set('springCloudVersion', "2023.0.0")}dependencyManagement { imports { m..

Spring 2024.05.21

Spring 외부설정 2 (Profile 사용 예)

외부 설정 Profile 사용교육 과정 마지막 프로젝트에서 Profile을 적용시키고 실행 시점에 값을 주어 실행시킬만한 좋은 케이스가 생겨서 적용해 보았다. 현재 프로젝트에 프로메테우스 그라파나를 설정하여 애플리케이션에 대한 모니터링을 실행하고 있다.하지만 이 모니터링은 로컬 환경에서 실행시킬 때 불필요하고 배포 서버에서 실행될 때 필요한 상황이다. 따라서 배포 시에 VM옵션에 profile=deploy를 주어 배포 시에만 실행되도록 지정하였다. 모니터링 외부 설정 profile 지정#그라파나 설정---spring: config: activate: on-profile: deploymanagement: info: java: enabled: true os: e..

Spring 2024.05.06

Spring boot 커스텀 메트릭 (프로메테우스/그라파나)

엑츄에이터와 마이크로미터스프링 엑츄에이터를 기반으로 한 많은 모니터링 툴들이 있다. 하지만 이러한 모니터링 툴들은 쌓인 엑츄에이터의 정보를 받아올 때 여러 다른 형식으로 데이터를 받아간다. 스프링은 이러한 환경에서 항상 추상화를 통하여 표준 방식을 개발자에게 제공한다. 이 경우에도 마이크로미터를 통한 추상화를 통하여 여러 다른 형식의 포맷을 표준화하였다.   마이크로미터와 액츄에이터가 제공하는 메트릭에는 매우 다양한 정보들이 있다. 전체적인 애플리케이션의 health 체크 및 시스템에 대한 메트릭은 기본적으로 제공해 준다. 하지만 애플리케이션의 비즈니스 로직에서의 의미 있는 지표를 뽑아내고 싶다면 어떻게 해야 할까?? 사용자 메트릭일 정의하여 수집 설정을 할 수 있다. 카운트 예제 1)- registry..

Spring 2024.05.06

배포 서버 ClassNotFoundException 트러블 슈팅

진행 중인 프로젝트에 jenkins 파이프 라인으로 자동 배포를 세팅해 두었다.배포 브랜치로 넘어가기 전 로컬에서 서버를 올려보고 머지를 넣었음에도 배포가 실패하였다. 처음엔 젠킨스 내부에서 빌드에 문제가 있었나 보았지만 문제가 없었고 배포 서버에서 로그를 확인해 보니 java.lang.NoClassDefFoundError: org/springframework/boot/configurationprocessor/json/JSONExceptionjava.lang.ClassNotFoundException: org.springframework.boot.configurationprocessor.json.JSONExcept ion jar 실행시점에 두 개의 로그가 남은 것을 확인할 수 있었다. 라이브러리를 못 받았..

Spring 2024.05.02

커스텀 익셉션 적용

JPA를 사용하여 Entity를 찾아오거나 , 로직상에 문제가 있을 때 예외 처리를 할 일이 많이 있다.예외처리를 할때 같은 케이스의 예외인데 메시지가 다르게 나가는 점과 같은 예외에서도 다른 HttpStatus 상태코드를 내보낼 상황이 있을 수 있다는 점에서 통일화하여  메시지와 반환 객체를 구조화할 필요성을 느꼈다. 따라서 아래와 같이 커스텀 예외와 예외 핸들링을 해보았다. 1. 예외 정의 Enum 타입 ErrorDefinition@Getterpublic enum ErrorDefinition { NOT_FOUND , ILLEGAL_ARGUMENT} 2. ErrorCode Enum 타입Enum 타입에 Http 상태 코드, 에러 분류 , 에러 메시지를 정의하였다.@AllArgsConstructor@..

Spring 2024.04.28

Spring boot 의 외부 설정

외부설정이란?하나의 애플리케이션을 여러 다른 환경에서 사용해야 할 때를 위하여 Spring boot의 실행 or 빌드 시점에 외부에서 설정을 넣어줄 수 있다. 이를 외부 설정이라 한다. 그렇다면 애플리케이션 실행에 필요한 설정값을 외부에서 어떻게 주입할 수 있는 것일까? 외부 설정파일은 크게 아래와 같이 4개로 나눌 수 있다.OS 환경 변수: OS에서 지원하는 외부 설정 , OS에서 사용되는 모든 프로세스에 적용 가능하다.자바 시스템 속성: 자바에서 지원하는 외부 설정, 해당 JVM안에서 사용자바 커맨드 라인 인수: 커맨드 라인에서 실행시 main(args) 메서드에서 사용할 인자를 준다.외부 파일(설정 데이터): 프로그램 외부의 파일을 읽어 사용 (application.properties)1. OS 환..

Spring 2024.04.27

Spring boot 의 내장 톰캣

스프링 부트 스타터는 많은 연관된 라이브러리들을 세팅해 준다. 이중 spring boot starter web 라이브러리에 내장 톰캣 관련 라이브러리가 있다. 해당 내용 라이브러리의 코드들 중 메인 메서드가 실행될 때 톰캣을 세팅하는 코드를 구현해 보았다. Config 코드 @Configuration public class HelloConfig { @Bean public HelloController helloController() { return new HelloController(); } } Main클래스 public class EmbedTomcatSpringMain { public static void main(String[] args) throws LifecycleException { System...

Spring 2024.04.21

서블릿 컨테이너, 애플리케이션 초기화

WAS 서버 실행시점에 필요한 초기화 작업들이 있다. 스프링 컨테이너에 들어오기 전단계의 초기화 (서블릿 초기화, 필터 초기화) 스프링 컨테이너 초기화 서블릿과 스프링 컨테이너의 연결 스프링 부트는 이 단계의 초기화 작업을 자동으로 제공하지만 그 구조를 알아보기 위해 학습해 보았다. @WebServlet 어노테이션을 통한 서블릿 초기화도 가능하다. 이전 블로그 포스팅에 해당 내용을 작성한 적이 있다. https://programmingjun.tistory.com/54 Spring MVC 구조 뜯어보기(1) - Servlet 서블릿 스프링 부트는 톰캣 서버를 내장하고 있어, 톰캣 서버 설치 없이 서블릿 코드를 사용 가능하다. 디스패쳐 서블릿은 웹 애플리케이션 서버를 통해 특정 URL에 요청이 오면 요청값인..

Spring 2024.04.20

공공데이터 Springboot로 파싱

부트캠프 3차 프로젝트의 데이터 세팅을 위해 공공 데이터를 활용하였다. 공공데이터의 제공 방식이 각각 다르다 어떤 경우엔 CSV로 row data를 모두 제공하는 경우가 있고 OpenAPI를 통해 조회가 가능하게 열어두는 경우가 있었다. 내가 활용할 데이터는 후자의 경우였는데 심지어 한 번에 1000건밖에 조회가 되지 않았다.... (파싱 하는데 루프를 돌려야 했다.. 아오) 공공데이터 활용을 정리해보았다. 1. 원하는 공공데이터 포탈에 방문하여 데이터 제공 방식을 확인 2. OpenAPI 이용 신청 3. 나의 경우엔 식품의약품안전처에 회원가입하여 인증키를 받았다. 4. API 요청 URL에 인증키를 넣어 요청하는 방식이었다. 5. 데이터 파싱 아래는 json 타입으로 받은 데이터를 파싱 하는 코드이다...

Spring 2024.04.13