본문 바로가기

Concept6

[TDD] 테스트 코드 작성 테스트 코드를 작성하면서 배운 것을 작성해봅니다. 단순히 “코드가 잘 돌아가는지 확인하는 용도”를 넘어서 리팩토링의 자신감을 얻고, 테스트 더블을 다루며 다양한 상황을 제어하는 방법을 익혔습니다.또한 Spy와 Mock을 직접 써보면서 둘 사이의 차이를 체감할 수 있었고, 그 차이가 단순한 동작 여부를 넘는다는 것도 알게 되었습니다.아래는 제가 테스트 코드를 작성하면서 정리한 주요 포인트들입니다.목차테스트 코드로 얻는 리팩토링의 안정감테스트 더블(Test Double)이란?Spy와 Mock을 구분하며 느낀 점Spy와 Mock, 단순히 “실제 동작 여부”만의 차이가 아니다 [1] 테스트 코드로 얻는 리팩토링의 안정감처음에는 API 요구사항만 만족하게 코드를 작성했다. 하지만 개발을 진행하며 여러 가지 사항들.. 2025. 7. 18.
[클린코드] 단위테스트 TDD 법칙 세 가지실패하는 단위 테스트 를 작성할 때까지 실제 코드를 작성하지 않는다.컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다.현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다.테스트 코드와 실제 코드가 함께 나올 뿐더러 테스트 코드가 실제 코드보다 불과 몇 초 전에 나온다.이런 방식은 결과적으로 실제 코드를 거의 모두 테스트하게 되어, 테스트 코드의 관리가 어려워질 수 있다.따라서 테스트 코드에도 실제 코드와 동일한 품질 기준을 적용하는 것이 중요하다.이번 글에서는 유지보수가 쉬운, 클린한 테스트 코드를 작성하는 방법에 대해 살펴본다. 깨끗한 테스트 코드깨끗한 테스트 코드를 만들려면 가독성이 필요하다!1. 보조 메서드로 중복 제거: 세부구현을 없애고 의도 .. 2025. 5. 29.
id가 없는 상태의 객체 생성을 위한 편의 생성자 id가 없는 상태의 객체 생성을 위한 편의 생성자보통 DB에 저장되기 전, 즉 id가 아직 없는 상태의 엔티티를 표현할 때 id = 0L로 임시 값을 줘테스트 코드나 서비스 로직에서 빠르게 생성할 수 있도록 간편한 생성자를 만들어 놓는 거야//id 없이도 편하게 객체 생성 가능하도록 하기 위한 생성자 체이닝 기법 public Question(NsUser writer, String title, String contents) { this(0L, writer, title, contents); } public Question(Long id, NsUser writer, String title, String contents) { this.id = id; this.. 2025. 4. 25.
내부 구조에 기대지 않고 외부에 드러나는 동작을 확인하자 자동차들이 "주어진 횟수만큼 이동 전략을 수행했는가?"에 대한 기능을 검증하려고 했다.이는 자동차들이 매 회차마다 move()를 호출하는지를 확인하는 테스트로,해당 로직은 자동차 경주 게임의 흐름을 제어하는 Game 클래스에서 수행된다.따라서 테스트의 대상은 Game 클래스이며, 각 클래스의 역할은 다음과 같이 정리할 수 있다.RaceCount는 단순히 반복 횟수를 관리하고Cars는 자동차들을 한 번 움직이는 동작만 담당하며Game은 Game은 RaceCount와 Cars를 조합하여 경주를 진행한다.즉, raceCount 횟수만큼 cars.move()를 호출하는 책임은 Game 클래스에게 있다. ✅ 검증할 코드 그런데 막상 검증할 코드를 볼 때는 Game.start() 내부에서 raceCount.pla.. 2025. 4. 24.
[REST API]프로젝트에서 경험한 API 설계 - HATEOAS 프로젝트에서 경험한 사례로 REST API 의 조건인 HATEOAS에 대해 알아보겠습니다. HATEOAS란 먼저 REST API는 6가지 주요 제약 조건을 가지고 있습니다. 클라이언트 서버 아키텍쳐 STATELESS 캐시 가능성 계층화된 시스템 코드 온디맨드(옵션) 균일한 인터페이스(uniform interface) 그 중에서 균일한 인터페이스라는 조건은 서버와 통신하는 단일 방법이 있음을 나타내는 것으로, RESTful API의 핵심이고 4가지 측면을 갖고 있습니다. 그 중에 하나가 애플리케이션 상태 엔진으로서의 하이퍼미디어 라는 것입니다. 다시 말하면, 리소스를 할당한 후 REST 클라이언트가 하이퍼링크를 통해 현재 사용 가능한 다른 모든 작업을 찾을 수 있어야 하는 것입니다. 예를 들면, 주문 정보.. 2023. 4. 4.
OpenID Connect(OIDC) 공식문서 정리 OpenID Connect (OIDC)는 OAuth2.0 프로토콜 위에 있는 간단한 ID 계층으로, OAuth2.0은 인증 프로토콜인 반면 OIDC는 신원 인증 프로토콜로 클라이언트 서비스의 사용자 신원을 인증하는데 사용합니다. 블로그 본문은 OIDC 프로토콜에 대해 알아보기 위해 openid.net 내용 중 앞부분을 번역하고 정리한 내용입니다. OIDC에 인증은 3가지 종류가 있는데 인증 코드 흐름(Authentication Code Flow)을 사용한 인증을 정리했습니다. 번역 문장을 매끄럽게 표현한 부분과 개념 이해가 충분하지 않은 상태에서 구조가 복잡한 부분은 구글 번역 문장을 사용했습니다. 1 소개 OpenID Connect 1.0은 OAuth 2.0 [RFC6749] 프로토콜 위에 있는 간단한.. 2023. 2. 8.