오늘은 저번에 썻던 스레드 관련 글에 이어서 실제로 스레드 개수를 늘려나가며 테스트 하였던 과정을 소개하려고 한다!2024.11.13 - [notice-crawler] - [교내 공지사항 알림 서비스] 개발일기 6편 [스레드를 이용한 성능 최적화] [교내 공지사항 알림 서비스] 개발일기 6편 [스레드를 이용한 성능 최적화]오늘은 기존 이메일 발송시간이 너무 오래 걸리는 문제를 해결하는 과정을 기록하도록 하겠다. 기존 코드에서는 30명의 사용자에게 메일을 보내는데 1분 30초정도가 걸렸다. (49:24 ~ 50:55) 메일mythpoy.tistory.com 원래 Mockito 라이브러리를 통해 EmailService를 가짜 객체로 생성하여 테스트를 하고있었는데 실제 네트워크 I/O도 고려해야 했기 때문에 ..
생각해보니 내가만든 사이트 페이지가 어떻게 구성되어있는지 소개를 안했다;;먼저 메인페이지! 서비스에 대한 간단한 소개 및 구독신청, 구독취소 페이지로 이동하는 버튼을 배치하였다.다음으로 구독신청 페이지! 메일을 입력 후 구독요청 버튼을 누르면 인증번호가 메일로 전송된다. 사용자들의 편의를 위해 좌측 상단에 메인페이지로 가는 버튼을 추가하였다. 다음으로는 구독 취소 화면이다.여기도 기본적으로는 구독 신청화면과 거의 유사하다.그리고 20시에 메일을 받으면 이런식으로 온다!
오늘은 서버 배포과정에서 겪었던 수모들을 알려주고자 한다! 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분가량 소요 되었다 ㄷㄷ.그래도 성공적으로 잘 된 것 같아서 기분이 좋다. 혹시 몰라서 마지막에 받으신 구독자님께 메일을 드려보았다.근데 다시 생각해보면 내가 마지막에 받게끔 코드를 수정하면 될 일이였다.. 코드 수정하러간다 그럼 오늘 일기는 이만
이번 글에서는 메일 발송제한을 좀더 완화하기 위해 생각해낸 방법을 소개하겠다! 내가 만든 알림 서비스 구조에서 메일 발송을 하는 행동은 다음과 같다. 1. 사용자가 이메일 인증을 통해 구독을한다.2. 사용자가 이메일 인증을 통해 구독을 취소한다.3. 하루에 한번 당일 공지사항을 전달받는다. 사실상 1, 2번은 한세트이기 때문에 2개로 나뉜다. 때문에 Google 계정을 하나 더 만들어서 한 계정은 인증메일만 보내고 다른계정은 공지사항을 발송하는 역할을 맡게 하였다. 처음엔 2개의 메일 계정을 통해 메일 발송하는게 가능할지 확실치 않았는데 ChatGPT 선생님께서 좋은 방법을 제안해주셨다.spring: mail: verification: host: smtp.gmail.com por..