블로그 모임을 만들다...
블로그를 주기적으로 작성하고 싶었지만 이직 이후에 여러가지 핑계(?)를 대며 자주 작성하지 못하고 있었습니다.
그러다가 저와 비슷한 상황이던 대학교 동기랑 카톡하게 되었습니다.

이게 시작이었습니다.
정말정말 다행스럽게도 참여를 희망하는 분들이 꽤 모이게 되었고, (저 친구가 매우 인싸이기에 가능한 일이었던..)
저는 그렇게 '블로그 적금' 이라는 블로그 모임을 만들게 되었습니다.
모임 홍보 차 잠시 소개를.... ^^
사실 이 글은 블로그 적금 2기를 홍보하기 위해 작성한 글이기도 합니다...!
그래서 아주 잠시 모임 소개를 하자면,,,^^

요런 모임입니다.
'블로그 적금' 1기는 10회차까지 진행하기로 하였습니다. (블로그 포스팅 주기가 한 회차)
2주에 하나의 글을 포스팅하는 것을 목표로 하였지만,
기술 블로그를 처음 작성하는 분들도 계셨기 때문에 3회차까지는 기간을 3주로 진행하고, 4회차부터는 원래의 2주로 진행하기로 하였습니다.
포지션의 제한을 두지 않았기에 프론트, 백엔드, 기획 등 다른 분야의 글도 볼 수 있어서 더 좋은 것 같습니다 ^_^
2기에는 더 많은 분들과 이 모임을 함께하고 싶습니다. (6월 커밍수수수수순...)
이제 진짜 프로젝트 소개
사실 이것은 정말 작고 작은 프로젝트입니다.
회사 점심시간이나 자투리 시간을 이용해서 만든 아주 작고 작은,,, 그런 서버입니다.

사진처럼 매번 날짜 확인을 해서 모두에게 공지를 하는 것이 불필요하다고 느껴졌습니다.
마감일 하루 전까지 포스팅하지 않은 사람만을 대상으로 공지를 하고 싶었습니다.
그래서 만들게 되었습니다.
저는 이 서버를 개발하면서 두 번의 고민을 하였습니다.
1. 어떤 방식으로 포스팅 확인을 할 것인지,,?
웹 스크래핑 보다는 RSS 를 이용한 개발을 진행하게 되었습니다.
웹 스크래핑을 사용할 경우, 커스텀 스킨에 따라 HTML 구조가 변경될 수 있어 발행일을 정확히 파악하기 어려울 수도 있기 때문입니다.
2. 포스팅 주기 설정은 스케줄러? 아니면 다른 방법?
사실 이 부분을 정말 많이 고민하였는데요,
포스팅 간격이 3주인 회차가 있고, 2주인 회차가 있어서 스케줄러를 사용하기에는 불편할 것 같았습니다.

그리고 제가 서버를 시작하는 날에 따라서 스케줄러가 작동하는 시기가 달라지기 때문에
회차에 맞춰서 제대로 확인이 안될 것 같다는 생각을 했습니다. (그럴 일은 없어야하지만, 중간에 서버가 죽는다면 그 날짜로부터 다시 시작하기 때문에,,,)
그래서 마감기한 하루 전의 날짜들을 디비에 저장하고,
저장된 날짜가 되었을 때만 스케줄러를 작동시켜 오후 3시에 알림을 발송시키도록 개발하기로 하였습니다.
그래도 혹시 몰라서 스케줄러만을 이용하여 (개인용으로 사용을 하는 경우를 대비하여) 포스팅 주기 확인 할 수 있는 버전(v1)과
디비에 날짜를 저장하는 버전(v2) 두 가지를 만들었습니다.
그럼 개발환경은?
빠른 개발이 목적이었기 때문에 회사에서 사용하고 있는 기술들을 위주로 개발환경을 세팅하였습니다.
jdk21, mongoDB, webFlux 를 이용해서 빠르게 환경세팅을 완료하였습니다.
환경세팅은 이전에 제가 포스팅 했던 글들을 같이 확인해주시면 될 것 같습니다!
2025.01.04 - [SpringBoot] - [Spring] 커스텀 에러 만들기
2024.04.09 - [DB/Mongo] - [Mongo] MongoDB 설치 및 간단한 테스트 진행 (+에러해결)
2023.01.11 - [SpringBoot] - [Spring] Spring 환경 IntelliJ에 구축
블로그 포스팅을 RSS로 어떻게 확인하지?
RSS란?
RSS(Really Simple Syndication)는 웹사이트의 업데이트 내용을 쉽게 확인할 수 있도록 제공되는 표준 포맷입니다.
XML 형식으로 구성되어 있으며, 제목, 링크, 게시 날짜(pubDate) 등의 정보를 포함하고 있습니다.
모든 사이트가 RSS를 지원하는 것은 아니지만 다행히도 티스토리와 벨로그에서는 이를 제공하고 있습니다.
이러한 RSS 피드는 특정한 URL 을 통해 제공됩니다.
예를 들어, 블로그에서 RSS를 지원하면 RSS 피드를 제공하는 고유한 URL 이 있습니다.
RSS URL 을 요청하면, 해당 블로그의 정보를 볼 수 있는 RSS 피드(XML) 가 반환됩니다.
- RSS URL: RSS 피드(XML 데이터)를 제공하는 웹 주소(Endpoint)
- RSS 피드: RSS URL을 통해 받아오는 XML 형식의 데이터
RSS URL 로 바꾸는 방법은?
벨로그는 사용자 id를 기반으로 RSS 주소를 생성하고, (https://v2.velog.io/rss/{username})
티스토리는 기본적으로 /rss 경로를 붙여 RSS URL을 만듭니다.
현재 저의 블로그 주소를 예시로 들어보겠습니다.
티스토리를 사용하고 있기 때문에 https://ssddo-story.tistory.com/rss 가 RSS URL 이 됩니다.

그래서 이 부분을 아래처럼 코드로 작성할 수 있었습니다.
// Velog RSS 변환
URI uri = new URI(url);
String host = uri.getHost();
if (host != null && host.equals("velog.io")) {
String path = uri.getPath();
if (path.startsWith("/@")) {
String username = path.substring(2);
return "https://v2.velog.io/rss/" + username;
}
}
// Tistory RSS 변환
if (!url.endsWith("/rss")) {
return url.replaceAll("/+$", "") + "/rss";
}
전체적인 흐름은 이렇습니다! (v2 기준)
1. 디비에 확인을 진행할 날짜를 저장한다.

2. 그 날짜로부터 며칠 전까지의 포스팅을 확인할지 정한다. (저는 13일로 잡았습니다. 마감일 하루 전에 알림 보내기 위해,,,)

3. 혹시 모를 예외상황들을 막아준다.
- RSS가 아닌 HTML이 반환될 경우
- 벨로그, 티스토리가 아닌 다른 블로그 URL 이 저장되었을 경우
4. 포스팅 여부 확인 결과가 false 일 경우 이메일을 통한 알림 발송을 한다. (무료 최고)

마무리
자세한 코드 설명들은 깃헙 리드미에 업데이트를 할 예정입니다..
해당 레포에서 확인해주세요!
끝으로 이 작은 서버를 만들면서 자투리 시간을 잘 사용하면
집에서 잘 수 있는 시간을 앞당길 수 있겠다는 깨달음을 얻었습니다... 주륵
긴 글 읽어주셔서 감사합니다. 😋