안녕하세요. 오랜만에 프로젝트와 관련된 글을 올리네요 :)
이번 프로젝트는 이제까지와 다르게 팀 프로젝트로 진행하게 되었습니다.
(드디어.. 다른 개발자들과 협업을 해보네요😆)
프로젝트를 진행하게 된 계기는
현재 제가 소속된 제주 더큰내일센터에서 업 프로젝트를 수행하는 교육 덕분에 진행하게 된 것입니다.
(여기서 업 프로젝트는 자신의 진로와 관련된 프로젝트를 개인 또는 팀으로 진행하는 것입니다.)
저는 개발을 시작한 이래로 개발 관련된 팀 프로젝트를 한 번도 진행해본 적이 없었습니다.
그렇다 보니 이번에 진행한 팀 프로젝트가 저에게 많은 배움을 준 값진 경험이 되었습니다.
업 프로젝트는 2022년 1월 25일부터 3월 17일까지 진행했습니다.
먼저 1월 25일부터 2월 4일까지는 팀을 결성하는데 시간을 쓴 것이니,
실제로 프로젝트를 진행한 기간은 약 한 달이라고 할 수 있겠네요.
팀 소개
먼저 우리 팀에 대해서 소개해드리겠습니다.
우리 팀은 "How we work(하위웍)"이라는 이름으로
웹과 앱을 사용하는 사용자를 중심으로 문제를 고민하고, 해결하는 개발팀입니다.
팀원은 3명으로
각각 프런트 엔드 개발자, 백엔드 개발자, 아이폰 앱 개발자로 구성되었습니다.
위 이미지를 보다시피 저는 Java, spring, MySql을 다루는 백엔드 개발자로 이번 프로젝트에서 CTO를 맡았습니다.
사실 실무의 뛰어난 시니어 개발자분들 만큼 능력 있는 CTO는 아닙니다😂
그래도 개인 프로젝트를 많이 했던 덕분에 개발 흐름과 웹에 대해서 비교적으로 역량을 갖추어진 상태여서
웹과 관련된 기술 부분에서 적극적으로 연구하고 역할에 맞게 팀을 이끌었습니다.
우리 팀은 프로젝트를 진행하기 전에 먼저 각자의 강점과 서로의 성장 목표에 대해서 알아보았습니다.
하위웍 팀이 궁금한 분들은 아래 Github 링크를 방문해주세요~! :)
https://github.com/HowWeWork/OurTeam
프로젝트 소개
문화 공유 웹/앱 플랫폼 - 헤리티지(Heritage)
애플리케이션의 이름은 헤리티지(Heritage)입니다.
왜 Heritage인가?
부르디외의 문화 자본론에 의하면, 사회적 위치는 경제 자본뿐 아니라 문화 자본에 따라 결정되며, 이에 따라 생활양식이 달라진다고 하였다. 문화소비는 사회집단의 표식처럼 기능하므로 상층 계급 간의 상호 면식, 교류 및 결속이 수월해지면서 이들 집단의 자본의 우위가 더욱 다져지게 된다.
우리 팀은, (문화 자본론에서 말하는 문화 소비의 개념에 의거하여) 다양한 계층의 수평적 문화 소통의 가상공간을 만들고자 한다. 이로 인해 특정 계급의 위계적 문화(혹은 고급/ 대중문화)가 아닌 모두가 향유하고 소통하는 모두의 수평적 문화의 장을 만들고자 한다.
프로젝트의 이름은 cultural heritage에서 따와 ‘헤리티지’라고 지었다.
→ Heritage 앱은 무엇일까?
Heritage 앱은 개인이 경험한 멋진 문화(취향)를 한 줄로 사람들에게 공유하는 문화유산 공유(추천) 게시판입니다.
→ 하위웍 팀이 생각한 페르소나(사용자)
영화에 관심 많은 28세 김문화 씨(남),
“최근 연극에 관심 많아졌는데 정보가 너무 많아, 그런데 어떻게 관심을 가져야 하지?
이것저것 회원 가입하고, 이게 활동 좀 하려고 했더니 이미 아는 사람들 끼만 친하잖아? 귀찮아... 그냥 보던 영화나 볼까...”를 고민하는 중!입니다.
하위웍팀은 김문화 씨와 같은 문화에 관심은 있으나, 쉽게 접근하지 못하는 사용자를 생각했습니다. 그리고 그들의 페인 포인트를 착안하여, 우리 팀만의 플랫폼을 개발했습니다.
또한, AI 추천이 아닌 더욱 다양한 문화를 접근하고 싶은 사람들을 우리의 사용자로 생각했습니다.
→ Heritage의 기능
* 게시판의 핵심 기능 (CRUD)
- 필수 내용을 기입 후 글쓰기 버튼을 통해 새 글 작성
- 전체 글 조회, 선택 글 조회
- 선택한 글 수정 기능
- 선택한 글 삭제 기능
* 사용자 맞춤 기능
- 좋아요 기능
- 좋아요 수 상위 게시글 상단 노출 기능
질문 : “AI로 추천해주는 플랫폼도 있는데, 굳이 개인이 추천하는 콘텐츠가 뭐가 더 나은가요?”
넷플릭스만 가도, ‘당신이 좋아할 만한 콘텐츠’라며 추천이 뜹니다. 내가 좋아할 것들을 미리 추천해준다니 참 간편한 세상입니다. 그러나 일각에서는 ‘편중된 시선’으로 점점 양극화되는 세상을 가속화한다는 우려도 있습니다. 저희는 이런 현상이 사회뿐 아니라, 개인에게도 좋지 않은 영향을 준다고 생각했습니다. 알고리즘은 현재의 나는 잘 알 수 있지만, 미래의 내가 어떻게 될 수 있는지는 알지 못하기 때문입니다. 따라서 다양한 문화를 접하는 하나의 방법으로서, 관심사가 전혀 다른 다양한 개인의 추천이 필요하다고 생각했습니다.
질문 : "그렇다면, 다양한 문화를 경험해야 하는 이유는 무엇일까요?"
다양한 문화를 경험해본 사람은, 자신에게 맞는 문화가 무엇인지 알 수 있습니다. 이러한 경험을 위해서는 처음 문화를 접할 때의 사용자 경험이 중요한데요, 첫 경험에서 시간과 돈만 낭비했다는 생각이 들면, 앞으로 다른 문화를 접하는 것을 시도하지 않을 가능성이 크기 때문입니다. 이 어색한 첫 단계를 재미있게 경험할 수 있다면, 그 문화는 자신의 취향이 될 수 있는 가능성을 갖게 됩니다. 우리 팀은 헤리티지 게시판을 통하여, 다양한 취향을 갖는 사람들이 많아지길 바랍니다.
결국, “다양한 취향으로 채운 일상은 더욱 행복하다고 우리 팀은 확신합니다.”
→ Heritage 클라이언트(웹/앱) UI
헤리티지에 대해서 더 자세하게 보고 싶은 분들은 아래 Github 링크를 참고해주세요.
https://github.com/HowWeWork/Heritage
나의 역할
이제 백엔드 서버 개발자인 저에 대해 이야기를 시작하겠습니다.
나는 프로젝트를 위해 어떤 고민을 했는가
① 첫 번째 고민은 이 포스팅의 처음 부분에서 말했듯이 팀 프로젝트는 처음이었습니다. 다시 말해서 서버를 구축한 뒤 어떻게 웹 프런트와 IOS 앱과 데이터를 주고받아야 하는지 무지한 상태였습니다. 그래서 어떻게 우리가 개발한 내용들을 연결시킬지에 대해서 고민했습니다.
② 두 번째는 서로 다른 분야일뿐더러, 아직 경험이 부족한 주니어 개발자들이어서 그런지 개발 이해 방식에 차이가 있었습니다. 예를 들어서 제가 기능을 설계해서 팀원 개발자들에게 전달해도 의도대로 실행이 안 되는 경우가 있었습니다. 또한 기술적인 설명과 전달의 한계가 있었습니다. 어찌 됐든 우리는 하나의 애플리케이션을 개발해야 했기 때문에 저는 어떻게 우리가 서로의 개발 방식을 이해하고 협업할 수 있을지 고민했습니다.
③ 세 번째로 팀원 간의 레벨 차이가 있었습니다. 저는 공통 목표를 중요시하고, 팀원 모두가 성장하는 것이 큰 성과라고 판단했습니다. 그렇다면 '어떻게 모두가 성장할 수 있을까'에 대해서 꾸준히 고민했습니다.
해결
① REST API 통신 방식을 알았습니다. 그래서 REST API, HTTP에 대해서 학습하고, 협업을 위해 REST API 표를 사전에 만들었습니다. 그리고 개발 테스트 기간에는 Test전용 서버 배포를 진행해서 Client가 사용할 수 있도록 만들었습니다.
② 저는 노션과 깃헙을 활용해서 Organization을 생성하고, 팀원들이 이용할 수 있도록 만들었습니다. 우리 팀이 협업을 위해 어떤 요소가 필요한지 고민하고 이를 반영했습니다. 이 과정에서 최대한 실무와 유사하게 진행하려고 노력했습니다. 여기서 노션에서는 프로젝트 관리도 있었지만, 왜 그렇게 기능을 설계했는지, 기술 원리 등 서로가 이해할 수 있도록 구체적이게 설명을 작성했습니다. 추가로 깃헙은 브랜치와 Pull requests를 적극적으로 활용해서 코드 리뷰도 진행했습니다.
③ 프로젝트 마감 기한에 맞게 현실적인 목표를 제시했습니다. 그리고 레벨이 부족한 팀원이 있을 때, 어려운 부분을 같이 고민하고, 마치 스터디를 하듯이 서로에게 가르쳐주며 학습을 병행하며 진행했습니다. 그중 프런트 개발자 ajax 활용과 JS의 함수(function) 개념과 원리에 대해서 어려움을 느껴, 강의를 진행하듯이 도움을 제공했습니다. 이외에도 제가 aws 배포에 어려움을 느끼고 있을 때 팀원 중 한 명이 배포 원리에 대해서 설명해주고, 같이 고민해주었습니다.
개발
저는 Java 언어와 Spring 프레임워크, 스프링 데이터 JPA를 활용해서 API 서버를 구축했습니다. 데이터 베이스는 테스트용으로 H2를 사용하고, 배표용으로는 MySQL을 사용합니다. 배포는 AWS Elastic Beanstalk를 통해서 배포했습니다.
→ 비즈니스 로직에 대한 Entity, Class 다이어그램
→ 사용 기술 버전
- Jdk 11
- spring 2.6.4
- gradle
- lombok
- rest
- junit5
- Spring data JPA
- H2 database
- MySql
- AWS-elastic beanstalk
→ Postman(포스트맨) API 문서
협업에서 어려웠던 점
서로가 사용하는 언어와 분야가 다르다 보니 기술적인 부분에서 소통의 어려움이 있었습니다. 이에 우리 팀은 역할을 명확하게 분리 <pm, server cto, ios cto>한 뒤 서로가 주도적으로 프로젝트를 이끌었습니다. 또한 코드 작성 전에 개발 규칙을 명확하게 정하고, 노션과 github을 활용해서 코드 리뷰를 진행했습니다. 이러한 방법들을 통해서 우리 팀은 자신이 이해하는 내용을 상대방에게 구체적으로 전달하고, 공동 목표를 최대한 도달하기 위해 노력했습니다.
추가로 몇 가지 어려웠던 점을 느꼈는데요. 먼저 코로나로 인한 자가격리입니다. 팀원 중 한 명이 격리를 하게 되었는데, 하필 서로 대화를 하며 맞춰야 할 것이 많을 시기였습니다. 혼자만 진행하면 안 되는 부분이다 보니 공백 기간이 꽤 길어졌습니다.
그리고 사전에 규칙을 정해도, 개발을 하다 보니 오류도 있고 예상치 못하게 변경해야 할 부분들이 많이 있었습니다. 하지만 이런 것을 캐치한 시점이 이미 개발을 어느 정도 진행한 터라 팀원들에게 변경사항을 말하기가 쉽지 않았습니다.
코드 및 더 자세한 내용이 보고 싶은 분들은 아래 링크를 참고해주세요.
https://github.com/HowWeWork/Heritage_API_Server-Springboot
추후 계획
헤리티지 웹과 서버는 현재 배포 상태입니다. 하지만 아직 IOS 앱은 배포를 못한 상태인데요.
하위웍팀은 앞으로 보안, 버그 등을 개선하여 앱 스토어에 배포하는 것을 최종 목표로 두고 있습니다.
현재 배포 버전은 v1.0.1-beta으로 명칭을 지정했고,
앞으로 개발 실력을 더 향상해서 버전별로 업그레이드를 진행할 예정입니다.
마지막으로
저는 이번 프로젝트를 통해서 이제까지 학습한 개발 기술을 저의 것으로 만드는 시간이 되었습니다.
또한 목표했던 Spring framework, Rest API 통신, AWS 배포를 경험할 수 있었습니다.
처음엔 새로운 것을 시도하는 것이 어려울 것만 같았습니다.
그럼에도 불구하고 도전을 했고, 팀원들이 옆에서 함께해준 덕분에 좋은 성과를 낼 수 있었습니다.
팀 프로젝트를 통해서 개인 프로젝트 때는 몰랐던, 개발하기 위해 정말 중요한 것이 무엇인지 깨달았습니다.
그리고 개발을 하면서 에러가 발생했을 때,
팀원들과 함께 머리를 맞대어 원인을 찾고, 문제를 해결했을 때에 느꼈던 감정은 잊을 수 없습니다.
다시 한번 개발의 즐거움을 느꼈고, 이것이 팀의 시너지라는 것을 배웠습니다.
긴 글 읽어주셔서 감사합니다. 응원의 댓글 한 마디씩 부탁드려요~~!!
'글쓰기 > 회고' 카테고리의 다른 글
[회고] 동료와 내일이 있음에 감사하며! (4) | 2022.07.26 |
---|---|
[회고] 5월의 회고록 : 어쩌다 또 도전 시작 - 코드스테이츠 (15) | 2022.05.24 |
[Project] TODO LIST 웹서비스 개발 (13) | 2021.10.21 |
[Project] JSP, servelet 기반 게시판 프로젝트 (0) | 2021.09.15 |
[java] 학점 산출 프로그램 (0) | 2021.05.17 |