Service
home
WOW Onboarding
home
🖥️

[실전 백엔드 스터디 1주차 과제]

들어가기 앞서

강의 유튜브 링크
강의 자료
BE-Week1.pdf
29.3 MiB
Github 링크

📌 이번 주차 진행 전 확인해주세요!

이번 주차 실습에 필요한 테스트 코드는 week1 브랜치 내에 작성되어 있어요. 위에 첨부한 깃허브 링크를 참고해주세요! 실습 코드 안에 있는 TODO 주석을 중점으로 봐 주시면 좋아요. 모든 TODO가 채워진 정답 코드는 다음 강의가 올라가기 전 주말에 week1-done 브랜치에 업로드 해드릴 예정이에요.
안녕하세요, 실전 백엔드 스터디 멘토 유도훈입니다. 😊
1주차에는 테스트 코드의 구성 요소에 대해 알아보고, 서비스 로직 중 엔티티가 가져야 할 책임은 엔티티로 옮겨보았습니다. 이해는 잘 되셨나요?
저희가 오늘 한 이 리팩터링은 다음 2주차에 배울 도메인 주도 설계, 영어로는 Domain-Driven Design, 줄여서 DDD라고 하는 설계 방식의 첫걸음이에요. 아마 한 번쯤 들어보신 분도 계실 것 같습니다.
DDD에서는 우리가 만들고 있는 서비스의 업무와 규칙을 잘 이해하는 것이 굉장히 중요합니다. 저희가 오늘 실습했던 내용도 Service에 있는 로직을 보며, 이게 상품이 책임져야 할 규칙인지 아닌지 판단했죠? 서비스의 이해도가 높아야 판단할 수 있기 때문이에요. 도메인은 우리 프로그램이 다루는 업무 영역이라고 생각해주시면 쉬워요. 오늘 저희가 다루었던 상품, 그리고 과제에서의 주문. 이런 것들이 도메인에 해당합니다. 그리고 Product와 같은 Entity는 이러한 개념과 규칙을 코드로 표현한 객체입니다.
이번 주차에는 테스트로 기존 동작을 확인하며 상품의 규칙을 Product로 옮겨봤습니다. 과제에서는 같은 관점으로 주문과 관련된 규칙에 대해 생각해보고, 어떤 책임을 어디에다가 두는 것이 자연스러운지 고민해보는 시간을 가져주세요.
강의나 과제에 질문이 있다면 디스코드 #정규스터디-질문방 채널 혹은 개인 디스코드 메시지(닉네임: 도훈)로 연락 주세요!

과제

목표

WIL 작성
hw1.md 채우기
TODO 코드 채워넣기

📌 WIL 작성

1주차 강의 및 실습 내용을 week1/wil.md에 정리해주세요.
다음과 같은 내용이 들어가면 더욱 좋아요.
300자 이상 작성해주셔야 해요!!
테스트 코드와 관련된 내용, 강의 도중 언급된 키워드 (TDD, Mock, …)
@Setter를 열어두면 무엇이 문제일까요?
Tell, Don’t Ask 원칙은 정확히 무엇을 의미하나요? @Getter도 사용하면 안 되는 걸까요?

📌 hw1 문서를 읽고 내용 치우기

week1 브랜치에 첨부된 hw1.md를 읽고 과제를 제출해주세요. 과제 내용은 앞서 말한 Order 도메인 분석하기에요. 문서 안에 저희가 오늘 배운 Product로 예시를 만들어 놓았으니 참고해주세요. 😁

📌 TODO 코드 채워넣기

TODO 위치
단계
구현 위치
할 일
W1-1 ~ 3
ProductServiceTest
Product의 통합 테스트 메서드 코드 작성하기
W1-4
Product
Service에 있던 비즈니스 로직을 Product로 이동하기
W1-5
ProductService Product
Service코드를 리팩터링하고 Entity의 @Setter 제거
W1-6
ProductTest
Product의 단위 테스트 메서드 코드 작성하기 (과제)
제가 강의 중간에 숙제라고 한 부분을 채워주시면 됩니다. 이 부분은 코드 검사를 따로 하지 않을 예정이에요. 하지만, 코드를 제출해야 하는 주차도 있을 수 있어요. 그때는 코드도 함께 제출해주셔야 합니다! 추후 다시 언급드릴게요.

✅  제출해야 할 파일과 파일 경로

실습한 코드(자유)
wil.md - 배운 점 300자 이상!
hw1.md
[여러분들의 저장소 이름] ├── readme.md ├── .gitignore ├── commerce // 실습 코드, 선택 └── week1/ ├── wil.md // 필수 └── hw1.md // 필수
Plain Text
복사

부록

⁉️ fork를 하고 싶어요!

fork란?

다른 사람의 Github 저장소를 내 Github 계정으로 통째로 복사하는 것이에요.
clone과 헷갈리기 쉬운데, clone은 내 컴퓨터 로컬에 다른 사람의 Github 저장소를 다운받는 것이에요.
fork하고 clone하기, 혹은 그냥 clone 하기 모두 가능하지만, fork를 하면 자신만의 레포지토리를 만들어주기 때문에 과제를 제출할 때도 더욱 편리하겠죠?

fork 하는 법

우선 제공되어 있는 레포지토리에 들어가 주세요.
그 후 오른쪽 상단의 Fork 버튼을 눌러주세요.
그럼 이 창으로 넘어오는데, Owner가 자신의 계정으로 설정되어 있는지 확인 후, 자유롭게 레포지토리 이름을 설정해 주세요(바꾸지 않으셔도 됩니다.). 그리고 꼭 밑에 있는 Copy the main branch only 를 체크 해제 해 주세요! 그래야 week1과 같은 브랜치들을 전부 받아올 수 있습니다.
그렇게 하면 본인의 레포지토리에 fork 된 저장소를 확인할 수 있습니다.
사진은 예시입니다!
이제 메인 레포지토리가 업데이트 될 때마다 오른쪽에 있는 Sync fork를 누르면 자신의 레포지토리로 변경사항이 업데이트돼요! 만약 업데이트 할 내용이 없으면 Sync fork를 누를 때 밑처럼,
No new commits to fetch. 패치할 변경사항이 없다는 안내가 뜨게 됩니다. 이러면 원본 레포지토리와 여러분이 fork한 레포지토리 상태가 최신 버전으로 똑같다는 의미에요. 이렇게 한 뒤 git clone을 써주면 자신의 레포지토리를 자신의 데스크탑 컴퓨터에 저장할 수 있어 로컬에서도 코드를 다룰 수 있게 돼요.

git clone

레포지토리를 만드셨으면 터미널에서 자신이 원하는 경로로 들어갑니다.
ls를 입력하면 현재 위치하고 있는 경로의 하위 파일들을 보여줍니다. 자신이 원하는 경로로 잘 왔는지 체크해볼 수 있어요.
cd를 입력하고 한 칸 띄운 뒤 원하는 경로를 입력하면 터미널이 그 경로로 이동합니다.
예시) cd Desktop
원하는 경로로 들어왔으면 다음과 같이 입력합니다.
git clone https://github.com/phdcoco/2026-2-Backend-Practical-Study
Bash
복사
그렇게 하면 지정한 경로로 폴더가 하나 생길 거에요. 그것이 우리가 fork한 우리의 레포지토리 폴더에요. 이제 이걸 IntelliJ로 엽니다.
열게 되면 이런 화면이 나오게 되는데요, 현재 상태는 main 브랜치입니다. 여기에서 week1 폴더를 만들고 그 안에 hw1.md와 wil.md를 넣어준 뒤 제출하시면 돼요.
실습 코드는 위에 main 브랜치를 week1 브랜치로 바꾸면 돼요. 사진 중간 위쪽의 main을 눌러서 Remote를 누르고, week1을 누른 후 checkout을 눌러주세요. 그렇게 하면 week1에 대한 내용도 본인의 로컬 저장소로 가져오게 돼요.

git pull

Sync fork를 하면 자신의 레포지토리가 최신 버전으로 업데이트 되지만, 이 내용들을 본인의 로컬 컴퓨터에도 적용하려면 자신의 IntelliJ 프로젝트 터미널에서 git pull을 실행하여야 합니다.
변경사항을 커밋하지 않고 git pull을 시도하면 충돌이 발생할 수 있습니다.

실습 코드 경로

본인의 저장소 경로/본인이 지정한 레포지토리 이름/commerce/src/main/java/com/gdghongik/commerce
만약 문제가 있으시다면, 디스코드 #정규스터디-질문방 채널 혹은 개인 디스코드 메시지(닉네임: 도훈)로 연락 주세요!

✨ 꿀팁! IntelliJ의 캐시 무효화 기능

File의 Invalidate Caches(캐시 무효화) 버튼을 누르고 Optional에 아무것도 체크하지 않고 Invalidate and Restart를 누르면 IntelliJ가 재시작됩니다. 이 기능으로 각종 짜잘한 인텔리제이의 버그를 고칠 수 있습니다!

⁉️ 조금 어려운 것 같아요, 백엔드 정규 스터디 내용도 같이 공부해보고 싶어요.

다음 공지를 참고해주세요!

마감 기한

와우스터디에서 확인해주세요.

제출 방법

📖
자신의 레포지토리에 weekn 폴더를 생성해 wil.md 파일을 제출합니다. 더 자세한 사항은 아래 링크를 참조해주세요.