본문 바로가기

Programming/Spring

log4j.properties 설정 * 설정 준비 - log4j-1.x.xx.jar를 복사해서 eclipse/workspace//WEB-INF/lib에 붙여넣기 - eclipse/workspace//WEB-INF/src에 log4j.properties를 작성 - eclipse/workspace//WEB-INF/web.xml에 아래 부분 추가 log4j-configuration /WEB-INF/src/log4j.properties -> 굳이 /WEB-INF/src에 log4j.properties를 작성하지 않아도 되는데, 이 properties 파일 위치를 바꿀 경우 web.xml의 param-value의 값도 바꾼 위치에 맞게 설정해준다. 자바 프로그램의 로깅에서 사실상 표준의 위치에 있는 Log4J의 설정 파일은 프로퍼티 형태의 log4.. 더보기
Spring - 뷰 리졸버(View resolver) 뷰 리졸빙(View resolving)사용자에게 결과를 랜더링하여 보여주기 위하여 사용 뷰 리졸버 구현체 뷰 리졸버 설명 BeannameViewResolver 논리적 뷰 이름과 동일한 ID를 갖는 으로 등록된 View의 구현체를 찾는다. ContentNegotiatingViewResolver 요청되는 콘텐츠 형식에 기반을 두어 선택한 하나 이상의 다른 뷰 리졸버에 위임한다. FreeMarkerViewResolver FreeMarker 기반의 템플릿을 찾는다. 경로는 논리적 뷰 이름에 접두어와 접미어를 붙여 구성 InternalResourceViewResolver 웹 어플리케이션의 WAR 파일 내에 포함된 뷰 템플릿을 찾는다. 뷰 템플릿의 경로는 논리적 뷰 이름에 접두어와 접미어를 붙여 구성 JasperR.. 더보기
Spring - Transaction2 (선언적 트랜잭션 처리) 선언적 트랜잭션Transaction Template와 달리 트랜잭션 처리를 코드에서 직접적으로 수행하지 않음설정 파일이나 어노테이션을 이용하여 트랜잭션의 법위, 롤백 규칙 등을 정의 선언적 트랜잭션 정의 방식1. 태그를 이용하여 트랜잭션 처리2. @Transaction 어노테이션을 이용한 트랜잭션 설정3. TransactionProxyFactoryBean 태그를 이용한 트랜잭션 처리 (2.0 이전 빈마다 프록시를 만들어서 사용하였으나 현재는 많이 사용되지 않는다.) 트랜잭션 특성선언적 트랜잭션은 트랜잭션 특성으로 정의된다.트랜잭션 특성이란? 특정 메소드에 어떻게 적용되어야 하는지에 대한 정책을 기술한 것전파방식, 격리수준, 읽기전용힌트, 타임아웃, 롤백규칙으로 정의된다. 태그를 이용한 트랜잭션 처리 태그.. 더보기
Spring - Transaction1 (스프링의 트랜잭션 지원) 트랜잭션 (Transaction)트랜잭션은 현대의 웹 보안에 있어서 매우 중요한 역활을 차지하며 DB와 JAVA언어가 데이터를 주고 받는 과정에 원자성을 부여하는 수단을 일컫는다. 간단하게 설명하자면 !!어떤 작업 프로세스를 하나로 묶어 실행 중 하나의 작업이라도 실패하면 모두 실패 처리를 해주고, 전체 작업이 성공하면 성공 처리를 해주는 것이다. 스프링 프레임워크의 트랜잭션 - Java Transaction API(JTA), JDBC, Hivernate, Java Persistence API(JPA), Java Data Objects(JDO)같은 여러 가지 트랜잭션 API간에 일관성있는 프로그래밍 모델 - 선언적인 트랜잭션 관리 지원 - 프로그래밍적인 트랜잭션 관리에 대해 JTA같은 복잡한 트랜잭션 A.. 더보기
Spring - POJO 지난 몇 년간 EJB3를 포함한 많은 자바의 새로운 기술과 제품들은 저마다 POJO 프로그래밍의 지원을 주요 장점으로 내세우며 등장했다. 그러나 POJO 프로그래밍이 과연 무엇이고 어떤 이득을 안겨줄 수 있는지에 대해 명확히 설명하는 것은 사실 쉽지 않다. 이 글에서는 POJO 프로그래밍이 왜 중요한지 살펴보고 그것을 통해 기존의 무겁고 지저분한 코드를 어떻게 깔끔하고 군살 없는 코드로 만들 수 있는지를 알아보자. POJO는 ‘Plain Old Java Object’의 약자이다. 이를 번역하면 ‘평범한 구식 자바 오브젝트(객체)’라고 할 수 있겠다. 도대체 평범하고 구식인 자바 오브젝트가 뭐가 다르고 특별해서 POJO라고 부르는 것일까? 그럼 평범하지 않은 최신의 자바 오브젝트는 또 무엇인가? POJO란.. 더보기
Spring - Bean 초기화 및 생명주기 BeanFactory & ApplicationContext bean factory - 스프링의 IoC를 담당하는 핵심 컨테이너 빈을 등록/생성/조회/반환/관리한다. 보통은 bean factory 를 바로 사용하지 않고 이를 확장한 application context 를 이용한다. BeanFactory 는 bean factory 가 구현하는 interface 이다. (getBean()등의 메소드가 정의되어 있음) application context - bean factory를 확장한 IoC 컨테이너 빈의 등록/생성/조회/반환/관리의 기능은 bean factory 와 같지만, 여기에 spring의 각종 부가 서비스를 추가로 제공한다. ApplicationContext는 application context가 .. 더보기
Spring - Bean Scope Bean Scope Bean의 정의는 실제 bean 객체를 생성하는 방식을 정의하는 것이다. Class와 마찬가지로 하나의 Bean 정의에 해당하는 다수의 객체가 생성될 수 있다. Bean 정의를 통해 객체에 다양한 종속성 및 설정값을 주입할 수 있을 뿐 아니라, 객체의 범위(scope)를 정의할 수 있다. Spring Framework는 5가지 scope을 제공한다. (그 중 3가지는 web-aware ApplicationContext를 사용할 때 이용할 수 있다). Scope 설명 singleton 하나의 Bean 정의에 대하여 Spring IoC Container 내에 단 하나의 객체만 존재 prototype 하나의 Bean 정의에 대하여 다수의 객체가 존재 할 수 있다. request 하나의 Be.. 더보기
Spring - IoC & DI IoC(Inversion of Control - 제어의 역전)란? IoC란 간단하게 말하여 프로그램의 제어 흐름 구조가 바뀌는 것이다. 일반적으로, main() 같은 프로그램이 시작되는 지점에서 다음에 사용할 오브젝트를 결정, 생성하고, 만들어진 오브젝트 내의 메소드를 호출하는 작업을 반복한다. 이런 구조에서 각 오브젝트느 프로그램 흐름을 결정하거나 사용할 오브젝트를 구성하는 작업에 능동적으로 참여한다. 즉, 모든 종류의 작업을 사용하는 쪽에서 제어하는 구조이다. 이에 반하여 IoC는 제어 흐름의 개념을 거꾸로 뒤집는다. 오브젝트는 자신이 사용할 오브젝트를 스스로 생성하거나 선택하지 않는다. 그리고 자신이 어떻게 만들어지고 어디서 사용되는지 알 수 없다. 모든 제어 권한을 자신이 아닌 다른 대상에게 위임.. 더보기
Spring - AOP 개념 정리 AOP (Aspect Oriented Programming) - 기능을 핵심 비지니스 로직과 공통 모듈로 구분하고, 핵심 로직에 영향을 미치지 않고 사이사이에 공통 모듈을 효과적으로 잘 끼워넣도록 하는 개발 방법이다. 공통 모듈(보안 인증, 로깅 같은 요소등)을 만든 후에 코드 밖에서 이 모듈을 비지니스 로직에 삽입하는 것이 바로 AOP 적인 개발이다. 코드 밖에서 설정된다는 것이 핵심이다. AOP가 사용되는 경우 1) 간단한 메소드 성능 검사 개발 도중 특히 DB에 다량의 데이터를 넣고 빼는 등의 배치 작업에 대하여 시간을 측정해보고 쿼리를 개선하는 작업은 매우 의미가 있다. 이 경우 매번 해당 메소드 처음과 끝에 System.currentTimeMills();를 사용하거나, 스프링이 제공하는 Stop.. 더보기
Spring MVC 와 DispatcherServlet Spring MVC 는 다른 MVC 프레임워크와 동일하게 앞단에 프론트 컨트롤러(DispatcherServler)를 두고있다. DispatcherServlet - web.xml 에 정의한 서블릿 MVC아키텍처로 구성된 프레젠테이션 계층을 만들 수 있도록 설계되어 있다.[ Spring MVC의 흐름 ] 1) DispatcherServlet의 HTTP 요청 접수 자바 서버의 서블릿 컨테이너는 HTTP 프로토콜을 통해 들어오는 요청이 스프링의 DIspatcherServlet에 할당된 것이라면 HTTP 요청 정보를 DIspatcherServlet에 전달. web.xml에는 DIspatcherServlet이 전달받을 URL의 패턴이 정의되어 있다. DIspatcherServlet는 공통적으로 진행해야 하는 파라미.. 더보기