본문 바로가기

Programming/SpringFramework

스프링 async 비동기처리 스프링 에서 비동기(Async) 사용 일반적으로 사용하는 다음과 같은 컨트롤러 코드는 동기화를 기본으로한다. 하지만 이와 같이 동기화를 하면 어떠한 api에 많은 Request가 들어오거나, 메일서비스같이 오래걸리는 api라면 스레드대기상태가 걸린다. 스레드를 할당 받지 못하는경우도 생길 수 있다. 그렇다면 어떻게 해야하는가!! 해결법 비동기! 비동기란 일반적으로 어떠한 처리를 동기화 하지않고 동시에 여러곳에서 처리하는 것을 말하는데 일반적으로 다음과 같이 움직인다. - 어떠한 요청이 있을때 바로 리턴값을 받는데 이것을 결과 값이 아니다. 모든 처리가 끝난 후 결과값을 간접적으로 받는다. - 요청별로 별도의 스레드를 통해 처리한다. 약간 요런느낌?? 그리고... 스프링 3.2 부터 비동기를 지원하는 라이.. 더보기
나의 프레임워크 설계 ref 스프링 - 4 - 앞에서 이야기 했던 클라이언트 기능에 맞춰 DTO에 관계를 설정해주면 비즈니스로직 처리가 복잡해 질 수 있다. 먼저 하나의 Biz클래스에서 여러개의 DAO를 사용해야한다는 점이 있다. 그래서 매번 Biz에서 DAO를 선언하고 의존성 주입하고 하는 것 이 사실 복잡하다.그래서 다음과 같은 설계를 생각했다. 하나의 DAOContainer 라는 클래스를 만들어서 모든 DAO들의 의존성을 주입해서 Getter/Setter로 가지고 있는 것 이다. 다음과 같다. 이렇게 Setter로 의존성을 주입 한 후 다음과 같이 사용한다. biz에서는 하나의 DaoContainer만 선언하면 모든 DAO객체를 가져다 쓸 수 있다.이렇게 하면 코드구조가 조금 더 명확해 질 수 있다는 것이 나의 생각이다. 더보기
나의 프레임워크 설계 ref 스프링 - 3 - 오늘은 DTO 설계에 관한 것이다 일반적으로 DTO를 사용할때 DB의 테이블에 맞춰서 만드는게 일반적이었다. 하지만 나는 조금 다른 방법을 생각했다. 클라이언트 기능에 맞춰서 DTO를 설계 할것이다. 먼저 다음과 같이 DB 테이블이 있다. boardId title contents createDate createId count id email nickname passwordcompanyjoinDate 이러한 테이블이 있을때 DTO는 이렇게 만들고 클라이언트 딴에서 따로 따로 불러온다. 하지만 더좋은 방법을 생각했다. DTO를 클라이언트 의 기능에 따라 관계를 설정 해주는 것이다. 1:1 관계는 다음과 같이 오브젝트로 1:n 관계는 List로 설정해준다. 이렇게 DTO를 만들면 비즈니스 모델은 조금 더 복잡.. 더보기
나의 프레임워크 설계 ref 스프링 - 2 - - 자주사용하는 라이브러리를 간단히 사용하기 위한 설계를 구성했다. 예시로 Json을 사용할 때 이다. 보통은 Json을 통해 Resonse를 할 때 다음과 같은 방법을 많이 사용한다. - Jackson을 사용해서 bean등록 을 해준후 Model&View 에 담아 사용하는 방식으로 다음과 같다. 하지만 나는 이 방식보다 조금 더 직관적으로 만들고 싶었다. 나의 목표는 조금 더 보기에 쉬운 코드를 만드는것이기 때문이다. 그리고 한 가지더 나는 Json같이 수시로 사용되는 라이브러리는 Static으로 사용 하는 것이 좋다는 생각이다 1. 자주 사용되기 때문에 한번 생성하여 Static으로 가지고 있는 것이 GC에 부담을 줄 일 수 있을 것 이라는 생각2. 전역적으로 공유하여 어디서든 쉽게 가져다 사용할 수.. 더보기
나의 프레임워크 설계 ref 스프링 - 1 - - 지난번에 MVC 구조를 기초로 개발을 시작했다. 이번엔 기본 MVC 구조에 의존성을 주입 해보겠다. 1. 의존성 주입을 하자!! 학부때 소프트웨어 공학수업때 교수님이 한가지만 알고 가면 된다고 하셨다. 그것은 "의존성을 줄이고 응집도를 높여라!" 이거였다. 그때는 무슨말인지 몰랐는데, 개발을 하면서 서로 영향을 주지않는 설계가 중요하다는 것을 알게 되었다. 그래서 스프링의 DI를 이용하여 의존성 주입을 하였다. 하지만 이렇게 일일이 컨트롤러에 주입을 하면 BusinessLogic이 많아 지면 많아질수록 선언되는 Biz가 많아질 것이다. 조금더 코드를 줄이기위해 하나의 클래스에 모든 Biz의 의존성을 주고 getListBiz 를 만들어 가지고올 수 있게 바꾸었다. IocContainer 라고 클래스이름.. 더보기
나의 프레임워크 설계 ref 스프링 - 0 - 항상 내가 자주 사용할 구조를 미리 만들어놔야지 생각만하고 안하게되었다.이번 기회에 틈틈히 조금 씩 설계를 해두고 만들어 봐야겠다. 개발하다보면 회사에서 사용하는 구조랑 비슷해 질 수도 있지만 최대한 내생각을 담아 만들어 보고싶다. 목적- 누구라도 쉽게 알아볼 수 있는 구조 만들기- 누구라도 쉽게 개발할 수 있는 구조 만들기- 최대한 의존성이 없는 구조 만들기- 확장성이 좋게 구조 만들기 목적은 다음과 같고 우선은 Back-end 구조를 만들것이다. - 시작 구조는 MVC구조로 다음과 같다.- 여기까지는 그냥 기본구조이다.- Controller가 요청을 받으면 DTO에 태워서 BusinessLogic에서 DAO를 호출하여 처리하고 응답하는 구조이다. 이제 다음 포스팅 부터 Spring을 입히도록 해보겠다. 더보기
bean scope 명시 bean scope를 명시하여 서로다른 객체로 생성이 가능한데 다음과 같다. scope="singleon" : 기본값이며 스프링 컨테이너당 하나의 빈 객체 생성 scope="prototype" : 빈은 사용할때마다 새로운 객체 생성 scope="request" : http 요청마다 새로운 객체 생성(WebApplicationContext에서 사용) scope="session" : 세션마다 새로운 객체 생성(WebApplicationContext에서 사용) --> bean의 scope 속성값에 설정 하여 사용 참고 : http://egloos.zum.com/jwlee1728/v/1805102 더보기
Spring AOP 처음에 AOP라는 기능을 보았을 때 놀랐다. 개발하는 방향에 있어서 좋은 기능이라는 것 ! 나름 쉽게 적어 놓았는데 어떨지 모르겠다. AOP 란 - 비즈니스 로직에 영향을 주지 않고 사이사이에 공통 모듈을 효과적으로 잘 끼워 넣도록 하는 개발방법이다. - 관점을 옆으로(?) 주고 공통 모듈을 끼워 넣도록 하는 개발 방법이다. AOP 주요 구성요소 1. JoinPoint - 모듈이 삽입되어 실행될 수 있는 특정 위치 - 제어 흐름중의 한 시점 2. PointCut - 어떤 클래스의 어느 조인포인트를 사용할 지 선택하는 기능 3. Advice - JointPoint에 삽입되어 동작할 수 있는 코드 - 동작시점 before : Matching 된 JoinPoint 이전에 동작하는 Advice after ret.. 더보기
HTTP 에러정리 개발 하다 보면 에러코드를 외워야 한다는 생각을 많이 하게 된다. 조금씩이라도 알고 있어야겠다는 생각에 퍼오게 되었다.!!code : 200reason field : OK 의미 : 클라이언트의 request가 성공적으로 수행됐다. request처리결과로 클라이언트에게 전달되는 정보는 사용된 method에 따라서 달라진다.reason field : GET의미 : request가 지정한 자원이 response메세지로 전달 된다. reason field : HEAD의미 : response메세지에는 요청된 자원에 관한 정보를 나타내는 header만이 포함된다. reason field : POST의미 : 지정된 동작의 수행결과를 포함하거나 결과를 설명하는 엔터티가 전달된다. code : 201reason fiel.. 더보기
Spring DI & IOC 처음에 스프링을 접했을때는 너무 생소한 단어였던 기억이난다. 사실 지금 회사에서는 닷넷 & Nancy프레임웍을 사용하고 있는데 어디서나 Ioc 컨테이너는 중요한 것 같다. 1. IoC란? 간단하게 제어의 주도권을 스프링에게 넘겨주는 것을 말한다. 일반적으로 클래스는 자신이 사용할 객체를 생성하여 사용한다. 즉 사용할 프로그램이 주도권을 가지고 있다. 하지만, Ioc는 제어흐름을 뒤집는다. 클래스는 자신인 사용할 객체를 직접 생성하지 않고, 제어권한을 가진 특별한 오브젝트에 의해 결정되고 만들어진다 2. IoC 구현 방법 DL(Dependency Lookup) 의존성 검색 저장소에 저장되어 있는 Bean에 접근하기 위하여 사용하고자 하는 Bean을 검색하는것 DI(Dependency Injection) 의.. 더보기