개발 경험

인생 첫 개발 프로젝트 - 전남대 모음이 회고

정의찬123123 2025. 2. 5. 03:23

24년 10월~ 25년 1월까지 진행한 프로젝트 회고입니다.

(제 기준: 1학년 2학기, 에코노베이션 동아리 기준: 28기)

 

프로젝트 소개

전남대 모음이는 전남대학교의 여러 공지를 하나로 모아 쉽게 확인할 수 있게 한 서비스입니다.

추가로 알림에 좋아요를 눌러 추천을 받을 수 있는 기능이 있습니다.

 

팀원은 프론트엔드 1명, 백엔드 1명, AI 1명이 있고 저는 백엔드 구현을 맡았습니다.

 

메인 페이지
로그인 후에는 좋아요 기능과 추천기능 사용 가능.

프로젝트 전

리눅스나 네트워크 같은 약간의 CS 지식은 있었지만

프로그래밍 언어 수준은 1학년 1학기 학부생 수준이었습니다.

 

클래스, 객체지향 지식 전무(2학기 수업에서 알게됨)...

 

배운 것

- 자바 

- 객체지향

- 스프링부트

- 스프링 data JPA

 

2~3달이라는 시간동안 위의 것들을 배웠는데 정말 힘들었습니다....

당연히 놓치고 넘어간 부분도 많고, 완벽히 이해 못한 부분도 많습니다.

방학을 이용해 다시 처음부터 차근차근 공부해볼 계획입니다.

 

부족했던것, 아쉬운 것

- DTO 미숙

처음에는 요청과 응답을 DTO로 잘 처리했지만 시간이 점점 부족해져 객체로 주고받거나 메세지 필드의 타입을 Object타입으로 처리한 것들이 몇 개 있습니다.

가독성도 떨어지고 JSON으로 주고받는 요청과 응답 필드 검사를 깔끔하게 처리하지 못한거 같습니다.

DTO의 필요성을 알게 되었습니다.

 

 

- 인터셉터 미적용

저희 프로젝트에서는 로그인 인증 방식을 쿠키 + 세션 구조 확인했습니다. (실력이슈로 JWT는 X)

처음에는 쿠키 존재 여부와 유효성을 처리하는 로직을  'CheckCookie' 서비스를 만들어서 적용했는데 이렇게 하면

쿠키가 필요한 모든 서비스에서 'CheckCookie' 서비스를 호출해야하는 번거로움이 있었고, 멘토님이 인터셉터를 알려주셔서 적용해보고 싶었지만 역량 + 시간이 부족하여 적용하지 못했습니다. 전남대 모음이 프로젝트는 서비스가 얼마 되지 않아 인터셉터가 없어도 문제가 되진 않았지만 시간이 부족해서 적용하지 못했다는 것이 아쉬웠습니다. 다음 프로젝트에서 인터셉터가 필요한 상황이 있다면 꼭 적용해보겠습니다.

 

- 예외처리

자바도 처음이었고 프로젝트(서비스)도 처음이었기 때문에 어떤 예외가 발생하는지, 어떻게 처리하는지 감이 잡히지 않았었습니다.

대부분의 코드는 예외처리 없이 작성되었고, 프론트에서 보내는 요청 형식과 백엔드에서 요청을 받는 형식이 일치하고 서비스가 정상적으로 실행되었을때만 200 OK가 응답되고 다른 경우는 모두 추상적으로 단순한 500 error를 응답했습니다.

에러 핸들링 과정에서 프론트는 원인을 파악할 방법이 없었고, 오직 백엔드에서 디버깅, 에러 로그를 통해 확인해야 하는 것이 굉장히 힘들었습니다. 저 뿐만이 아니라 팀원들의 생산성을 떨어뜨린다는 사실이 미안하고 괴롭게 했습니다.

예외처리의 필요성을 절실하게 느꼈습니다.

 

 

- 테스트 코드 

예외처리와 유사합니다.

기능이 잘 구현되었는지 확인할 때 마다 홈페이지에 접속해서 로그인하고 얻은 쿠키를 실어서 연계된 서비스에 요청 보내고.........

이런식으로 코드를 변경할 때마다 Integration에서 End to end에 가까운 테스트를 했는데 너무 생산성도 떨어지고 에러 핸들링 난이도가 상당했던거 같았습니다. 테스트 코드를 잘 짜두었다면 이런 부담이 적었겠죠?

다음 프로젝트에서는 테스트 코드도 욕심내보겠습니다.

 

 

 

- ERD, API 명세서

프로젝트 전에는 API 명세서? 그게 중요한가? 이야기하고 맞추면 되는거 아니야? 하는 막연한 생각들이 있었는데 API 명세서의 중요성을 알게 되었습니다.

 

잘 작성된 명세서는 요청을 보내는 프론트엔드 개발자도 편하고 API를 구현하는 백엔드 개발자도 편하게 한다는 사실을 알았습니다.

 

응답할때 기본 필드도 통일하면 좋을거 같다는 생각을 했습니다. ex message or response (프론트엔드에서는 message라는 필드만 가지고 파싱하면 되니까.) 다음프로젝트에서는 기본 API 응답 설계를 잘 해두고 상속받아 조금씩만 수정해서 사용할 수 있도록 구현하는 것이 목표입니다.

 

 

- 개발환경과 생산성

개발환경의 중요성을 아주아주아주 체감하였습니다.

 

개발자 모드 활용 팁들.

서버에서 파일 수정할때 vim만 사용하다가 visual studio code extension으로 손쉽게 파일을 변경할 수 있다는걸 알았을 때.

application.yml 파일도 env를 적용해 손쉽게 환경 이동이 가능하다는 것을 알았을 때.

mysql이나 redis같은 데이터 소스도 Intellij에서 간편하게 확인할 수 있다는 것을 알았을 때. + 등등등...

 

 

잘 구성해둔 개발환경은 생산성을 무한히 증가시킬 수 있다는 것을 체감하였습니다.

 

 

다음 프로젝트에서는 git으로 pr만 날리면 서버에 바로 배포가 되도록 CICD 파이프라인을 적용해 보고 싶은 욕심이 생겼습니다.

(기존 방식: 로컬 개발환경에서 build -> scp로 서버에 전송 -> restart script로 재실행

서버에 접속해서 스크립트를 수동으로 실행시켜야 한다는 불편함이 있음.)

 

 

앞으로의 방향, 다음 프로젝트에 적용할것

- 인터셉터

- 테스트 코드

- 예외처리

- JWT 토큰

 

 

+ 번외 느낀점

CS지식은 물론, 주분야가 아닌 지식, 기술이라 하더라도 절대 쓸모없지 않고 다다익선이다...

 

프론트엔드 개발하는 팀원이 디자인도 할 수 있어서 디자이너 없이 프로젝트를 진행할 수 있었고,

 

우리팀 모두 개발은 처음이었는데 제가 리눅스, 서버 쪽을 잘알아서 다행히 프론트, 백엔드, AI모두 배포하는데 어려움 없이 배포할 수 있었습니다.

 

백엔드 개발자여도 프론트엔드 지식이 있다면 기능을 두고 어떤 방식으로 개발하는 것이 서로에게 효율적인지 제시할 수 있고 요구할 수 있는 노련함이 생긴다는 것을 느꼈습니다.

 

엔지니어가 최종 목표이긴 하지만 현재 백엔드 공부를 하고 있는데요,

에코노베이션 동아리에 들어와서 백엔드 공부를 시작한 것이 정말 잘한것이라는 생각이 듭니다.

 

최대한 어릴때 프론트, 백엔드 공부 등 다양한 경험을 해보고 취업 전에 엔지니어링 지식을 고도화해 T자형 인재가 되어 보겠습니다.

 

회고 마무리.