오늘은 저번에 썻던 스레드 관련 글에 이어서 실제로 스레드 개수를 늘려나가며 테스트 하였던 과정을 소개하려고 한다!2024.11.13 - [notice-crawler] - [교내 공지사항 알림 서비스] 개발일기 6편 [스레드를 이용한 성능 최적화] [교내 공지사항 알림 서비스] 개발일기 6편 [스레드를 이용한 성능 최적화]오늘은 기존 이메일 발송시간이 너무 오래 걸리는 문제를 해결하는 과정을 기록하도록 하겠다. 기존 코드에서는 30명의 사용자에게 메일을 보내는데 1분 30초정도가 걸렸다. (49:24 ~ 50:55) 메일mythpoy.tistory.com 원래 Mockito 라이브러리를 통해 EmailService를 가짜 객체로 생성하여 테스트를 하고있었는데 실제 네트워크 I/O도 고려해야 했기 때문에 ..
생각해보니 내가만든 사이트 페이지가 어떻게 구성되어있는지 소개를 안했다;;먼저 메인페이지! 서비스에 대한 간단한 소개 및 구독신청, 구독취소 페이지로 이동하는 버튼을 배치하였다.다음으로 구독신청 페이지! 메일을 입력 후 구독요청 버튼을 누르면 인증번호가 메일로 전송된다. 사용자들의 편의를 위해 좌측 상단에 메인페이지로 가는 버튼을 추가하였다. 다음으로는 구독 취소 화면이다.여기도 기본적으로는 구독 신청화면과 거의 유사하다.그리고 20시에 메일을 받으면 이런식으로 온다!
최근 서비스에서 이메일 발송 중 421 오류가 발생하는 상황이 있었다. 이 오류는 서버 과부하나 요청 제한 초과 시 나타날 수 있으며, Gmail API의 특성상 구체적인 원인 파악이 어려웠다. 오류가 발생할 때마다 15초 간격으로 최대 세 번까지 재시도하도록 설정했지만, 문제가 해결되지 않아 다른 접근 방식을 고민했다. 문득 컴퓨터 네트워크 전공 수업에서 배운 패킷 손실 및 혼잡 제어 개념을 떠올려보았다. 네트워크 상에서 패킷이 라우터를 거쳐 전달될 때 혼잡이나 과부하로 인해 특정 라우터에서 패킷이 정체되거나 소실될 수 있다. 이를 해결하기 위해 혼잡 제어 알고리즘에서는 패킷 전송 간격을 점진적으로 늘리는 방식을 사용해 부하를 완화시키곤 하였다. 이와 같은 원리를 이메일 발송 재시도 로직에 적용하여 지..
오늘은 서버 배포과정에서 겪었던 수모들을 알려주고자 한다! SuperDMZ를 활용한 서버 IP 노출시키기 먼저 나는 개인적으로 소장하고있는 라즈베리파이 OS를 집 공유기에 연결하여 사용한다.그렇기 때문에 지금까지는 포트 포워딩을 통해 특정 공유기로 들어오는 특정 포트를 라즈베이파이로 연결시켜주면서 사용하였다. 하지만 최근에 더 좋은 방법을 알게 되었다. 바로 SuperDMZ다. 포트포워드, DMZ, SuperDMZ에 관한 설명은 아래 글을 참고하였다.https://m.blog.naver.com/kangyh5/221663259947 Port Forward, DMZ, Super DMZ의 차이1. 포트 포워드 (Port Forward) 포트 포워딩은 방화벽(모뎀, 공유기 등)으로 차단된 네트워크의 외부에서...
오늘은 기존 이메일 발송시간이 너무 오래 걸리는 문제를 해결하는 과정을 기록하도록 하겠다. 기존 코드에서는 30명의 사용자에게 메일을 보내는데 1분 30초정도가 걸렸다. (49:24 ~ 50:55) 메일 발송이 Blocking I/O 방식으로 실행되므로 동시에 작업시키기 위해 쓰레드의 개수를 10개로 늘렸다. 그랬더니 약 10초만에 30개의 메일 발송에 성공하였다. 대략 스레드의 개수배만큼 빨라진 것이다! (43:27 ~ 43:37)각각의 스레드는 독립적으로 작동하므로 순서가 꼬일 가능성이 매우 높다.하지만 보내는 순서는 딱히 상관이 없으니 스레드를 사용하는 것이 문제가 없다고 판단하여 멀티스레딩 방식을 사용하여 메일 발송을 하는 것으로 결정하였다. 하지만 배포 서버의 CPU 개수나 메모리에 따라 스레..
오늘은 공지사항을 20시에 일괄적으로 발송하는 첫날이다.현재 60명의 사용자가 있는데 각각 메일을 따로 보내기 때문에 전부 보내는데 3분가량 소요 되었다 ㄷㄷ.그래도 성공적으로 잘 된 것 같아서 기분이 좋다. 혹시 몰라서 마지막에 받으신 구독자님께 메일을 드려보았다.근데 다시 생각해보면 내가 마지막에 받게끔 코드를 수정하면 될 일이였다.. 코드 수정하러간다 그럼 오늘 일기는 이만