해당 프로젝트는 경쟁을 통한 학습보다 서로 공부한 내용을 공유하거나, 누군가를 가르칠 때 효율이 더 높다는 연구 결과에 따라서 함께 만나서 공부할 수 있게 도와주는 웹 어플리케이션을 개발했습니다. 모임을 개설하고 만남 날짜를 예약해 활동할 수 있으며, 게시글을 통해 배웠던 내용을 공유하거나 소통할 수 있는 웹 어플리케이션입니다.
주요 기능으로는 우선 게시판 ( CRUD ) 형식으로 댓글과 태그 , 첨부파일 등 인터넷에 자주 사용되는 기능을 모두 함축시켜 만들었고 , 또 모임 기능과 만남 예약 시스템을 구현했습니다. 사용된 프레임워크는 크게 Socket
과 카카오 맵 API
, OAuth2.0
등이 있습니다.
프로젝트를 진행하면서 많은 우여곡절이 있었지만 내가 목표하고자 했던 기능은 모두 완성이 되었습니다. 주요 기능은 맨 하단의 깃허브 주소의 Read.me 를 읽어보시면 주요 기능들을 쉽게 볼 수 있고 배포된 사이트 ( https://mystorynews.com/ ) 를 통해서 직접 서비스를 활용해볼 수 있습니다.
해당 프로젝트는 개인 프로젝트로 백엔드와 프론트엔드 모두 혼자서 개발했습니다. 따라서 Rest API
를 통해 소통하는 과정을 직접 깨닫게 되었으며 동시에 Cors
문제를 어떻게 유연하게 해결할 수 있는지 알 수 있었습니다.
다양한 기능으로 1:N 과 N:1 구조를 데이터베이스 정규화에 맞게 나눌 수 있는 능력을 키웠었고 동시에 Join
을 이용하여 원하는 데이터를 추출할 수 있게 되었습니다.
그리고 복잡한 기능을 구현할 수 있는 능력을 기를 수 있게 되었습니다.
해당 프로젝트는 학교 수업에 진행했었던 프로젝트로 처음엔 Node.js
로 작성되었다가 Spring
, 이후 Spring Boot
로 변경이 되었습니다. 이렇게 프레임워크가 변경되면서 레거시 코드를 클린 코드로 개선시키고 , 객체 지향 언어의 특징인 SOLID 규칙을 지켜 개발을 진행하다보니 각 메서드마다 어떤 역할을 하는지 쉽게 정의할 수 있었고 , 작은 코드 조각들을 맞춰 개발을 진행하다보니 소설처럼 쉽게 읽히는 코드가 되었습니다.
해당 프로젝트는 Docker
와 AWS EC2
, S3
를 이용하여 배포를 했었고 쉽게 배포할 것이라는 예상과 달리 많은 어려움이 있었습니다. Https 보안 설정
을 위해 Route 53
의 도메인을 통해 설정을 해주어야하는데, 도메인으로부터 오는 모든 요청은 프론트엔드와 연결되는 문제가 있었습니다. OAuth2.0
과 Socket
는 백엔드 서버와 직접 연결하기 위해 Elastic Load Balance
를 사용하여 해결했습니다.
이처럼 예상치 못한 오류를 해결하는 과정에 Linux
에 대한 이해가 깊어질 수 있었으며, 뿐만 아니라 DevOps
를 이해할 수 있었습니다.
해당 프로젝트는 기획 없이 기술을 공부하면서 적용하고 싶었던 기능을 바로 반영했다 보니 레거시 코드가 많이 생겨났었고 데이터베이스 구조가 많이 변경되었습니다. 이 때문에 프로젝트 기간이 많이 늘어나는 결과를 초래했습니다.
이를 통해 처음에 구현하고자 하는 방향을 확실하게 정의하고, 구현이 완료된 이후에 기능을 확장하는 방향이 중요하다는 것을 깨닫게 되었습니다.
프론트에서 도커 컨테이너의 API 주소와 URI 정보가 모두 노출되었습니다. AWS EC2
에서 인바운드 보안 설정을 통해 어느정도 보안을 했지만 , 그럼에도 아쉬움이 많았습니다.
프론트엔드에 대한 지식이 많지 않은것도 원인이지만, 민감한 정보를 숨기는 방법과 , 웹 브라우저에서 노출되는 정보들을 ( LocalStorage , Network API 응답 데이터 ) 숨기는 방법을 꾸준히 공부해야할 것 같습니다.
기능 확장을 하면서 코드들이 수정됐기에 버그가 발생할 수 있는 코드를 모두 직접 확인했어야 했습니다. 통합 테스트를 위해 PostMan
소프트웨어를 이용하여 모두 테스트를 했지만 시간도 많이 걸리고 모든 버그를 잡을 수 없었습니다. 실제로 배포를 하고 나서 예상치 못한 버그가 발생하여 재반영을 해야 하는 일이 있었습니다.
이를 통해 지속적인 기능 확장을 위해서는 단위 테스트인 TDD
의 중요성을 깨닫게 되었습니다.
길고도 긴 나의 대표 프로젝트가 끝났습니다. 구현했던 기능에서 계속해서 확장해 나갔으며 이를 통해 많은 것을 배울 수 있었던 프로젝트였습니다. 많은 벽이 있었지만 포기하지 않고 계속해서 나아간 결과 이런 멋진 프로젝트와 개발 실력을 갖게 되었습니다.
뿐만 아니라 포기하지 않으니 실력과 자신감을 얻을 수 있었고, 추후에 벽을 만나도 주저하지 않고 나아가는 방법을 배울 수 있었던 값진 경험을 했습니다.
https://github.com/5tr1ker/myStory