직니리서처 - 국비 강사가 직접 만든 국비 학원 추천 사이트

시작하기 전에...

안녕하세요. 국비학원강사이자 직리니서처 개발자입니다. 이 글을 쓰는 목적은 누군가에게 가르치려는 목적이 아닙니다. 제가 어떤 생각으로, 어떤 목적으로 프로젝트를 수행하였는지 등 개인 경험을 공유하고자 서술합니다. 그렇기때문에 주관적 의견이 많이 있을 수 있습니다. 더불어 기술적인 부분들을 설명하지는 않겠습니다만, 이 글을 보시는분들께서 검색을 하시기 편하게 키워드는 최대한 사용해보도록하겠습니다.

잘 부탁드립니다.

혹시 잘못된 정보가 있을 수 있으니 언제든지 비판적으로 의견 주셔도됩니다.

프로젝트의 시작

처음 프로젝트를 시작했을 때 목표는 강사 개인의 기술 역량 확보였습니다. 아무래도 강의를 오래하면 이론적인 부분들은 향상되지만 실무적인 부분은 떨어지니까요. 최신 트랜드 활용, 향후 트랜드 역량 확보 역시 큰 과제였습니다. 거기에 더해 향후 지속적인 리팩토링(잘 하진 못하지만 잼있어유!)을 할 수 있는 프로젝트가 필요했습니다.

프로젝트 선정 시 목표

  • 기능이 적어야 한다
  • 회원 가입은 없어야된다(아무도 안 쓸것 같음)
  • 단순 CRUD만하는 프로젝트가 아니고 지속적인 개인 공부를 위해 향후 리팩토링 할만한 기능의 코드가 필요하다
  • 프론트는 SPA로 진행한다
  • 서버 안정화와 보안 요소도 충분하게 진행해야 한다
  • AWS 기능은 충분히 활용하되, 가급적 인프라는 직접 다룬다
  • TDD 및 Agile 방법론을 적용해야 한다
  • 디자인패턴의 늪에 빠지지는 말되, 확실하게 필요하다 판단되면 과감하게 적용해야 한다
  • 프론트는 Typescript, 백엔드는 Kotlin 활용한다
  • 데이터 분석 및 시각화를 한다
  • UI/UX에 최대한 많은 고민을 해야 한다
  • 디자인은 과감하게 포기한다 (ㅠ_ㅠ)
  • 완성도는 높아야한다
  • 프로젝트 런칭 후 비즈니스 관점을 경험해야 한다
  • 개인 공부용 프로젝트이지만 그래도 누군가에게 도움이 되는 기능이었으면 좋겠다

그 외 자잘자잘한 목표들이 있었습니다. 저는 프로젝트 완료 이후 목표에 도달 했을까요? 마지막 부분에서 언급하도록 하겠습니다.

프로젝트 시스템 구성

개발 환경 I - 노트북 성능 및 소프트웨어

4년전 39만원에 구매한 asus vivobook(x505z)을 활용했습니다. (니가 너무 고생했다 ㅠㅠ) 물론 최적화 엄청 해놨습니다. 21인치 모니터와 기계식 키보드를 연결하고 폐관수련 하듯이 공부와 프로젝트를 시작합니다.

하드웨어

CPU: ryzen5 2500U
RAM: 4G + 8G(본체 직접 뜯어서 장착)

프로젝트 개발 시 지속적으로 실행 중인 프로그램

  • 넷플릭스
  • VSCode 3개(프론트엔드, 백엔드, 수집분석시스템 모두 VSCode 활용)
  • DBeaver
  • putty
  • filezilla
  • 크롬 창 20개

하드웨어 퍼포먼스가 낮은 이유로 최대한 가벼운 프로그램만 활용하였습니다. 모든 툴들 다 장단점이 있지만, 개인적으로는 이클립스는 느리고 무겁고, 인텔리제이도 무거워서 사실 선호하진 않습니다. (강의 땐 이클립스 활용합니다)

매일 매일 느꼈던 점: "우아- 이 노트북으로 다 되는구나.. 매일 고생한다 ㅠ"

개발 환경 II - 테스트 서버

집에 설치된 raspberypi 4B 2대
1번 raspberypi: mariaDB
2번 raspberypi: 도커 활용하여 백엔드, 프론트엔드, 크롤링 시스템 실행

라즈베리파이는 정말 사랑입니다 ㅠ_ㅠ
모든 개발자분들에게 추천 드려요(단, 극초보분들은 아직 안하시는게 좋습니다). 정말 많은 것을 경험하실 수 있으실 것입니다. 백엔드 개발자라면 IoT보단 자신만의 서버로 활용하시는거 너무 좋습니다. 인프라에 대한 이해도 많이 올리실 수 있으실거여요. 1년에 12,000원 정도하는 DNS도 구매하셔서 연결하시면 더 좋습니다.

개발 환경 III - 실서버

AWS 서버 3대
t3a.nano - ram 0.5g 데이터 수집 분석 시스템, 프론트엔드 배포
t3a.small - ram 2g 백엔드 배포
t3a.medium - ram 4g 데이터베이스

3년 예약 구매 비용: $58 + $231 + $462 = 대략 100만원
약 80만개의 후기 Amazon Comprehend 활용 비용 = 대략 80만원
매월 추가 비용: ALB, Storage, Amazon Comprehend = 아마 5만원? (확인 중)

Lightsail, RDS 고려 안한 이유: 연습 겸 가급적 직접 컨트롤하기 위해

개발 환경 IV - 언어 및 프레임워크

주 사용 언어

Java17, Javascript, python3.9

프레임워크

프론트엔드: React 18.2
백엔드: Springboot 2.7.8, Mybatis
데이터 수집 분석 시스템: 프레임워크 없음

언어 및 프레임워크 선택 이유

Java17
사실 코틀린으로 작업하려고 프로젝트 전에 일주일간 코틀린 문법 정리하면서 공부했습니다만, 역시나 netbeans와 만나면 항상 메모리가.. 문법 공부하는 도중에도 메모리가 너무 많이 사용되어서 이번엔 포기했습니다. 문법 공부한 것에 만족해야지요. Java11버전으로 시작하려다가 LTS 기간이 사실 얼마 안남았고, 새로나온 문법과 표준 API도 사용해볼 겸 Java17버전을 선택했습니다.

React
Vue는 이전 개인 사이드 프로젝트때 사용해봤기 때문에 이번엔 그래도 남들 다하는 리액트 사용해보자 생각해서 일주일정도 게시판 하나 만들면서 테스트하고 바로 진행하였습니다. 리액트 공부하면서 살짝 느꼈던 주관적인 생각은... 여러이유로 이거 왠지 나중엔 다른 프레임워크에게 잡아 먹힐듯 하다는 느낌도 많이 들었습니다.(후에 기회가 되면 서술해 보겠습니다) 그래서 사실 svelte로 전향할까 하다가 아직은 너무 트렌드한것보단 남들하는 것도 중요하니까 그냥 리액트로 정했습니다.

Springboot
대안이 없죠. 그나저나 프로젝트 생성할때 3.0.0 버전 뙇 뜨는거 보고.. 멘탈 한번 흔들렸습니다. 하.. 제발 그만 좀.. 언제까지 공부하게 할꺼야 ㅠㅠ

Mybatis
JPA와 Mybatis 사이에서 고민을 많이 했습니다. 프로젝트 기획상 CRUD보다는 R만 존재한다는 점, 대부분 통계 쿼리라는 점, 데이터베이스 마이그레이션 작업 계획이 전혀 없는 점, queryDSL 사용시 가독성이 과연 높을까에 대한 점, 수시로 기획이 변경될 수 있다는 점, entity와 dto 매핑의 노가다가 이번 프로젝트에서 나에게 의미가 있는가에 대한 점 등 고려하여 생산성, 가독성, 유지보수성 모두 Mybatis가 이번 프로젝트에서 낫다고 판단하여 정했습니다. 지금와서 생각해보면 DB 뷰 설계를 잘 해두면 JPA 선택도 나쁘지 않았겠다는 생각을 해봅니다.

Javascript
이 부분만큼은 정말 Typescript로 하고 싶었는데.. 정해진 시간 내에 결과 도달이 어려울 듯하고, 아직 완벽하게 JS를 정복했다고 생각하지 않았기 때문에 javascript로 정했습니다. 항상 느끼는 거지만 js가 모든 언어중에서 제일 괴랄한것 같아요. 아무래도 처음 등장 시에 목적 자체가 가벼운 스크립트용 언어였으니까요. (사실 제 전문 분야는 C, C++ 입니다 ㅠ.. 이젠 언어가 의미 있나 싶습니다만..)

하고 싶은 말

제가 이 글을 보고 계신 개발자분들에게 낮은 자세로 드리고자하는 말이 있습니다. 트렌드를 따라가는 것은 대부분 좋습니다. 새로운 프레임워크는 항상 개발을 더 편하게 만들려는 목적이 있으니까요(생산성 및 유지보수성 등). 하지만 레거시와 비교했을 때 장단점이 존재하는 경우도 있습니다. 무작정 트렌드를 따라가기보다 자신이 수행해야될 프로젝트의 상황에 걸맞는 프레임워크를 개인 주관에 따라 선택하는 역량도 매우 중요하다고 생각합니다. 경험 많은 개발자들도 때때로 무지성으로 트렌드를 선택했다가 단점 때문에 그 프로젝트가 더 늪에 빠지는 경험도 하셨을거라 생각합니다. 트렌드를 따라가기 전에 그 트렌드가 추구하는 바와 장단점도 꼭 깊이 생각하시길 바랍니다. 팀원들 상황도 고려해야겠죠.

프로젝트 진행 순서 및 후기

소요시간: 정부지원사업 신청 작업 포함 3개월

  • 아이디어 선정
  • 가능성 분석
  • 크롤링 시스템 구현
  • 데이터 기반 사이트 기획(기초 UI 제작)
  • 데이터 검증 및 설계
  • 프론트엔드, 백엔드 동시 구현
  • (중간 이벤트) 정부지원사업 신청 - 예창패, 창중대
  • 테스트 및 고도화
  • 구글, 네이버 SEO 작업
  • MVP 런칭
  • 홍보

아이디어 선정
개발자들은 항상 지식에 목마르게 되어있죠. 강의 하면서도 실무 능력이 떨어지는 것을 감안하여 중간중간 가볍게 토이프로젝트는 했습니다만, 무언가 부족함을 느끼고 2년전부터 폐관수련을 기획하게 됩니다. 기간은 대략 4~6개월로 계획하고 언제 실행할 것인지 생각했습니다. 그리고 2년전부터 생각나는 아이디어를 항상 노트에 적어두었습니다. 지금 다시보니 20여개 아이디어가 적혀있네요(대부분은 쓰잘데기 없어보입니다만). 그렇게 지내다가 어느날 학생하고 대화 도중 "학원을 선택하는게 너무 어려웠다. 특히 후기를 찾아보는게 너무 어려웠고 후기를 한 눈에 볼 수 있는 사이트가 있었으면 좋겠다" 는 얘기를 듣게 됩니다. 생각해보니 이 학생뿐만 아니라 많은 학생분들이 그렇게 생각할 것 같다는 확신이 들었고 아이디어를 적어두고 기획을 시작합니다. 그렇게 시간을 보내다가 폐관수련할 적절한 시기가 도달했고 공유오피스에 입주하여 공부를 시작합니다. 지금까지 주6일 하루 12시간 공부와 프로젝트를 하였습니다. 초기 몇개월은 보고 싶은 책들 보고 정리하면서 시간을 보내고, 중간 1개월은 게시판만들면서 배운 내용들을 적용해봅니다. 참고로 게시판 대충만들면 2시간내로 만들지만 게시판도 정말 고도화하게되면 년단위로 작업해도 모자를거여요(게시판 사랑합니다). 그리고 이제 프로젝트 수행 기간이 오게 되고 시작하게 됩니다. 국비 훈련 강사이기 때문에 가장 국비 교육에 대해 잘 알고 있고 다년간 후기들을 관찰해 오고 후기와 훈련과정의 상관관계를 항상 분석해왔기 때문에 본 아이디어가 제게 가장 적합하다는 생각을 하였습니다. (흔히 얘기하는 swot 분석 기준 내부 강점이 되겠죠)

가능성 분석
가능성 분석을 해야하죠? 가능성에 따라서 기획이 바뀔테니까요.

이제 직업훈련포털(HRD-Net) 사이트를 분석해봅니다. 당연히 모든 내용이 출력되어있으니까 크롤링은 가능하겠지만, 가장 효율적인 방법을 찾기위해 노력합니다. 다행히 api를 제공하고 있었고(아무리 생각해도 생색내기 API이긴하지만) 테스트 코드를 작성해서 분석하기 시작합니다. 후기에서 강사명이 언급된 경우 상당히 좋은 평가라는 것을 이미 인지하고 있었기때문에 "후기를 AI분석해서 통계하는 것도 의미가 있지 않을까?"라는 생각으로 여러가지 생각을 하게 됩니다. 머신러닝 모델링을 직접 할지, 기 학습된 것이 있는지 등 여러방향으로 고민하고 검색을 하게 됩니다. 그러다가 Amazon, Google, Naver에서 제공하는 자연어 처리 API에 후기를 입력하고 테스트를 해봤는데 활용 용도에서 상당히 의미있는 결과가 나와서 기획에 포함시키키로 결정합니다. Amazon과 Google에서 제공하는 자연어 처리 ML API는 비슷한 결과를 도출하였고 Naver ML API는 조금 다르게 결과를 출력하였습니다. 개인적으로는 아무래도 자연어처리 시스템이다보니 Naver ML API가 한국어 자연어 처리 부분에서는 더 나은 결과를 보여준 것 같다는 생각이 있었지만 아쉽게도 '개체 탐지' 기능(강사명 추출용)이 없는 관계로 선택을 하지 않았습니다. 기능이 있었으면 아마도 주저없이 Naver ML API를 채용했을거라 생각합니다. Amazon과 Google ML은 비슷한 결과를 도출하였기에 AWS를 사용하는 입장에서 결제 관리를 복잡하게 만들고 싶지 않아 Amazon ML(Amazon comprehend)을 최종적으로 선정합니다.

크롤링 시스템 및 AI 분석 시스템 구현
데이터에 결성이 생기면 이후 작업하는 모든 부분이 의미 없기때문에 빠르게 크롤링 시스템부터 제작을 합니다. 어떤 언어로 할지 고민을 조금 했었습니다만, python도 오랜만(?)에 익힐겸 언어는 python으로 선택하였습니다. 학원 정보, 과정 정보, 후기 및 평점 정보를 차근차근 쌓아 올렸습니다. 퍼포먼스 올릴겸 병렬처리도 작업합니다. 처음에는 모든 기능을 합쳐서 순서에따라 작업하였습니다만, 오류 발생 시 제어가 어려움에따라 각 기능들을 분류하여 시스템으로 격상시킵니다.(MSA?). 가장 어려웠던 부분들은 아무래도 외부 시스템과 연동이었고 HRD-Net 사이트에서 오류를 발생 시키는 부분들과 경우에 따른 예외들이 많은 관계로 적절한 예외 처리와 확인되지 않은 예외를 고려하여 안정성을 확보하는 일이 가장 어려웠습니다. 데이터 무결성이 가장 중요했으니까요. 트랜잭션 처리 및 적절한 로깅도 필요했구요. 에러 회복도 고려해야 했습니다. 많은 예외들이 발생할 가능성이 있었기에 적절한 예외처리를 위해 SRP원칙을 잘 지켜가면서 클래스 구조를 잘 잡는 것이 필요했습니다. 프레임워크를 사용하지 않았기때문에 모든 구조를 직접 잡아야했습니다. 효율을 떠나서 사실 이게 잼있죠. 사이트가 오픈된 지금 시점에도 아직 확인되진 않았습니다만 몇몇 가능성들을 눈 여겨보고 있습니다. 지속적으로 DB 백업도 진행하고 있구요.

데이터 기반 사이트 기획(기초 UI 제작)
이제 수집된 데이터를 기반으로 사이트 기획을 합니다. 이 시점에서 정해진 시간이 2달채 안남았기때문에 기획을 하는데 많은 시간을 쏟을 수 없었습니다. 어차피 나중에 변경될 가능성을 고려해서 바로 눈으로 보면서 생각하고자 React 프로젝트 생성 후 컴포넌트 없이 바로바로 페이지를 제작합니다. 항상 시간이 문제죠. 제작하고 눈으로 보고 바꾸고.. 제작하고 눈으로 보고 바꾸고.. 제작하고 눈으로 보고 바꾸고.. 이 과정을 일주일간 진행합니다. 사이트 오픈된 상황인 현재와 비교해 봤을 때 세밀한 부분들은 바뀌었지만 다행히 큰 틀은 변경되지 않았습니다. 너무 세밀하게 작업하면 나중에 기획이 변경 시에 상당한 고통 (다들 아시죠? ㅠ)을 안겨줄 것으로 예상했기에 루즈하게 기획합니다. 아쉽게도 이 시점에서 UI는 모바일로만 생각해서 작업한 것은 조금 후회가 되네요.

데이터 검증 및 설계
가장 중요한 부분은 백엔드 안정성이었기 때문에, 내부적으로 기능을 최대한 쪼개서 설계하고, 익셉션 처리는 내부적으로 확인된 예외와 확인되지 않은 예외 구분 합니다. 퍼포먼스보다는 안정성을 위해 구조를 우선시하여 설계하였습니다. 물론 이후 테스트 및 고도화 과정에서는 퍼포먼스를 고려하여 구조를 바꾼 부분도 있죠. 다만 설계 과정에서는 지속가능한 유지보수를 위해 안정정인 구조를 우선으로 설계하였습니다. 예측되는 보안 위협 역시 최대한 고려하여 설계하였습니다. 물론 항상 예측에서 넘어서는 일들은 많이 있겠죠 ㅠ. 설계를 기준으로 프론트엔드, 백엔드 가이드코드를 작성합니다.

조금 아쉬웠던 부분은 TDD를 적용하려고 했습니다만, 아무래도 기획이 루즈하게 작성된 점, 기능이 향후 자주 변경될 가능성이 있기에 기능 변경 시 TDD도 변경되기에 설계 시점에서는 방해 요소로 판단하여 빼었습니다. 아무래도 TDD를 적용하려면 가급적 완벽한 기획과 설계가 필요하니까요. 리팩토링 시점에서는 적용해야겠지요. 서비스 코드보다 테스트 코드량이 월등히 많을 듯하네요.

프론트엔드, 백엔드 동시 구현
기초 설계 코드를 기준으로 이제 쭉쭉 작업하기 시작합니다. 백엔드는 코드량이 많지 않았기 때문에 크게 문제가 없었습니다. 문제는 프론트엔드였는데요. 처음엔 열심히 구조 잘 잡고 컴포넌트 적절히 쪼개내며 hook도 일일히 빼내고 그렇게 작업하다가 중후반에는 시간에 쫓기기 시작하여 날코딩하기 시작합니다 ㅠㅠ. 리액트는 처음이기도 했고, 지금와서 생각해보면 리팩토링 할 코드가 상당히 많은 것 같네요. 너무 좋습니다.

(중간 이벤트) 정부지원사업 신청 - 예창패, 창중대
프로젝트 도중에 창업관련 정부지원사업이 있다는 것을 알게 되고 도전을 해보았습니다. 조금 늦게 알게되어서 급하게 부랴부랴 알아보고 신청하게 됩니다. 약 2주간 프로젝트 중단하고 잠 아껴가며 관련 세미나 참석, 유투브 강의 확인하고 신청서를 작성하게 됩니다. 초안 작성하고 1차 수정안 작성하고 2차 수정안 작성하고 제출하였습니다. 결과적으로 두개 모두 탈락하였습니다.

떨어진 것과는 별개로 이 과정은 제게 너무나도 소중한 경험이 되었습니다. 창업아이템 사업화를 할때 고려해야되는 부분들은 어떤것들인지, 단순히 아이템만 좋다고 성공하는 것은 아니다라는 점, 생존 경쟁을 위해 비즈니스 과점에서 어떤 것들을 고려해야하는지 등 준비를 하면서 상당한 지식들을 습득하게 되었습니다. 이 지식을 이번 프로젝트에서도 적용하여 더욱 습득할 예정입니다. 이 글을 읽고 계신 분들도 한번쯤 도전해 보시는 것도 추천드립니다.

다만, 파워오브글짓기 대회입니다. 관련 글짓기 컨설팅 업체도 많구요. 핵심은 15p 분량의 내용을 작성하되 5분내로 읽기 편하게 글써라 입니다. 저도 준비는 많이 했습니다만 지금 생각해보면 5분내로 읽기는 어렵게 글을 쓴 것 같아요.

테스트 및 고도화
이제 프로젝트 기본 기능은 잘 동작하기 시작합니다. 이 시점에서 AWS서버도 3대 3년 예약했습니다. 이제 최적화를 해야겠지요. 최대한 기능을 뜯어내서 구현을 하였기때문에 역시나 퍼포먼스 측면에서 오버헤드가 발생합니다. N+1문제도 많았구요. 데이터도 구현할때와 다르게 모든 데이터를 크롤링 완료하였고 통계 쿼리가 많았기때문에 갑자기 엄청나게 느려지기 시작합니다. 우선 DB 최적화 세팅을 하고, 쿼리 최적화를 실시했습니다. DB 최적화 이후 상당히 빨라지긴 하였습니다만 데이터량이 많고 워낙 쿼리가 무거웠기때문에 쿼리 최적화를 해도 DB서버에 부담이 너무 많이 가는 것 같았습니다. 출력되는 데이터가 꼭 실시간으로 업데이트 되지 않아도되는 관계로 통계 쿼리를 하루에 한번 전처리해서 결과를 테이블에 담아둡니다. 통계 처리가 완료된 테이블에서 단순하게 값들 추출해서 출력하면 되게하였습니다. 그리고 이 시점에서 필요한 DB 뷰를 생성해서 정리합니다. 프론트엔드 기준에서는 최대한 UI를 조금 더 편하게 볼 수 있게 최선을 다 해봅니다. 바꾸고 테스트하고 바꾸고 테스트하고.. 계속 반복하였습니다.

구글, 네이버 SEO 작업
이제 실서버에도 기능을 올렸습니다. 개발자라고하면 여기가 끝이겠습니다만, 이제 이 프로젝트가 검색이 되어야겠죠. 여기서부터는 저도 처음 경험하는 부분이라 검색을 많이 했습니다. google trends 키워드 확인, Meta description , Page Headings 최적화 , amp, canonical, sitemap.xml 등 Search Engine Optimization(SEO) 작업을 수행합니다. 물론 앞으로도 지속적으로 검색엔진 노출에 필요한 부분들을 계속 강화해야겠지요. 이 시점에서 알게된것은 네이버가 생각보단 폐쇠적이구나라는 생각을 많이 하게되었습니다. 자체 컨텐츠(블로그, 카페 등)를 우선 순위로 하다보니 그렇긴 합니다만 조금 아쉬운 부분이 있네요. 이 부분도 공략을 하기위해 노력해봐야할 것 같습니다. 이런 경험 하나하나가 좋은 경험이었던것 같아요.

MVP 런칭
2023년 4월 12일 공개를 시작합니다.

홍보
이제 사이트를 알려야합니다. 커뮤니티, 블로그, SNS 등 작업을 해야겠지요. 이 부분에 대해서도 정말 많은 생각을 하게됩니다. "커뮤니티에 그냥 달랑 한 줄 올리면 누가 볼까?", "광고에 지친 사람들에게 거부감을 주진 않을까?" 등 여러가지 생각을 하게됩니다. "그럼 기브앤테이크를 하자!! 내가 가장 잘하는 것으로 사람들에게 좋은 정보를 주고 사이트를 이용하게 유도해보자." 이렇게 생각을 해봅니다. 사실 수익성 사이트가 아니다보니 이렇게까지 해야되나 싶긴 합니다만.. 그래도 모든게 다 좋은 경험이 되겠죠. 이제 국비 학원 관련 youtube 영상을 찍어야겠지요. 사실 요즘 하나하나의 경험이 힘들긴하지만 좋은 경험이 되고 있습니다. 그리고 이제 ChatGPT가 빛을 발할때가 왔습니다. 아직 시작은 안했지만 아주 잼있는 경험이 될 것이라고 생각합니다. ChatGPT를 활용한 홍보 전략과 이 후 결과를 향후 공유하도록 하겠습니다.

프로젝트 목표 대비 성과 및 자아성찰

이제 슬슬 마무리 할때가 되었습니다. 저는 처음 설정한 목표에 도달하였을까요? 우선 종합적인 평가를 내리자면, 이번 폐관수련의 경험은 이제 다시는 못하겠지만 너무 좋은 경험이 되었다고 생각합니다. 사실 지금 저는 이번 과정에 너무나도 만족합니다. 목표를 하나씩 되돌아보죠.

기능이 적어야 한다
개인적으로는 너무 깔끔하게 필요한 기능만 잘 나왔다고 생각합니다.

회원 가입은 없어야된다(아무도 안 쓸것 같음)
이 목표 설정은 너무 잘한것 같아요. 다른 아이디어들은 대부분 회원가입이 있었습니다.

단순 CRUD만하는 프로젝트가 아니고 지속적인 개인 공부를 위해 향후 리팩토링 할만한 기능의 코드가 필요하다
조금 아쉬운점은 백엔드는 단순해서 리팩토링 할만한 코드가 별로 없습니다. 물론 아예 없진 않겠죠. 다행인건 크롤링 및 분석 코드가 프레임워크 없이 작업해서 구조를 마음대로 작성할 수 있었습니다. 파이썬인게 아쉽긴 합니다만 언어가 뭐가 문제가 되겠습니까. 여기 리팩토링이 너무나도 재미있을 것 같습니다. 그 전에 TDD 작업부터 해야겠지만서도요. 파이썬 TDD가.. 하아.. 안해봤습니다만 제발 단위테스트 프레임워크 좋은게 있길 바랍니다 ㅠ. 물론 프론트엔드쪽도 리팩토링해야합니다. 다만, 아무래도 프레임워크가 끼어있고 이번 프로젝트 이후 리액트에 대한 의구심이 조금 있기에 우선 순위에서는 빠질 것 같습니다.

프론트는 SPA로 진행한다
리액트에 대한 의구심과는 별개로 사실 너무 잼있긴 했습니다.

서버 안정화와 보안 요소도 충분하게 진행해야 한다
많은 고려를 했습니다. 이런 생각들은 저를 성장시키기에 충분했다고 생각합니다. 물론 지속적으로 확인하고 작업해야겠지요. 아직 보안 부분은 1차(프론트엔드), 2차(백엔드), 3차(DB)로 막아야하는 부분들 1차에서만 막고 끝낸 경우도 많습니다. 시간 내서 천천히 작업할 예정입니다.

AWS 기능은 충분히 활용하되, 가급적 인프라는 직접 다룬다
각 서버가 동작하는 방식을 최대한 고려해서 적합한 EC2 서버 3대 구매 후 모든 프로그램을 다 설치하고 최적화 합니다. 인프라를 다루는 일은 항상 재미있는 것 같아요. AWS 추가 기능은 route53, ABL 정도만 활용했습니다. 원래 Let's Encrypt로 https 구성하려고 했습니다만, 향후 서버의 수평적 확장도 고려할겸 https 쉽게 구성할 겸 ABL 활용했습니다. 근데 AWS는 먼가 설정할때마다 다 돈이라서 ㅠㅠ 나중에 필요없으면 뜯어내고 Let's Encrypt 활용해야겠지요. 개인적으로 보안 관점에서 트래픽 제어를 어떻게 할까 고민하다가 AWS에서 제공하는게 있어서 활용하려고 했습니다. 근데 역시나 돈이... 아우 진짜... 그래서 트래픽 제어는 조금 보안적으로 약하지만 백엔드 서버에서 처리하였습니다.

TDD 및 Agile 방법론을 적용해야 한다
생각보다 아주 많이 미흡했습니다. 사실 이 부분이 이번 프로젝트의 핵심이었지만 앞으로 계속 리팩토링하면서 개선해야겠지요.

디자인패턴의 늪에 빠지지는 말되, 확실하게 필요하다 판단되면 과감하게 적용해야 한다
이 부분도 사실 일정 시점부터는 시간 관계상 많이 미흡하였습니다. 그래도 앞으로의 리팩토링이 너무 기대가 됩니다.

프론트는 Typescript, 백엔드는 Kotlin 활용한다
개인 노트북의 한계상 포기했습니다. 다음 기회에 해봐야겠네요 ㅠ. 이 부분 역시 아쉽습니다.

데이터 분석 및 시각화를 한다
다행히 프로젝트의 핵심 기능은 통계였습니다. 여러 시각화 라이브러리를 비교했고, 리액트용으로 너무 좋은 시각화 라이브러리가 있어서 행복했습니다. nivo라이브러리를 활용하였습니다.

UI/UX에 최대한 많은 고민을 해야 한다
이번에 그래도 나름 정말 고민 많이하고 UX를 작성했습니다. "어떻게 하면 사용자가 최소한 클릭으로 원하는 정보에 도달 할 수 있을까?", "처음 접하는 사람이 얼마나 빠르게 적응 할 수 있을까?", "모바일 사용자는 왼손으로 버튼을 클릭할까?", "애매모호한 표현들이 있는가?", "선택된 색들이 내용을 보는데 시선을 방해하진 않을까?", "스티키는 어디까지 써야할까? 작은 핸드폰에서는 스티기가 본문 내용을 방해하진 않을까?" ... 등등 하루 하루 매일 매일 집으로 돌아오는 길에 테스트하면서 생각했습니다. 물론 제가 기획자가 아니기 때문에 부족한 부분들이 많이 있겠습니다만, 이런 생각 자체는 정말 좋은 경험이었다고 생각합니다. 물론 아직도 몇몇 부족한 부분들이 눈에 띕니다. 계속 고도화해야겠지요.

디자인은 과감하게 포기한다
유일하게 디자인을 한 부분은 favicon.ico 만드는 일이었습니다. 아이패드와 애플펜슬을 꺼내들고 그림을 그리기 시작합니다. 역시나 7살짜리 아이가 그린 그림인듯한 그림이 나오는 군요. svg로 컨버팅하고 서버에 올립니다.

완성도는 높아야한다
어떤 기능을 작업할때 목표가 동작만 되는 것이라고 하면 날코딩으로 빠르게 작업 하면 되겠죠. 실상 현업에서는 프로젝트의 정해진 시간이 있기때문에 시간을 맞추기 위해서 날코딩하는 경우가 많이 있습니다. 저를 포함해서 말이죠. 그래서 이번 프로젝트는 기능을 적게하되 하나하나의 기능을 유지보수 측면(확장성), 다른 사람이 내 코드를 볼때 얼마나 편하게 볼수 있는지(가독성), 보안적인 측면, 안정적인 측면을 최대한 고려해서 작성하려고 노력했습니다. 이 부분이 사실 이 프로젝트의 가장 중요한 목표였으니까요. 처음에는 말이죠. 역시나 모든 것을 고려하며 작성하기엔 2달이라는 시간은 조금 부족했던 것 같습니다. 이 부분에서는 앞으로 가야할 길이 많이 남은 것 같습니다. 그래도 리팩토링을 연습하기위한 코드가 만들어져서 앞으로가 기대 됩니다.

프로젝트 런칭 후 비즈니스 관점을 경험해야 한다
수익 구조가 있는 프로젝트는 아닙니다만, 검색 노출 SEO 작업 및 홍보 작업(이제 시작해야겠죠)을 하면서 생각보다 여러생각들이 들었습니다. 사실 조금이라도 google ads에 비용 지불해서 홍보도 해보고 싶긴해요. 비용을 지불한 만큼 갚어치가 있는가? 비용을 지불하면 얼마나 사용자가 추가될 수 있는가? 이런 부분들도 알고 싶습니다. 만약 해보면 이 부분도 결과 공유해드리도록 하겠습니다.

Google Search Console 내용 중 게재순위를 올리는 것이 핵심입니다. 순위 매기는 로직이 상당히 복잡하더라구요. 그 모든 방법들 중 점수를 많이 받을 수 있는 것들 기준으로 하나씩 적용해서 올려봐야 할 것 같습니다.

개인 공부용 프로젝트이지만 그래도 누군가에게 도움이 되는 기능이었으면 좋겠다
제가 만든 사이트가 도움이 되셨나요? 부디 몇몇분에게라도 도움이 되는 의미있는 프로젝트였으면 좋겠습니다.

마치며...

학생분들의 프로젝트 발표가 생각나네요. 저와 같은 마음이었을까요. 3개월간 정말 모든걸 바쳐서 달려왔습니다. 이젠 내려놓고 조금 쉬고 싶네요.

제 경험이 여려분들께 도움이 되었으면 좋겠습니다.

직니리서처 - 국비 강사가 직접 만든 국비 학원 추천 사이트

국비 강사가 직접 추천하는 국비 학원

profile
1인 개발자, 국비 직업 훈련 강사, 그냥 잠만 자고 싶다

1개의 댓글

comment-user-thumbnail
2024년 2월 2일

우연히 추천으로 알게되었는데 정말 유용하게 잘 만드셨어요! 대단하시다고 말씀드리고 싶습니다. 게다가 개발과정까지 포스팅해주시니 너무 감사하고 자극 받고 갑니다 ^^ 포스팅 많이해주세요! 응원하겠습니다!

답글 달기