Coroutine Actor 이용해서 단일 서버 락 구현하기" data-og-description="📌 Actor🔵 Actor란?Actor 모델은 병렬 프로그래밍에서 상태를 가진 개체가 메시지를 주고받으며 비동기적으로 동작하는 개념이다.즉, 자체적인 상태를 가지고 메시지를 수신하며 이를 처리하는 " data-og-host="wtg1026.tistory.com" data-og-source-url="https://wtg1026.tistory.com/19" data-og-url="https://wtg1026.tistory.com/19" data-og-image="https://scrap.kakaocdn.net/dn/bnwsFD/hyWSioV8Ax/7O8RmVDgoySIRbq3uEYrkk/img.png?wi..
📌 Actor🔵 Actor란?Actor 모델은 병렬 프로그래밍에서 상태를 가진 개체가 메시지를 주고받으며 비동기적으로 동작하는 개념이다.즉, 자체적인 상태를 가지고 메시지를 수신하며 이를 처리하는 논리를 가지고 있는 실행 단위이다.코루틴에서도 스레드 간 동기화를 지원하기 위해 이를 지원해 준다. actorLaunches new coroutine that is receiving messages from its mailbox channel and returns a reference to its mailbox channel as a SendChannel. The resulting object can be used to send messages to this coroutine. The scope of the..
📌 에러 상황현재 수수에서 Slack을 통계, 에러 알림으로 사용하고 있다.근데 가끔 Slack 메시지 전송이 실패했다고 알림이 온다.스케줄러 에러인 것을 보아, 통계 알림의 슬랙 메시지 전송 부분에서 발생한 것을 알 수 있다.근데 위에 보여준 건 여러 개 중 하나이다.다행히 모두 통계 알림 에러이다.하지만 이 일이 에러 알림에서 발생해도 이상하지 않다.센트리로 에러 사항이 기록되긴 하지만 개발자가 이 에러의 발생을 빠르게 파악할 수 있는 것은 슬랙 알람뿐이다.그러므로 알람이 전달됨을 보장해주는 로직이 필요했다. 📌 처리에 관한 고민처음엔 서킷 브레이커를 생각했다.슬랙이 오랜 기간 동안 장애가 발생한다면 시스템의 안정성을 높이는 부분에 있어서 유용할 것이다.하지만 슬랙이 오랜 기간 동안 장애가 발생..
📌 실험 개요Webflux는 적은 리소스에서 MVC에 비해 많은 요청을 처리할 수 있고, Coroutine은 스레드를 사용하는 것보다 메모리 자원을 효율적으로 관리할 수 있다고 한다.인터넷에 Webflux vs MVC를 비교한 글은 많아도, Webflux + Coroutine vs MVC를 비교하는 글은 없는 것 같다.이에 위 두 환경을 만들어서 앞서 언급한 부분에 대해 증명하고자 한다. 수수에서 Reactive Stack을 사용했는데, Webflux + Coroutine + JPA 조합을 사용했다.이와 흔히 사용하는 MVC + JPA 조합을 비교하고자 한다. 📌 실험 내용🔵 실험 목표이 실험을 통해 알아보고 싶은 점은 아래와 같다.MVC와 비교했을 때 Webflux의 요청 처리 능력Coroutin..
📌 SUSU 프로젝트YAPP 23기에서 진행한 경조사비 관리 서비스이다.자세한 내용은 아래 링크를 이용하면 된다.결혼식, 돌잔치, 장례식, 생일 같은 경조사를 챙긴 적 있나요?주고받은 소중한 마음들, 수수와 함께 경조사비를 똑똑하게 관리해요! Disquiet*IT 서비스 메이커들의 소셜 네트워크. 디스콰이엇에서 서로의 프로젝트를 공유해 보세요!disquiet.io많관부 ㅎㅎ 📌 왜 Coroutine을 썼을까🔵 Coroutine 이란자세한 설명은 이 글에서 안 할 것이다.간단히 소개만 해보겠다. 위키백과에는 아래와 같이 쓰여있다.Coroutines are computer program components that allow execution to be suspended and resumed, gene..
📌 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 { ..