업데이트:

프로젝트 소개

2021 어바웃 송담 훑어보기

2021 어바웃송담 서버 프로젝트 파일

 어바웃 송담을 새로 만들기에 앞서 가닥을 잡기 위해 기존 프로젝트를 다시 훑어보았다. 프론트엔드 개발용과 백엔드 개발용으로 프로젝트 폴더를 두 개 찾을 수 있었다. 백엔드용에는 프론트엔드 프로젝트와 동일한 내용이 ejs파일로 저장되어 있었다.

2021 어바웃 송담 디렉터리

1
2
3
4
5
6
7
8
9
import http.server
import socketserver

handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(('', 8080), handler) as httpd:
  print('Server listening on port 8080...')
  httpd.serve_forever()

 프론트엔드 개발용 프로젝트 폴더에는 클라이언트부 개발을 위한 테스트용 파이썬 http서버와 함께 커뮤니티 서비스에 필요한 대부분의 페이지가 구현되어있다.

어바웃 송담 리메이크

2021 어바웃송담 회원가입

 그러나 우리는 여기에서 갈피를 잃고 말았다. 무엇을 이용해, 어디에서부터 만들어야하는가? 우리에게는 아무런 요구사항 명세서도, 개발 명세서도 없었고 머릿속에 들어있는 그림도 없었다.

 말하자면 매우 포괄적이고 왜곡된 애자일 개발 방법론을 사용하고 있었다. 다시말해 어떠한 설계도 계획도 없이 허공에 허우적 거리고 있는 상황이었다. 그래서 우리는 기술스택부터 정하기로 했다.

 그 중에서도 UI 다음으로 완성도가 높았던 데이터베이스 부터 복구 및 재구성하기로 하였다. 데이터베이스는 기존과 같이 mySQL을 사용하고자 리눅스 서버에 설치하여 구성했다.

1
2
3
4
5
6
7
8
9
10
11
12
mySQL 
Database : ccsyasu
table : user, board_notice, board_free, api_user, api_list, api_list_map

user : stud_num(pk), id, pw, name
board_* : no(pk, start from 0), id(fk, from user table), context
board_*_comment : no(pk, start from 0), board_no(fk, from board tables), id(fk, from user table), context
api_list : no(pk, start from 0), name, desc, id(unique, identifier for api_list_*)
api_list_* : depends on each one of their require.
api_user : no(pk, start from 0), api_key(generated by user's stud_num), stud_num(fk, from user table)

api_list_map : no(pk, start from 0), name, desc, lat, lng, : 수정 필요

초기 DB 다이어그램

 개발 초기 데이터베이스를 구현하기 위해 메모했던 명세와 다이어그램을 찾을 수 있었다. 실제 데이터베이스로 구성하며 이름이 달라진 부분이 있고 나중에 개선과 변경이 있어 수정하였다.

 데이터베이스 구성을 모두 마친 후 남은것은 서버 구성이었다. 기존 백엔드 개발은 Node.JS/Express.js를 사용하나 교수님께서 JAVA와 SpringBoot가 세계 점유율 1위로 가장 대중적이라며 권유하셨고 그렇게 백엔드는 JAVA/SpringBoot로 결정해 모든 개발 준비를 마칠 수 있었다.

 그러나 문제가 있었다. 커뮤니티가 미완성인 채로 이미 2학기가 시작되었고, 학과 내 학생들이 우리가 뭘 만들고 뭘 해줄 수 있는지 이해하지 못하였다. 개발 노선을 틀어 완벽한 서비스 퍼블리싱보다 완성해 나가는것에 초점을 두게 되었고, 우리 서버와 커뮤니티를 활용할 수 있는 예제 프로젝트가 필요했다.

 어바웃 송담 커뮤니티 개발 자체는 전혀 어렵지 않았다. 개발 환경이 갖추어지고 어느정도 게획과 비전이 잡히니 순풍만범같이 개발은 순탄하게 진행되었다.

 큰 막힘 없이 분할 점령 방식으로 눈앞의 과제만 해결해나가며 MVC와 DTO구조에 Spring JPA를 사용하여 데이터베이스와 상호작용하고 세션등을 관리하는 구조로 완성하였다.

남은 프로젝트들

 커뮤니티 서비스는 댓글/글 좋아요 등 중요도가 떨어지는 부가 기능을 제외하고 모두 완성되어 API 서버 리스트 등의 페이지가 남아 API 서비스가 개발되기를 기다리고 있었다.

 이 시점에 개발에 난항을 겪은 것은 API 서버 프로젝트와 예제 프로젝트였다. API 서버는 개발이 처음이라 테스트가 생소했고 예제 프로젝트는 아이디어가 부족했다. 이들은 다음 글에서 다루도록 하겠다.

프로젝트 초기 계획도

 개발해야 할 프로젝트는 많아졌으나 개발인원은 두명으로 하나에 몰두할 시간과 자원은 한정되어있으니 프로젝트 하나하나의 개발 규모는 축소시키게 되었다. 그리고 가장 먼저 희생된 요소는 보안이었다.

 로그인 시스템 등에 SpringSecurity와 TLS, HTTPS 등 다양한 보안을 적용시키고 싶었으나 에제나 설정 방법 등 최신 정보 자료의 부족과 인증서 문제, 기존 서버에 적용시키기 어려움 등 시간을 쏟기에는 상황이 촉박하여 이를 포기하게 되었다.

프로젝트 후기 계획도

 따라서 최종적으로는 실제 환경의 서버들 보다는 보안이 취약하나 DB 비밀번호 암호화, API인증키 등 최소한의 보안만 챙겨가는 형태로 완성하게 되었다.