온라인코딩부트캠프 63

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

프로젝트 테스트 코드 작성

테스트란? 단위 테스트(Unit Test): 비즈니스 로직에서 사용되는 메서드를 독립적으로 테스트한다.슬라이스 테스트: 애플리케이션을 특정 계층의 기능을 Mock 객체를 사용하여 테스트한다.  코스 최종 프로젝트를 진행 중에 애플리케이션 기능을 테스트하여 더욱 탄탄한 서비스로직을 구현하고자 테스트 코드를 작성해 보았다. 최종으로는 통합 테스트까지 진행하면 좋겠지만 단위테스트와 슬라이스 테스트까지 진행하는 것이 목표이다. Mock 객체 세팅 및 기본 셋업 @ExtendWith(MockitoExtension.class)class HeartReviewServiceImplTest { @Mock private HeartReviewRepository heartReviewRepository; @Moc..

Spring boot 의 외부 설정

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

Spring 2024.04.27

GitLab 웹훅 적용

1. GitLab 플러그인 설치 젠킨스 GitLab 플러그인을 설치해야 GitLab 웹훅 사용이 가능하다. 2. GitLab 토큰 생성 젠킨스 Credentials 생성을 위한 토큰 발급 3. Credantial 생성 Username with password와 Secret text Credantial 생성하였다. 4. 파이프라인 설정 Dashboard -> 파이프라인 -> Configuration에서 아래와 같이 설정해 준다. GitLab webhookURL 은 깃랩 설정에 사용됨으로 복사해 둔다. 아래 고급을 펼쳐 secret token을 발급받아 저장해 둔다. 5. 깃랩 설정 깃랩 Repository - settiing - webhooks로 가서 URL과 Secret token에 복사해 둔 정보를 붙..

Docker 2024.04.22

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