토비의 스터디(17)
-
[토비의 스프링 3.1] 2.2 UserDaoTest 개선
2.2.1 테스트 검증의 자동화 테스트의 결과는 성공과 실패로 나뉜다. 실패는 테스트를 진행하는 동안에 에러가 발생하는 경우와, 에러가 발생하지 않았지만 결과가 기대한 바와 다른 경우로 나뉜다. 전자를 테스트 에러, 후자를 테스트 실패라고 구분한다. 테스트 중 에러가 발생하는 것은 콘솔에 출력되므로 쉽게 확인이 가능하다. 하지만 실패하는 것은 별도의 확인 작업과 그 결과가 있어야 알 수 있다. 테스트 코드를 다음과 같이 변경해보자. if(!user.getName().equals(user2.getName()){ System.out.println("테스트 실패 (name)"); }else if(!user.getPassword().equals(user2.getPassword()){ System.out.prin..
2022.06.09 -
[토비의 스프링 3.1] 2.3 개발자를 위한 테스팅 프레임워크 JUnit
JUnit 프레임워크를 자세히 살펴본다. 스프링의 핵심 기능 중 하나인 스프링 테스트 모듈도 JUnit을 이용한다. 따라서 JUnit은 스프링을 활용하려면 꼭 사용할 줄 알아야 한다. 2.3.1 JUnit 테스트 실행 방법 IDE와 빌드툴로 테스트 실행이 가능한데, IDE가 손쉽고 빠른 테스트를 제공한다. 실행 방법은 따로 포스팅 할 것이 없어 해당 절은 생략한다. 2.3.2 테스트 결과의 일관성 JUnit을 적용해서 테스트 코드를 만들었으나, 아직 개선할 점이 남아있다. 가장 불편했던 점은, 매번 테스트를 실행하기 전에 DB의 USER 테이블 데이터를 지워야 했다는 것이다. 깜빡 잊고 그냥 실행한 경우, 등록된 사용자 정보와 기본키가 중복된다면서 add() 메소드 실행중에 에러가 발생할 것이다. 이 경..
2022.06.03 -
[토비의 스프링 3.1] 2.1 UserDaoTest 다시 보기
스프링이 제공하는 가장 중요한 가치로 객체지향과 테스트를 꼽을 수 있다. 실제로 테스트를 작성할 때 JUnit 프레임워크를 사용했는데 손쉽게 사용할 수 있었다. 2장에서는 테스트의 가치, 활용 전략, 스프링과의 관계를 살펴본다. 2.1.1 테스트의 유용성 기존 1장에서 개발한 UserDao가 잘 동작하는지 확인하기 위해 테스트 코드를 작성했었다. main() 메소드를 이용해 UserDao를 직접 호출해서 add(), get() 메소드의 결과를 System.out.println()으로 콘솔에 출력해 눈으로 확인했었다. 웹을 통한 DAO 테스트 방법의 문제점 DAO를 테스트하고 싶은데 서비스, MVC 프레젠테이션 계층 등을 작성하고 테스트용 웹 서버에 배치한 뒤, 폼을 띄워 값을 입력해야 한다면 당연히 제대..
2022.06.01 -
[토비의 스프링 3.1] 1.7 의존관계 주입(DI)
스프링의 IoC에 대해 좀 더 깊이 알아보자. 1.7.1 제어의 역전(IoC)과 의존관계 주입 DaoFactory처럼 객체를 생성하고 관계를 맺어주는 등의 작업을 담당하는 기능을 일반화 한 것이 스프링의 IoC 컨테이너다. 스프링 IoC 기능의 대표적인 동작원리는 주로 의존관계 주입이라고 불린다. 스프링이 여타 프레임워크와 차별화돼서 제공해주는 기능은 의존관계 주입이라는 새로운 용어를 사용할 때 분명하게 드러난다. DI의 핵심은 오브젝트 레퍼런스를 외부로부터 제공(주입)받고 이를 통해 다른 오브젝트와 다양하게 의존관계가 만들어진다는 것이다. 1.7.2 런타임 의존관계 설정 의존관계란? 두 개의 클래스 모듈이 의존관계에 있다고 말할 때에는 항상 방향성이 있어야 한다. 즉 누가 누구에게 의존하는 관계에 있다..
2022.05.28 -
[토비의 스터디 3.1] 1.6 싱글톤 레지스트리와 오브젝트 스코프
1.5, 1.6장은 스터디에서 내가 맡은 부분이라 발표에 사용한 자료를 그대로 가져왔다. 1.6. 싱글톤 레지스트리와 오브젝트 스코프 오브젝트의 동일성(identity)과 동등성(equality) 동일성은 == 연산자 동등성은 equals() 메소드 동일성은 하나의 오브젝트를 두 개의 레퍼런스 변수가 가리키고 있는 상태 동등성은 두 개의 다른 오브젝트가 메모리상에 존재하나, 로직상의 정의에 따라 오브젝트 정보가 같다고 판단 스프링은 기본적으로 빈을 요청했을 때 매번 동일한 오브젝트를 돌려준다. 1.6.1. 싱글톤 레지스트리로서의 애플리케이션 컨텍스트 애플리케이션 컨텍스트는 싱글톤을 저장하고 관리하는 싱글톤 레지스트리다. 서버 애플리케이션과 싱글톤 스프링이 적용되는 대상은 자바 엔터프라이즈 기술을 사용하는..
2022.05.27 -
[토비의 스프링 3.1] 1.5 스프링의 IoC
1.5, 1.6장은 스터디에서 내가 맡은 부분이라 발표에 사용한 자료를 그대로 가져왔다. 이제 스프링을 사용해본다. 기존에 만든 DaoFactory을 스프링이 사용 가능하도록 만들어보자. 간단한 개념을 소개하자면, 스프링이 제어권을 가지고 직접 생성과 관계를 맺어주는 오브젝트를 빈(Bean)이라고 한다. 빈의 생성, 관계 설정 등의 제어를 담당하는 IoC 오브젝트를 빈 팩토리라고 하며 애플리케이션 컨텍스트를 사용한다. 애플리케이션 컨텍스트는 별도의 설정 정보를 참고해서 빈에 대한 제어 작업을 총괄한다. 1.5.1 오브젝트 팩토리를 이용한 스프링 IoC 앞서 만든 DaoFactory를 스프링의 애플리케이션 컨텍스트가 사용할 수 있는 설정정보로 만들어보자. 먼저, 설정을 담당하는 클래스는 스프링이 인식할 수..
2022.05.27