inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

워밍업 클럽 4기 백엔드 - 2주 차 발자국

이강호
1

👣2주 차 발자국

 

강의 요약


섹션 6. 코드 다듬기

 

좋은 주석 - 주석의 양면성

 

변수와 메서드 나열 순서

 

패키지 나누기

 

기능 유지보수하기

정렬 단축키, linting, style - sonarlint, editorconfig

 

섹션 7. 리팩토링 연습

 

메서드 추출로 추상화 레벨 맞추기

 

Optional

 

객체에 메시지 보내기

 

객체의 책임과 응집도

 

섹션 8. 기억하면 좋은 조언들

 

능동적 읽기

 

오버 엔지니어링

 

은탄환은 없다

 

강의 - Readable Code: 읽기 좋은 코드를 작성하는 사고법

 


 

섹션 3. 단위 테스트

 

단위 테스트

 

수동 테스트, 자동화 테스트

 

Junit5, AssertJ

 

해피 케이스, 예외 케이스

 

테스트하기 어려운 영역 분리

 

lombok 사용 가이드

 

섹션 4. TDD: Test Driven Development

 

TDD ?

프로덕션 코드보다 테스트 코드를 먼저 작성하여 테스트가 구현 과정을 주도하도록 하는 방법론

 

일반적인 개발 방법의 경우 (기능 -> 테스트 순서의 경우)

TDD의 경우 (테스트 -> 기능 순서의 경우)

 

레드 - 그린 - 리팩토링

  1. Red : 실패하는 테스트 작성

  2. Green : 테스트 통과 하는 최소한의 코딩

  3. Refactor : 구현 코드 개선 테스트 통과 유지

 

애자일 방법론

 

익스트림 프로그래밍

스크럼, 칸반

 

섹션 5. 테스트는 []다.

 

테스트 코드는 문서다.

 

@DisplayName - 도메인 정책, 용어를 사용한 명확한 문장

 

Given / When / Then - 주어진 환경, 행동, 상태 변화

 

TDD vs BDD

 

Junit vs Spock

 

언어가 사고를 제한한다.

 

강의 - Practical Testing: 실용적인 테스트 가이드

 

강의 회고

완강 후에 느낀 것은 '결국엔 많이 해봐야 익숙해지겠다.' 였다. 텍스트로 정리한 내용들을 기억 하고 있지만 정작 미션을 했을 때를 돌이켜 보면 손이 움직이지 않는다. 영어를 배웠지만 원어민 앞에서 얼어붙는 느낌이랄까?

그래도 강의를 통해 추상화 하는 과정을 따라해보고 지향해하 하는 점과 지양해야 하는 점의 방향성을 알게 되었기 때문에 좋았다. 강의의 실습내용을 반복하다보면, 언젠간 나도 내 코드에 만족할 수 있지 않을까?

 

TDD는 이전에 다른 강의를 통해 접한 내용을 복습하는 과정과 같아서 좋았다. TDD를 접했지만 아직까지도 TDD 방법론으로 프로젝트를 시작해 본 적이 없고, 테스트 라이브러리의 메서드도 쓰는 것만 쓰고... 반성을 한 시간이였다.

'왜? 배워야 하는가' 를 집중해서 배운 것 같은데 , 잘 알고 써야 의미가 있다는 느낌을 받았다. 알고 써야 의미있는 검증이 되는 것이지, 적당히 알고 쓰면 해피케이스만 작성하게 되고 의미없는 행위로 끝날 가능성이 높을 것이다.

 

미션 과정

강의를 통해 배운 내용들을 최대한 적용해 보려 했었다.

model패키지를 보면서 이전 강의의 지뢰찾기 리팩터링 보다는 좀더 추상화 되어 있는 상태라고 느꼈다.

컬렉션 추상화를 위해 일급컬렉션을 적용했고, StudyCafePassMachine에서 반복적으로 나오는 로직을 추상화 시켜 내용을 진행했다. 그리고 model 내부에 display 하는 내용들이 있어, io 패키지의 구현체들로 로직을 옮겼다.

 

미션 회고

접근 자체는 좋았다고 생각했는데, 구현이 막히고 시간에 쫓겨 강의를 보고 다시 리팩터링 했다. 어떻게 보면 답지를 배낀것이긴 하다. 기존의 model패키지에 있는 displa부분이 가장 고민이였는데, 출력과 금액 계산을 어떻게 나누는 가를 order라는 추상화를 통해 풀어가는 것을 보고 새로운 추상화를 만들어 가는 것을 과감히 시도해 봐야 겠다라고 느꼈다.
그리고 마지막에 file을 읽는 행위의 구현에 집중하는 것이 아니라, 어떤 데이터를 읽는 것인가에 집중해서 리팩터링을 하는 것이 기억에 남는다. 헥사고날 아키텍처의 기본 개념인데, 도서를 통해 이름을 본 적이 있는데 기억해 두었다가 필요할 때 학습을 통해 적용해 보면 좋을 것 같다.

 

백엔드 워밍업클럽4기 워밍업클럽백엔드

답변 0