GITHUB : Linkedin Auto Posting

v1 : githubAction + Make

지금 보니 처음 만들때가 거의 1년 전이 었다는게 신기하다.

이때는 시간을 적게 쓰고싶어서 Make라는 자동화 플랫폼을 이용하였다. (관련 포스팅)

다만 이 경우 자유도가 많이 떨어지고 최신 api로 갱신도 빠르게 이루어지지 않는것 같아서 파이썬 스크립트를 직접 짜서 시스템을 만들기로 했다.

처음에는 간단하게 보고 시작했는데 하다보니 내가 처음 해보는 작업이 꽤 있어서 우여곡절이 많았다.

v2 : python 스크립트 + Azure☁️

어쨌든 완성된게 아래 그림처럼 동작하는 버전2였다.

파이썬 스크립트 짜기

사실 파이썬 스크립트는 파이썬이 그렇게 어려운 언어가 아니었고, 예전에 배웠던 적이 있어서 금방 짰다.

다만 링크드인 api을 활용하는데 api문서가 정리가 잘 안되어 있는 부분이 있어서 좀 고생했다.

공식문서에 이전버전이 업데이트 안되어있는 경우가 있어서 대충 틀은 공식문서에서 참고하고 트러블 슈팅을 하면서 스택오버플로우 코드로 겨우겨우 기워맞췄다.

심지어 하도 왔다갔다 하면서 며칠 동안 계속 종일 링크드인 문서랑 스택오버플로우만 보다보니까 영어 읽기가 좀 늘었다.(이건 좀 좋았다)

하여간 크게 아래 기능들로 구성된 스크립트를 짰다.

  1. 블로그 피드 파싱
  2. 포스팅 업로드
  3. 이벤트를 알리기 위한 SMTP
  4. 인증작업+서버

인증 자동화

만들면서 가장 힘들었던 부분은 아무래도 인증 관련 절차를 구현하는 일이었던 것 같다.

링크드인 인증 시스템은

  1. 액세스토큰 만료
  2. 인증요청 URL
  3. 링크드인에서 로그인
  4. auth token발급
  5. auth token으로 액세스토큰 발급요청
  6. 액세스토큰 발급’

이런 과정이었다.

액세스 토큰이 만료되면 직접 수동으로 저 작업을 진행할 수도 있었지만 나는 내 링크드인이 알아서 잘 굴러가기를 바랬기 때문에 이 인증 작업 자동화를 무조건할거라고 빡빡 우겼다.

지금 생각하면 좋은 말로는 도전정신이었고, 다른말로는 그냥 무식해서 용감했던 것 같다.

대충 ‘할 수 있을거 같은데?’ 만 있고 어떻게 할지는 하나도 몰랐다.

다행히 백엔드를 잘 아는 친구가 속성 백엔드 강의를 해줘서 서버를 돌려서 리다이렉트 되는 auth 토큰을 서버에서 받아서 자동으로 액세스 토큰을 갱신하는 로직을 구현해냈다.

대부분 새로 배우는 지식들이라 시간이 많이 걸렸지만 도메인도 처음으로 사봤고, screen도 써보고, Fast api로 API도 만들어봤다ㅎㅎ

처음에는 맨땅에 헤딩하는 느낌이었는데 이렇게 한 번 만들어 보고 나니까 같이 작업했던 백엔드분들이 했던 말이 그런말이었구나 하는 생각이 들었다.

v3 : Python 스크립트 + Docker🐋

다 좋았던 버전2의 가장 큰 문제점은 학생용 클라우드 서비스를 사용한다는 점이었다.

그래서 크래딧을 다쓰고 졸업을 해버리니 이제 돈을 내야해서 다른 방법을 찾아보았다.

어떻게 할까 하다가 ‘그냥 집에서 돌리자!’ 하는 생각으로 어차피 매일 켜져있는 맥미니에 돌려 버리면 되겠다는 생각이 들었다.

그렇지만 맥은 너무 소중했고, 냅다 이걸 돌려버리기는 뭔가 찜찜해서 도커를 활용하기로 했다.

아래는 도커로 이전한 서비스 개요다.

Docker, Docker Compose

사실 도커도 수업시간에 ‘이런게 있다~’ 이 정도만 들었고 직접 사용해본 건 처음이었다.

대충 도커 문서를 다 훑어보고 이번에는 포스팅을 파싱하는 부분이랑 인증작업을 수행하는 부분을 나눠서 두개의 컨테이너를 만들었다.

원래 기존 클라우드에서 썼던걸 그대로 사용할까 하기도 했는데 하나의 컨테이너가 너무 뭘 많이 하나 싶기도 하고 정신이 좀 없어서 두개로 분리했다.

그러다보니 일일히 컨테이너 만드는게 귀찮아져서 도커 컴포즈도 공부해서 적용했다.

이렇게 하니까 평소 쓰던 4줄 명령어가 docker compose up 한 줄로 줄었다.

게다가 docker compose secret을 사용하면서 환경변수 파일을 좀더 안심하고 관리할수 있게 되었다.

다만 secret의 경우 읽기만 되고 쓰기가 안되다보니까 자동인증은 당분간 중단하게 되었다.🥲

더 알아보면 방법이 있지 않을까 싶긴하지만 일단 여기까지 한것도 내가 맨 처음에 예상했던 공부 범위를 아득히 넘었고 예상보다 시간도 훨씬 많이 쏟았다.

더 개선할 부분은 많이 있지만 이제 부터는 심심할때 하나씩 수정할 생각이다.

트러블 슈팅

도커 컨테이너에서 cron관련 오류가 났을때 왜 이러지 하고 한 이틀을 날린적이 있었다.

스택오버플로우를 다 뒤져서 별별 방법을 해봤는데 다 실패하고 결국에는 될 때까지 하기 방법으로 온갖 실험을 하다가 결국 원인이 윈도우 머신에서 동작시켜서 그런거였다는 것을 알게 됐다. (개행 문제였는데 윈도우의 경우는 \n\r, 리눅스는 \n 으로 다르다.)

수업시간에 컨테이너는 호스트 커널을 공유한다고 들었는데 완전 잊어버리고 있다가 이게 이 말이었구나 하고 엄청 허탈해졌다.

너무 어이없고 화나서 이건 볼때마다 생각날것 같다.🥲

🎉 결론

처음에 이걸 만들때는 그냥 링크드인 포스팅하기가 귀찮아서였다.

사실 시간 아낀다고 자동화 한다고 한건데 아끼는 시간이 그리 많지도 않았다.

링크드인에 포스팅하는게 뭐 얼마나 걸린다고 이걸 줄인다고 시간이 엄청 효율적이되지는 않았다.

근데 의외로 되게 있을 때랑 없을 때랑 역체감이 컸다.

여기서 약간 자동화의 무서움을 느낀것 같다.

이게 시간은 둘째치고 그 사소한 일에 신경을 쓰고 있는 것 자체가 사실은 꽤나 큰 낭비였다는걸 느꼈다.

자동화 되어있을때는 그냥 링크드인에 신경 자체를 끄고 살아도 알아서 링크드인이 쑥쑥 컸는데 이게 없으니까 내가 일일히 신경을 써야 얘가 크는게 너무 귀찮고 스트레스였다.

앞으로도 잘 관리하고 개선해서 평생 내 링크드인을 관리해줬으면 좋겠다.

하여간 오랜기간동안 다듬고 만들면서 굉장히 많은걸 배웠고, 신경쓸게 덜어지면서 결과도 좋았던 경험이었다.

다음에는 언제가 될지는 모르겠지만 도커 이미지를 좀 잘 다듬어서 배포해볼까 생각중이다.

댓글남기기