SSAFY 2학기 1번째 프로젝트 회고

김영웅·2022년 9월 24일
1
post-thumbnail

공통 프로젝트가 끝나고....

공통 프로젝트를 잘 끝내고 약 2달 반의 시점이 지나고 있는데, 늦은 회고를 시작하려고 한다

1. 프로젝트 시작

SSAFY 1학기 이후 꿀같은 휴식이 끝나고, 바로 새로운 MM 소통 채널이 생성되면서 서로 다른 반이었던 교육생 분들이 다 모이고, 섞이면서 새로운 반들이 개설되었다. 어색할 시간도 없이 바로 자기소개 시간이 찾아왔고, 자기 소개 이후에는 바로 자발적으로 팀 구성을 했어야 했기 때문에 오전 부터 은근한 눈치싸움과 경쟁이 시작되었던 것 같다.
9시 넘어서 바로 같은 반이었던 두분은 따로 컨택해서 데려가신 분도 있었당 호호,,

프로젝트의 반은 좋은 팀원을 구하는 것이라고 생각해서 나와 같은 반이었던 형과 함께 자기 소개가 끝나기도 전에 마음에 드는 분들께 연락을 돌리기 시작했고, 꽤나 빠른시간 안에 마음에 드는 분들로 팀을 다 꾸릴 수 있었다.

이렇게 발품을 팔며 다닌 덕에 빠르게 나에게 잊지 못할 팀인 팜엔팜스 팀이 꾸려지게 되었다.

2. 프로젝트 진행

2 - 0 Init

프로젝트 처음에는 다들 어색한 상태로 시작 했지만, 이걸 풀기위해서 팀원 중 한명이 닉네임으로 서로를 부르는걸 제안했다. 처음엔 호명하는 것 자체가 이상하고 어색했지만 하다보니 입에 착착 붙고, 재밌어서 좋았던 것 같다.

2 - 1 기획

2학기에 진행하는 프로젝트에 비해 1학기에 진행되었던 프로젝트는 애기 장난 수준이었다. 구현해야하는 프로젝트 규모도 크고 또 인원도 훨씬 많기 때문에 모든 면에서 훨씬 더 많은 노력이 요구 되었다. 특히 그중에서 더 많은 노력이 들었던 부분은 당연 기획이 아닌가 싶다.

프로젝트를 위한 기본 set up(협업 툴, convention, 팀 ground rule 정하기) 이후에 바로 아이디어에 대한 기획에 들어갔다. 프로젝트 주제에 WEB_RTC 기술을 꼭 넣어야했는데 이게 여간 어려웠습니다.
아이디어를 많이 내려고 했는데, 그 와중에 항상 "프로젝트를 위한 프로젝트가 아닌 진짜 쓸만한 프로젝트"를 만들려고 했고, 두번 째 기준으로는 "유래에 없던 새로운 아이디어"를 내려고 노력했습니다.

스터디나 소개팅은 조금 아이디어가 쉽게 나오는 것 같아서 그렇지 않은 아이디어를 찾으려고 했고 경매를 해볼까 했는데 처음엔 경매 중에서도 농산물 경매로 조금 더 집중하면서 좋은 프로젝트 아이디어를
기반으로 프로젝트를 시작할 수 있었습니다.

2 - 2 개발

나는 Backend에서 Spring boot를 활용해서 비지니스 로직 개발을 담당 했다. Backend는 총 3명으로 구성이 되어있었는데, 팀 리더 격인 형이 먼저 나서서 skeleton code를 분석하고 바로 Spring Security 관련 빌드업을 시작했다. 나는 WEB_RTC 관련해서 공부를 시작했다. OPENVIDU와 KURENTO 서버에 대해서 공부를 했는데, OPENVIDU가 KURENTO media server를 활용하기 쉽게 개량한 것으로 이해했다. OPENVIDU로 활용하기로 하였고, 관련 설정을 local에서 먼저 tutorial을 따라해보며 이해했다.

openVidu Backend 설정

OPENVIDU에서는 뒷단에서 media server에서를 통해서 요청과 token을 발급 받고, front에서 backend로 요청을 하면 backend에서 token을 통해서 media server에 다시 request를 해서 결과 값을 front로 송출해주는 형태였다.

JPA 설정

local 환경에서 openvidu가 잘 작동하는 걸 확인한 이후에는 ERD에 대해 JPA를 활용해서 domain 구현하는 것을 담당 했다. 연관 관계 mapping에 대해서 배웠었지만, 실제로 ERD에 맞춰서 mapping하는 과정에서 1:N, N:N mapping을 표현하는 데에 트러블을 좀 겪었다. 또한, 연속적으로 연결되어 select를 하는 table 관계에 있어서 3중 join을 처음에 썼었으나 이부분을 리팩토링하며 fetch join에 대해 이해하는 계기가 될 수 있었다.
JPQL을 적용하여 복잡한 query를 소화 하려 했는데 한계가 좀 있었다.(에러가 너무 두루물숭하게 나와 어디가 문제인지 알기가 어려웠다.) 그래서 간단한 부분은 JPQL로 구성을 하였고, 복잡한 부분은 native query를 활용하여 구현하였다. 다음 번에는 QueryDSL 을 활용해서 도전해보고싶다.

개발이 진행 됨에 따라 ERD가 계속 바뀌었기 때문에 그에 맞춰 JPA를 계속 부분 부분 수정했는데 이런 부분은 Agile 형식으로 개발하는게 좋지 않은건가? 싶기도 했다.

On premise OpenVidu 설정 및 검색 기능 개발

이후 일정 부분이상 개발이 진행 된 이후에는 마지막으로 local 환경에서 세팅했던 OPENVIDU 설정을 On premise 환경으로 바꾸기 위해 docker 설정을 추가하고, port 설정과 SSL 설정도 적용해줬다. ( On premise 설정 바꾸는게 에러가 좀 많이 떴던 걸로 기억한다. 역시 설정이 제일 어려운거같다.)

여기서 front에서 자체적으로 token을 생성해서 직접 요청을 주는 방식으로 설정을 해놨고, 또 개발 막바지에 되서 이부분을 수정하는게 어렵다고 해서 보안적으로는 우수하지 못하지만, 직접 요청하는 식으로 결정이 되어 사실상 backend부분이 크게 의미가 없게 되었다. 그래서 좀 아쉬운 부분이 컸던 것 같다.

막바지엔 시간이 좀 남아서, 회원가입 시, image Upload와 경매방 검색을 구현했다. Image Updload에서는 front 서버와 back 서버가 서로 다른 docker file로 분리되어있었기 때문에
docker volume을 만들고, EC2 서버에서 file이 저장되는 위치와, spring boot에서 접근 가능한 위치를 연동 시켜서 해결 시킬 수 있었다.

3. 프로젝트 결과

우리 조는 모두 열심히 하는 사람들이었지만, 상에 대해서 엄청난 욕심을 가지고 있지는 않았다. 다들 최선을 다하는 것 그리고 또 많이 배워가는 것에 집중을 했다. 생각보다 프로젝트 메인 로직 개발이 일찍 끝났고, 발표 준비와 시연 등 퍼포먼스에 대한 준비와 프로젝트 이후 Jmeter를 통한 서버 부하테스트나 code 리팩토링 등 완성도를 높이는 일에 좀 시간을 집중 할 수 있었다.

발표는 내가 담당했다. 당시 팀장 형님이 아마 발표를 할 것으로 예상했는데 그 때쯤 기업 면접이 겹쳐 부팀장인 내가 하게되었다. 좋은 퍼포먼스를 보여주기 위해서 대본과 PPT를 직접 다 만들었는데 팀원들이 다 좋게 봐줘서 좋았던 것 같다.
높은 수준의 프로젝트를 하는 것도 중요하지만, 그 프로젝트를 사람들에게 잘 보여주는 것도 정말 중요한 부분이 아닐까 생각이 들었고 결과적으로 그게 맞았다고 생각한다.

발표 결과
우리 팀은 반에서 1등을 할 수 있었다. 좋은 결과가 나온 것에 대해서 너무 기뻤고 처음 생각 했던 것처럼 프로젝트를 할 때 정말 좋은 사람들과 제대로 된 협업이 되어 이런 결과가 나온게 아닐까란 생각이 들었다.

실제로 우리 팀은 분위기가 정말 좋았다. 프로젝트 내내 서로 원활하게 소통하고 또 재밌게 프로젝트 했다.(짤이 정말 많이 생겼다.) 끝나고 나서도 계속 연락망이 유지되고 나한테는 정말 한명 한명 소중한 사람들이 된거같다는 생각이 든다. 다른 팀원들에게도 내가 그렇게 기억될 수 있을까 그런 사람으로 기억된다면 더 없이 좋을 것 같다.

4. 프로젝트 이후

profile
함께 성장하는 개발자로 성장하겠습니다.

0개의 댓글