이번 포스팅에서는 `StudyWithMe` 프로젝트에서 `n8n`이 무엇인지. 그리고 사용하계 된 계기에 관해 설명하려고 한다.
같이 프로젝트를 진행하시는 백엔드분이 `n8n`을 소개해주셨는데 말이 안되는 `오픈소스`이다...
(진짜 이걸로 못하는게 있을까 싶다..)
n8n이 뭘까?
`n8n`은 아주아주 다양한 작업을 자동화할 수 있는 확장 가능한 워크플로우 도구이다.
`nodemation`의 줄임말로, 노드 기반의 시각적 인터페이스를 통해 쉽게 워크플로우를 구성하고 실행할 수 있도록 도와준다.
기본적으로 `오픈소스`이지만 경쟁이 될 수 있는 클라우드 서비스를 만드는 것은 금지되어 있다.
그러나, 개인 또는 회사 내부에서 사용이 가능하다.
n8n의 주요 특징
시각적 플로우 빌더(가독성이 좋다.)
`n8n`은 직관적인 시각적 인터페이스를 제공한다. 그냥 사용자가 노드를 드래그 앤 드롭으로 쉽게 워크플로우를 구성할 수 있다.
각 노드는 데이터를 가져오고 변환하며 다른 서비스로 전달하는 작업을 수행한다.
다양한 트리거와 액션 노드를 활용하면 복잡한 자동화 작업도 손쉽게 구현가능하다.
오픈소스 및 셀프 호스팅
`n8n`의 가장 큰 장점은 `오픈소스`라는 것이다. 사용자는 소스코드를 직접 확인하고 수정할 수 있다.
(즉, 새로운 서비스가 계~~~속 추가된다는 것을 의미한다.)
또 다른 큰 장점으로는, 자신의 서버에 셀프 호스팅할 수 있다.
이는 비용 절감은 물론, 높은 맞춤화 가능성을 의미한다.(쉽게 내부망 서비스들에 접속)
확장성과 커스터마이제이션
`n8n`은 굉장히 다양한 노드를 제공하여 다양한 애플리케이션 및 서비스와의 통합을 지원한다.
필요에 따라 커스텀 노드를 작성하여 특별한 요구사항을 충족할 수 있으며,
자바스크립트나 파이썬 코드를 추가해 더욱 복잡한 로직을 구현할 수 있다.
n8n의 주요 용도
데이터 통합
여러 서비스에서 데이터를 수집해 중앙 집중식으로 처리하고 저장하는 데 사용된다.
이로 인해, 실시간으로 데이터를 처리하거나 반응하는 작업을 만들 수 있습니다.
알림 및 통지 시스템
이벤트가 발생할 때 자동으로 특정 액션을 수행하도록 설정할 수 있다.
예를 들어, 이메일 알림을 보내거나 슬랙 메시지를 전송하는 등의 작업을 자동화할 수 있다.
업무 자동화
반복적이고 시간 소모적인 작업을 자동화 한 생산성 향상이 가능하다.
예를 들어, 신규 직원의 계정 생성 및 설정, GitHub PR의 취약성 분석 등을 자동화할 수 있다.
근데 왜 스터디 윗 미에서 n8n을 사용했는데?
`StudyWithMe`는 같이 작업하시는 백엔드분의 `미니PC` 위에서 돌아간다.
따라서, `미니PC`에서 돌아가는 컨테이너는 `StudyWithMe` 프로젝트에서도 활용이 가능하다.
위와 같은 상황에서 백엔드분이 `미니PC`에 `n8n`을 실행하셨고 나에게 소개해주셨다.
그랬더니, `n8n` 이게 참 재밌다. `AWS`, `Jenkins`, `Github`, `Discord`, `Slack` 등등 뭐 없는게 없다.
그래서, 이것저것 만지다보니 미뤄뒀던 요구사항이 생각났다.
2025.01.15 - [프로젝트/StudyWithMe] - [StudyWithMe] 유저의 사업자 검수 요청을 처리하며 - 1
위 포스팅을 보면 알 수 있듯이 나는 초기 서비스인 `StudyWithMe` 프로젝트의 빠른 검수 요청 처리를 위해
사용자 검수 요청이 들어왔을 때 디스코드로 알림을 보내도록 설정했다.
그러나, 디스코드 알림 전송 과정에서 API가 전달되지 않았을 때 `Retry` 하는 과정은 따로 추가하지 않았다.
이유
- 제일 중요한 것은 어차피 직접 사용자 요청을 검수해야 하기 때문에 우리가 빨리 인식하는 것이 중요했다.
- 또한, `Retry`를 지정했다고 해서 `Retry`안에 반드시 성공할 보장도 없다.
- 또 다른 대책을 강구해야 함.
위의 이유들로 나는 `Retry`을 추가하는 것보다는 추후, `Spring Scheduler`를 활용해
"미검수 요청 건에 관해 SpringBoot 자체에서 디스코드 알림을 보내야겠다." 고 생각했었다.
그렇게 미뤄뒀었는데..
`n8n`을 접하니 "아! 이걸 쓰면 되겠구나!"라는 생각이 들었다.
`n8n`의 `Schedule Trigger`를 사용하면 굳이 `SpringBoot`에 해당 작업을 위임하지 않게되므로,
크게 중요하지 않은 작업으로 `SpringBoot` 자원을 낭비하지 않아도 되어 장점이 된다.
`StudyWithMe`에서는 굉장히 간단한 상황이지만 회사의 업무에서 적절하게 사용하면,
`SpringBoot`에서의 불필요한 `Spring Scheduler` 사용을 최적화 할 수 있을 것이다.
또한, 경우에 따라서 아예 시각을 나누는 것도 가능해보인다.
아래는 내가 `StudyWithMe`의 `n8n`을 활용해 주기적인 `DB` 확인을 통해,
미검수 요청 존재 시 디스코드 알림을 보내도록 한 플로우이다.
사용자 미검수 요청 디스코드 알림 전송 플로우
- `Schedule Trigger`을 활용해 30분마다 미검수 요청이 존재하는지 `DB` 조회를 시도한다.
- `PostgreSQL`에서 미검수 요청의 개수를 확인하는 `SELECT` 쿼리를 실행한다.
- `if` 노드를 활용해서 미검수 요청이 `0`개가 아니라면 관련 디스코드 알림 보내기를 시도한다.
- `Discord` 노드에서 정해진 `Webhook URL`로 미검수 요청 처리 건에 대한 알림을 전송한다.
1. Schedule Trigger
30분에 한번씩 실행되는 `CronJob` 설정
2. PostgreSQL
DB 커넥션 계정 생성
실행하고 싶은 쿼리 입력
3. IF
미검수 요청의 개수가 0이 아닌 경우 디스코드 알림 전송 분기 작업
4. Discord
웹훅 설정
5. 최종 결과
마무리하며
"와!!! n8n 완전 좋다!! 무조건 도입해야지!"는 잘못되었다고 생각이다.
나의 경우는 어차피 `미니PC`에 이미 `n8n`을 사용할 수 있는 환경이 구축되어 있기에
정말 호기심으로 적용해 본 것이다.
"그냥 편해서 구성해야지"는 배보다 배꼽이 더 클 수 있다고 생각한다.
하지만, 위에서 계속 언급했듯이 적절하게 `n8n`을 사용하면,
아주 쉬운 가독성으로 편리하게 작업할 수 있다!
'프로젝트 > StudyWithMe' 카테고리의 다른 글
[StudyWithMe] 유저의 사업자 검수 요청을 처리하며 - 2 (0) | 2025.01.24 |
---|---|
[StudyWithMe] 유저의 사업자 검수 요청을 처리하며 - 1 (0) | 2025.01.23 |
[StudyWithMe] Async Thread Pool과 CompletableFuture (0) | 2025.01.12 |
[StudyWithMe] 스터디 윗 미 dev 무중단 배포 (0) | 2024.12.24 |
[StudyWithMe] 영속성 컨텍스트와 관련된 퀴즈 풀어보실 분? (0) | 2024.12.23 |