0. Intro
작년 여름에 FE로 참여했던 프로젝트 트랙에 이번에는 BE파트로 참여하게 되었다. BE로서는 경력도 배움도 아직 많이 부족한데 4개월간의 여정 동안 많이 성장했으면 좋겠다.
1주차부터 바로 미션이 있었다. 학교 전공 과제와 세미나 발표 준비, MT 등의 일정으로 갑자기 일정이 몰려 힘들었지만 일단 제출에는 성공했다. 미션은 크게 2가지로 git관련 학습과 CRUD 프로젝트 설계 및 구현하는 과제가 나왔다.
1. git 관련 학습
저번 프로젝트 활동도 그렇고 GDG 스터디 과제를 하면서 git add, git commit, git push, PR 등의 기능은 그래도 꽤 사용했었다. 하지만 이번에 멘토님께서 아래 사이트에서 실습을 진행하고 성공한 화면을 올리는 것을 과제로 내주셨는데 초반부는 쉬웠지만 중반부부터 생각보다 난이도가 있었다. 코드 컨벤션, 브랜치 전략, 파일 단위로 형상 관리 등등 git과 github에 대해 이제는 꽤 안다고 생각했는데 HEAD개념과 merge, rebase의 주체와 대상 등의 개념이 다시 보니 헷갈렸다. 사실 HEAD의 경우는 이번에 공부하면서 처음 알았다. 가끔 커밋메시지 수정하려고 로그를 볼 때 얼핏 봤었던 기억이 나는 것 같기도 하다.
https://learngitbranching.js.org/?locale=ko
Learn Git Branching
An interactive Git visualization tool to educate and challenge!
learngitbranching.js.org
- merge는 주체는 나(checkout으로 이동한 브랜치), 대상은 지정한 브랜치(git merge {branch}), 액션은 "대상을 내쪽으로 가져와 합치는 것"
- rebase는 주체는 나, 대상은 지정 브랜치, 액션은 "내 것을 대상 위로 옮기는 것"
- HEAD의 이동 : checkout 시 해당 브랜치 위치로 이동한다.
- detached HEAD : 커밋 ID(해시값)를 직접 체크아웃하면, HEAD는 브랜치를 안 가리키고 직접 해당 커밋을 가리킨다.
저 사이트에 대해 옛날에 누군가 알려줬었던 것 같은 기억이 있는데 왜 해보지 않았는지 모르겠다. 생각보다 유용한 내용이 많았고 나중에 git 연습용 레포지토리를 하나 만들어서 배운 내용들을 연습해서 프로젝트에서 github 협업을 자유자재로 할 수 있도록 노력해야겠다.
2. CRUD 프로젝트
멘토님께서 내주신 쇼핑몰 명세에 맞추어 서버(로컬 가능)를 구현하는 것이 1주차 미션이었다. 3-Tier architecture 구조와 CRUD 기능 설계와 구현을 한 번 경험해보는데 의의가 있는 미션이다. 앞으로 이 토이 프로젝트를 계속 디벨롭시켜나가는 구조로 미션이 진행되기 때문에 많은 고민을 해보라고 조언해주셨다. 사실 이 과제 명세만 훑어보고 본격적으로 오늘 새벽에 시작했다. 문제가 있다면 내가 Java, Springboot 경험이 없는 초짜라는 것이었다. 정규 백엔드 스터디 강의랑 인프런 김영한 강사님의 입문 강의라도 빠르게 듣고 하기에는 오늘 수업 일정 상 불가능하다고 판단하기도 했고 그렇다고 문법도 모르는 상황에서 혼자 진행할 역량도 안 된다고 판단했다. 어차피 목적이 Repository Tier(DB작업), Service Tier(비즈니스 로직, 정보 가공 및 전달) 구조를 익히고 CRUD기능을 설계하는 것이라면 전체적인 구조와 JAVA문법을 체감해보는 걸로 목표를 틀기로 했다. 멘토님께서 LLM을 통한 코드 복붙은 지양하라고 하셨기도 하고 양심이 찔렸기 때문에 ChatGPT와 함께 클론 코딩을 하면서 하나씩 이해 안 가는 것을 물어보는 방식으로 진행했다.
1. 작업 환경 세팅 및 전체 폴더 구조 설계
다행히 정규 백엔드 스터디 덕에 InteliJ는 설치되어 있었고 멘토님이 만들어 놓으신 깃허브 레포지토리를 fork, clone하니 얼추 다 세팅되어서 크게 어려울 건 없었다. 그나마 어려운 게 있었다면 DB작업을 위한 SQLite, Lombok 등을 위해 build.gradle 파일 수정 과 yml파일 설정이었다. 배경지식이 없어 뭔지도 모르고 import하는데다 그동안 학교에서 배운 C++이나 FE의 React와는 문법이 달라서 그런지 꽤 애먹었다. 그래도 다른 팀원들의 얘기를 들어볼 때 연동까지 해야하는 mySQL에 비해 파일 기반으로 작동하는 SQLite로 진행해서 그런지 좀 쉽게 넘어간 것 같다.
2. 이후에 디렉토리 설계에 들어갔다. 크게 4가지 디렉토리로 구성했다. domain(각 필드 등 DB와 매핑되는 Entity 정의) , repository(Data Access Object, DB접근) , service(핵심 비즈니스 로직 처리, 각 기능 구현) , controller(클라이언트 요청의 진입점 (API endpoint)). 처음이라 어떤 구조인지 몰랐던게 가장 큰 공포였는데 디렉토리 설계를 하고나니 대충 DB만들고 가져오고 밖에서 정보 가져와서 로직 돌리겠구나 하는게 눈에 들어와서 약간의 안정감을 찾았다.
이후에는 Service 파트 개발을 시작했다. Java를 몰라서 어노테이션의 적용 범위나 제네릭(<>), 처음 써보는 라이브러리 때문에 클론코딩하면서도 듬성듬성 이해가 안 가긴 했지만 전체적인 흐름은 잡아가면서 작성해나갔다.
그 다음에는 Controller 파트를 작성했다. FE 때 API명세에 맞춰서 열심히 요청을 보냈었던 기억이 있는데 rest API 설정이랑 엔드포인트 설정이 이렇게 이뤄지는구나 싶어서 신기했다. 그리고 다른 부분보다도 인자로 받아오는 데이터 타입들 설정하는게 어려웠어서 그 부분에 대한 공부를 많이 보충해야겠다고 생각했다.
3. 다 작성하고나니 문제가 있었는데 바로 내가 따로 레포지토리를 파서 작업하는 바람에 application파일과 위치가 달라졌다는 것이다. 경로 수정과 scan 중에 고민하다가 scan을 택했는데 코드 작성보다 이 오류 해결이 더 오래 걸린 것 같다. Scan 경로와 Repository 어노테이션 설정은 잘 했는데 Entity 어노테이션 설정을 뺴먹어서(GPT도 같이 뺴먹음) 헤매다가 그래도 해결했다.
4. 이후에는 Postman으로 테스트했다. 저번 블로그 포스트할 때 한번 써봐서 더 수월했다. 다른 점이 있다면 이번에는 로컬 서버 대상으로 해서 Postman Agent를 설치해야 했다.
결과는 다음과 같이 잘 작동했다. 다만 InteliJ로 SQLite DB 조작을 처음 해봐서 조금 해맸다. (자동 갱신이 안 되어서 헤맸음 + 콘솔 창 위치 인지 미숙)
5. 테스트까지 마친 이후 깃허브에 푸쉬하고(코드 컨벤션 잘 지키면서) PR날려서 잘 마무리 했다. 앞으로 리팩토링해나갈 것이다.
3. 소감
사실 내 힘으로 했다고 하기에는 무리가 있다. 하지만 백엔드 프로젝트의 전체적인 흐름과 어떤 부분의 공부가 필요한지 전체적으로 Overview한 느낌이어서 다 하고난 지금은 왠지 모르게 충만하고 앞으로 잘 할 수 있을 것 같은 기분이 든다. 빠른 시일 내로 Java, Spring을 배워 백린이로 다시 태어나겠다.
'GDG BE 프로젝트 트랙' 카테고리의 다른 글
GDG 프로젝트 트랙 4기 BE 기획코스 WIL (2) | 2025.07.01 |
---|---|
GDG 프로젝트 트랙 4기 BE 미션코스 3주차 WIL (1) | 2025.05.23 |
GDG 프로젝트 트랙 4기 BE 미션코스 2주차 WIL (1) | 2025.05.21 |