본문 바로가기
Record/boostcourse

[boostcourse] 3. 웹 앱 개발 예약 서비스 생각해보기 #2 ~ #3

by doongjun 2021. 8. 1.

#2 Spring Test

1) TDD가 무엇인지 알아보세요.

TDD(TestDrivenDevelopment)는 코드작성보다 테스트 작성을 먼저하고,

이 테스트를 통과하기 위한 코드를 작성하는 과정을 반복하면서

코드가 제대로 동작하는지에 대한 피드백을 적극적으로 받아들이는 개발 방법이다.

짧은 개발 주기의 반복에 의존하는 개발 프로세스이며 애자일 방법론 중 하나인

eXtreamProgramming의 Test-First개념에 기반을 둔 단순한 설계를 중요시한다.

TDD 개발주기

TDD의 대표적인 Java 단위 테스트 프레임워크 'JUnit'

2) 스프링 프레임워크를 사용하면 객체의 생성을 컨테이너가 한다고 했습니다.
그렇다면 컨테이너가 관리하는 객체(Bean)은 어떻게 테스트를 수행하면 될까요?

테스트 클래스에 @RunWith(SpringJUnit4ClassRunner.class),

@ContextConfiguration 어노테이션으로 테스트클래스가 컨테이너에서 관리되는 Bean으로 만든다.

이후 @Autowired 어노테이션을 통해 테스트하고자 하는 다른 객체(Bean)들을 테스트한다.

 

3) 여러 패키지에 걸쳐서 빈(Bean)클래스들이 있고,
특정 패키지에 있는 클래스만 테스트 하려면 어떻게 해야할까요?

참고로 테스트 소스코드가 있는 곳에도 스프링 설정 파일이 있을 수 있습니다.

스프링은 mock 객체를 통해 단위테스트를 독립적으로 시행할 수 있습니다.

4) 단위테스트, 통합테스트, 인수테스트에 대해 조사해보고 각각 어떤 차이점이 있는지 정리해보세요.

단위테스트 : 하나의 단위를 테스트하는 것으로

이 단위는 정하기 나름이지만 대부분 하나의 모듈을 의미한다.

자바에서 모듈은 클래스(객체)가 일반적이다.

통합테스트 : 여러 모듈간의 상호작용을 테스트하는 것으로

자바에서 객체간의 상호작용을 테스트하는 것이 일반적이다.

인수테스트 : 사용자의 관점에서 특정 서비스가 요구 사항을 충족시키는지 평가하는 테스트로

알파 테스트 및 베타 테스트로 나뉘기도 한다.

 

#3 Spring JDBC

1) JDBC 프로그래밍이 불편해서 이를 해결하기 위해 등장한 기술로
Spring JDBC 외에 다양한 기술이 존재합니다.
대표적으로 JPA와 MyBatis가 그러한 기술입니다.
문제를 해결하는 방법이 왜 여러가지가 존재할까요?

개발자가 개발을 하면서 반복적인 부분을 개발하는데에 지루함을 느끼고 비용이 들어간다.

이를 해결하기 위해 여러가지 방법이 생겨난다고 생각한다.

 

2) JDBC Template을 이용하지 않고 NamedParameterJdbcTemplate를 이용하여
DAO를 작성한 이유는 무엇이라고 생각하나요?

JDBC Template을 사용하면 자바에 존재하는 쿼리문과 DB연산으로 부터 발생하는 값

객체의 파라미터를 관리하기 매우 힘들어진다.

대표적인 예로, Java는 클래스의 인스턴스 변수에 Carmel Case을 주로 사용하고

SQL은 컬럼명으로 Snake Case를 주로 사용하기 때문에

서로 통신하기 위해 Parsing하는 작업이 필요하고 이러한 작업들을 NamedParameterJdbcTemplate가 지원해준다. 만약 JDBC Template를 직접 사용한다면 NamedParameterJDBCTemplate가 제공해주는

Parsing 작업들을 개발자가 직접 해줘야만 하고 이는 Type Safe하지 못할 뿐더러 많은 중복 코드를 발생시킨다.

이러한 중복된 코드는 모든 에러의 근원이며 이를 없애기 위해서 JDBC Template 대신 NamedParameterJDBCTemplate를 사용할 것을 권장한다.

 

 

댓글