본문 바로가기

전체 글

(89)
나도 한번 써봐야지 스프링 - 2 Template 예제를 살펴보자. HomeController.java package sample.mvc.first; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; /** * Handles requests for the application home page. */ @Controller public class HomeController { pr..
나도 한번 써봐야지 스프링 - 1 몇일간 토비의 스프링3이라는 책을 읽고 있다. 1400페이지가 넘는 책을 정성스럽게 집필한 토비님이 존경스럽다. 정말 훌륭한 책인듯하다. 부럽다~. 나도 이제 대한민국 전자정부 표준 프레임워크 기술인 스프링 좀 공부해보자! Spring 개발을 위해서 Eclipse에 생짜로 개발환경을 구축하는 방법도 있고, 플러그인을 쓰는 방법도 있다. 나는 좀더 간편하게 만들어 보고자 SpringSource Tool Suite을 받아서 설치했다. (maven부터 was 서버까지 모두 설치된다.) SpringSource 사이트 http://www.springsource.com/developer/sts 간단한 예제를 만들어보자. 각종 템플릿을 제공해주고 있다 이를 활용해서 만들면 쉬울 듯하다. 1. 템플릿 프로젝트 생성 2..
Java Concurrency Part 3 – Thread Pools 쓰레드 풀은 쓰레드의 수, 쓰레드 재사용, 스케쥴링등를 수행할 수 있다. 흠 지금 보고 있는 사이트가 너무 심플하게 나와서 다른사이트를 보거나 API를 보고 정리해야할듯. 참고 사이트: http://www.baptiste-wicht.com/2010/09/java-concurrency-part-7-executors-and-thread-pools/ 쓰레드 풀을 살펴보기전에 기반 클래스들을 살펴보자. Executor 라는 클래스 보통 Thread를 실행하기 위해서 Runnable 인터페이스를 구현한 클래스를 생성하고 다음과 같이 쓰레드를 실행한다. new Thread(new(RunnableTask())). start() 상당히 심플하지만 여러개의 쓰레드를 동시에 실행하고 끝날 때 까지 기다리고 하는등의 작업을..
Java Concurrency Part 2 – Reentrant Locks 원문: http://www.carfey.com/blog/?p=57 자바에서 synchronized 키워드는 탁월한 툴이다. 그러나 synchronization 이상의 것이 필요할 때가 있다. 접근 타입(읽기, 쓰기)를 제어할 필요가 있거나, mutext가 없거나 다중의 mutex를 관리할 필요하기 때문에 사용하는 것은 상당히 귀찮다. Java Reentrant Locks java.util.concurrent.locks 패키지에 몇개의 lock을 구현하고 있다. Lock - 획득/해제할 수 있는 가장 간단한 락 ReadWriteRock - 읽기와 쓰기 락타입을 가지고 있다. ReentrantLock: 재진입 가능한 Lock 구현 ReentrantReadWriteLock: 재진입가능한 ReadWriteLoc..
Java Concurrency Part 1 - Semaphores 원문 : http://www.carfey.com/blog/?p=55 Java Concurrency 쪽 살펴 볼려고했는데 인터넷에 잘 정리된 것이 있는 듯해서 번역하면서 볼 생각이다. 물론 발번역이고 필요한 부분만 발췌. 우리는 세마포어에 대해서 알아볼 것이다. 특히 카운팅 세마포어. 세마포어는 간혹 리소스의 접근을한하기때문에 잘못 이해되고 많이 쓰이지 않는다. 그들은 리소스에 접근을 제어하는 다른 방법들 때문에 무시되어진다. 그러나 세마포어는 동기화와 다른툴들이 제공하는 것이상의 것들을 우리에게 제공한다. 세마포어가 무엇인가? 오직 n개의 프로세스들이 주어진 시간에 특정 리소스를 접근할 수 있도록 해주는것이다. 그렇게 하는 목적이 무엇인가? 이를 설명하기 위한 예를 살펴보자. 연결 수를 제한하기. pub..
Netty 예제 분석 - LocalTime LocalTime 기존 예제들과 다른 형태의 통신방식을 보여준다. 73 LocalTimeClientHandler handler = 74 channel.getPipeline().get(LocalTimeClientHandler.class); 75 76 // Request and get the response. 77 List response = handler.getLocalTimes(cities); 핸들러에 구현한 함수를 호출해서 리턴받는 형태이다. 그러면 getLocalTImes 라는 함수를 한번 살펴보자. 65 channel.write(builder.build());서버에 도시 목록을 전달하면 해당 도시들의 시간을 응답해주는 듯하다. 여기에서 하려는 것은 시간을 응답해줄 때 까지 기다렸다가 나머지 처리를 ..
Netty 예제 분석 - PortUnification PortUnification 단일 포트로 여러 서비스를 해주는 예제이다. 현재 요청하는 서비스가 무엇인지 판단하여 파이프라인에 현재 핸드러를 삭제하고 새로운 핸들러들을 등록하는 형태이다. HTTP 서비스로 연결해주는 경우 아래와 같이 HTTP.snoop 예제에서 살펴본 것처럼 4개의 핸들러를 새롭게 등록하고 현재 핸들러(this)를 제거한다. 147 private void switchToHttp(ChannelHandlerContext ctx) { 148 ChannelPipeline p = ctx.getPipeline(); 149 p.addLast("decoder", new HttpRequestDecoder()); 150 p.addLast("encoder", new HttpResponseEncoder())..
Netty 예제 분석 - ObjectEcho ObjectEcho 이번 예제의 특징은 자바 객체를 송수신하다는 점이다. 우선 클라이언트 프로그램을 살펴보자. 67 bootstrap.setPipelineFactory(new ChannelPipelineFactory() { 68 public ChannelPipeline getPipeline() throws Exception { 69 return Channels.pipeline( 70 new ObjectEncoder(), 71 new ObjectDecoder(), 72 new ObjectEchoClientHandler(firstMessageSize)); 73 } 74 }); ChannelBuffer String 변환을 하는 StringEncoder와 StringDecoder가 아니라 ObjectEncode..