4L: Liked, Learned, Lacked, Longed for
😍 좋았던 것(Liked)📚 배운 것(Learned)💦 부족했던 것(Lacked)🕯 바라는 것(Longed for)
오로지 내가 수행했던 일에만 집중해서 솔직하게 정리해보세요!
박상혁
Liked
- Mockito 테스트를 실제 프로젝트에 처음으로 적용해 보았다. 이전 프로젝트까지는 Service Layer에서도 행위 검증이 아닌 상태 검증을 하느라 주변 클래스들에 의존해야 했기에 명백한 의미로 Unit 테스트라 볼 수 없었는데 이번 프로젝트에서는 Mockito를 이용한 행위 검증을 통해 주변 클래스로부터 완전히 독립된 Unit Test를 실시할 수 있었다.
- 팀원들끼리 PR을 통한 코드 리뷰가 원활하게 이루어졌다. 지난 프로젝트에서 코드 리뷰의 부재로 협업이라기 보다는 서로 개인플레이를 한다는 느낌이 강하게 들었고, 종장에서는 코드 전체의 스타일이나 구현 방식 등에서 일관성이 떨어지는 다소 아쉬운 결과를 냈기에 이번 프로젝트는 코드 리뷰에 무게를 두어 진행했다. 이로 인해 개발 중에는 서로의 진행 상황에 대해 더 자세히 알 수 있었으며 코드의 획일성을 증대시켰고, 각 코드의 책임을 단순히 구현한 사람에게만 지게하는 것이 아닌 팀 전체가 나눠가지며 팀원 모두가 코드 전체에 대해 높은 책임감을 갖게 되는 긍정적인 결과를 낼 수 있었다.
Learned
- 쿼리 최적화에 대한 식견이 넓어졌다. 이전에도 JPQL을 이용한 어느정도의 쿼리 최적화는 가능했으나 이번 프로젝트를 통해 DTO 조회를 이용한 쿼리 최적화 방법을 알게 됐다. 그리고 기존 엔티티 조회 방식과 DTO 조회 방식의 장단점을 몸소 느꼈고 앞으로 이에 대한 trade off 를 고려해 상황에 맞는 쿼리 최적화 전략을 짜는 능력을 길러야 겠다고 생각했다.
- JWT에 대해서 더 자세히 알게 되었다. 프론트 팀과 JWT 토큰 처리로 인해 마찰이 한차례 생기고 나서 JWT에 대해 개인적으로 학습해 보았는데, 생각보다도 내가 모르고 있던 부분이 너무 많았다. JWT access Token의 저장 위치가 local storage 와 cookie로 그 의견이 첨예하게 갈린다는 것 부터 각 방법의 장단점, 더 나아가서는 js memory에 저장하는 방법도 있다는 것을 배울 수 있었다. 그간 JWT에 대해 가지고 있었던 편협한 사고를 확장시킬 수 있던 값진 시간이었다.
Lacked
- 자식 댓글 기능에 대해 개발 중간에 기획이 한번 뒤집히는 일이 있었다. 기획 단계에서 세운 구조가 구현의 난이도가 너무 높아 생긴 일이었는데, 본인이 구현의 난이도를 잘못 측정한 탓이었다. 이로 인해 프론트와의 협의가 필요했고 해당 부분에서 생각보다 시간이 지체되었다. 개발 단계에서 구조에 대한 변경의 경우 작게는 나 혼자, 크게 봐도 해당 기능에 대해 개발중인 팀원들만 영향을 받지만 기획 단계에서 세운 기획에 대한 변경은 팀 전체에게 영향을 끼칠 수 있다는 것을 몸소 느꼈고 앞으로 기획 때 더 신중하게 생각하고 결정해야겠다는 다짐을 했다.
Longed for
- 이번 프로젝트 기간이 끝났다고 해서 프로젝트를 방치하지는 않았으면 좋겠다. 앞으로도 새로운 것들을 많이 배워나갈 텐데, 그럴 때마다 우리 ArtZip 프로젝트를 개선해 나가 코드를 리팩토링하는 습관을 길러나갔으면 좋겠다.
- 일단 QueryDSL부터 적용해보자
김승은
Liked
- submodule을 도입하여 외부에 노출되면 안되는 정보들을 버전 관리할 수 있도록 하고, CI/CD 에 사용될 수 있도록 하면서 그 동안 복사 붙여넣기로 관리하던 중요 키 정보들을 git의 관리를 받게 하여 팀원들끼리 효율적으로 키를 업데이트 할 수 있었다.
- Service Test의 instruction coverage와 branch coverage가 각각 70퍼센트가 넘지 않으면 머지되지 않도록 했던 규칙이 좋았다. 테스트 작성을 강제하게 되면서, 비즈니스 로직 검증을 꼭 하게 되었고, 내가 미처 생각하지 못했던 부분들도 테스트 작성을 하면서 잡게 되었다.
- PR 코드 리뷰 2명이상 받지 못하면 merge 될 수 없는 규칙으로 다른 도메인의 코드도 집중적으로 볼 수 있어서 좋았다.
Learned
- Spring 버전이 올라감에 따라 Spring Security 설정하는 방법이 WebSecurityConfigurerAdapter를 상속하는 것에서 빈으로 객체를 등록하는 것으로 바뀌었다. 새롭게 바뀐 방법으로 security 설정하는 법을 배웠다.
- mockito를 활용해 service test를 작성하면서 parameterized test를 통해 하나의 테스트 메소드로 여러 경우의 수를 테스트해 볼 수 있었다.
- 초기 개발환경을 구축할 때 로컬, 개발환경 등 각기 다른 환경에 따라 yml 파일을 나눠 공통적인 부분과 달라지는 부분을 나누고 효율적으로 관리할 수 있게 되었다.
Lacked
- 기능 개발이 우선이라는 생각이 들다 보니 중간중간 리팩토링을 하는 과정이 미흡했다.
- 맡은 도메인을 각별히 신경쓰다 보니 다른 도메인과 겹치는 중복 코드를 관리하기는 어려웠다.
- ErrorCode로 Exception을 관리하다 보니 유연하게 메세지를 전달할 수 없어 아쉬웠다.
Longed for
- jpql도 queryDSL로 바꾸고, 여러 도메인에서 사용할 수 있는 사진 업로드 모듈같은 경우 추상화하여 리팩토링하면 좋겠다.
- 관리자 role에 따른 인증 관리를 추가적으로 할 예정이다.
정현서
Liked (좋았던 것)
- 프론트 개발자들과 협업할 수 있는 기회가 많지 않은데, 이번에 프론트 개발자들과 협업을 할 수 있어 좋은 경험이 되었습니다.
- 브랜치 전략, PR 방식, merge 규칙 등 같이 개발하기 위한 규칙들을 정해서 더욱 원활한 소통이 가능했고 많은 것을 배웠습니다.
- 특히나 이번에는 코드리뷰를 열심히 진행하여 다른 팀원들의 코드를 보며 많이 배웠고, 좋은 부분은 제 코드에도 적용하여 더욱 좋은 결과를 만들어낼 수 있었습니다.
- 프로젝트를 진행하면서 새롭게 알게된 점, 생겼던 이슈를 정리해서 기술문서를 작성했습니다. 이 덕분에 동일한 문제가 생겼을 때 빠르게 해결할 수 있게 됐습니다.
Learned (배운 것)
- 이번에 처음으로 querydsl을 사용해봤습니다. 이론으로만 알고 있던 querydsl의 장점(동적 쿼리, 컴파일 타임에 에러 발견 등)을 직접 느낄 수 있었습니다.
- 다른 팀원분께서 CI/CD를 구축해주셨는데, 이 부분이 개발을 진행하면서 큰 도움이 되었습니다. 덕분에 CI/CD의 편리함과 중요성을 알 수 있었습니다.
- 제가 이슈가 생겼을 때 팀원분들께서 적극적으로 도와주셔서 이슈를 빠르게 해결한 일들이 있습니다. 이번 프로젝트를 진행하며 팀원들의 도움을 받고 저도 팀원의 이슈를 함께 고민하며 더욱 많이 배웠습니다.
Lacked (부족했던 것)
- 프론트와의 소통에서 부족했던 부분이 있었습니다. 서로의 기술 스택에 대한 기본적인 이해가 부족했기 때문에 어려웠던 것 같습니다.
- 제가 맡은 파트에서 개발 기간 산정에 실패하여 일정보다 늦게 완성한 기능이 있습니다. 제 일정이 밀리면 맞물리는 다른 일정에도 차질이 생기기 때문에 다음에는 개발 기간 산정할 때 좀더 생각해보고 신중하게 해야겠다고 생각했습니다.
Longed for (바라는 것)
- 최종 발표까지 잘 마무리가 되었지만 앞으로 좀더 리팩토링해서 보완해나갔으면 좋겠습니다. 그 과정에서는 이번에 어려움을 겪었던 소통을 좀더 원활하게 진행할 수 있으면 좋겠습니다.
홍유석
Liked
- 페이징 기능을 구현하면서 어떻게 하면 성능을 높일 수 있는지 생각하였고 DTO 조회를 사용하여 쿼리를 최적화 함으로서 이를 달성할 수 있었습니다.
- 코드 리뷰를 하며 다른 팀원들의 좋은 코드를 보고 많이 배울 수 있었고 저의 코드에서 잘못된 코드를 빠르게 발견하고 수정할 수 있었습니다.
- 테스트 커버리지를 설정하여 테스트 코드 작성을 강제(?)함으로서 코드 동작에 대한 무결성을 보장할 수 있었습니다.
Learned
- 이번에 쿼리 최적화를 위해 DTO 조회를 사용하면서 쿼리의 수를 줄일 수 있다는 장점과 변경에 취약하다는 단점에 대해 확실히 알게되어 앞으로 기능을 구현할 때 이점들을 고려하여 개발을 진행할 수 있게 되었습니다.
Lacked
- 프론트엔드 개발을 담당하신분들이 사용하기 불편한 API 명세를 작성한거 같습니다.
- 완성된 기능에 대한 확인이 부족했습니다.
Longed for
- 기능 개발에 있어서 좀 더 꼼꼼한 확인이 필요한거 같습니다.
- API 명세에 대해서 좀 더 꼼꼼히 작성하도록 노력해야할거 같습니다.
- 프로젝트를 하며 배웠던 것들을 정리하고 공유
권기홍
Liked
- 백엔드와 협업하는 소중한 경험을 할 수 있어서 좋았습니다.
기획, 개발, 마무리까지 프로젝트의 전반적인 프로세스를 익힐 수 있었습니다.
- 애자일 스크럼 방식으로 프로젝트를 관리하고, 문서화를 잘 할 수 있어서 좋았습니다.
- PR 리뷰를 꼼꼼하게 할 수 있어서 좋았습니다. 덕분에 코드가 일관성이 높아지고, 효율적으로 개선된 것 같아 좋았습니다.
- 팀원들이 열정적으로 프로젝트에 임해주었고,
결과적으로 만족할 만한 결과물을 얻을 수 있어 좋았습니다.
Learned
- Next.js, Recoil, Antd 등 새로운 기술을 도입해 경험할 수 있어서 좋았습니다.
중간에 시행착오가 많았지만, 그 만큼 많은 것을 배울 수 있었습니다.
- 팀원과의 소통, 의견 조율 등 개발 외에도 커뮤니케이션 능력이 매우 중요하다는 것을 배웠습니다.
Lacked
- QA를 더 체계적으로 했었으면 좋았을 것 같습니다. 후반부 버그 리포팅과 해결이 다소 아쉬웠습니다.
- 토큰, 쿠키, 인증에 대한 이해가 부족했던 것 같아서 많이 아쉽습니다.
미리 공부했다면 좋았을텐데 아쉬웠습니다.
- 프로젝트 마지막에, 팀장으로서 역할 분배가 다소 미흡했다고 생각합니다. 혼자서 떠안으려 하기 보다는, 팀원들에게 역할을 더 분배했다면
더 좋은 결과물을 얻을 수 있었을 것 같습니다.
Longed for
- 프로젝트 이후 팀원들과 리팩토링을 통해 코드를 더 효율적으로 개선하고,
서비스를 안정적으로 만들고 싶습니다.
- validation, 컴포넌트 추상화, 렌더링 최적화, 테스트 등
k
좋았던 것 (Liked)
- 백엔드와의 협업으로 처음에는 의사소통이 힘들었지만, 시간이 지날 수록 대화의 타협점이 맞춰졌던 것 같다. 다른 직군의 사람들과 소통할 수 있는 기회를 얻어서 좋았다.
- 프로젝트에 여러가지 기술 스택을 적용할 수 있었고, 기술 스택의 특성에 맞게 잘 활용하였다.
- 열정적인 개발자분들과 함께 협업을 하여, 더욱 뜨거운 개발을 할 수 있었다.
- vercel의 자동 배포를 이용하여, 그 때 그때 배포 오류를 잡아낼 수 있었다.
배운 것 (Learned)
- 백엔드의 관점에서 중요시 여기는 점들을 조금이나마 알 수 있게 되었다. 특히나, 백엔드 분들은 서버의 부하가 되는 연산이나, 쿼리를 경계하신다고 느꼈다. 따라서 프론트 측에서 상태관리를 할 때도 이런 내용을 백엔드와 상의하면 될 것 이라고 생각이 들었다.
- 라이브러리나 프레임워크를 사용하면서, 해당 프레임워크를 더욱 잘 이해할 수 있었다. 또한 프레임워크의 동작을 통해, 그 프레임워크와 조금 더 어울리는 코드를 만들 수 있었다.
부족했던 것 (Lacked)
- 백엔드 지식이 부족하여, 프론트엔드 측에서 의견을 말할 때, 백엔드 에서 납득이 가게 설득시키는 것이 어려웠다.
- 여러가지 기술 스택을 적용하였던 것은 좋았으나, 기술 스택의 특징을 제대로 이해하지 못하고 사용해서, 배포 단계에서 사이드 이펙트가 크게 발생하였다.. 기술 스택에 있어서 ‘사용방법’ 보다 그 기술 스택이 어떻게 돌아가는 지 이해하는게 중요하다고 느꼈다.
- 후반에 갈수록 코드 리뷰가 대충 진행된다는 느낌을 받았다. 코드의 논리나 동작 방식 보다는코드의 퀄리티에만 치중된 코드리뷰를 많이해서, 막상 동작에서의 버그를 잡아내기가 힘들었다.
- MSW를 제대로 활용하지 못한 것 같아서 아쉽다. 초반 부터 각자 맡은 도메인에 따라서 MSW를 통해 mock 데이터를 만드는 과정을 가졌으면 좋았을 것 같다.
바라는 것 (Longed for)
- 프로젝트가 지속적으로 성장할 수 있도록, 이 후에 리팩터링과 (필요하다면) 기능을 추가하여, 조금 더 완성도 있는 프로젝트로 성장시키고 싶다.
- Client Side 로 바꾼 부분에 SWR를 적용하기, 토큰 관련 인증 부분 보완하기
조윤정
좋았던 것 (Liked)
- 백엔드와 협업하는 경험을 쌓아본 것, 프로젝트가 전체적으로 어떻게 구성되고 돌아가는지에 대한 이해가 좀 더 쌓인 것 같아서 좋았다.
- Next.js 와 같이 평소에 적용해보고 싶던 기술을 사용해본 점이 좋았다.
- 코드리뷰를 필수로 진행했던 점이 좋았당.
배운 것 (Learned)
- 사용자 인증 과정을 구현하기 위해 로컬 스토리지와 쿠키, 그리고 JWT 토큰에 대해서 많이 배우게 되었다.
부족했던 것 (Lacked)
- 시작 전 충분한 이해 없이 기술 스택을 적용해서 개발 중 많은 시행착오를 겪은 점.
- 타입스크립트에 대한 이해가 부족해 개발이 더디게 진행된 점.
- QA를 늦게 시작해서 프로젝트 막바지에 버그가 많이 발견된 점
바라는 것 (Longed for)
- 향후 리팩토링 과정을 성실하게 참여해서 조금 더 완성도 있는 결과물을 만들고싶다.
혜삐
Liked
- 기획부터 디자인, 개발까지 모든 경험을 함께 할 수 있어서 좋았다. 특히, 백엔드분들과 끊임없이 소통하며 협업할 수 있어서 매우 값진 경험이었다 (ง •̀ㅁ•́)ง✧
- 프론트끼리 코드리뷰, 깃허브 discussion등 활발한 협업을 할 수 있어서 좋았다 😳
Learned
- msw에 대해서 배웠다. 제대로 사용해보지 못 해서 아쉽다. 추후 프로젝트를 할 때 초기단계에서 빠르게 도입해서 사용해야겠다!
- Next.js와 TypeScript를 쓰면서 익힐 수 있었던 거 같다!
Lacked
- 내 주변 전시회 기능을 구현하지 못 했는데, 이 부분을 추후에 구현하고 싶다.
Longed for
- 향후 리팩토링때 시간상 구현하지 못 했던
내 주변 전시회
를 구현하고 싶다.
- 컴포넌트를 좀 더 추상화하고 싶다.