프리코스 4~5주차 과제

프리코스 4~5주차에서 느낀 점

오픈 미션을 처음 봤을 때, 이번 프로젝트는 비교적 쉽게 끝날 것이라 생각했습니다. Typescript는 레퍼런스가 많고, OMV와 Docker로 Nextcloud를 구축하는 자료도 흔했기 때문입니다. 또 오래전부터 개인 서버를 만들고 싶어 준비해둔 하드웨어도 갖추고 있었기에, 큰 어려움 없이 진행될 것이라 예상했습니다.

그러나 실제로는 예상하지 못한 난관들이 많이 존재했습니다.

예상치 못한 일정과 변수들

2회차 기사 시험을 해외 일정과 겹쳐 제대로 준비하지 못했고 떨어졌습니다. 그래서 이번에는 절대 놓치지 않겠다는 마음으로 4주차 동안 기사 공부를 병행했습니다. 가채점 결과는 합격이 예상되지만, 여기서 또 다른 일정이 생겼습니다.

학과에서 진행하는 현장 실습이 추가되며 목·금 이틀을 강제로 비우게 되었고, 토요일에는 기억조차 못하고 있던 학술대회 논문 발표까지 겹치며 3일 연속으로 프로젝트를 진행하지 못하는 상황이 되었습니다.

하드웨어

서버의 메인 CPU를 N150으로 선택한 이유는 5W의 낮은 전력 소모량 덕분이었습니다. 전기 요금을 신경 쓰지 않고 24시간 돌릴 수 있는 NAS를 만드는 것이 목표였죠.

그러나 실제 구축을 진행하다 보니 NAS를 넘어 24시간 상시 서버로 확장하고 싶은 욕심이 생겼습니다. 그때부터 “그래도 N100보다 성능이 좋은 걸 선택한 게 다행이지만, 전력 소비를 감수하더라도 그래픽 카드를 달아 AI까지 돌릴 수 있는 서버로 갔으면 어땠을까…” 하는 아쉬움이 남았습니다.

nextcloud 성능 문제 해결 과정

처음에는 가이드대로 구성했는데도 성능이 너무 낮았습니다. 하드웨어 문제라 생각했지만, 벤치마크에서도 제 성능의 1/4도 나오지 않길래 이상함을 느꼈습니다.

여러 자료를 찾아본 끝에 문제의 원인을 확인했습니다.

  • Redis 기반 메모리 캐시 적용
  • PHP 설정을 통한 대용량 업·다운로드 허용
  • Cron 기반의 주기적 최적화 작업 필요

이후 성능이 정상적으로 올라갔고, Docker Compose 사용 경험까지 쌓으며 GitHub Action 등 CI 도구에 대한 이해도 함께 높아졌습니다. 덕분에 도커가 정확히 어떤 역할을 하는지 처음으로 제대로 이해하는 계기가 되었습니다.

블로그 구축 도전기

작년 우테코 7기 최종 미션 후 블로그에 회고를 올리라는 이야기가 있었지만, 그 당시에는 사용하는 블로그가 존재하지 않았기에 이번을 기회로 깃 블로그를 만들어 보자는 생각을 했었습니다.

처음 해보는 영역이였기에 많은 실패와 좌절을 겪었고, 특히 SEO는 아직까지도 문제가 해결되지 않았습니다. 불편한 블로그 업로드 방식까지 맞물려 이 프로젝트를 방치하고 있었습니다.

하지만 이번 오픈 미션을 보고, 우테코에 처음 도전한 7기때의 도전을 이번 기회에 마무리하고 싶었습니다.

Github Page

기존에 진행하던 방식도 깃블로그에서 시작했듯 여기서 시작했습니다. 일단 옵시디언이라는 메모앱 자체가 한국에서 많이 마이너 하며, 옵시디언의 특유의 마크업 문법을 적용 가능하며 가장 옵시디언 스러운 템플릿을 찾았고, 저는 Quartz 4를 찾게 되었습니다.

하지만 이는 한국에서의 레퍼런스는 4~5개 밖에 존재하지 않았고, 불친절한 부분이 많았기에 혼자서 도전해보기로 했습니다.

처음 겪는 문제는 v4브랜치로 업로드 하면 Page가 생겨야 하는데 생기지 않는다는 문제입니다. 당시에는 docker compose는 아예 모르는 분야였고, 이에 포기하고 AI를 통해 맞춤형 yaml 파일을 받아 사용했지만, OMV에서의 경험으로 기존에 제공하던 yaml 파일이 특정 저자 이름과 레포에서만 사용 가능하다는 것을 알 수 있었고, 이를 수정하여 확장 프로그램에서의 도움 사이트를 구축하는 데 도움이 되었습니다.

https://bloodmoon3929.github.io/Obsidian-sync-blog/

현재는 제출 기간이 시급하여 Ai가 작성한 글로 임시로 등록해 두었고, 추후 변경할 예정입니다.

local

가장 시간이 오래 걸린 부분은 로컬 서버 구성 과정이었습니다.

  • OMV 환경에서 파일 위치가 기존 컴퓨터와 달라 혼란
  • 권한 문제로 파일 수정 불가
  • SSL 인증서 발급 문제
  • Docker 내부에서 외부 DNS 사용 불가
  • DuckDNS와 Cloudflare proxy 충돌
  • nginx Load Balancer 구성, 잘못된 포트 라우팅
  • GitHub DNS가 fallback되는 문제

이 과정들을 해결하면서 “단순히 코드만 작성하는 것이 개발의 전부는 아니다”라는 것을 크게 느꼈습니다. 보이지 않는 곳에서 시스템이 어떻게 돌아가는지 이해해야 했고, 그 과정에서 네트워크와 인프라 전반에 대한 시야가 한층 넓어졌습니다.

특히 loadbalancer를 구상하며, 기존에는 cloudflare의 workers와 tunnel로 이를 구성하려 했으나, duckDNS가 이를 허락하지 않는 점에서 이는 추후 사게될 도메인을 적용하기 위해 잠시 비워두고, nginx로 이를 관리하는 방향으로 구성했습니다.

Obsidian 확장 프로그램 개발

플러그인을 만들며 다른 플러그인의 소스를 열어보니 구조가 항상 비슷했고, 코드 양식이 마치 여러개의 코드를 기워붙인 구조가 많았습니다. 그래서 “이건 플러그인을 만드는 템플릿이 있을거다”이라 확신하고 이를 찾아보았고, obsidian-sample-plugin이라는 레포를 찾게 되었습니다.

확장 프로그램을 만들며 우테코에서의 MVC에 대한 학습이 도움이 되었습니다. 원래는 DDD로 만들려 했으나 구모가 작은 프로젝트라는 점과, 처음 쓰는 언어이기에 낮은 이해도를 가졌기에 그나마 익숙한 MVC패턴을 참조하여 진행하였습니다.

  • 안드로이드·윈도우·맥 모두에서 사용 가능하도록 FTP 방식 고려 → 모듈 무거움으로 폐기
  • 대신 SMB 기반으로 구현
  • GitHub API 모듈인 Octokit 사용 → 모바일에서도 GitHub 업로드 가능해짐

UI는 아직 만족스럽지 않지만, 이는 추후 CI/CD 과정에서 개선할 예정입니다.

현재는 공식 플러그인 승인 요청을 마쳤고, 2주 내로 검토 후 승인되면 정식 Obsidian 플러그인으로 등록될 예정입니다.

alt text

결론

이번 프리코스 4~5주차는 단순히 기능 구현을 넘어서, 인프라, 네트워크, 배포, 자동화, 플러그인 개발까지 처음 접해보는 영역을 폭넓게 다룬 기간이었습니다.

예상보다 훨씬 길고 험난한 과정이었지만, 그만큼 많은 것을 배우고 성장할 수 있었습니다. 특히 “개발자는 코드 외에도 알아야 할 것이 많다”는 사실을 몸소 체감한 시간이었습니다.

앞으로도 이 경험들을 바탕으로 더 깊이 있는 개발자로 나아가고 싶습니다.