본문 바로가기

Spring

(14)
@Transactional(propagation) 비동기 동기 및 트랜잭션 전파에 대해 알아봅니다... 옵션설명 옵션 설명 REQUIRED 기본 옵션 부모 트랜잭션이 존재한다면 부모 트랜잭션에 합류, 그렇지 않다면 새로운 트랜잭션을 만든다. 중간에 자식/부모에서 rollback이 발생된다면 자식과 부모 모두 rollback 한다. REQUIRES_NEW 새로운 트랜잭션을 만든다. nested한 방식으로 메소드 호출이 이루어지더라도 rollback은 각각 이루어 진다. MANDATORY 무조건 부모 트랜잭션에 합류시킨다. 부모 트랜잭션이 존재하지 않는다면 예외를 발생시킨다. SUPPORTS 메소드가 트랜잭션을 필요로 하지는 않지만, 진행 중인 트랜잭션이 존재하면 트랜잭션을 사용한다는 것을 의미한다. 진행 중인 트랜잭션이 존재하지 않더라도 메소드는 정상적으..
스프링 스프링 프레임워크 3.1버전이긴 하지만 스프링의 기본적인 개념 및 매커니즘은 동일 시 하다고 느껴서 ... 이 책을 읽고 필요한 부분만 사용... 다 읽기에는 좀 더 너무 오래 걸릴꺼 같다.. bean : IOC가 생성,소멸 등으로 관리하는 오브젝트, 오브젝트라고 다 빈이라고 할 수 없다. beanFactory: 스프링컨테이너라고 볼 수 있다. 하지만 직접 사용은 하지 않으며, (applicationContext를 사용하지만, 최상위 계층이다.) 빈을 등록하며, 생성하고, 조회하며 등등으로 관리를 한다. applicationContext: beanFactory을 확장한 IOC 컨테이너이다.(beanFactory보다 더 추가된 기능) configuration Metadata: 스프링의 설정정보, IOC를 ..
Spring 올바른(?)빈주입? 스프링을 이용하여 개발을 하면 무조건을 하는 의존성주입이 있다. 자바 객체를 스프링컨테이너가 빈으로 등록을 하면 이제 빈을 관리해주는 스프링컨테이너가 빈의 라이프사이클을 관리해준다. -> 알아서 싱글톤 패턴으로 관리가 되게 해준다. 사실상 스프링을 이용해서 개발을 하다보면 직접 new()를 하여서 개발하는경우는 빈등록이 되지 않은 경우 아닌 이상 없다고 생각한다... 이제 IOC과 DI의 개념이 들어오는데 항상 이 둘은 붙어있다... IOC는 무엇일까? inversion of Controll 제어의 역전이다... 개발자가 개발을 하는데 제어는 스프링컨테이너가 해준다. 무슨말일까? 스프링을 이용하여 개발 중에 빈으로 등록된 컴포넌트(빈)들의 객체 생성 및 소멸 등 알아서 스프링컨테이너가 해주겠다 이것이다...
스프링-시큐리티 UsernamePasswordAuthenticationFilter 스프링에서 보안,인증,인가 등을 지원해주는 스프링 하위의 프레임워크이다. 일단 프레임워크이기때문에 어느정도 다 틀이 잡혀있어서 그에 맞게 설정 및 개발을 해줘야한다. (자주 잊어먹어서 정리를 하는글이지.. 기초부터 내용은 없습니다.. ) 기본적으로 서블릿필터가 서블릿 컨테이너에서 작동을 하고, 스프링 시큐리티는 스프링컨테이너에 있다. 그러면 어떻게 먼저 요청을 오는데 필터단에서 처리가 가능을 한 것일까..? 바로 서블릿 필터에서 스프링에게 요청을 위임을 해준다. 요청이 들어오면 먼저 서블릿컨텍스트의 필터단에서 설정된 필터가 차례대로 실행이 된다. 그때 DelegatingFilterProxy 클래스(요청을 위임하는거 빼고는 보안,인증,인가의 행위는 하지않는다.)를 이용을 해서 스프링 컨텍스트에 SPRING..
스프링 aop 스프링 AOP는 Aspect Oriented Programming의 약자이며, 관점 지향 프로그래밍입니다. 관점 지향 프로그래밍의 "관점 지향이란" 크게 핵심적인 관점과 부가적인 관점으로 나누어서 각각 모듈화를 하겠다는 것입니다.(관심사 분리) 예를 들어보자. 한 개발자가 개발 중에 있는데, 갑자기 모든 호출되는 메서드의 소요시간을 알고 싶다며, 모든 메서드에 소요시간을 구하는 로직을 구현을 해야 한다.. 메서드가.... 1만 개라면..? 할 수야 있겠지만 엄청나게 오래 걸릴 것이다.. 이런 식으로 개발을 하게 된다면..? 중복 코드 발생 -> 모든 코드에 똑같이 반복되는 코드가 생긴다. 흩어진 관심사(Crosscutting Concerns) 핵심 로직과 부가적인 로직으로 인하여 service단에서 핵심..
Interceptor 예외처리 스프링에서는 filter,aop,interceptor가 존재하는데 다 쓰임이 다르다. filter는 서블릿에서 관리를 하는 필터이기때문에 dispacherServlet에 받기 전에 처리하기 때문에, aop,interceptor보다 먼저 그 전에 앞단에서 처리를 해준다. aop와interceptor와는 dispacherServlet 후에 처리를 하기 때문에 비슷은 하지만 사용하는 용도와 로직이 좀 다르다. 일단 스프링을 하면 기본적으로 다들 알겠지만.. 또 까먹을까봐 그림을 머리속에 기억하자.. 기본적으로 filter,aop,interceptor와 대해 어느정도 안다는 전제하에 글을 쓴다... 이 글은 위에 3개에 대해 다루는 것은 아니고 interceptor의 예외처리 범위에 대해 알아볼려고 하는 것이다..
스프링 배치 스프링 배치에 대하여 정리하는 글을 가져보도록 합니다... 정리를 하는 글이며.. 틀릴 수가 있으니 어느 정도 감안하시며 보시는 걸 추천합니다. 작성된 코드는 github 에서 볼 수 있습니다 스프링 배치를 도입하는 경우는 (아무래도 모든 시스템에 배치시스템이 적용되지 않았을까.. 생각이 든다) 기본적으로 프로그램에서 큰 단위의 작업을 일괄처리를 해야 하는 경우. 실시간을 필요로 하지 않는 경우의 작업에 사용된다 ex) 통계, 정산 등등.. 컴퓨터 자원을 최대로 활용을 한다. 비교적 사용자가 적은 즉 자원 사용량이 적은 시간대에 사용을 하여서 이용한다. 사용자가 직접 실행이 아닌 스케줄러를 이용하여 실행한다 ex) 매일 오후 4시 실행, 매달 1일 실행, N분 간격으로 실행 등등.. 위에 사진을 참고하여..
세션관리 스프링시큐리티로 개발 및 공부중에 중복로그인에 대해서 알아보았습니다. ConcurrentSessionFilter가 존재하는데 private void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { HttpSession session = request.getSession(false); if (session != null) { SessionInformation info = this.sessionRegistry.getSessionInformation(session.getId()); if (info != null) { if (info.is..