스프링(Spring), 스프링부트(SpringBoot)/스프링부트(SpringBoot) 기초

스프링 부트 핵심 가이드(장정우 지음) - 테스트 코드 작성하기

개발학생 2025. 7. 30. 12:52
반응형

*책 내용과 다르게, 다음과 같은 환경에서 프로젝트 생성  

 

[Java] 차근차근 Java 설치하기 (JDK17, Window 11)

자바 개발 도구 설치 방법에 대해서 알아보겠습니다. Java17은 LTS(Long Term Support : 장기 지원) 릴리즈로 1년 후까지 기술 지원 및 버그를 개선한 서비스를 제공받을 수 있습니다. 업데이트 버전을 꾸

yungenie.tistory.com

 

[Windows] Spring Tool Suite 4(STS 4) 다운로드 및 설치

STS란?Spring Tool Suite(STS)는 스프링 프로젝트를 생성하고, 개발할 수 있게 해주는 도구입니다. STS 설치 과정에 대해 설명드리겠습니다. 설치 파일 다운로드STS 공식 사이트에서 설치 파일을 다운로

priming.tistory.com

 

MySQL :: Download MySQL Community Server

Select Version: 9.3.0 Innovation 8.4.5 LTS 8.0.42 Select Operating System: Select Operating System… Microsoft Windows Ubuntu Linux Debian Linux SUSE Linux Enterprise Server Red Hat Enterprise Linux / Oracle Linux Fedora Linux - Generic Oracle Solaris mac

dev.mysql.com

  • Gradle

**STS에서 Gradle 프로젝트 생성한 과정 

*** 함께 보면 좋은 글

2025.07.10 - [스프링(Spring), 스프링부트(SpringBoot)/스프링부트(SpringBoot) 기초] - 스프링 부트 핵심 가이드(장정우 지음) - 스프링 부트 개요

 

스프링 부트 핵심 가이드(장정우 지음) - 스프링 부트 개요

1. 스프링 프레임워크자바(Java) 기반 애플리케이션 프레임워크로, 엔터프라이즈급(기업 환경 대상 개발) 애플리케이션을 위한 다양한 기능 제공-> 오픈소스 경량급 애플리케이션 프레임워크로

keep-programming-study.tistory.com

2025.07.11 - [스프링(Spring), 스프링부트(SpringBoot)/스프링부트(SpringBoot) 기초] - 스프링 부트 핵심 가이드(장정우 지음) - 개발에 앞서 알면 좋은 기초 지식

 

스프링 부트 핵심 가이드(장정우 지음) - 개발에 앞서 알면 좋은 기초 지식

1. 서버 간 통신마이크로서비스 아키텍처에서 한 서버가 다른 서버에 통신을 요청하는 것을 의미-> 한 대는 서버/다른 한 대는 클라이언트가 됨 가장 많이 사용되는 방식은 HTTP/HTTPS 방식(TCP/IP, SOA

keep-programming-study.tistory.com

2025.07.16 - [스프링(Spring), 스프링부트(SpringBoot)/스프링부트(SpringBoot) 기초] - 스프링 부트 핵심 가이드(장정우 지음) - REST API 명세를 문서화하는 방법(Swagger), 로깅 라이브러리(Logback)

 

스프링 부트 핵심 가이드(장정우 지음) - REST API 명세를 문서화하는 방법(Swagger), 로깅 라이브러리

*책 내용과 다르게, 다음과 같은 환경에서 프로젝트 생성 Windows11(윈도우 11) 환경자바 JDK 17 버전 설치 https://yungenie.tistory.com/11 [Java] 차근차근 Java 설치하기 (JDK17, Window 11)자바 개발 도구 설치 방법

keep-programming-study.tistory.com

 

*테스트 코드란?

작성한 코드나 비즈니스 로직 자체를 테스트하기 위해 작성한 코드 

1. 테스트 코드를 작성하는 이유

  • 개발 과정에서 문제를 미리 발견
  • 코드 리팩토링의 리스크 감소
  • 애플리케이션을 가동해서 직접 테스트하는 것보다 시간 소요가 적음
  • 하나의 명세 문서로서의 기능 수행
  • 몇 가지 프레임워크에 맞춰 테스트 코드를 작성하면 좋은 코드 생산 가능
  • 코드가 작성된 목적을 명확하게 표현할 수 있으며, 불필요한 내용이 추가되는 것을 방지

2. 테스트 방식 분류: 테스트 대상 범위

모델(V-model)에서의 확인(Validation) 단계 도식화

*테스트 비용이란?

  • 개발에 필요한 금전적인 비용과 시간/인력을 포괄적으로 말함
  • 통계적으로 한 서비스를 개발할 때 개발 과정에서 60%, 테스트 과정에서 40%의 비용이 듬 

1) 단위 테스트(Unit Test)

  • 정의: 애플리케이션의 개별 모듈을 독립적으로 테스트하는 방식
  • 가장 작은 단위의 테스트 방식
  • 모듈을 하나하나 독립적으로 테스트
    -> 데이터베이스/네트워크 등 외부 요인들을 제외하고 진행
  • 일반적으로 메서드 단위로 테스트를 수행하며, 메서드 호출 시 의도한 결괏값이 나오는지 확인하는 수준으로 진행
  • 테스트 비용이 적게 들고, 테스트 피드백을 빠르게 받을 수 있음

2) 통합 테스트(Intergration Test)

  • 정의: 애플리케이션을 구성하는 다양한 모듈을 결합해, 전체적인 로직이 의도한 대로 동작하는지 테스트하는 방식
  • 모듈 통합 과정에서의 호환성 등을 포함해, 애플리케이션이 정상적으로 동작하는지 확인하기 위해 진행
  • 여러 모듈을 함께 테스트해서 정상적인 로직 수행 가능 여부 판단
    -> 데이터베이스/네트워크 등 외부 요인들을 포함하여 진행
  • 테스트를 수행할 때마다 모든 컴포넌트가 동작해야 하므로, 테스트 비용이 커지고 테스트 피드백이 느릴 수 있음

3. 테스트 코드를 작성하는 방법

1) Given-When-Then 패턴

  • 테스트 주도 개발(TDD/Test Driven Development)에서 파생된
    행위 주도 개발(BDD/Behavior Driven Development)을 통해 탄생한 테스트 접근 방식
  • 비교적 많은 환경을 포함해 테스트하는 인수 테스트에서 사용하는 것에 적합하다고 알려져 있음
  • 불필요하게 코드가 길어져 간단한 테스트로 여겨지는 단위 테스트에서는 잘 사용하지 않음
    -> 그러나 '명세' 문서의 역할을 수행한다는 측면에서 많은 도움이 됨 

(1) Given

  • 테스트를 수행하기 전 테스트에 필요한 환경을 설정하는 단계
  • 테스트에 필요한 변수를 정의하거나, Mock 객체로 특정 상황에 대한 행동 정의

(2) When

  • 테스트의 목적을 보여주는 단계
  • 실제 테스트 코드가 포함되며, 테스트를 통한 결괏값을 가져옴

(3) Then

  • 테스트의 결과를 검증하는 단계(when 단계에서 나온 결괏값을 검증)
  • 결괏값이 아니더라도, 이 테스트를 통해 나온 결과에서 검증해야 하는 부분이 있다면 이 단계에 포함

2) F.I.R.S.T 전략

  • 테스트 코드를 작성하는데 도움이 될 수 있는 5가지 규칙
  • 대체로 단위 테스트에 적용 가능한 규칙

(1) 빠르게(Fast)

  • 테스트가 느리면 코드를 개선하는 작업이 느려져 코드 품질이 떨어질 수 있음
  • 목적을 단순하게 설정해서 작성하거나, 외부 환경을 사용하지 않는 단위 테스트를 작성

(2) 고립된/독립적(Isolated)

  • 하나의 테스트 코드는, 목적으로 여기는 하나의 대상에 대해서만 수행
  • 한 테스트가 다른 테스트 코드와 상호작용하거나,
    내부에서 관리할 수 없는 외부 소스를 쓰면 외부 요인으로 인해 테스트 수행 불가

(3) 반복 가능한(Repeatable)

  • 어떤 상황에서도 반복 가능하도록 작성
  • 개발 환경의 변화나 네트워크의 연결 여부와 상관없이 테스트가 수행되어야 함

(4) 자가 검증(Self-Validating)

  • 테스트 자체만으로도 테스트의 검증이 완료되어야 함(테스트 성공/실패 확인 코드를 함께 작성)
  • 결괏값과 기댓값을 비교하는 작업을 코드가 아니라 개발자가 직접 확인하고 있다면 좋은 테스트 코드가 아님 

(5) 적시에(Timely)

  • 테스트 코드는 테스트하려는 애플리케이션 코드를 구현하기 전에 완성되어야 함
  • 테스트 코드가 너무 늦게 작성되면 정상적인 역할 수행이 어려워질 수 있으며,
    그로 인한 문제가 있다면 해결을 위해 개발 비용이 더 크게 소모될 수 있음
반응형