https://anythingis.tistory.com/162
합격 후기를 쓴지도 벌써 1년이 되어 수료 후기를 쓰게 됐습니다.
Java 트랙의 관점에서 느낀 점들이니 다들 참고하고 지원해보셨으면 좋겠습니다.
팀 프로젝트 경험
기획, 설계, 개발, 배포 & 운영, 발표의 라이프사이클을 6주~7주 라는 짧은 시간동안 반복하면서 다양한 이해관계자의 입장을 경험해봤습니다. 이런 과정에서 한 가지 기능에 대해 팀원들이 디테일한 부분은 다르게 생각할 수 있기에 기획에서 개발까지 이어지는 소통을 통한 문서화의 중요성을 느꼈습니다. 또, 진행상황에 대해 투명하게 공유하고, 막히는 부분에서는 고민해보고 팀원들과 협의해 유연하게 대응하는 법을 배웠습니다.
기획 & 설계
개발자가 기획을 왜 ?
개발을 잘하려면 기획(요구사항)을 잘 이해하고 설계해야 목적에 맞는 서비스를 만들 수 있다고 생각합니다. 이를 위해서는 기획 분야에 대한 지식이 필요합니다. 주로 팀원들이 관심있는 도메인을 선택했고, 추가적으로 인터뷰와 문의를 여러 차례 진행했습니다.
서비스 기획
서비스 기획은 주로 어떤 문제를 어떻게 해결할 것인지에 대한 고민에서 시작합니다. 사회 이슈나 관심 있는 도메인에서 해결이 필요한 문제나 유용할 만한 기능을 찾습니다. 예를 들어, 작품 설정 시각화 서비스를 기획하면서 네이버 웹툰 작가와 대면 인터뷰를 진행했고, 22대 대선을 앞두고 국회의원의 활동 정보를 제공하는 서비스를 기획하면서 선관위와 한국매니페스토 본부에 문의해 요구사항을 파악하고 법적 제약을 조사했습니다.
다음으로, 콘텐츠를 어떻게 제공할지 고민합니다. 콘텐츠 제공 방식에는 개발자가 만들어낸 콘텐츠를 사용자가 소비하는 능동적 콘텐츠와 사용자가 생성하고 소비하는 수동적 콘텐츠가 있습니다. 능동적 콘텐츠는 기본적인 즐길거리를 제공해 유입이 쉽지만, 자동화된 제공 방식에서는 퀄리티에 한계가 있습니다. 이를 빅데이터 분석과 AI를 활용해 보완할 수 있습니다. 수동적 콘텐츠는 유입이 어렵지만, 사용자 수가 많아지면 서비스의 가치가 높아집니다. 개인적으로는 능동적 콘텐츠를 제공하는 것이 서비스의 흐름이 덜 복잡하고 목표를 명확히 설정하는 데 유리하다고 느꼈습니다.
화면 기획
화면 기획에도 적극적으로 참여했습니다. 주로 백엔드를 담당했지만, 화면에서 어떻게 보여줄지에 따라 API 설계가 달라지기 때문에 사용자 입장에서 생각하고 아이디어를 제시했습니다. 주로 온보딩 페이지와 메인 기능 페이지를 먼저 설계하고, 다양한 화면에서 재활용할 수 있는 컴포넌트를 기획합니다.
화면과 체크리스트를 통해 어떤 기능들이 동작할지까지 디테일을 잡습니다.
기획의 어려움
기획할 때 가장 어려웠던 점은 세상에 완전히 새로운 서비스는 없다는 점입니다. 그럼에도 불구하고 창의적인 기획을 통해 프로젝트를 재미있게 진행할 수 있었습니다.
1. 페어 프로젝트 / Yesterdays' Trip/ 관광지 리뷰 제공 & 관심 지역 알림 서비스 / 최우수상
2. 첫 팀 프로젝트 / 시작 / 작품 설정 시각화 서비스
3. 두번째 팀 프로젝트 / 여의도 꿀통 / 국회의원 공약 이행현황, 활동정보 제공 서비스 / 우수상 / 800명 이상의 사용자 경험
4. 세 번째 팀 프로젝트 / Sharep / 소규모 프로젝트 협업 서비스
개발
Java 기반의 문법부터 다시 다지고, 컴퓨팅 알고리즘을 거쳐서 웹개발 교육으로 이어집니다. 어떤 교육이든 레거시부터 시작해서 어떤점이 달라졌는지 명확히 알 수 있었고 추상화된 기술의 동작원리를 이해하면서 프레임워크를 더 잘 활용하는법, 프레임워크에서 발생하는 에러의 원인을 찾는 역량을 기를 수 있었습니다.
SpringBoot, JPA와 같은 최신 기술을 잘 활용하기 위해서 JSP, Mybatis 같은 기술을 배척하지 말고 그 밑단이 어떻게 이뤄져있는지, 어떻게 발전해왔는지 관심을 가져보는게 도움이 될 수 있다는 걸 배웠습니다.
https://anythingis.tistory.com/165
https://anythingis.tistory.com/167
배포 & 운영
그동안의 개발을 거의 로컬에서 기능구현하고 배포가 되나 안되나 해보고 끝이였습니다. ssafy를 겪으며 배포환경에 익숙해지고 웹 서비스를 조금 더 넓게 볼 수 있는 관점을 얻고 아래와 같은 경험들을 했습니다.
0) Linux 기반 Script 활용
1)도커 네트워크와 프록시 서버를 활용해 포트 노출을 최소화 하고 내부 서비스 끼리 통신하는 설계
2) 프록시 서버에서 TLS 인증 설정
3) 로컬과 배포환경의 CORS 에러 해결
4)도커와 UFW의 iptables 체인 충돌로 인한 체인 순서 설정
5)젠킨스를 활용한 CI/CD 파이프라인을 구축해 배포자동화 & 환경변수 설정파일을 관리와 배포 성공 여부 메세지 웹훅을 통한 알림
네트워크 인프라를 구축하며 여러 서비스가 엮이는 특성상 특별한 에러는 없지만 원하는 대로 동작이 안되거나, 에러가 있지만 로그를 어디서 봐야할지 몰랐었는데 이런 논리적 오류를 빠르게 원인파악하고 해결하는 능력을 기를 수 있었습니다.
콘텐츠는 서비스 개발자만 제공하고 사용자는 GET 요청만 하는 유입이 쉬운 능동적 콘텐츠 제공 서비스를 이주정도 운영해보고, SSAFY 네트워크 메신저를 통해 홍보하면서 800명 이상의 사용자 트래픽을 경험해봤습니다.
백엔드는 Nginx 프록시 서버의 순간적으로 사람이 몰릴 때 오류 로그를 보고 Nginx Upstream을 활용한 스케일 아웃을 진행했고, 프론트는 Google Analytics와 Hitmap을 적용해 사용자의 피드백을 유추해 카테고리 순서를 조정 및 조작 버튼 추가 진행했습니다.
멘토링
삼성 계열사의 임직원분들에게 멘토링을 받을 수 있습니다. 평소에도 게시판을 통해서 질의응답이 가능하고 비대면 화상 채팅을 통해 주기적으로 멘토링이 이루어집니다. 직무에 대한 소개, 궁금한 점들을 물어볼 수 있어서 좋은 것 같습니다.
상장
삼성전자 직인이 찍힌 프로젝트 경진대회 상장을 받을 수 있습니다. 모두가 받는건 아니지만 열심히하면 못받을 영역은 아닙니다.
스스로에게 아쉬운 점
기본적인 알고리즘, 웹 개발의 기초를 배우는 1학기동안 취준생이라는 마인드가 별로 없이 학교를 다닌 것 같은 느낌입니다. 물론 열심히 쏟은만큼 Java, Spring, Mybatis를 익히며 기본적인 동작원리를 이해하고 프로젝트 최우수상을 수상했지만, 회사 지원에 대한 준비가 아쉬웠습니다.
2학기에 3차례의 팀 프로젝트를 진행하며 프로젝트 당 기간이 7주 주어집니다. 첫 프로젝트에서 팀원들과 Jira로 일정관리 및 Git 형상관리, 배포환경 구축, 배포 자동화를 처음 접해보면서 죽을만큼 갈리고 엄청난 성장을 했던 것에 비해 2, 3차례 프로젝트에서는 완만하게 성장한 것 같습니다. 익숙해진 것이라고도 말할 수 있겠지만 아직 배울 것이 많은 취준생, 신입의 입장에서 아쉬운점이라고 생각합니다.
혼자 공부하던 시절에 비해서 블로그에 포스팅하는 것도 뜸했던 것이 아쉽습니다. 많은 문제를 해결했지만 나중에 뒤돌아서 저의 경험을 정리할 때 명확히 생각이 나지 않는달까요. 똑같은 문제를 만나면 어떻게 해결하는지 알지만 그때그때 기록하는 것의 중요성을 다시 한번 깨닫게 된 것 같습니다...
이제 곧 12기가 시작된다고 알고 있습니다. 다들 화이팅입니다.