본문 바로가기

스프링 스터디

1주차 스프링 스터디 회고록

프로젝트라고 하기엔 소규모이지만 처음으로 제대로 된 스터디를 진행해봤기에 회고를 통해 경험한 것을 기록해보고자 합니다. 단순히 느낀 점을 쓰는 게 아닌 제대로 된 '프로젝트 회고'를 작성해보기 위해 KPT 방법을 사용하여 작성합니다. 

 

  • Keep : 유지
    • 스프링 스터디를 진행하면서 좋았던 점, 기억해야할 점을 유지합니다.
  • Problem : 문제
    • 기능 구현하던 중 생겼던 이슈나 제대로 해보고 싶은 점을 파악합니다.
  • Try : 시도
    • 파악한 문제점을 어떻게 해결하고자 했는지 기록합니다.

 

 


 

2022-02-04 ~ 2022-02-11 까지 진행된 '스프링으로 CRUD 구현하기' 프로젝트에 대한 회고입니다.

 

🔗 : 프로젝트 보러가기

 

 

 

 

시작한 계기

 

기존에 같은 반 친구들끼리 코딩테스트와 같은 공부를 같이 하기 위해 스터디를 시작했습니다. 주로 취업을 3학년 때 나가기 때문에 미리미리 준비해보자는 취지입니다. 그래서 3학년이 되기 전 마지막 겨울 방학이 매우 중요합니다. 앞으로의 진로를 위해 필요한 선택이 몇가지 있습니다. 현재 가장 큰 선택은 백엔드와 관련된 직무를 할 것인가, 프론트를 위한 직무를 할 것인가 입니다. 이 선택을 고르기 위해선 두 선택지의 경험이 필요합니다. 마침 3학년 필수 교과로 스프링이 들어있고, 제대로 된 프로젝트를 한번 해보자! 하는 생각에 이번 프로젝트를 시작하게 되었습니다.

 

 

 

 

프로젝트에 대하여

 

백엔드와 관련된 기본적인 기능으로 'CRUD' 가 있습니다.

  • Create
    • 회원을 생성한다.
      • id, name, password를 받는다.
  • Read
    • 회원의 정보를 조회한다.
      • 상세 조회
        • id를 받아 해당 id를 가진 회원의 정보를 알려준다
      • 전체 조회
        • 생성되어 있는 모든 회원의 정보를 알려준다.
  • Update
    • 회원의 정보를 수정한다.
      • id를 받아 해당 id를 가진 회원의 name과 password를 수정한다.
  • Delete
    • 회원을 삭제한다.
      • id를 받아 해당 id를 가진 회원을 삭제한다.

이렇게 4가지의 기능을 구현할 수 있는 프로젝트 중 회원 관리 서비스를 구현해보는 건 어떨까? 하고 프로젝트의 주제를 '회원 관리 CRUD 구현하기' 로 잡았습니다. 바로 다음 프로젝트로 예정인 '게시판 구현하기'와 연관된 부분이 있었기에 바로 프로젝트를 시작했습니다.

 

 

 

어떻게 나에게 도움이 되었을까

 

대외적으로 봤을 때 그저 스프링을 공부하는 프로젝트처럼 보일 수도 있습니다. 대단한 기능을 구현하는 것도 아니고 기초적인 서비스를 구현했기 때문입니다. 물론 기능의 구현도 무척 중요한 포인트이지만 더욱 중요한 것은 '프로젝트를 하는 방법'에 대해 배웠다는 것입니다.

 

학교 수업을 통해 프로젝트를 몇번 진행했습니다. 팀을 짜 하나의 프로그램을 완성시키는 것, 오직 그 점 하나만 가지고 프로젝트를 진행했기 때문에 마치 속이 빈 강정같이 프로그램은 있지만 얻은 것이 없었습니다. 기한 내에 최소한의 기능을 돌리기 위해 프로젝트를 했기 때문에 제대로 정리된 것도, 구현해보고자 했던 바도 완벽히 이루지 못했습니다. 그렇기 때문에 이번 프로젝트에 많은 시간을 할애하고 노력을 했습니다. 미리 비슷한 기능을 찾아보기도 하고 어떻게 참고해야 도움이 될까 고민도 해보았습니다. 이런 과정을 통해 어떻게 검색하면 필요한 정보를 얻을 수 있을까, 이 글에서 필요한 부분이 어디인가에 대해 알 수 있는 방법을 얻었습니다. 다음 프로젝트를 진행할 때는 더 빠른 시간에 원하는 정보를 얻을 수 있으면 좋겠습니다.

 

이번 프로젝트의 또다른 목적은 '깃허브 사용법' 배우기입니다. 앞서 말했다시피 학교에서 하는 프로젝트는 그저 기능 구현을 목적으로 하기 때문에 서로의 코드를 리뷰하고, 여러 방면에서 테스트 해보는 기회가 없었습니다. 서로의 코드가 어떻고, 내가 맡은 파트를 구현하기 위해서 커밋하고 풀하고의 과정이 반복이었습니다. 그러다보니 다양한 기능을 접할 기회가 없었습니다. 그렇기 때문에 이번에 배운 깃허브 사용법이 뜻 깊었고, 오래 기억하여 잘 사용하고 싶었습니다. 가장 새로웠던 기능은 풀리퀘스트를 통해 서로의 의견을 주고 받은 후, 팀원의 확인을 받아 서로의 코드를 머지 시키는 기능이었습니다. 기존에 머지(Merge)라 함은 그저 같은 파일을 건드려 한쪽의 파일이 날아가고, 엉망으로 엉키는 안좋은 기능이었습니다. 그러니 이슈를 생성하여 이슈에 맞는 각자의 브런치를 파서 작업하는 방식이 너무 좋고 신기했습니다. 기능이 구현되면 풀리퀘스트를 통해 작업한 파일들을 올리고, 팀원들의 피드백을 받아 수정하거나 확인을 받아 메인 브런치에 합칠 때 비로소 기능을 완성했다는 기분이 들었습니다. 처음 써보는 기능들이었지만 앞으로 프로젝트를 할 때 유용하게 쓰일 기능들이라 까먹지 않고 계속해서 사용해야할 것 같습니다.

 

전체적으로 이번 프로젝트는 많은 시간과 노력이 필요했긴 했지만 그만큼의 경험치가 따라왔습니다. 모든 프로젝트에서 원하는 바를 이룰 순 없겠지만 적어도 이번엔 그랬으니 다음에도 그럴 것이라는 생각이 들었습니다. 여러모로 도움이 많이 된 프로젝트였습니다.

 

 

 

기능을 구현하며

 

스프링을 사용해본 건 이번이 처음이었습니다. 또한 제대로 서버와 관련된 기능을 구현하는 것도 마찬가지였습니다. 그렇기에 어떤 방식으로 구현할지도 감을 잡지 못했습니다. 제일 처음으로 구현한 유저 생성은 '나는 아직 많이 모르구나.'라는 생각을 더 크게 만들었습니다. 컨트롤러나 서비스, 리포지토리의 역할이 뭔지 제대로 알지 못하는 상태로 시작했기 때문에 코드 한줄한줄을 작성할 때마다 물음표가 가득했습니다. 코드 한 문장을 이해하기 위해 많은 글을 읽어가며 참고하다보니 3시간이 훌쩍 넘어가기도 했습니다. 시간이 많이 갈수록 집중력도 떨어지고 머리에 들어오지 않아 다음 프로젝트를 할 때는 검색하는 시간을 줄여 효율적으로 스터디를 해야겠다는 생각이 들었습니다.

 

구현한 기능 중 가장 어려웠고 아직도 이해가 잘 가지 않았던 기능은 '회원 전체 조회' 입니다. id를 입력받아 해당 id를 가진 회원의 정보를 알려주는 기능입니다. CrudRepository 안에 구현되어 있는 findAll 메서드를 사용하면 바로 알 수 있지만 dto를 사용해 형식을 맞춰줘야 했기에 리턴 타입을 바꾸는 일이 어려웠습니다. 엔티티 타입으로 받은 데이터를 stream의 map을 사용해 dto 형식으로 바꿀 수 있다는 걸 처음 알았고, 그걸 적용해보는 것도 처음이라 머리가 꽤 아팠습니다. 그럼에도 같이 프로젝트를 진행한 친구들의 도움 덕에 기능을 구현할 수 있었습니다.

 

 

마지막으로

 

이번 프로젝트는 여러모로 '버스를 탔다.' 라는 말이 무색할 정도로 스스로 완성한 것보다 도움을 받아 완성한 부분이 많았습니다. 기능을 구현하고 난 다음이면 약간의 허탈함도 몰려왔었습니다. 그러나 처음에는 누구나 모를 수 있고, 도움 받을 수 있다는 생각이 들었습니다. 처음 해보는 지금 도움을 받지 않으면 나중엔 혼자서는 아무것도 모른 채 아무것도 못할 것입니다. 아직 공부의 초입인만큼 모르는 부분이 있으면 찾아보고, 질문하는 게 매우 중요하다고 생각합니다. 이제 한 프로젝트가 끝났으니 앞으로 있을 프로젝트에서는 더 많은 것을 깨닫고 얻을 수 있으면 좋을 것 같습니다. 

 

 

 

 


 

 

 

 

 

 

아직 겨울 방학인 지금 개학하고 몇달 있으면 할 졸업 전시회가 너무 걱정된다. 취업 전 할 수 있는 최종 프로젝트라고 생각하는데 나뿐만 아니라 같이 프로젝트를 할 친구들의 취업도 관여할 수 있다보니 제대로 몫을 해내지 않으면 많은 피해를 끼칠 것 같다. 이번 겨울 방학 안에 더 경험해보고 미리 틀을 잡아야만 학기 중에 부담이 크지 않을 것이다. 힘내서 남은 방학 마무리해야지! 걱정은 잠시 버리고 할 수 있는 걸 해보자~