본문 바로가기

dev37

org.apache.http.NoHttpResponseException {{host}}:443 failed to respond 👿 org.apache.http.NoHttpResponseException 👿 외부 서버와 연동 후 운영 중에 간헐적으로 정상적인 응답이 떨어지지 않았는데, stacktrace를 살펴보니 재시도 하면 해결될 듯한데 명확하지 않으므로 좀 더 찾아보기로 한다. 타겟 서버에서 유효하지 않은 HTTP 응답으로 제대로 응답하기를 실패했다는 신호라고 하는데 문제는 이거다. 현상의 이유는 HTTP/1.1의 Keep-Alive로 인해 httpclient는 통신이 끝난 connection을 종료하지 않고 동일host:port에 대해 동일한 커넥션을 이용하려 하기 때문이다. 비록 서버측은 통신이 완료되어 해당 연결을 close 할지라도 client 측은 커넥션 객체가 여전히 열려있고 데이터가 인입되길 기다리고 있게된다. .. 2020. 8. 12.
서버를 컨테이너로 띄우자 테스트 서버를 이미지로 빌드해 컨테이너로 띄웠던 기억을 되새겨 기록합니다. SpringBoot 기반으로 서버를 띄워보려 합니다. 우선, SpringBoot 애플리케이션을 준비합니다. @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } Dockerfile 빌드할 이미지를 위해 도커파일을 준비해봅니다. 몇몇 명령어만 설명합니다. FROM openjdk:8-jre LABEL maintainer="younji@tistory.com" RUN cat /usr/share/zoneinfo/Asia/Seoul > /et.. 2020. 6. 12.
BitBucket Deployment 파이프라인을 만들어보자 최근에 들어서야 프라이빗 레파지토리를 팀 단위로 생성할 수 있지만 이전엔 아니었다. 그래서 많은 형상 관리 툴 중에 Bitbucket을 고려하지 않았나 싶다. 실제로 3명으로 구성된 아주 자그마한 팀일 때 bitbucket을 고려하여 소스를 관리하였다. Github도 지금은 CI/CD를 파이프라인으로 구현할 수 있지만 bitbucket은 좀 이전에 해당 파이프라인을 가지고 있었다. Bitbucket으로 개발한 프로젝트 중에 MySQL DB 도커 이미지를 관리하는 레파지토리가 있다. (거의 로컬, 테스트 환경에서 사용하는 스키마 관리 정도..) 해당 레파지토리에 올린 후에 ECS 로 이미지를 빌드해서 업로드하는 플로우가 필요했는데, bitbucket에서 아주 간단하게 해당 파이프라인을 제공한다. 물론 AW.. 2020. 6. 9.
멀티모듈에 한 방으로 적용되는 application.yml 멀티모듈에서 공통된 하나의 application property를 적용했던 과정을 포스팅합니다. 현재 운영하고 있는 애플리케이션은 아래와 같이 멀티 프로젝트로 구성돼있습니다. 모든 모듈은 core 를 의존하고 있기 때문에 core에 특정 도메인(A Domain)의 프로퍼티를 동일하게 가지고 있어야 합니다. 처음엔 모듈이 몇 개 되지 않아 모든 모듈의 프로퍼티에 작성해주었는데요. A Domain 에 추가되는 값들을 모든 모듈에서 관리하기란 쉽지 않았습니다. 다중 프로퍼티를 한 번만 기술하기 위해 두 가지 방법을 찾게 되었습니다. spring.profiles.include 위와 같이 환경에 따라 하나의 파일로 정의해줍니다. 그리고 모듈마다 spring.profiles.include: core 로 명시해주면 .. 2020. 6. 8.