마이갤러리 개발 삽질기 – 1) 나는 왜 이걸 만들고, 어떻게 만들 셈인가 + 1단계 완성 회고

코드스쿼드에서의 과정을 마치고 집에서 빈둥거리던 참이었다. 뭐라도 하지 않으면 배운 것을 곧 까먹겠다는 불안감이 몰려왔다.

배운 것을 복습하는 건 성실한 학생의 기본이지만 나는 사실 성실한 학생이 못 된다. 초등학교 시절부터의 유서 깊은 전통이다. 그럼에도 운이 좋아 노력한 것에 비해 늘 좋은 성과를 거뒀고 주변인들은 이런 나를 보고 “머리가 좋다” 며 칭찬하지만, 사실 머리가 좋다는 말 자체가 그리 좋은 칭찬이 못되는 데다가 나는 내 머리가 그리 좋은 편이 아님을 잘 알고 있다.

그간 잊고 살아도 상관 없었던 학교에서의 수많은 쓰잘데기 없는 배움들을 머릿속에서 비워낸 건 오히려 좀 자랑스럽게 생각하지만, 코딩이야 앞으로 내가 밥을 지어먹고 살 도구로 삼을 예정이므로 복습은 물론 심화 학습을 할 필요가 있었다.

그래서 시작했다. 이런 걸 만들기로….

포부는 거창해야 제맛….

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

진지하다.

코드스쿼드 박재성 선생님의 과정 회고 슬라이드를 보면서 내가 지난 6주간 학습한 내용을 다시 한 번 정리해 보았다:

  • Spring Boot 시작하기
  • Spring JPA, MySQL 맛보기
  • 원격 환경 배포하는 경험, 특히 AWS를 중심으로(사실 과정 전에도 수도없이 했던 것.)
  • TDD, 냄새 안 나는 코드를 향한 집념. 특히 TDD와 유닛 테스트에 대해 배운 것은 정말 큰 배움이었다. 
  • “동의되지 않는 권위에 굴복하지 말라” 사실 동의되는 권위가 별로 없어서 문제…. 

그리고 내가 구상한 마이갤러리의 기술적 요구사항, 그리고 단계별 구현 계획을 구성해 봤다.

마이갤러리가 사용할 기술.

  • Spring JPA + Java Persistence를 활용한 기본적인 CRUD.
  • Amazon S3 + AWS Java SDK를 활용한 오브젝트 관리.
  • AJAX. (AJAX polling 포함)
  • Spring Security + Social
  • WebSocket(Probably? 언젠가 실시간 메시징을 이걸로 구현해보고 싶다)

단계별 구현할 기능

1단계.
  • 사진 / 카테고리 CRUD. DB 기반 회원정보관리
  • AJAX 기반 파일 업로드.
  • 세션 기반 사용자 초대 기능.
2단계.
  • Spring Security를 이용한 회원 정보 관리 + Social Login 클래스 활용.
  • AJAX 폴링 기반 푸시알림.
  • Amazon S3 upload tracker stream을 이용한 파일 업로드 progress bar 구현. 이건 어떻게 해야 할지 정말 감도 안 온다 ㅋㅋㅋㅋ

썩 만족스럽지는 않지만 지난 2주간의 삽질로 1단계는 그 구현이 완전 성공하였다.

http://mygallery.ap-northeast-2.elasticbeanstalk.com/

실제 사진이 어떻게 표시되는지를 보고싶다면 아래의 초대 링크를 눌러보면 된다: mygallery.ap-northeast-2.elasticbeanstalk.com/invitation/wpfoipdkr

노파심에 드리는 말씀이지만 지금 서비스는 완전한 개발 허접이 개발로 개발한 수준이고 보안과 DB 운영이 모두 눈뜨고 봐 주기 어려운 수준이다(인메모리 H2를 사용중이다). 실제 회원가입을 한 후 이 서비스를 사진 공유용으로 사용해보려는 분이 없기를 기대한다. 아울러 모든 정보는 평문으로 전송되고 있음을 유념하시기 바란다.

그래도 2주 삽질해서 이런 걸 만들어냈다.

“개발은 원래 작게 시작하는 것” 이라고 많은 전문가들이 이야기한다. 몇 안되는 동의되는 권위 중 하나이므로 그들처럼 나도 아주 작게, 그리고 단순하게, 지난 6주간 배운 것들을 즐겁게 복습하며 만들었다.

즐겁게 출발했기에 앞으로의 고도화 과정도 즐거우리라 확신한다.

1단계 구현 회고.

긍정 평가
  • 처음으로 제공받은 템플릿도 없이 스스로 부트스트랩 예제를 뒤지고 CSS, JS 파일을 만들어가며 하나의 작동하는 웹 서비스를 배포하는 경험을 했다. 임기응변에 능한 나의 강점을 잘 발휘했다.
  • AWS 파일 업로드를 구현하며 AWS IAM roles에 대해 심화학습할 기회를 가졌다.
  • 매일 조금씩 나아가는 모습을 보였고, 큰 그림을 그려놓고 세부적인 부분을 더해가는 꼼꼼함이 좋았다. 이 과정 속에서 정해진 납기 (9월 17일, 지난 일요일)를 정확히 지킬 수 있었다.
  • AJAX에 대해 많은 공부를 했고, 이제 당황하지 않고 클라이언트 사이드와 백엔드 모두 원하는 내용대로 구현해볼 수 있는 수준이 됐다.
부정 평가.
  • 작업 우선순위의 설정에 대해 더 깊은 고민이 필요하다. 지금처럼 프론트-백엔드를 모두 구현해야 하는 프로젝트에 임할 때, 프론트가 먼저인가? 백엔드가 먼저인가? 알 수 없지만 지금처럼 프론트와 백을 왔다갔다하며 개발하는 것은 좋지 않다.
  • 완전한 TDD를 하지 못했고 유닛 테스트를 게을리했다. 아직도 Model 클래스의 구상을 잘 못하고 있다. Model 클래스와 Domain 클래스의 역할에 대한 더 깊은 공부와 고민이 필요하다.
  • 상기한 TDD를 게을리한 것의 대가로 만족스럽지 않은 코드를 얻어야했다. 기능 구현에 충실하여 목표했던 기능은 다 이루었으나 깔끔한 코드라는 인상을 받지 못한다.
  • 남의 JS 라이브러리 등을 참고했으면, 내가 무엇을 어디서 보고 어떻게 참고했는지를 정확히 기록해 두는 것이 좋겠다. 남들이 “이거 어디서 보고 따라했어요?” 라고 물으면 바로 대답해줄 수 있어야 한다. 그래야 나도 복습이 용이해진다.

-1단계까지 구현한 현재 코드는 https://github.com/seulgiwendy/yoojingram 에 올라가 있습니다. 


public static void main (String args[]){
System.out.println("hello, wordpress!");
}