반응형
Kibana에 로그가 전달이 되질 않아서 Docker Desktop으로 logstash의 로그를 확인해보니 다음과 같은 에러가 발생했다. [2023-10-04T08:03:23,112][WARN ][logstash.outputs.elasticsearch][main] Attempted to resurrect connection to dead ES instance, but got an error {:url=>"http://logstash_internal:xxxxxx@elasticsearch:9200/", :exception=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::BadResponseCodeError, :message=>"Got response code '..
WSL 2를 사용하지 않고 Docker Desktop의 Hyper-V 기반 엔진을 사용하려면, 먼저 Hyper-V를 활성화해야한다. 1. "제어판" -> "프로그램 및 기능" 으로 이동 그리고 Windows 기능 켜기/끄기 클릭 2. Hyper-V 체크 3. Docker Desktop 설정에서 "Use the WSL 2 based engine" 옵션 체크 해제 후 재시작 4. 이제 이 이후에 도커 컨테이너 실행시 나오는 알림창 Share it을 클릭해주면 정상적으로 권한 문제 없이 파일 공유가 가능하다.
프로젝트의 서버로 EC2를 사용하면서 기존에서 로컬에서 사용하던 redis를 AWS의 ElastiCache를 사용하는 방법으로 변경했다. 그런데 호스트의 주소를 잘못 적었는지 계속 위와 같은 연결 문제가 있었다. ElastiCache Redis를 생성하면 다음과 같이 마스터 노드와 내구성을 위해 읽기 전용인 노드가 2개가 기본으로 생긴다. 처음에는 읽기전용인 마스터 노드의 엔드포인트를 호스트로 작성해줘야하는 줄 알고 "리더 엔트포인트"를 호스트로 작성했다가 연결오류가 발생했다. 이렇게 지정하니 Read Only ~ 에러가 발생하면서 읽기 전용 노드에 접근하려고 하고 있었다. 그래서 이번에는 노드 중 primary를 지정해서 호스트 엔드포인트를 작성했다. 이제는 ReadOnly는 발생하지 않지만 Redis..
무중단 배포를 하는 도중에 jar 파일이 실행되지 않아서 계속 heath 체크가 실패하는 문제가 발생했다. 원인을 찾고자 해당 jar 실행 로그가 들어있는 파일을 열어 봤더니 아래 로그만 덩그러니 있었다. no main manifest attribute, in /home/ec2-user/app/deploy/mall-1.0.1-SNAPSHOT-20230927114334-plain.jar 이 에러는 jar파일에서 애플리케이션이 실행되는 @SpringBootApplication이 붙은 메인 클래스를 찾지 못했다는 뜻이다. java -jar로 jar파일을 실행 시키면 JVM이 jar파일의 메인 클래스를 호출하는데 이를 찾지 못해서 발생하는 문제이다. Spring boot 2.5.0 버전 이상 부터는 gradle..
유저 서버와 어드민 서버를 분리하면서 유저 서버는 session 저장소를 redis, 어드민은 jdbc로 가져가도록 했다. 어드민은 jdbc로 가져가게 된 이유는 어드민 유저의 수는 일반 유저에 비해 많이 적기 때문에 세션 I/O 과정에 부하가 적어 선택하게 되었다. (유지 보수 비용도 고려) 세션 저장소로 jdbc로 사용하려면 아래와 같이 프로퍼티 파일에 옵션을 주면된다. spring.session.store-type=jdbc 하지만 이렇게 설정을하고 실행을 하면 spring_session 테이블이 생성이 안되었다는 에러가 발생할것이다. 문제 해결 만약 프로젝트에서 사용하는 데이터베이스가 embeded 타입이라면 spring_session 테이블은 자동 생성되도록 기본 설정 되어 있다. 하지만 나는 e..
결제 시스템으로 iamport api를 사용하기 위해 IamportClient 객체를 apikey로 생성하는데 이 apikey를 application.properties에 작성하고 @Value 어노테이션으로 키 값을 받아오는데 해당 필드에 키값이 채워지지 않는 문제가 발생했다. @Controller @RequiredArgsConstructor public class OrderController { private final OrderService orderService; @Value("${imp.api.key}") private String apiKey; @Value("${imp.api.secretkey}") private String secretKey; private IamportClient iampor..