ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [취업] 시간표 자동 생성 프로그램 과제 후기
    소소한 IT 이야기 2018. 12. 19. 18:27
    반응형



    최근에 진행한 시간표 자동 생성 프로그램 과제를 진행하면서 느낀점과 아쉬웠던점 등을 작성하고자 포스팅을 하게되었습니다.


    우선 요번에 개발한 시간표 프로그램은 Heroku NodeJS Hosting 서비스를 활용하여 우선적으로 작동되고 있고, 현재 라즈베리파이에 있는 데이터를 Intel NUC 서버에 이전 작업을 진행중인데 도메인 관련해서 자꾸 문제가 발생해서 시간이 조금 걸릴듯 합니다.


    현 시점에서 이 과제로 과제 테스트로 합격한 상태이며 임원면접을 기다리고 있는 상황입니다. 요번 프로젝트를 진행하고 느낀점을 짧게 요약하자면, 최선을 다했지만 무엇을 모르고, 보완해야할 점들이 많이 보였음에도 불구하고 시간상 수정하지 못하는 불편함이 계속 남았던것같습니다. 


    그리고 소프트웨어의 설계의 중요성에 대해서도 확실히 알게되었구요. 개인적으로 이번 프로젝트를 진행해보면서 다양한 프로젝트들을 개발해 보아야겠다는 생각이 들었습니다. 요번에도 프로젝트를 진행하면서 어떤 부분이 부족한지, 개선되었으면 하는 점들이 끊임없이 보여 사실 굉장히 도움이 많이 되었습니다.


    이번 프로젝트의 Github 링크와 직접 접속 링크는 아래에서 확인이 가능합니다.


    Github : https://github.com/sangumee/Timeline-auto-generated-web-service

    Demo : https://auto-timeline.herokuapp.com


    데모의 경우 무료서버라 조만간 Intel NUC 개인 서버로 전부 이전 작업을 진행할 예정입니다.


    Github의 README.md에서도 작성하였지만 프로젝트의 디자인과 흐름도는 대략 아래 이미지와 같습니다.


    간략하게 설명드리자면, 메인페이지에서 학생 ID를 입력할 경우 MariaDB 데이터를 확인해서 데이터의 유무를 확인후 수강신청 자료가 없을 경우 수강신청페이지로, 자료가 있을경우 수강신청 완료페이지로 라우팅되는 흐름을 가지고 있습니다.


    또한 수강신청 페이지에서는 시간표의 중복 자료가 발생하지 않아야하고 삭제기능 또한 포함하여햐합니다.





    아쉬웠던점과 보완해야할 부분


    사실 테스트 환경에서는 기본적인 기능들은 작동하였지만 몇몇가지의 버그들이 있었지만 이를 수정하기 위해서는 프로그램 설계를 다시 해야하는 부분들이 있어 최종 제출까지 아쉬웠던 부분들이 많았습니다.


    우선 수강신청 페이지에서는 이미 MariaDB에 등록된 과목들의 데이터를 가져와서 페이지 테이블에 입력이되는데, 이 데이터들을 서버를 거치지 않고 시간표를 생성하려니 그 방법론에 대해서 굉장히 고민을 많이 했던것같습니다. 그리고 최종적으로 수강신청 버튼을 클릭하였을 때 서버로 데이터가 다시 전달되어야 하는데 Pug HTML Template에서는 이 방법을 잘 알지못해 input 태그에 hidden 값을 주어 이를 서버에서 SQL로 활용하여 데이터를 입력하였는데 그리좋은 방법은 아니라는 느낌이 많이 들었습니다. 분명 다른 방법이 있으리라 생각이 들었고, 사실 데이터를 처리하기위해선 문자열보단 배열을 생성해서 처리하면 좋을것같았는데 자바스크립트 자체의 기본기가 많이 또 부족하다는 생각도 들었습니다.


    또한 부트스트랩을 사용하면서 자연스래 jQuery가 같이 딸려오는 부분이 있다보니 jQuery 문법을 많이 사용하였는데 이것이 나중에 모듈화 시키는데 굉장히 많은 문제가 발생하리라는 생각을 못했습니다. 


    개인적으로 해외 프로그래밍 커뮤니티들이나 Stackoverflow같은 사이트들에서도 최근에 JavaScript 관련해서 질문을 남기면 jQuery를 최대한 쓰지 말자라는 분위기가 있어서 저 또한 Udacity 프로젝트들을 진행할때 최대한 JavaScript 문법만으로 프로젝트들을 진행해보려했던 기억이 있습니다. 게다가 ES6 문법들을 활용하면 훨씬 가독성이 좋은 코드를 짤수도 있다는 생각도 들었구요.


    그리고 코드들의 함수화가 굉장히 중요하다고 요번에 느꼈는데, 이 부분들을 제대로 활용하지 못한것같아서 굉장히 마음이 찝찝한 느낌이 계속 들었었습니다. 테스트들을 해보면서 기능을 추가할때마다 함수화가 되어있지않다보니 중복성도 높아지고, 한쪽을 고치면 한쪽이 작동하지 않는, 전형적인 스파게티 코드가 되었다는 느낌이 들어서 사실 이후에 이 프로젝트 설계를 완전히 다시해서 개발을 진행할 예정입니다.


    그 외에도 MariaDB(MySQL이랑 똑같죠..)의 SQL문을 제대로 다루지못한것같은 느낌과 데이터베이스 설계, 부분에서도 많은 문제가 있었던것같은데요. 우선 과목DB와 유저 DB를 생성했었는데 이를 다시 Join 할때 기본키로 등록해버리면 중복이 발생해서 INSERT가 되지 않는 문제가 발생했습니다. 이 과정에서 다차원배열 설계 같은 부분도 개념적으로만 알게되었는데 이를 DB 설계로 나타내려니 한정된 시간에 기능구현에 어려움이 있어 유저DB의 경우에는 기본키를 설정하지 않고 DB를 생성하였더니 나중에 면접관님이 테스트하신 DB에 중복데이터가 발생하는 문제가 발생했더군요.


    그리고 기존에는 POST로 서버에 요청하여 데이터를 서버에서 모두 처리한후 PUG HTML Template에 뿌려주는 상황만 존재했었는데 이번 프로젝트들의 경우에는 서버에서 데이터를 처리하는 경우는 SQL 쿼리문정도가 전부고 나머지는 프론트단의 JavaScript에서 기능을 구현하는 부분들이 있다보니 미숙한 부분들이 많았던것같습니다.


    사실 전에 Udacity 프로젝트들 중에서 Ajax를 활용한 프로젝트들도 진행했었고 완성하기까지 했었는데 이를 활용하지 못한것이 정말 아쉽게 생각합니다. 이번 기회에 그 기술을 경험해본것과 실전에 투입하여 익숙해지는데까지는 다르다라는것을 많이 느꼈던것같습니다.


    그리고 기존의 Udacity의 프로젝트들의 경우에는 각각의 기술들에 대해서 JS함수화, Ajax, 각종프레임워크, 문법들 에대해서 학습하고 이를 활용해보는 프로젝트들이 많다보니 프로젝트들을 진행할때 필요한 Assets들이 이미 제공되어있는 경우가 많았습니다. 그러면 제가 지금까지 배웠던 부분만 활용해보면 되는것인데 이번 프로젝트들의 경우에는 지금까지 배웠던것을 처음부터 한꺼번에 접목을 시켜야한다고 생각하니 디자인부분부터 설계까지 제가 생각해도 맘에 안드는 부분들이 많았습니다.


    그럼에도 불구하고 이번 프로젝트를 진행해보면서 느낀점은 무엇을 모르는지 알수있었던 동시에 개선점이나 버그들을 찾아내고 어떻게 수정해나가야할지, 이 부분에선 어떤 기술이 들어가면 되겠다라는 느낌이라던지, 기본기에서 무엇이 부족한지.. 같은 여러가지 복합적인 부분을 알수 있어서 정말 좋은 기회가 되었다고 생각됩니다.

    반응형

    댓글

Designed by Tistory.