Archive for the ‘ Framework ’ Category

Inversion of Control Containers and the Dependency Injection pattern

Inversion of Control과 Dependency Injection에 관한 마틴 파울러의 글

http://martinfowler.com/articles/injection.html

Spring AOP(Aspect-Oriented Programming)

애스펙트 지향 프로그래밍은 소프트웨어 시스템 내부의 관심사들을 서로 분리(separation of concerns) 하는 기술이라고 설명할 수 있다. 시스템은 보통 특정한 기능을 책임지는 여러 개의 컴포넌트로 구성된다. 그러나 각 컴포넌트는 대체로 본연의 특정한 기능 외에 로깅이나 트랜잭션 관리, 보안 등의 시스템 서비스도 수행해야 하는 경우가 많다. 이러한 시스템 서비스는 시스템의 여러 컴포넌트에 관련되는 경향이 있기 때문에 횡단관심사라고 한다.

이러한 관심사가 여러 컴포넌트에 퍼지게 되면 코드가 다음 두 가지 차원에서 복잡해진다.

  • 시스템 전반에 걸친 관심사를 구현하는 코드가 여러 컴포넌트에서 중복되어 나타난다. 이때 문제느 이 관심사의 구현을 변경해야 하는 경우 여러 컴포넌트를 모두 변경해야 한다는 것이다. 이 관심사를 별도의 모듈로 추상화해서 각 컴포넌트에서 하나의 메서드만 호출할 수 있도록 만든다고 하더라도, 여전히 이 메서드가 여러 컴포넌트에서 중복되어 나타나는 문제는 동일하다.
  • 컴포넌트의 코드가 본연의 기능과 관련 없는 코드로 인해 지저분해진다. 주소록에 주소를 등록하는 메서드는 보안 상태가 유지됐는지 아닌지에는 신경 쓸 필요 없이 주소를 등록하는 방법에만 관여하는 것이 좋다.

AOP는 시스템 서비스를 모듈화해서 컴포넌트에 선언적으로 적용할 수 있게 해준다.

AOP를 이용하면 시스템 서비스에 대해서는 전혀 알지 못하면서 응집도가 높고 본연의 관심사에 집중하는 컴포넌트를 만들 수 있다. 다시 말해 애스펙트는 POJO를 말 그대로 평범하게 해준다.

-Spring In Action

Spring 한글 깨짐 문제

입력 폼의 값들을 post 로 넘길 때 한글 깨짐 현상..

web.xml 에 아래와 같이 Spring 에서 제공하는 filter를 설정해준다.

<filter>
	<filter-name>encodingFilter</filter-name>
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>euc-kr</param-value>
	</init-param>
</filter>

<filter-mapping>
	<filter-name>encodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>