ThreadLocal 각 스레드마다 개별적으로 변수를 저장하는 기능을 제공한다. ThreadLocal을 사용하면 특정 스레드에서만 액세스 할 수 있는 데이터를 저장할 수 있다. 즉, 쓰레드라는 scope 내에서 공유되어 사용될 수 있는 값으로 다른 쓰레드에서 공유변수를 접근할 시 발생할 수 있는 동시성 문제의 예방을 위해 만들어졌다. 사용법 ThreadLocal에서 제공하는 get, set 메서드를 통해 값을 읽거나 쓸 수 있다. 예제 public class ContextTest { @Test void test() { Context.threadLocal.set(10); System.out.println(String.format("%s - %s", Thread.currentThread(), Context...
트랜잭션에 대해 실습을 진해아다 보니 이전 어느 회사의 기술면접에서 스프링 프레임워크의 트랜잭션 기능에 대해서 설명해 보란 기억에 말문이 막혔던 기억이 난다. 이를 계기로 토비의 스프링을 1회독 하게 되었고 지금은 스프링에 대한 이해도가 이전과 비교한다면 확실히 넓어진 느낌이다. 각설하고, 스프링 트랜잭션 실습에 들어가기에 앞서 트랜잭션이란 과연 무엇일까 어렴풋이 알고는 있지만 용어의 모호함을 없애기 위해 사전적 정의를 살펴보고자 한다. 더보기 데이터 베이스에서 하나의 논리적 작업을 수행하기 위한 단위로서, 데이터 베이스 시스템에서 복구 및 병행시행 시 처리되는 작업의 논리 단위이다. 하나의 트랜잭션은 commit되거나 rollback된다. 트랜잭션은 일반적으로 회복의 단위가 된다. __지형 공간정보체계..
매일같이 1뽀모도리 이상의 실습을 프로젝트를 진행하지 않고 있더라도 하도록 하였으니 오늘은 배운것중. aop 네임스페이스를 이용한 aop 등록에 대해 알아보고자 한다. aop 네임스페이스의 실습에 앞서 aop의 정의에 대해 알아보도록 하자. AoP란 Aspect Oriented Programming의 약자로 한국말로는 관점지향 프로그래밍이라는 뜻이다. 이렇게 뜻을 풀어놔도 글자 자체가 어려워서 AOP에 대해서 이해하지 못하고 있었는데 가장 와닿는 정의를 발견하여 다음과 같이 적는다. "OOP로는 모듈화 하지 못하는 프로젝트 전체에 산재해 있는 부가기능 소스를 모듈화 한 것" 공통된 부가기능으로는 트랜잭션, 성능테스팅, 로그출력등을 들 수 있다. 이번 실습에서는 기존에 만들었던 테스트빈인 MyBean클래스..
AOP 관련하여 실습을 진행중인데 뭔가 에러메시지가 많이 뜬다. 이상하다.. aop네임스페이스를 책에서 처럼 추가하였을 뿐이었는데 무엇이 문제일까.. 일단, 에러메시지를 쭉 살펴보았는데 다음과같이 클래스를 찾지 못한다는 에러메시지가 뜬다. Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.aop.support.DefaultBeanFactoryPointcutAdvisor#0': Cannot resolve reference to bean 'beanAdvicePointcut' while setting bean property 'pointcut'; n..
스프링 프레임워크에서 소스코드를 만들때 컨트롤러에서 아무런 기능을 수행하지 않고 오로지 JSP만을 띄워줘야 하는 경우가 있다. 이러한 경우 Controller클래스에 일일이 @RequestMapping이 선언된 메소드를 구현하여서 JSP를 띄우는 것이 아니라 단지 xml에 jsp의 경로에 대한 선언만으로 url과 jsp를 매핑시키는 방법이 있다. 이 방법을 적용해 보도록 하자 [src/WEB-INF/views/test.jsp] JSP 페이지를 Controller가 아닌 XML에서 선언된 url매핑을 통해서 연결되도록 함. [web.xml] setCharacterEncodingFilter org.apache.catalina.filters.SetCharacterEncodingFilter encoding UT..
폼으로 부터 입력받은 데이터를 DB에 저장하기 전에 데이터가 맞는지 검사하는 작업을 유효성 검사라고하는데 유효성 검사의 방법은 대체로 아래와 같이 두가지 방법이 있다. 유효성 검사의 방법 두가지 서버에 전달하기 전에 자바스크립트에서 하는 유효성 검사 클라이언트로 부터 받은 데이터에 대해 서버에서 하는 유효성 검사 스프링에서의 유효성 검사 스프링에서는 Validator 인터페이스를 구현함으로써 클라이언트로 부터 받은 데이터에 대한 서버의 유효성 검사를 지원하고 있다. 이번 실습에서는 Validator 인터페이스를 구현한 클래스를 만들고 컨트롤러에 DI시켜서 검증과정이 제대로 이뤄지는지 살펴볼 계획이다. Validator 인터페이스 supports() - 객체 타입 검증 validate() - 자바빈의 속성..
토비의 스프링 vol2 Chapter4의 @MVC에서 DataBinding과 관련된 부분을 공부하였다. @ModelAttribute를 사용하여 스프링이 제공하는 기본 바인딩만 하더라도 코드의 수를 상당히 줄일 수 있다고 생각하였는데, DataBinding에 Customizing된 자료형(ex : 열거형)을 바인딩 하는 여러가지 방법을 보고나니 어서 실습을 해보고 싶은 마음이 용솟음 친다. 오늘의 포스팅은 내가 차후 스프링 프로젝트를 하면서 자주 사용할 것같은 Custom화된 자료형을 바인딩 방법중에서 ConversionService를 이용한 바인딩을 수행하고 포스팅 하고자 한다. @MVC의 바인딩 기능을 사용하는 방법은 PropertyEditor를 사용하는 법과 ConversionService을 이용하는..
Service나 DAO 같은 비즈니스 로직과 달리 Controller의 경우 테스트 코드를 만들기가 되게 애매하다. 이유는 Service나 Dao와 달리 Controller의 경우 Http Request나 Response등의 요청이 필요하고 또한 결과값인 Model이나 View등의 정보를 어떻게 받아야 하는지도 애매하다. 그렇기에 스프링에서는 이와같은 것들을 테스트하는데 도움을 주기위해 Mock 오브젝트를 제공하고 있다. Mock이란 아래와 같은 정의를 갖고 있다. Mock이란? 실제 객체를 만들어 사용하기에 시간, 비용 등의 Cost가 높거나 혹은 객체 서로간의 의존성이 강해 구현하기 힘들 경우 가짜 객체를 만들어 사용하는 방법이다. 각설하고, 스프링은 MockHttpServletRequest와 Moc..
스프링의 MVC에서 @Controller 어노테이션을 사용하기 이전에는 Controller인터페이스를 구현하고 xml파일등에 등록하여 컨트롤러를 빈으로 등록하였으나 @Controller의 등장으로 @Controller 어노테이션을 클래스 위에 첨가하는 것 만으로 해당 클래스를 컨트롤러의 빈으로 사용할 수 있다. 뿐만 아니라 각 @Controller를 사용하는 클래스의 각 메서드마다 @RequestMapping 어노테이션을 사용하여 URL 매핑을 할 수 있어 클래스의 양을 상당히 줄일 수 있다. 개인적으로 @Controller의 존재와 @RequestMapping의 존재를 알고 있어서 두가지 어노테이션을 개발시 사용하고 있었으나 지금 생각해보면 그 외의 기능들은 스프링의 기능은 사용하지 않고 JSP를 공부..
어제 토비의스프링 vol2 3장 스프링 MVC에 대하여 공부를 하였다. 공부를 수행한 시각은 약 2뽀모도리(1시간 가량)이다. 50분가량 공부하면서 느낀점은 내가 스프링에 대해 빙산의 일각정도의 지식만 갖고 프로젝트를 임해왔었다는 것이다. 토비의 스프링을 보기전에 본 책은 토비의 스프링 1/6분량의 얇은 책이었는데 지금와서 생각해보면 필요한 내용은 모두 담겨있었으나 토비의 스프링처럼 통찰을 갖다주는 책이 아닌 레퍼런스의 번역서 정도로 생각할 수 있을것 같다. 오늘 2뽀모도리동안 공부한 양에 내가 기본적으로 알고있던 내용보다 더 많은 통찰을 얻게되었고 아직 공부할 것이 많이 남아 있다는 점에서 얼마나 모르고 있었는지 반성하게 된다. 스프링의 MVC 패턴은 아래의 그림과 같이 동작한다. 스프링 웹 MVC가 ..