중고 거래 사이트 : HiFive
사용자끼리 중고 거래 후 후기를 통해 점수를 평가하고 점수로 거래자에 대한 신용도를 확인할 수 있는 사이트로 검색한 물품에 대한 시세 등을 제공한다.
프로젝트 팀이 정해지고 첫 회의를 가지기 전에 각자 만들고 싶은 웹 페이지가 있는지 생각해오기로 했다. 인당 한 개 이상의 의견은 내보자고 했고 하고 싶은 게 있다면 참고할 사이트를 2~3개 정도 가져오기로 하고 회의를 들어간 결과 내가 제안한 학사 관리 사이트와 중고 거래 사이트로 의견이 나뉘었다.
첫 프로젝트기도 하고 참고할 만한 사이트에는 쇼핑몰 사이트가 많은 것을 고려했고 중고 거래 사이트지만 다른 사이트에 별로 없는 시세 조회 기능이나 실시간 인기 카테고리 등 흥미로운 기능이 있어서 중고 거래 사이트로 의견이 모였다.
당근마켓, 중고나라, 번개장터 등 다양한 사이트를 참고하며 프로젝트에 대한 기획을 진행했다.
팀원 전체가 비전공자 혹은 개발자 경력이 없는 전공과 졸업생이기 때문에 DB나 기능 정의에 대한 부분이 익숙하지 않아 눈에 보이는 UI 구현을 먼저 진행하기로 했다.
프로젝트 회의가 학원 수업 진도는 꾸준히 진행되던 중에 하고 있었기 때문에 각자 수업에 무리가 가지 않아야 한다는 점도 고려했던 거 같다.
화려하지는 않아도 “통일성 있는 UI를 갖자!” 라는 팀의 목표에 맞추기 위해 핵심이 될 페이지들의 간단한 틀을 카카오 오븐으로 각자 구상해서 회의를 진행하고 전체적인 느낌을 맞췄다.
각 담당 페이지를 나누고 나서는 피그마를 통해서 각자 담당하는 페이지의 상세 UI를 디자인 해서 회의를 진행했다. UI 디자인을 하면서 UI를 만드는 건 단순히 예쁘고 깔끔하게 보여지는 부분일 뿐이라고 생각했는데 이 과정에서 사용자를 편하게 하려면 어떤 부분이 더 노출되면 좋은지 등을 이야기해볼 수 있어서 좋았다.
ERD Cloud를 이용해서 다이어그램을 만들었다. SQL 내보내기 기능이 존재하기 때문에 테이블 생성은 간편할 거라 생각했는데… 제약 조건이 제대로 들어가지 않는데다가 쌍따옴표가 알아서 들어가서 오히려 불편하기도 했다.
DB 설계 역시 팀원 전체가 참여했다. DB에 대한 이해도가 비슷했기 때문에 어느 한 사람이 이끌어서 간다거나 하는 부분이 없어서 회의하면서 디테일한 부분을 잡으려고 노력했다.
DB 설계를 하면서 내가 생각보다 SQL 복습을 진짜 안 했구나를 많이 깨달았다… 제약 조건은 다 부여했다고 생각했는데 FK 때문에 게시글 삭제나 회원 탈퇴가 진행이 안 돼서 생성된 테이블을 다 밀어야 했다거나… 그런 예외 상황들이 계속 발생했다.
물론 DB에 익숙하지 않고 개발자로서 역량이 부족한 우리가 좀 더 편해지는 방법으로는 제약 조건을 쓰지 않고 어느 정도 무시하면서 사용하는 방법도 있었으나 나중을 생각했을 때 도움이 될 거라고 생각하지 않았다. 그런 결과 JOIN을 3~4개씩 하는데도 결과값이 안 나온다거나 하는 에러 상황이 발생했다…
학원에서 강사님이 Git 사용법에 대해 잠깐 설명해주신 적이 있긴 했지만… 익숙하지 않고 수업 자료일뿐이라 다들 사용하지 않고 있었던데다가 배운지 시간이 꽤 지나서 우리 팀뿐만 아니라 반 전체적으로 GitHub에 팀 프로젝트 올려서 관리하는데 꽤 어려움을 겪었었다.
운이 좋게도(?) Git을 틈틈이 사용한 결과 우리 팀에서 Git 담당은 내가 맡게 되었는데 이때 역시 아… Git 공부를 좀 더 할 걸! 이라는 생각을 많이 했다. 실제 회사에서 사용하는 것처럼 관리를 해보고 싶었는데 이건 찾아보고 공부할 틈도 없이 어영부영 시작했다는 점이 아쉬움으로 남는다.
강사님이 Git 관리가 어려우면 하나의 레포지토리에 메인 브런치 하나에서 다 같이 사용하라고 하기도 하셨다.
그래도 우리 팀은 다들 Git에 금방 적응하기도 해서 각자 브런치를 생성해서 따로 버전 업그레이드를 하면서 관리하다가 필요한 시점에 메인 브런치에 합치면서 프로젝트를 진행했다.
쿼리문이나 DB 계정 정보가 담긴 properties 파일이나 암호화 키, 사용자가 업로드하는 파일이 담길 폴더 등 보안에 필요한 파일은 .gitignore에 추가해서 git 관리에서 제외 시켰다는 점도 뿌듯했다.
명명 규칙은 정확하게 정해진 것 없이 이정도만 하자! 정도로 시작했다.
다른 팀에서는 혹시 몰라서 각자 이름의 이니셜을 앞에 넣어서 사용하기도 했다던데.. 그 방법은 무리가 있을 거 같다고 판단해서
정도의 규칙만 정한 상태로 프로젝트를 진행했다.
아무래도 정확하게 정한 게 아닌데다 겹치는 부분에서는 후반부로 갈 수록 변수명이 겹쳐서 이벤트가 실행 안 되는 등에 대한 문제가 좀 생겼었다.
내가 담당한 페이지는 고객센터 및 신고하기 기능이었는데 관리자 권한을 가진 계정만 공지사항 및 자주하는 질문 게시글을 작성할 수 있게 하는 것과 사용자가 1:1 문의를 남기거나 거래 내역 혹은 판매글에 대한 신고글을 작성할 수 있게 하는 것들이었다.
글 작성 페이지에서 한 번에 여러 개의 첨부 파일을 불러와서 DB에 저장하는 것, 저장할 때 파일 저장이나 게시글 내용 저장에 대한 insert가 실패한다면 전부 rollback 시키는 것, 2주 내의 거래 내역만 불러와서 글 작성 시 해당 정보를 화면에 뿌려주는 것… 등등 생각도 못한 부분에서 난관에 부딪히기도 했다.
수업 때 배웠던 건 파일 하나 업로드였는데 여러 개의 파일로 바뀌면서 업로드가 제대로 안 된다거나 비교적 쉬웠던 댓글 기능도 table태그로 이루어진 구조가 아니고 div 태그로 묶인 UI 구조에 따라서 화면에 출력하고 데이터를 입력 받으려고 하니까 원하는 부분에 알맞게 안 들어간다거나 하는 부분들이 많았다.
기능 구현한 코드나 화면은 어려움을 겪었거나 새로운 부분을 알게 된 부분에 대해서 따로 작성해서 올리고 개별적으로 버전 업그레이드를 할 예정이다.
이번 프로젝트를 진행하면서 다음에는 기능을 무리하지 않는 선에서 정하고 설계 단계를 좀 더 섬세하게 해야 된다는 깨달음도 얻었다.
첫 프로젝트가 성공적일 수 없다는 말이 많겠지만 난 성공적이라고 생각하고 싶다! 겉보기엔 완성 안 된 프로젝트로 보일 수 있어도 느낀 점이 너무 많아서 큰 도움이 됐다. 혼자 개발하는 게 아니고 협업하면서 소통이 얼마나 중요한 일인지도 깨달았고, 어떤 부분을 더 공부하면 좋을지 많이 깨달았기 때문에!
이제는 홀가분한 마음으로 공부 열심히 해서 파이널을 더 성공적으로 만들 생각이다!