SpringFramework 03 스프링 프레임워크 03 TDD 와 JUnit의 사용방법 알아보기
Contents 01 02 03 04 방과후 수업 Review What is TDD / JUnit 방과후 수업 예제 활용 02 What is TDD / JUnit TDD 방법론 과 JUnit 03 실습 예제 (JUnit 예제) Junit를 활용한 예제 04 다음시간 REST 서비스의 이해
같은 일을 하는 인스턴스가 많으면 넘나 좋겠죠????^^ 싱글톤 패턴(singleton pattern) 방과후 수업 Review 같은 일을 하는 인스턴스가 많으면 넘나 좋겠죠????^^
디자인 패턴이 무조건 좋은 것은 아닙니다. 패턴은 패턴일뿐입니다. 싱글톤 패턴(singleton pattern) 방과후 수업 Review 싱글톤의 의미는 매우 간단합니다. 생성하는 인스턴스를 오직 하나로 제한하는 디자인 패턴을 싱글톤이라고 합니다. 객체 지향 언어에서는 싱글톤이라는 말을 자주 사용합니다.(4대 디자인패턴 중 하나) 싱글톤이란 왜 싱글톤을 쓸까요?? 스프링에서의 싱글톤 100권의 책 하나의 문서대장 (EX) DB Connction 불필요한 호출로 자원의 낭비를 막음 인스턴스의 간섭으로 예상치 못한 결과를 만듦 인스턴스를 하나만 만들고 계속 재사용함 사실 싱글톤은 문제가 있음 1. private 생성자라 상속불가 2. 싱글톤은 테스트하기가 힘듦 3. 서버환경에서는 싱글톤이 하나만 만들어지는 것을 보장하지 못한다. 4. 싱글톤의 사용은 전역 상태를 만들 수 있기 때문에 바람직하지 못하다. [싱글톤 레지스트리] 스프링은 이러한 단점을 보완하여 직접 싱글톤 형태의 오브젝트를 관리하는 기능을 제공 싱글톤의 기본 유형 public class Singleton { private static final Singleton instance = new Singleton(); private Singleton() { } public static Singleton getInstance(){ return instance; } 하지만 이건 되게 많이 쓰는거라 알긴 해둬야함ㅋㅋㅋㅋㅋ 디자인 패턴이 무조건 좋은 것은 아닙니다. 패턴은 패턴일뿐입니다.
TDD는 기능코드를 짜면서 테스트 코드를 같이 짜는 방법입니다. 테스트 주도 개발 (Test Driven Development) MVC의 디자인 철학 중 하나가 테스트 용이성(쉬운 테스트)!!! 이를 실현한 것이 바로 TDD 방식입니다 테스트 주도 개발(TDD)는 철학입니다 단위테스트 X 기능 코드 버그수정 코드를 작성하는 시간은 줄어듬 전체적으로 더 많은 버그 발생 기능 코드 우선 방식 기능 코드 버그 수정 버그를 수정하는데 필요한 시간은 줄어듦 전체적으로 동일한 시간 필요 단위테스트 테스트 우선 방식 기능 코드 버그 수정 디버깅 시간이 줄어들어 효과적이다 단위테스트 시간의 문제도 있지만 실수할 확률이 적어지고 옥상으로 끌려갈 상황이 덜 발생하는 방법론입니다. TDD는 기능코드를 짜면서 테스트 코드를 같이 짜는 방법입니다.
JUnit 은 Java의 단위테스트 Framework 특징은 앞으로 쭉 예제를 진행해보면서 상기해보겠습니다. 문자 혹은 GUI 기반으로 실행됨 단정문으로 테스트 케이스의 수행 결과를 판별함 (assertEquals(예상 값, 실제 값)) 어노테이션으로 간결하게 지원함 결과는 성공(녹색), 실패(붉은색) 중 하나로 표시 특징은 앞으로 쭉 예제를 진행해보면서 상기해보겠습니다.
JUnit 은 다음 단정문으로 주로 테스트를 합니다. 저 신호등을 통과하지 못하면 빨간불이 켜집니다! 의미 assertArrayEqual(a,b) 배열 a,b가 일치함을 확인 assertEqual(a,b) 객체 a,b의 값이 같은지 확인 assertSame(a,b) 객체 a,b가 같은 객체 인지 확인 assertTrue(a) A가 참인지 확인 assertNotNull(a) A가 null이 아님을 확인 [모든 단정문의 기능] http://junit.sourceforge.net/javadoc/org/junit/Assert.html 단정문은 신호등이라고 생각하면 됩니다. 저 신호등을 통과하지 못하면 빨간불이 켜집니다!
이러한 구조를 위해서 pom.xml에 다음과 같이 정의되어있어야함 실습하기 Hello World in JUnit [스프링에서의 JUnit 지원 구조] 스프링은 프로젝트 생성시 기본적으로 아래 위치에 자동으로 JUnit 테스트를 위한 장소가 마련되어져 있음 테스트가 시작되면 DemoApplicationTest.java는 DemoAppiivation.java인척 행세하면서 테스트를 진행하게 됩니다(가짜 파일임) 이러한 구조를 위해서 pom.xml에 다음과 같이 정의되어있어야함 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
이러한 구조를 위해서 pom.xml에 다음과 같이 정의되어있어야함 실습하기 Hello World in JUnit [스프링에서의 JUnit 지원 구조] 스프링은 프로젝트 생성시 기본적으로 아래 위치에 자동으로 JUnit 테스트를 위한 장소가 마련되어져 있음 테스트가 시작되면 DemoApplicationTest.java는 DemoAppiivation.java인척 행세하면서 테스트를 진행하게 됩니다(가짜 파일임) 이러한 구조를 위해서 pom.xml에 다음과 같이 정의되어있어야함 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency>
[DemoApplication.java에 다음과 같이 코딩해봐요] 실습하기 Hello World in JUnit [DemoApplication.java에 다음과 같이 코딩해봐요]
실습하기 Hello World in JUnit [JUnit 실행한 결과]
다음시간에는 이제 진짜 REST 기반의 웹서버를 제작합니다 요즘 핫한 Open API의 주역 REST란 무엇인가?