본문 바로가기

프로그래밍/Spring & MyBatis

Spring + Gradle 연동하기 두번째 과제는 Spring + Gradle 연동하기 이다. 표현이 조금 애매하긴 한데, 결국 Gradle(이하 그래들)로 빌드 해서 Hello World 찍는 과제였다. 교육기간중에 그래들은 사용해 본적이 없어서 멘땅에 헤딩하는 기분으로 접근을 시작했다. (안드로이드 교육을 받으면서 잠깐 보기는 했다. 그때는 그래들이 뭔지도 몰랐지만...) 우선 그래들을 다운받았다. https://gradle.org/gradle-download/ 메이븐과 마찬가지로 적당한 폴더에 압축을 풀고 사용하기 위함이다. 물론 나는 STS 를 사용하기 때문에 대쉬보드에 검색하면 쉽게 설치가 가능하다. 이렇게 대쉬보드에서 확장 플러그인을 쉽게 설치 할 수 있다. 검색해서 체크하고 우측하단의 인스톨만 클릭하면 된다. 나는 이미 설치가..
Spring + Maven 연동하기 Spring 과 Maven 을 연동하여 Hello World 찍기 이다. https://maven.apache.org/ 에 접속하여 maven을 다운 받았다. 굳이 사진까지 첨부하여 설명을 하자면, 다운로드 카테고리에서 Binary zip archive 파일을 다운 받아 적당한 위치에 압축을 풀어 주었다. 그런 다음 Eclipse를 실행시켜 메이븐을 연동 시켰다. 구체적인 방법은 Eclipse 에서 (참고로 나는 STS를 사용했다) 설정 파일을 연다. 좌측의 메뉴에서 Maven 을 찾아 확장시켜보면 Installations 가 있다. Add 버튼을 눌러 설치된 메이븐 폴더를 지정해 준다. 그런 다음 User Settings 메뉴를 눌러서 setting 파일을 연결한다. 이 설정은 하지 않아도 상관없지만 ..
[Spring]@ModelAttribute @RequestBody @PathVariable @PathVariable @RequestMapping의 URL에 {}로 들어가는 패스 변수를 받는다. 요청 파라미터를 URL의 쿼리 스트링으로 보내는 대신 URL패스로 풀어서 쓰는 방식을 쓰는 경우 매우 유용하다.타입이 일치하지 않는 값이 들어오면 예외가 발생하며 별다른 예외처리를 해주지 않는다면클라이언트에 HTTP 400 - Bad Request응답 코드가 전달 됨 @ModelAttibute 이름 그대로 모델로 사용되는 오브젝트이다. 여러개의 @RequestParam을 선언하는 대신에 여러개의 파라미터를 하나의 오브젝트에 담는 것이다. 코드를 훨씬 간결하게 작성할 수 있고 좀더 객체 지향적인 코드 구현이 가능하다. @ModelAttribute가 해주는 한가지 기능이 더 있는데, 그것은 컨트롤러가 리턴하..
계층화 아키텍처(Layered architecture) 대부분의 중/대규모의 어플리케이션은 효율적인 개발 및 유지보수를 위해 계층화(layered)하여 개발하는 것이 일반적이다. 계층화 아키텍처는 MVC으로 대표되는데 MVC 패턴의 특징은 다음과 같다. 컨트롤러와 모델과는 독립적으로 뷰를 수정할 수 있다. 모델 컴포넌트는 뷰와 컨트롤러 컴포넌트로부터 데이터 구조와 같은 내부적인 상세한 사항을 숨긴다. 모델에 인터페이스를 가능한 한 사용하면, GUI 또는 J2ME와 같은 영역에서도 재사용이 가능하다. 컨트롤러에서 모델 코드 부분을 분리하면 원격 비즈니스 컴포넌트 사용으로 옮겨가는 것이 수월하다. 이와 같이 계층화 아키텍처는 UI의 로직과 비즈니스 로직은 어떻게 구현하고 어디에 위치시킬 것인가, 그리고 어플리케이션에 필요한 데이터 및 어플리케이션의 상태는 어떻게..
HandlerInterceptor 핸들러 인터셉터 인터셉터는 Controller이 호출되기 전과 후에 요청과 응답을 참조하거나 가공할 수 있다. 인터셉터는 HandlerInterceptor를 구현해서 작성한다. 인터셉터는 하나 이상을 등록할 수 있다. Controller 의 호출과정에서 적용되는 기능은 인터셉터를 주로 사용한다. public interface HandlerInterceptor { boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception; void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, Mod..
[Mybatis] 동적 쿼리문 작성시 자바메소드 호출 iBatis 에서 mybatis 로 바뀌면서 바뀐것들 중에 하나가 동적쿼리문에서 쓰는 태그들이다. iBatis 에 있던 요런 것들이 mybatis 에서는 요렇게 대체할 수 있어서 쫌더 간결해 진것 같다. 그런데 test="" 요기에서 쓸수 있는 비교연산자들 중에는 null 인지 빈 공백인지 판단하던 , 를 대체할만한 비교연산자가 없었다. null 인지 공백인지 mybatis 에서 판단하기 위해서는 요렇게 쫏끔 번거롭게 쓸 수 밖에 없는것 같았다. 뭐 더 찾아보진 않았지만~ 어째 다른 방법이 없나 쭉 찾아보니까~ 신기하게도 조건문에서 자바 클래스의 메소드를 호출해서 하는 방법이 있었다. 클래스를 하나 맨들고 거기에다 boolean 을 리턴해주는 static 메소드들을 뽓 맨들고 고것을 호출하는 방식이다. ..
[Mybatis] 쿼리 파라미터 null 처리방법 myBatis와 iBatis에서 쿼리를 실행할때 PrepareStatement 방식으로 작동을 하게 되고 이때 쿼리로 전달값은 값을 각각 아래처럼 적용한다.?123456789 INSERT INTO table (id , name, title) VALUES (#id#, #name#, #title#) INSERT INTO table (id , name, title) VALUES (#{id}, #{name}, #{title})그런데 이때 insert 하려는 값 중에 null이 전달되었을 경우 오라클에서는uncategorized SQLException for SQL []; SQL state [99999]; error code [17004]; 부적합한 열 유형: 1111; nested exception is jav..
Transaction 관련 문서http://spring.io/guides/gs/managing-transactions/http://wiki.gurubee.net/pages/viewpage.action?pageId=26741432requiredJDK 6 또는 그 이상configuration설정은 다음 링크 참고http://docs.spring.io/spring/docs/current/spring-framework-reference/html/transaction.htmlhttp://blog.outsider.ne.kr/870@Transactional Annotation을 이용한 처리클래스 혹은 메서드 선언부에 @Transactional 어노테이션을 명시하면 해당 클래스의 프록시가 생성되며 이후 예외가 발생하면 프록시에 의해 자동으..