스프링 프레임워크(29) 생각 정리

넙데데맨·2022년 6월 22일
0

프레임워크

디자인 패턴 + 패턴이 적용된 기반 클래스 라이브러리
프레임워크는 개발자가 만든 클래스를 호출해 실행의 흐름에 대한 제어를 담당한다.

디자인 패턴

개발에서 자주 쓰는 과제를 효율적인 형태로 묶은 것

라이브러리

공통으로 사용될 수 있는 특정한 기능들을 모듈화한 것

DI

클래스 사이 필요로 하는 의존 관계를 주입시켜주는 것

IoC 컨테이너

객체와 의존성을 관리해주는 컨테이너로 개발자가 하던 제어를 컨테이너가 해준다는 의미에서 제어 반전이 일어났기 때문에 IoC 컨테이너라고 한다.
BeanFactory

  • Bean 등록, 생성, 조회 인터페이스
  • 객체 사용 시점에 객체 생성
    ApplicationContext
  • BeanFactory 확장 및 부가 서비스 제공을 해주기 때문에
  • 컨테이너 구동 시 객체 생성

IoC 컨테이너 사용

  1. Spring에서는 ApplicationContext 인터페이스를 구현한 클래스들과 파일 경로를 사용해 컨테이너 객체를 생성한다. 여기
  2. Spring Bean Configuration XML에 어떤 클래스를 빈즈로 사용할 것인지 설정한다.
  3. 생성된 컨테이너 객체의 getBean() 메소드를 사용하여 Spring Bean Configuration XML 파일에서 설정한 객체에 접근한다.

Spring Bean Configuration XML

Project - Spring - Spring Bean Configuration XML에서 생성한다.

Bean

빈을 생성하는 태그
id 빈의 이름으로 사용
class 빈으로 만들 클래스의 경로

<bean id="hello" class="myspring.di.xml.Hello">	
	

property

setter를 통한 주입 방식을 사용하는 태그

<bean id="hello" class="myspring.di.xml.Hello">	
	<property name="kor" value="10"/>
</bean>

name setter 메소드의 이름 사용한다. ex)setKor -> kor
value 단순 값
ref 다른 빈 주입 시 사용

constructor-arg

생성자를 통한 주입 방식을 사용하는 태그

<bean id="hello" class="myspring.di.xml.Hello">	
	<constuctor-arg value="10" />
</bean>

name 생성자의 인자를 사용한다. ex) public Exam(int kor){}
index 생성자의 인자에 차례로 index를 줘서 값 지정시 사용
value 단순 값
ref 다른 빈 주입 시 사용

컬렉션 DI

여기

namespace

자주 사용하는 태그들을 간편하게 사용하기 위해 줄여 사용하는 것

JUnit

assert 메소드

테스트 결과를 확인하는 용도의 메소드
기대값과 결과값이 일치하는 지 비교하는 메소드가 대부분이다.
Assert.메소드() 방식이지만
메소드를 static import해주면 메소드()로 접근 가능
ex) import static org.junit.Assert.assertSame;

사용자 관리 프로젝트 아키텍처

프레젠테이션 계층

UserController
비즈니스 로직과 최종 UI를 분리하기 위한 컨트롤러 기능 제공, 클라이언트의 요청, 응답 처리 및 상위 계층의 Exception 처리

서비스 계층

UserService UserServiceImpl
인터페이스 및 구현 클래스로 비즈니스 로직을 구현하고 데이터 액세스 계층에 접근한다.

데이터 액세스 계층

UserDAO UserDAOImplJDBC
인터페이스 및 구현 클래스로 데이터 액세스 로직 구현
커넥션 풀 기능을 지원하는 DataSource 객체를 빈으로 등록해서 사용한다.

JdbcTemplate

JDBC의 기능을 활용하기 쉽게 만든 클래스로 DataSource를 인자로 받는다.
update() insert delete update 실행 시 사용
queryForObject() 여러 칼럼 1개 Row반환
query() 여러 칼럼 여러개 Row반환

RowMapper 클래스

스프링에서 원하는 형태의 결과를 반환받기 위한 클래스
mapRow() ResultSet과 int형 인자를 받는 ResultSet을 이용한다.

도메인 모델 클래스

RDBMS의 엔티티와 비슷한 개념 실제 VO, DTO 객체로 계층 전체가 사용한다.

어노테이션

테스트 관련 어노테이션

@Test

테스트를 수행할 메소드

@Ignore

테스트를 실행하지 않는 메소드

@Before

@Test 메소드 실행 전마다 실행

@BeforeClass

@Test 메소드 실행 전 한번만 실행

@After

@Test 메소드 실행 후마다 실행

@AfterClass

@Test 메소드 실행 후 한번만 실행

@Runwith

JUnit이 테스트 진행 중 ApplicationContext를 만들고 관리해준다.
ex)@RunWith(SpringJUnit4ClassRunner .class)

Bean 등록 어노테이션

@Component

컴포넌트의 스테레오 타입 태그 <bean> 태그와 동일한 역할을 하는 기본 어노테이션으로 나머지 어노테이션은 비즈니스 레이어를 구분하기 위해 사용 되는 것으로 전부 @Component를 상속받고 있다.

@Repository

데이터 액세스 레이어에서 사용
파일, DB등 영속성을 가진 속성을 가지는 클래스
데이터 접근 객체의 역할 수행

@Service

서비스 레이어에서 사용
비즈니스 로직을 가진 클래스

@Controller

프레젠테이션 레이어에서 사용

Bean 의존관계 주입

@Autowired

타입 -> 이름 -> @Qualifier -> 실패순으로 찾아 자동으로 Bean을 주입한다.

@Resource

이름 -> 타입 -> @Qualifier -> 실패순으로 찾아 자동으로 Bean을 주입한다.

@Qualfier

동일한 타입, 이름의 Bean이 여러 개 존재할 시 명시해주는 역할

@Value

단순 값 주입 어노테이션

<context:component-scan>

위의 태그들을 통해 자동으로 의존관계를 주입하기 위해선 XML 파일에 해당 태그를 사용해 Bean을 찾기위한 패키지를 지정해줘야한다.
bean.xml

<context:component-scan base-package="myspring.di.annot"></context:component-scan>
profile
차근차근

2개의 댓글

comment-user-thumbnail
2022년 6월 24일

1개의 답글