본문 바로가기

GDG BE 프로젝트 트랙

GDG 프로젝트 트랙 4기 BE 1차 개발코스 3,4주차 WIL

이번 주차, 특히 마지막 주에 본격적인 개발과 API 연동에 들어갔다.

다른 백엔드 팀원 분이 로그인/회원가입을, 나는 게시글 조회를 맡기로 하고 작업을 진행했다. 로그인/회원가입을 각각 나눠 진행한 조도 있었다고 들었는데, 우리는 그냥 한 명이 전담하기로 했고 덕분에 변수명 등으로 충돌이 나는 위험은 피할 수 있었다.

 

로그인/회원가입 API 연결 성공

22일? 이 때 JWT 토큰을 이용한 로그인/회원가입 기능을 백엔드 팀원 분이 완성해주셨다. 원래 이 날 로컬에서 로그인/회원가입과 게시글 조회 모두 프론트와 API연결 테스트를 하려고 했으나 아직 게시글 조회 기능 완성이 안 되어서 로그인/회원가입만 연결을 시도했다. 다행히 Webconfig파일과 요청body 필드가 일치되도록 수정하는 것을 통해 간단히 연결에 성공했다. 내가 구현하지는 않았지만 토큰이 잘 발급되는 것이 신기했다. 나도 나중에 개인 토이 플젝을 하면서 한 번 구현해봐야 겠다고 생각했다.

 

게시글 조회 API 연결 실패

25일에 시간에 쫓겨 부랴부랴 게시글 조회 기능을 만들어 갔다. 그 주에 유난히 바쁘기도 했고 일정관리를 잘 못한 탓에 날밤을 꼬박 새서 해 갔다. LLM의 도움을 받아 조회 기능을 구현하고, JUnit테스트와 Postman과 유사한 Http요청 테스트가 잘 통과하는 것을 보고 코어타임에 갔다. 그러나... API 연결에 실패했다.

이날 API 연결은 매운 맛이었다. 가장 큰 문제는 원인을 정확히 파악하지 못 해 제대로 대응을 못했었다. 프론트 쪽 개발자 도구 로그에서 계속해서 Authorization 관련한 문제가 발생했다. 오기 전에 예상했던 문제 상황은 요청body가 서로 안 맞아서 그렇다든가, Config파일 설정 문제 정도였는데 그 문제들이 아니었는지 이것저것 시도했는데도 실패했다. 로컬에서 한 테스트는 잘 되는데 연결만 하면 실패하니까 멘탈이 나갔고, 아직 스프링도 익숙하지 않은데 LLM의 도움까지 받아 급하게 작성한 터라 내 코드임에도 잘 파악이 되지 않아 옆에서 여러 방안들이 제안이 들어와도 제대로 시도할 수 없었다.

 

밤새서 JUnit이랑 http요청 테스트 둘 다 잘 통과했으니 잘 되겠지 하고 갔다가 연결에 실패했고 제대로 대응도 못해서 집에 오는 동안 굉장히 기분이 별로였다. 그래서 해결하기 위해 집 데스크탑에 프론트 쪽 코드를 클론해서 연결해보면서 문제 원인을 파악하기로 했다. 프론트 코드 실행할 줄은 아는 게 참 다행이라고 생각하면서 제미나이와 같이 탐정마냥 로그를 분석해가면서 사투를 벌였다. 그 결과 문제의 원인을 파악할 수 있었다. 우선 가장 큰 원인은 액세스 토큰이었다. 집에서 프론트 코드를 돌리면서 이상한 점이 있었는데 바로 로그인 시에는 액세스 토큰이 발급되는데 로컬이나 세션 스토리지 어디에도 저장되지도 않고, 게시물 조회 시 토큰이 계속 없다고 로그가 뜨는 것이었다. 나중에 살펴보니 액세스 토큰을 저장하는 기능이 프론트에서 구현되어 있지 않았던 것이었다. 당연히 액세스 토큰을 http요청에 실어 보내는 것도 구현이 되어 있지 않았고 그 까닭으로 토큰 검증에 실패해 연결에 실패했던 것이다. 다만 아직도 의문인 건 중간에 공개 경로에 게시글 조회 주소들을 추가했는데 그 때도 안 됐던 것이 이해가 안 간다. 물론 그 때 연결 문제를 수정한다고 급하게 붙여 넣은 코드 때문에 기존에 잘 되던 테스트도 실패했어서 그 잘못 넣은 코드 탓이 아닐까 싶다. 어쨌든 프론트 코드에 액세스 토큰을 저장, 전달하는 코드를 추가해 수정했고, 이 후에는 배열이 아닙니다와 같은 응답 데이터 불일치 문제 정도만 있어서 간단히 수정해 API연결에 성공했다. 성공 후에는 혹시 몰라서 시연 영상을 간단히 찍고, 해당 문제 원인과 프론트 측에서 해주어야 하는 내용을 공유했다. 그렇게 25시간의 코딩은 다행히 성공적으로 끝났다.

 

게시글 조회 API 연결 재시도 및 성공

월요일 날에 한 번 더 시도했는데 아직 액세스 토큰이 로그인 화면에서만 저장되도록 구현이 되어 연결에 실패하고 찐막으로 발표를 하루 앞 둔 29일에 마지막으로 API 연결을 시도했다. 프론트, 백엔드 양측 모두 그동안 시행착오를 겪으며 경험이 좀 쌓여서, 몇 번의 수정을 거쳐 드디어 연결에 성공했다. 백엔드로서는 처음으로 API연결에 성공한 경험이었기 때문에 굉장히 기뻤다. 성공 후 타 팀원 분의 작업한 내용과 병합 후 시연 영상을 찍고 발표를 준비했다.

 

 

~ing

프론트와의 게시글 목록, 단건 조회API 연결에는 성공했다. 하지만 아직 여전히 해결 안 된 점과 아쉬운 점들이 많다.

 

1. ERD 재설계 필요(정규화)

게시글 조회 기능에만 집중해서 만드느라 article 도메인 하나에 너무 몰아둔 것 같다. 앞으로 진행할 지역 인증과 지도 연동, 유저 정보와 연동할 팔로우, 팔로잉, 스크랩 기능 등을 생각해 볼 때 지금과 같은 구조로는 커버가 불가능하다. 최소한의 수정으로 독립적으로 관리될 수 있도록 ERD를 재설계하고 프로젝트 구조를 다시 짜야 한다. 추가로 오늘 발표할 시연 영상에 옥의 티가 있는데 그 문제를 해결하기 위해서라도 재설계가 꼭 필요하다. 

 

2. API 명세서 공유 및 DTO 일치시키기

1번과 약간 이어지는데 액세스 토큰 문제를 제외하면 사실 가장 큰 문제는 프론트와 백엔드 서로 간에 어떤 식으로 데이터를 주고 받을 지 제대로 정하지 않았던 게 가장 큰 실책이었다. 이걸 안 정하면 나중에 수정할 코드도 많아지고 현장에서 대응하기 어렵다. 백엔드에서 서둘러 ERD 재설계 후 프론트 측에 API 명세, 요청, 응답 헤더, 바디 양식을 잘 전달해 주어야겠다. 

 

3. 배포 지연

원래 계획은 프로젝트 작업 진행 전에 0차 배포(배포 환경 테스트) 후 계속해서 배포하는 것이었으나, 미뤄지고, 조회API 완성이 더 급해보여서 배포 일정이 많이 딜레이되었다. 항상 여러 멘토님들이 배포를 늦출수록 좋지 않다고 역설하고 또 역설하신다. 30일에 발표 후 피드백을 받으면 재설계와 같이 배포도 서둘러 진행해야겠다. 그리고 나도 이제 서로 안 만나서도 API 연결 테스트 좀 해보고 싶다.

 

4. 공부 부족

가장 큰 원인이다 어떻게 보면. 스프링 강의도 몇 개 안 보고 하려니 제대로 될 턱이 있나. 아무리 LLM이 잘 알려준다고 해도 LLM이 여러 원칙들을 항상 지켜주며 개발해주지는 않는다(코드 깁기에 가까운 것 같다). 또한 기본 지식이 부족하면 소통이 어렵다. 이번에 API연결 실패 과정을 겪으며 이 부분을 제일 많이 느꼈다. 최소한의 지식은 갖도록 하자. 

그리고 이번에 하지톤에 운영진으로 참여하면서 해커톤 레포들을 보면서 고수들이 로그인을 1시간만에 도륙내는 것을 봤다. 나도 그렇게 되고 싶다. 근데 그럼 그만큼 시행착오도 많이 겪겠지...ㅜ

 

5. 협업 방식, 채널

노션 칸반보드나 DB, github PR 등이 있음에도 소통에는 잘 활용하지 못했다. 카카오톡을 더 자주 활용하게 되고, 노션에 글을 작성하더라도 서로 확인을 못하는 경우가 더 많았다. 카카오톡을 써도 결과적으로 잘 소통했다면 괜찮지만 뭔가 아쉽긴 하다. 협업 채널이나 방식을 더 고민해봐야 할 듯하다. 아 그리고 스크럼도 언젠가부터 끊겼는데 사실 스크럼이 큰 도움이 되진 않았던 것 같다. 마지막 주차처럼 그냥 자주 만나는 게 베스트인 것 같기도 하고...

 

6. 여유 없어서 딱히 팀장 역할 못한 듯

미루다가 급하게 코드를 완성한데다가 연결에 실패하고 다른 일정들과도 겹치고 밤도 연속으로 새고 하면서 여유가 많이 없던 1주였다. 어쩌다 팀장을 맡게 되었지만 그 역할을 잘 수행하진 못했던 것 같다. 공부량을 늘려 작업 진도를 훅 늘리고 아는 것을 늘려 일단 여유를 다시 되찾고 팀장으로서 프로젝트를 잘 이끌어 진행시켜야겠다. 물론 팀원들이 다들 꽤 열정이 있으신 편이라 그런지 나름 진도가 나가긴 했다.

 

 

앞으로의 백로그

위에서 말한 ERD 재설계 이후 리팩토링 이후에는 사실 진도가 쭉쭉 나갈 것 같긴하다. 다만 프론트 측의 지도와 연동을 해야 하는 과정과 CICD는 조금 험난할 것 같다. 백엔드에서 다음과 같은 일들을 해나가야 한다.

 

ERD 재설계 및 리팩토링

나머지 기능들 개발, 특히 지도 연동

AWS EC2, S3 도커 배포

CICD

린터, 포맷터 설정(미리 해두었어야 했는데 다른게 급해 신경을 못 썼다)

도메인 연결(컴네에서 배운...?)

(시간 되면 로드밸런서? 다만 not 문제해결 only 경험용)