전체 글 142

무중단 배포 진행하기 2023 (4) - profile 간단 설정

개요 대부분의 무중단 배포 관련 블로그에서는 프로필(profile) 설정을 필수로 언급하고 있다. 일반적으로 현업에서는 무중단 배포을 위해 여러 대의 머신(인스턴스)을 사용하고 있기 때문에 이 경우 프로필 과정은 필요하지 않다. 그러나 많은 사람들이 무중단 배포를 사이드 프로젝트로 진행하고 있는데, 이 경우 머신의 개수가 제한되어 있어,단일 머신에서 무중단 배포 환경을 구축하는 상황이기 때문이다. 이런 경우를 위해 2개의 프로필을 생성하여 프로젝트를 다른 포트 번호로 실행하고 있다. application.properties 설정 properties 설정에 spring.config.activate.on-profile=이름 을 추가해야한다. 만약 해당 profile의 DB, PORT 등 설정을 다르게 두고 ..

무중단 배포 진행하기 2023 - 젠킨스 빌드 시 3가지 에러 상황

첫번 째 에러 상황 ERROR: JAVA_HOME is set to an invalid directory: /usr/lib/jvm/java-11-openjdk-devel.x86_64/bin/javac Please set the JAVA_HOME variable in your environment to match the location of your Java installation. Build step 'Invoke Gradle script' changed build result to FAILURE Build step 'Invoke Gradle script' marked build as failure Finished: FAILURE 생각해보니, 해당 프로젝트는 java 17 버전으로 빌드해야해서, java..

JAVA - UnsupportedOperationException 발생 해결

List로 변환 가능한 메소드 자바에서는 list로 변환하는 3가지 메소드가 있다. Arrays.asList() Collection.singletonList() List.of() 3가지에 대한 자세한 설명은 아래 링크에 있다. https://code-killer.tistory.com/148 이 3가지 메소드의 가장 큰 특징 중 하나는 List의 길이를 바꿀 수 없다는 점이다. 즉 List의 메소드 중 길이를 바꾸는 add , remove 등의 기능을 사용할 수 없다. 발생 상황 List cardList; List tempCardList = new ArrayList(); .... 중략 (cardList에 Card가 add) ..... //Collection.singletonList()을 활용하여 2차원 L..

ELK - primary shard is not active Timeout 에러

네트워크 팀에서 VM 머신 초기화로 인해 elastic이 꺼졌었다. 다시 재부팅 하는 과정에서 위와 같은 로그가 남았는데, 구글링 해보니 elasticsearch 구성파일 중cluster.initial_master_nodes 설정 문제였다. 해당 설정은 맨 처음 클러스터를 시작할 때만 적용하고 이후에, 지워야 하는 옵션임을 공식문서에서 확인하였다. https://www.elastic.co/guide/en/elasticsearch/reference/7.10/modules-discovery-settings.html 그 이후에 cluster의 상태를 보니 red 상태였다. 로그를 보니, 몇몇 샤드들이 활성화가 되지 않아있었다. 그말은 해당 샤드를 가지고 있는 노드가 클러스터에 안붙었다는 얘기인데, 계속 원인을..

ELK - Retrying individual bulk actions that failed or were rejected by the previous bulk request. retrying failed action with response code: 403 에러 발생

개요 6/11 09:17:33 이후부터 poker , classic, client 인덱스에 로그가 안남고 있는 걸 확인 logstash 로그 확인 결과, 아래와 같은 로그가 발생 중 [2023-06-12T16:00:13,910][INFO ][logstash.outputs.elasticsearch][main]{중략....} Retrying individual bulk actions that failed or were rejected by the previous bulk request.{중략....} retrying failed action with response code: 403 ({"type"=>"cluster_block_exception", "reason"=>"index [shrink-index-20..

스프링 핵심 원리이해 - 빈 Life Cycle 콜백

스프링 빈은 아래와 같은 life cycle을 가진다. “객체생성 → 의존관계 주입?” 의존관계 주입까지 마쳐야 스프링 빈을 사용할 준비가 완료 된 것이다. 따라서 초기화 작업도 의존관계 주입이 끝난 이후에 진행해야 하는데, 이를 개발자가 어떻게 알 수 있을까? 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공한다. 또한, 스프링은 스프링 컨테이너가 종료되기 직전에 스프링 빈에게 소멸 콜백을 준다. “스프링 이벤트 Life Cycle” 스프링 컨테이너 생성 → 스프링 빈 생성 → 의존관계 주입 → 초기화 콜백 → 사용 → 소멸 전 콜백 → 스프링 종료 스프링은 크게 3가지 방법으로 빈 Life Cycle 콜백을 지원한다. 인터페이스(bean ..

ELK 인덱스 생명 주기(ILM) 설정하기

Index Lifecycle Policies(ILM)이란? 인덱스(다른 DB에선 테이블)을 사용자가 지정한 날짜, 크기, 문서 수 등에 도달하면 기존에 사용하던 인덱스를 처리(제거, 상태변경)하고, 새로운 인덱스를 할당한다. 현재 회사에서 사용하고 있는 ILM 정책은 인덱스 마다 다르지만, 제일 많이 사용하고 있는 게임 로그 데이터는 아래의 정책을 따른다. 인덱스 생성된지 15일이 지나면 warm 상태로 변경되어 단일 샤드로 축소 30일이 지나면 cold 상태로 변경되고, 읽기 전용 상태로 변하고, 용량이 감소 40일이 지나면 인덱스를 삭제 자세한 내용은 elastic 공식 문서를 참고하면 된다. https://www.elastic.co/guide/en/elasticsearch/reference/7.10..

무중단 배포 진행하기 2023 (2) - 젠킨스 생성 및 github과 연동하기

젠킨스 생성하기 먼저 젠킨스를 사용하는 이유부터 알아보자. 만약 젠킨스같은 CI/CD을 사용하지 않고 어떠한 작업이 있어서 소스코드를 수정하거나, 추가한다고 가정하자. 작업 이후에 배포 파일(Jar)을 만들고(빌드), 서비스가 배포되고 있는 머신에 배포파일(Jar)을 보내야한다. 그렇게 된다면, 소스 한줄 바꾸더라도, 개발자가 직접 빌드하고, 빌드된 파일을 배포하는 작업까지 매번 하기 상당히 귀찮을 것이다. 이 동작을 자동화 해주는 것이 젠킨스이다. 실무에서 젠킨스를 구축한다면, 도커, 추가 머신을 이용하여 젠킨스 서버를 따로 띄울 것 같은데, 그럴만한 여건이 안되기 때문에 젠킨스를 로컬에서 띄우기로 하였다. 해당 링크를 참고하였다. 다만 jenkins의 포트를 변경할 때 아래의 주소에서 젠킨스 설정파일..

스프링 배치 5.0 바뀐점 - Job Parameter

다양한 Job Parameter 타입 4.x 버전까지는 4개의 Type(Long, Double, String, Date)만을 지원했다. 5.0부터는 JobParameter를 커스텀해서 사용할 수 있다. 아래는 Spring Batch 5.0 변경 관련 문서에서 Job Parameter의 달라진 구현 부분이다. ---public class JobParameter implements Serializable { +++public class JobParameter implements Serializable { --- private Object parameter; +++ private T value; --- private ParameterType parameterType; +++ private Class type;..

무중단 배포 진행하기 2023 (1) - 클라우드 인스턴스 원격 접속하기

개요 토이 프로젝트로 무중단 배포 하는걸 시작하였다. 회사에서도 무중단 배포를 하고 있지만, 이미 만들어진 걸 사용하고 있었기 때문에 이해도가 부족하다고 스스로 생각하여, 직접 무중단 배포 환경을 구축해보기로 하였다. 도커를 사용하면 좋지만, 일단 무중단 배포 개념만 학습하기로 하여, 도커는 사용하지 않았고, 추후 디벨롭 과정에서 사용할 예정이다. 로컬 환경 : Mac os(DB, Jenkins) 배포 환경 : Centos 7 DB : MYSQL 배포 파일 : JAR 파일 (Spring boot, Gradle) 클라우드 인스턴스 원격 접속하기 오라클 클라우드를 사용하려 했는데, 카드 번호와 주소? 문제로 회원가입이 계속 안됐고, 결국 사내에서 개인 공부용으로 제공하는 NHN 클라우드를 사용해서 인스턴스를..

728x90