📌 MDC란?Mapped Diagnostic Context의 약자로,로깅 시스템에서 사용자의 요청이나 특정 실행 경로를 추적하는 데 사용되는 도구이다.다중 스레드 상황에서 요청 간 구분을 위해 주로 사용한다.Java의 로거인 SLF4J가 이를 내부적으로 지원해 준다. 📌 Webflux와 MDCMDC는 보통 스레드 로컬을 사용한다.하지만 어떤 스레드에서 작업을 진행할지 확신할 수 없는 Webflux의 특성상 스레드 로컬 사용이 어렵다.이에 MVC와 다른 방법을 사용해야 했다. 아래 로직을 구현하는데, 아래 블로그를 많이 참고했다. 배달의민족 최전방 시스템! ‘가게노출 시스템’을 소개합니다. | 우아한형제들 기술블로그{{item.name}} 안녕하세요 우아한형제들 프론트검색서비스팀 권용근입니다. 저는 "..
📌 도입 배경원래 WARN 레벨 이상 로그를 Sentry로 보냈었다.하지만 Sentry 무료 라이선스를 이용 중이라서 도입한 지 10일 만에 용량 초과로 이메일이 왔다.그래서 찾은 대안이 슬랙이었다. 어떻게 해야할까?먼저 spring에서 log를 어떻게 처리할 수 있는지 알아보자.📌 Log🔵 System.out.printIn()자바에서 로그를 표시하는 기본 중의 기본 함수이다. 하지만 이는 아래와 같은 이유로 쓰면 안 된다.휘발된다로그를 단지 콘솔에 띄우기만 하고, 다른 파일에 저장하지 않는다.실제로 저장되는 것이 없으므로, 추후 로그를 이용한 시스템 관련 작업이 불가능하다.로그만 나온다로그가 잘 나오는데 무슨 문제가 있는가?라는 질문이 나올 수 있다.하지만 이는 문제로 작용한다.로그뿐만이 아니라 ..
📌 사라진 서버 컨테이너All:Chive 회의를 했다.회의하는데 로그인이 안된다고 한다.뭐지 하고 ec2 접속해서, sudo docker ps해봤더니, 엔지닉스만 남아있다;;;보통 블로그 쓸 거였으면, 사진이라도 남겨뒀을 텐데여긴 사진도 못 남겼다... 당황해서;;일단 도커 컴포즈로 서버 복구만 시켜두고 원인을 찾아봤다. 📌 원인 규명🟢 CloudWatch All:Chive 서버에는 로그 보기 편하게, CloudWatch를 적용해뒀다.컨테이너가 종료된 걸 보고, 서버가 오류 나서 강제 종료된 건가 싶어서 로그를 켜봤다.종료될 때쯤, 서버에 아무런 요청이 없었고, 에러도 없었다.의문사했다.그래서 CPU 문제인가 싶어서 EC2 지표도 봤다.지표도 뭔가 이상하다.요청이 없는데 CPU 사용률이 저렇게 올라..
Spring Bean, IoC/DI 정리 1" data-og-description="📌 IoC 🟢 IoC 란? IoC는 Inversion of Control의 약자로 ‘제어의 역전’이라는 의미를 가진다. 이때, ‘제어의 역전’은 무슨 의미를 가지는 걸까? 제어 객체 생명주기나 메서드의 호출을 직접 제어한" data-og-host="wtg1026.tistory.com" data-og-source-url="https://wtg1026.tistory.com/11" data-og-url="https://wtg1026.tistory.com/11" data-og-image="https://scrap.kakaocdn.net/dn/yfFoc/hyT5TymqD8/i2KBQlPPZs098ytG38zB9k/img.png..
📌 IoC🟢 IoC 란?IoC는 Inversion of Control의 약자로 ‘제어의 역전’이라는 의미를 가진다.이때, ‘제어의 역전’은 무슨 의미를 가지는 걸까? 제어객체 생명주기나 메서드의 호출을 직접 제어한다 ⇒ 객체 생명주기나 메서드의 호출을 직접 관리한다직접 객체를 생성하여 코드를 “제어”public class A { private B b; public A() { this.b = new B(); }}A 클래스에서 B를 필드로 가지고 있고, 생성자 내부에서 직접 생성해 필드를 초기화하고 있다.이러한 코드를 객체 생명주기를 직접 제어하는 코드라고 말할 수 있다. 역전프로그램의 제어 프름을 직접 제어하는 것이 아니라 외부에서 관리하는 것public class A { ..