spring api 에러 처리

API 예외처리는 단순히 오류 페이지를 반환하는 것보다 서버간 통신 규약에 따라 오류 응답 스펙을 정해놓고, JSON (또는 XML등 ) 으로 데이터를 내려준다.

API 예외 처리도 스프링 부트가 기본으로 제공하는 BasicErrorController 을 사용할 수 있긴하지만, 서버간 통신규약에 맞게 json을 반환하려면 customizing 할 수 있어야 한다.

Read more

spring error page 설정 , 예외 처리

servlet의 예외 발생 방식

  1. Exception
  2. response.sendError(http 상태코드, 오류 메시지 )

1. Exception

  • web app에서 예외 발생시 상황
  • 사용자 요청별로 별도의 쓰레드 할당
  • 특정 사용자 요청시 예외 발생 -> try~catch 문으로 예외 처리를 해주지 않는 경우 WAS까지 예외가 전달된다.
1
2
3

controller(예외 발생) -> interceptor -> dispatcher servlet -> filter -> WAS (예외 전달 )

Read more

spring filter vs interceptor

  • application 여러 로직에서 공통으로 포함되어 있는 로직을 공통 관심사 (cross-cutting concern)이라고 한다.

  • 웹 앱과 관련된 (ex) 로그인 ) 공통 관심사를 처리하는데, 주로 servlet filter 나, spring interceptor를 사용한다.

Read more

TDD (테스트 주도 개발, Test Driven Development) 와 JUnit

TDD란?

  • 테스트 코드를 먼저 만들고, 테스트를 성공하게 해주는 코드를 작성하는 방식의 개발 방법
  • 테스트 코드가 기능 정의서처럼 기능함
  • 테스트를 먼저 만들고, 테스트가 성공하도록 하는 코드를 만드는 식으로 진행하기 때문에, Test coverage 영역이 높아진다.
  • 테스트를 작성하는 시간과, application 코드를 작성하는 시간의 간격이 짧아진다.
Read more

spring batch (1)

배치 처리란?

  • 일반적인 GUI를 가진 app은 사용자와 상호작용함
  • 사용자와 상호작용없이 유한한 양의 데이터를 처리하는 것 (GUI없음)
Read more

Spring Configuration - Xml

spring은 java annotaion 기반으로 DI 의존관계 설정 class를 만드는 것 이외에도 ,

xml을 활용하여 DI 의존관계 설정 class를 만드는 것을 지원한다.

xml의 이용할 경우 별도의 compile이 필요하지 않다는 장점을 가지고 있다.

annotaion의 @Configuration 이 <beans> tag, @Bean 이 <bean> tag와 대응된다.

@Bean에서 bean이름이 될 method name은 xml에서 <bean> tag 의 id attribute,
@Bean에서 bean Class type은 xml에서 <bean> tag의 class attribute 가 된다.

예를 들어

1
2
3
4
@Bean 
public ConnectionMaker connectionMaker(){
return new DconnectionMaker();
}

위 자바 코드는 아래의 xml 기반의 설정파일과 동일한 의미이다.

1
2
3
<beans>
<bean id="connectionMaker" class="com.springstudy...DconnectionMaker">
<beans>

다른 Bean 과의 관계설정은 xml에서 tag를 통해 이루어질 수 있다. property tag의 name attribute는 property 이름 , ref attribute는 setter method를 통해 주입해줄 bean 객체의 이름이다.

예를 들어

1
2
3
4
5
6
7
8
public class UserDao{

private ConnectionMaker connectionMaker;

public void setConnectionMaker(ConnectionMaker connectionMaker){
this.connectionMaker=connectionMaker;
}
}

위 자바 코드는 아래의 xml 기반의 설정파일과 동일한 의미이다.

1
2
3
4
5
6
<beans>
<bean id="userDao" class="com.springstudy...UserDao">
<!-- name : property 명 , ref : bean 객체 이름 -->
<property name="connectionMaker" ref="connectionMaker" />
</bean>
<beans>

application context 를 xml 설정파일로 만드는 방법은 간단하다 다른 구체 class를 사용하면 된다.

1
GenericXmlApplicationContext("applicationContext.xml");

최종적으로 현재 userDao 를 xml설정파일로 bean으로 등록하였다.

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- applicationContext.xml  -->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<bean id="connectionMaker" class="com.springstudy.ioc.DconnectionMaker"></bean>
<bean id="userDao" class="com.springstudy.ioc.UserDao">
<property name="connectionMaker" ref="connectionMaker"></property>
</bean>

</beans>
1
2
3
4
5
6
public static void main(String[] args) {
ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");
UserDao userDao = context.getBean("userDao", UserDao.class);
System.out.println("userDao = " + userDao);

}

Denpendency Injection & Dependency Lookup

  • Dependency Injection
    Spring IoC의 동작원리는 주로 DI(Dependency Injection)이다. Spring 공식 Doc보면, IoC를 DI라고 표현하기도 한다.

Dependency Injection의 정의는 다음과 같다.


Dependency Injection :

program run time 시에 의존관계를 맺는 대상인 dependent object 와 , 그것을 사용하는 주체인 client object를 연결시켜주는 작업


DI는 정리하면 다음과 같은 3 조건을 충족시키는 작업을 말한다.

  1. class model(class diagram)에는 의존관계가 들어나지 않음 , 즉 client가 Interface에 의존하고 있어야 한다.
  2. run time시 의존관계는 container와 같은 다른 주체가 결정한다.
  3. 의존관계는 사용할 dependent object의 reference를 외부에서 주입해줌으로서, 만들어진다.
Read more

Spring IoC container

토비의 spring
이전까지는 Spring 을 적용하지 않고, IoC에 대해서 살펴보았다.
지금부터는 Spring이 IoC를 어떤형태로 구현하였는지 살펴보겠다.
그전에 spring에서 사용하는 용어를 정리하면 다음과 같다.


- Bean

: spring이 제어권을 가지고 직접 만들고 , 관계를 설정하는 객체


- Bean Factory

: Bean의 생성과 관계설정과 같은 제어를 담당하는 IoC 객체

(=이를 확장된 의미에서는 Application Context라고 한다.)
Read more