yaml 파일을 읽고 수정할때 유용한 yq 알아보기
·
Infra
자동화 설정을 하거나 bash 스크립트를 구성할 때 yml 파일의 값을 읽고 다른 값으로 변경해야 할 경우가 있다. 이때 유용한 yq 에 대한 글이다. yq v4 버전으로 작성된 글이며, 이전 버전인 v3 와 달라진 점은 아래 공식문서 링크를 참고하면 좋을 것 같다.https://mikefarah.gitbook.io/yq/upgrading-from-v3#updating-writing-documentsyq 알아보기jq 가 JSON 을 다뤘다면, YAML 파일을 읽고 수정할 수 있는 명령어 기반 도구가 yq 다. 기존에 YAML 파일을 처리하려면 sed나 awk처럼 구조를 모르는 텍스트 도구를 사용해야 했지만, 이는 실수가 발생하기 쉽고 유지보수가 어렵다. yq는 YAML 구조를 인식한 채 탐색하고 수정할 ..
[Github] Github Actions 에서 Job 간 Value 전달, 조건부 job 실행 방법
·
Git&GitHub
GitHub Actions에서 outputs 객체를 사용하여 Job 간 단순 값(Value) 전달하는 방법에 대한 정리한 글이다. 전체적인 플로우워크플로우(Workflow)에서 여러 Job이 실행될 때, 특정 Job에서 발생한 결과값을 다음 Job에서 활용해야 할 수 있다. 예를 들어, 어떤 Job에서 생성한 해시값, 파일 이름, 시각 정보 등을 다음 Job이 조건 판단이나 메시지 출력 등에 사용하도록 구성할 수 있다. GitHub Actions는 이를 위해 outputs라는 객체를 제공한다. outputs 객체는 GitHub Actions의 Context에 포함되어 있으며, key-value 형태로 데이터를 저장한다. outputs를 이용하면 Step → Job, 그리고 Job → 다음 Job으로 값을..
[Java] 숫자를 0으로 나눌 때의 자료형별 동작과 예외 발생 케이스
·
Java
Java에서는 숫자를 0으로 나눌 때 자료형에 따라 동작 방식이 다르다. 정수형(int, long)은 0으로 나누면 예외를 발생시키는 반면, 실수형(float, double)은 Infinity 또는 NaN(Not a Number)을 반환한다. 특히 실수일 때 JSON 직렬화 과정에서 String으로 변환되거나, 다른 연산에 영향을 미쳐 예상치 못한 버그가 생길 수 있으므로, 주의해야 한다. 정수를 0으로 나눌 때: ArithmeticExceptionint, long과 같은 정수형 데이터를 0으로 나누려고 하면, 자바는 이를 런타임 에러로 간주한다. 이때 java.lang.ArithmeticException이 발생하며 프로그램 실행이 중단된다.int a = 10;int b = 0;try { int r..
[Docker] Single-platform 이미지와 Multi-platform 이미지, Multi-platform 이미지 빌드를 위한 Buildx
·
Infra
Single-platform 이미지 vs Multi-platform 이미지Docker 이미지에는 크게 두 가지 유형이 있다Single-platform 이미지: 오직 하나의 플랫폼(x86_64, arm64 등) 에서만 동작하도록 만들어진 이미지Multi-platform 이미지: 여러 플랫폼용으로 빌드된 이미지들을 하나로 묶은 통합 이미지로 사용 환경에 따라 자동으로 알맞은 플랫폼 버전을 선택해 실행다중 플랫폼 이미지는 동일한 애플리케이션을 여러 아키텍처용으로 따로 빌드한 뒤, 이들을 하나의 이미지처럼 포장한 것이다. 내부에는 각 아키텍처마다 별도의 설정(config)과 실행 파일 집합(layer)이 존재하며, 그 위에 목차 역할을 하는 manifest list가 하나 더 있다. 이 구조 덕분에 사용자는 단..
[Spring Security] Preflight는 성공하지만 실제 요청에서 CORS 오류가 발생하는 문제 해결하기
·
Spring
제목과 같이 Preflight (Options) 는 성공하지만 실제 요청에서 Cors 가 발생하는 이슈가 생겨, 이에 대해 정리한 글이다. 이슈 당시 확인해 본 사항CORS 발생 당시 아래 2개 최우선으로 확인했다.Access-Control-Allow-Origin 과 Access-Control-Allow-Credentials2개를 왜 확인해야 하는지, 개념을 간략하게 정리해보면 아래와 같다. Access-Control-Allow-Origin 는 없거나 다르다면 브라우저에서 응답 자체를 막아버리므로 CORS 오류가 발생한다.Access-Control-Allow-Credentials 는 session 인증의 경우 1) 에 jwt 기반 인증의 경우 2) 에 영향을 미치며 마찬가지로 설정이 없으면 CORS 오..
[Postman] Mock servers 로 가상 엔드포인트 생성하기
·
카테고리 없음
Postman Mock server 란?Postman의 Mock Server는 실제 API 서버 없이도"정해진 응답"을 돌려주는 Postman 기능이다. PostMan 의 Mock Servers 기능을 이용하면 가상 API 서버를 이용해 엔드포인트의 요청/응답을 재현할 수 있다. 예를 들어, 테스트시 특정 API 를 호출해야 하는데 테스트 환경에서 호출할 수 없거나, 호출하는데 비용이 발생하는 API 라면 Mock Servers 기능을 이용해 가상 API 서버에 요청을 위임할 수 있다. 특정 에러 시나리오(ex: 500, 404 등)를 테스트하고 싶을 때도 유용하게 쓸 수 있다.설정 방법설정하기 위한 기본 흐름은 다음과 같다. Postman Collection 생성:요청(Request)과 응답(Resp..
[Linux] 환경변수 (Environment Variable) 개념과 활용
·
Infra
cli 환경에서 쉘스크립트를 작성하거나 설정을 외부화 할 때 유용한 환경변수 (Environment Variable) 에 대해 정리한 글이다.환경변수(Environment Variable) 개념[환경변수란 무엇인가?]환경변수(Environment Variable)는 운영체제에서 프로세스 실행 시점에 전달되는 설정값이다. 환경변수로 설정한 값은 실행 중인 애플리케이션에게 시스템 자원이나 경로, 사용자 세션, 디버그 모드 여부 등 여러 정보를 제공하는데 활용된다. 리눅스, macOS, Windows 모든 운영체제는 환경변수의 개념을 내장하고 있으며 환경변수를 통해 설정의 외부화가 가능해진다. 예를 들어, 애플리케이션의 데이터베이스 연결 정보를 환경변수 DB_HOST, DB_USER 등으로 설정하면, 코드 변..
[Spring] WireMock 로 Feign (ApacheHttp5Client) 테스트시 NoHttpResponseException 발생 케이스와 해결방법
·
Spring
들어가며FeignClient 등 외부 API 를 호출하는 환경에서 테스트를 하기 위해 다음과 같은 방법을 사용할 수 있다.mock 서버 구성Mockito 로 mockingWireMock 사용mock 서버는 Postman 의 Mock Servers 등으로 구성하는 레퍼런스가 꽤 있지만 테스트코드가 아닌 외부 툴에 의존한다는 점과, 그로 인한 호출량 제한 등을 생각해야 하므로 일단은 배제했다. 다음으로 mocking 은 FeignClient 자체의 기능을 테스트하는게 아니라, Feign 을 mocking 해서 이를 의존하는 다른 로직이 정상적으로 실행되는 케이스를 검증하는 것이므로 Decoder 등으로 설정한 Feign 자체 예외 케이스 핸들링에 대한 검증을 할 수 없어 배제했다. 결론적으로 이중 WireM..