서론최근 하나의 회사가 제공하는 서비스의 규모가 커지고 복잡해지면서 이 서비스를 지탱하기 위해서 큰 서비스를 여러 개의 작은 서비스로 나누고 개발, 배포 하는 Micro Service Architectur(이하: MSA) 가 유행하고 있다. 이렇게 MSA에서는 각 서비스들은 독립적이며 자신을 Restful API로 자신을 노출 시킨다. MSA에서 각 서비스들은 서로 독립적 이기는 하나 그렇지 못한 부분들이 존재 할 수 있다. 예를 들어 사용자의 인증 및 권한 부여 같은 경우 서비스들의 독립성을 위해 각 서비스 마다 구현 또는 라이브러리를 넣고 사용 할 수 있지만 이렇게 되면 개발 언어마다 사용자 인증, 권한부여 로직을 구현을 해야 하며 관리 또한 복잡하게 된다. 그래서 인증 및 권한 부여 서비스를 따로 ..
Mybatis를 사용하면서 하나의 statement에서 여러 테이블에 접근하여 insert나 update를 해야 하는 경우가 있다. Mybatis를 어느정도 사용해보았다면 하나의 또는 에 여러개의 insert 혹은 update쿼리를 적으면 동작할 것이라고 생각할 수 있다.하지만 실제로 저렇게 하면 문법오류를 계속해서 발생 시킨다. 왜그럴까?그것은 mysql jdbc 프로토콜에의 파라미터 값으로 몇가지 설정을 할 수 있는데 그중에 allowMultiQueries 값이 있다. 이것은 기본적으로 설정을 하지 않으면 false값으로 되어 있어서 한번에 다중 쿼리를 처리 하지 못하도록 하고 있다. 이값을 true로 지정 해주면 문법 오류 없이 제대로 동작하는 것을 확인 할 수 있다. ex) achieve.db.u..
서론어플리케이션을 만듦에 있어서 데이터베이스에 정보를 업데이트하고 지우고, 인설트하는 것은 필수적인 요소라고 볼 수 있다. 데이터베이스에 정보를 최신화 함에 있어서 중요한 것이 바로 Transcation관리이다. 어떻게 일의 단위를 어떻게 묶어 주느냐에 따라 데이터의 품질이 좋아지냐 나빠지느냐에 기로에 서게 된다. 예를 들어 한 어플리케이션의 기능에서 A, B 두 개의 테이블에 정보를 각각 업데이트 한다고 하자. 첫번째 정보를 정상적으로 최신화 하였지만 프로그램 오류에 의해서 중간에 오류가 발생하였을 경우 첫번째 정보는 rollback되어야 한다. 만약 Transaction이 정상적으로 처리되지 않는다면 분명 기능은 동작하였고 A 테이블에는 데이터가 있지만 B 테이블에는 데이터가 존재 하지 않는 문제점이..
서론Web Application Server(이하 WAS)과 브라우저는 Http프로토콜을 사용하므로 연결이 지속적으로 유지가 되지 않는다. 이에 WAS는 사용자의 접속 정보를 유지하기 위해 Session이란것을 만들어 사용자의 요청헤더에 붙어 있는 쿠키값의 세션값과 비교해서 사용자를 구분하게 된다. 어플리케이션을 만들면서 해당 Session객체만을 사용해서 사용자를 구분할 수 있지만 요구 사항에 따라 이 Session객체와 관련된 수많은 자원들이 생성되어지게 될 수 있다. 예를 들어 A WAS, B WAS 총 두대의 WAS를 구동하는데 A WAS에서의 세션은 B WAS에서 인식하지 못하기 때문에 데이터베이스를 이용해서 A WAS에서 발급된 세션에 대한 정보를 테이블로 만들어 B WAS에서 사용되도록 할 ..
서론 Spring을 사용하면 Spring Security를 사용해서 보안을 설정 할 수 있다. Spring Security을 적용하면 프레임워크 상에서 기본적으로 설정된 내용을 바탕으로 동작하게 된다. 예를 들어 로그인 하지 않은 사용자가 권한이 맞지 않는 페이지에 접근하면 자동적으로 Login 양식이 있는 화면으로 리다이렉트 시켜버리는 경우가 있다. 이 경우 일반 JSP로 구현을 한다면 상관이 없지만 Back-End와 Front-End간의 JSON을 통신하는 경우에는 문제가 발생한다. Front-End의 소스에서 Html Tag로 이뤄진 응답결과를 제대로 파싱할 수 없어서 에러를 만들어 내게 된다.이번 포스팅에서는 이러한 문제점을 해결하는 법에 대해서 설명한다. 문제점에 대한 확인로그인 하지 않은 사용..
서론 프로그램을 작성하면서 단위테스트를 진행하는 것은 견고한 프로그램을 만듬에 있어서 상당히 중요하다. 기본적으로 JUnit은 Spring과 함께 동작하지 않기 때문에 Spring Test를 이용해서 테스트를 진행하고자 하는 Class와 연결을 시켜주어야 한다. 이번 포스팅에서는 JUnit과 Spring을 연동하는 법에 대해서 기록한다.이 글을 쓰는 시점에서의 Spring버전은 4.3.4.RELEASE, JUnit 버전은 4.1.2.RELEASE이다. Spring Test에서 제공하는 어노테이션을 추가하여 JUnit Test Class만들기 JUnit Test Class를 스프링으로 구동을 하려면 Spring Test에서 제공하는 어노테이션과 SpringJUnitClassRunner.class를 사용해서..
스프링에서는 기본적으로 Singleton (이하 싱글톤) & Prototype(이하 프로토타입)의 빈 스코프를 지원한다. 웹 어플리케이션일 경우 추가적으로 요청, 세션, 전역 세션에 대해서 지원하지만 이번 포스팅에서는 싱글톤과 프로토타입에 대해서 언급하며 싱글톤 스코프의 빈이 프로토타입 스코프의 빈을 Autowired 할 경우와 프로토타입 스코프 빈이 프로토타입 빈을 Autowired 할 경우 어떤 일이 발생하는지에 대해서 설명한다. 싱글톤 빈 스코프는 XML설정 파일이나 어노테이션 설정 시 별 다른 설정이 없으면 Default로 잡히는 스코프이다. 싱글톤 스코프는 스프링 컨테이너가 생성 될 때 생성되고, 스프링 컨테이너가 내려가면 같이 없어지는 라이프 사이클을 가진다. 프로토타입 스코프의 경우에는 스코..
1. 개요하이차트를 보면 나오는 차트를 사용자들이 내려 받을 수 있는 기능을 제공한다. 이 기능을 어떻게 구현을 했을지 생각을 해보았고 따라 해보기로 했다. 처음에는 Front-End단에서 해당 기능을 구현을 하려고 했다. 그래서 찾아본 것이 html2canvas라는 녀석이 였고 크롬에서 svg를 이미로 만들어 내는데 성공하였다. 그래서 FireFox에서 테스트를 진행 동작하지 않음, IE에서 테스트 진행.... 동작하지 않음, 사파리 마찬가지.....동작하지 않았다...html2canvas에 대해서 자세히 조사하지 않은 나의 잘못이었다. html2canvas가 이미 FireFox등 몇몇 브라우저에서는 몇가지 문제가 있다는 글들이 있었던 것이다. 근데 또 순수 이미지만 내려 받는건 잘 되었다. 위 처럼 ..
이번에 @PostContstruct 어노테이션을 사용하게 될 일이 있었다.이 어노테이션은 스프링에서 제공하는 어노테이션은 아니며 용도는 다음과 같이 사용할 수 있다. @Autowired어노테이션에 DI되는 객체를 사용해서 특정 객체를 만들고 싶은 경우 생성자에서 해당 객체들을 이용해서 인스턴스화 하려고 하면 에러를 발생 시킨다. 이유는 해당 클래스의 생성자를 호출 할 때 @Autowired되는 객체는 DI가 이루어 지지 않은 상태! 그래서 NullPointException을 발생시킨다. 이때 사용할 수 있는 것이 @PostConstruct이다. 처음 말했던 예를 나타내는 소스코드들이다. package com.jodu.posting; import org.springframework.stereotype.Co..