본문 바로가기

웹 개발

파이널 프로젝트를 마치며

728x90

학원에서의 마지막 프로젝트가 끝났다.

6월 초부터 8월 초까지 약 두달간 진행했던 프로젝트였다.

세미프로젝트와 주제가 같은 숙소 임대, 예약 프로젝트를 진행했다.

왜 같은 주제로 했냐면 

  1. 해당 주제에 사용되는 기능을 구현하는 재미가 있었다.
    1. 숙소 등록, 숙소 예약 등 해당 주제의 필수 로직
    2. 프로필 등록하거나 수정 하는 것. 호스트와의 대화(메시지 기능)
  2. 세미프로젝트는 JSP, java로 구현을 했었는데 Spring으로도 구현해보고싶었다.
    1. view파일에서 java코드를 아예 제거해버리는 등, 좀 더 명확하게 mvc패턴을 구현해보고싶었다

등등등...의 이유가 있었다.

 

프로젝트 초반 3주동안은 설계만 진행했다.

메뉴구조도, 와이어프레임, ERD 설계, ERD 규칙 정의서(코드그룹, 코드키) 등등...

특히 ERD는 2주동안 하니까 현실에서의 사물들이 테이블로 적용되는 느낌이 들었다.

 

실무에서는 더 길게 설계를 할텐데...걱정이 되기도 하면서 테이블이 얼마나 커질지 궁금하기도 하다.(파이널 프로젝트에서는 약 17개 정도 나왔다)

 

설계가 끝나고 코드 구현에 들어갈 때 행복했다.

코드 구현 초반에는 프레임워크 설계단계라고 해서 팀원끼리 공통으로 사용할 수 있는 기능들을 먼저 구현했다.

예를들어, 숙소 등록이나 프로필 수정 시 사진을 추가하거나 사진을 저장할 폴더가 생성되어야 했다.

(일자별로 폴더가 생성되어서 관리하기 편하도록 하려고)

그래서 util패키지를 만들고 폴더 생성, 파일저장, email 전송 등의 기능을 클래스만들고 Bean으로 등록시켰다.

실제로 공통으로 사용할 기능을 만들고 적용하는 모습을 보니 역시 객체지향인가...하는 생각이 들었다.

그렇게 프레임워크 설계가 끝나고 각자 맡은 기능 개발에 들어갔다!!

 

세미프로젝트를 해봤으니 솔직히 빨리 구현될 줄 알았다.(엄청난 착각이라는 걸 기능 개발 들어간 날 바로 알았다)

숙소등록 시작하면 테이블에 행이 생성되고(숙소 init하는 느낌) 페이지 별로 숙소에대한 요소들을 추가하는 것이다.

페이지 넘어 갈때마다 이전 페이지의 내용이 테이블에 UPDATE되는 방식으로 진행했다.

그리고 등록 중에 나갔다가 다시 들어와도 해당 테이블에 저장된 것들을 불러오도록 했는데 여기서 숙소 이미지 등록하는 것때문에 꽤 어려웠다.

이미지 등록하는 페이지에서 이미지를 등록한 후 나갔다가 들어왔을 때

일단 DB에서 이미지를 불러와야했다.근데 이제 해당 이미지를 수정하고자 다시 파일을 업로드하게되면 상관이 없는데,

이미 업로드한 이미지를 계속 사용하고자 했을 때가 문제가 생겼다.

왜냐면 input type=file의 경우는 value를 넣어줄 수 없었기 때문이다!!! 그래도 javascript로 적절히 분기시켜서 완벽하게 구현해냈다.

 

호스트가 등록돼있는 숙소들의 금액이랑 숙소상태(예약 가능, 예약 불가능 등) 설정하는 것에서도 꽤 애를 먹었다.

달력이 필요해서 fullCalendar API를 사용했는데... 사실 대부분의 달력 API는 일정관리용...이었고 세미프로젝트에서도 그냥 div, table로 달력 만들어서 사용했었기 때문에 더 힘들었다.

날짜 칸 클릭시 발생하는 event랑 선택한 날짜들을 데이터로 넘겨주는 것이 특히 어려웠다.

API를 원래 용도가 아닌 다른 용도로 사용하려고 해서 그랬던거 같다.

그래도 직접 만드는 것은 해봤으니, API를 사용해보자라는 생각이 들어 포기하지 않았고, 

구글링과 gpt의 도움을 받아 해당 기능도 무사히 구현했다.

어느정도 기능이 구현된 후에 다시 api 코드를 천천히 보니 머릿속에 쑥쑥 들어왔다.

 

나머지 내가 맡았던 것들은 위시리스트나 개인정보 수정 등이 있었는데

이런것들을 큰 어려움 없이 구현을 완료했다. (어려운거 먼저 끝내면서 실력이 늘은건가...ㅋㅋ)

 

그래도 어렵고, 잘 안되는 것이 해결되고 구현되는 즐거움이 좋았다.

 

디자인 같은 경우는 팀원 중 아는 분께 부탁드렸다.

우리가 만든 와이어프레임을 드리고, 에어비엔비를 참고해서 만들어주셨다.(각 페이지를 css랑 js 파일로 주셨다)

디자인을 적용하는 것도 은근 어려웠다.

디자인된 페이지에 jstl로 for나 if를 사용했으면 편했을 거같은데, 이미 만들어놓은 것들에 디자인을 끼워 넣으려해서 그랬던거 같다. 그래도 확실히 디자인까지 적용되니까 실제 서비스되는 페이지같아서 느낌이 다르긴했다.

 

이렇게 약 2달간의 파이널 프로젝트가 끝났다.

세미프로젝트도 그렇고 프로젝트를 진행하면서 설계가 정말 중요한 것을 깨달았다.

확실히 설계를 제대로 해놓으면 코드구현 단계에서 설계로 다시 되돌아 올 일이 적었다.

(코드 구현하다 설계 수정하고...이런식으로 하면 비용적인 소모가 너무 크므로!!)

그래서 앞으로 취업해서 실무에 들어가게 되어도 설계를 소홀히 하면 안된다고 다짐했다.

 

이제 이력서, 자소서 쓰고 열심히 지원해야겠다.

얼른 취업되기를...

728x90