달력

12

« 2024/12 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

'분류 전체보기'에 해당되는 글 216

  1. 2015.11.28 라즈베리 파이 설치
  2. 2013.04.11 Gaelyk 사용하기
  3. 2013.03.31 GRails 2.3 Async 지원과 Servlet 3.0
  4. 2012.04.29 Spring Framework 3.0 MVC(1)
2015. 11. 28. 08:52

라즈베리 파이 설치 좋아하는 것/Hardware2015. 11. 28. 08:52

오늘은 토요일.

예외없이 새벽 6시에 일어났다.

오랜 기간 등안 익숙해진 습관이 이제는 관성적으로 주말에도 지속이 된다.

 

무엇을 할까?

 

지난 11월 11일에 AilExpress에서 구매한 3인치짜리 TFT-LCD가 어제 도착하였다.

그래 오늘 아침을 그동안 못 만져 보았던, "Raspberry Pi를 가지고 놀아야겠다"라는

생각이 들었다.

 

기존에 설치되었던 Package들을 업데이트 & 업그레이드하는데 8GB짜리 SD카드가 용량이

모자라 File System일 깨져 버렸다.

 

복구할까? 새로 설치 할까? 사이에서 갈등을 하다가, 시간이 적게드는(?) 새로 설치로 방향을 잡았다.

 

그런데...

 

아차, 설치 방법을 잊어버렸다.

→ 물론 respberrypi.org에 모두 올려져 있다. 또는 국내 라즈베리 파이 커뮤니티인 "산딸기 마을"에 가보면

   자세한 설치내용과 응용에 필요한 정보들을 얻을수 있다.  

 

[설치 시작]

1. "라즈베리 파이" 홈페이지로 이동

- www.respberrypi.org

 

 

 

2. 웹사이트 상단의 Download 메뉴를 클릭하거나, 브라우져의 주소창에 다음을 입력하고

   https://www.raspberrypi.org/downloads/ 로 이동한다.

  

3. 화면 상단에 "NOOBS"와 "RASPBIAN" 두개의 기본 설치 이미지가 있는데, 여기서는
   NOOBS를 설치하도록 하겠다. (설치가 간단하다)

 

 

4. NOOBS를 클릭해서 이동하였다면, Download Zip을 클릭하여, 이미지 파이을 다운받도록 한다.

   필요한 설치 방법은 NOOBS setup   에 나와있다. (다운로드 하는동안 잠시 다녀오는 것도 좋다.) 

 

5. 윈도우와 맥/리눅스 버전으로 설치할 수 있는 방법이 있지만, 여기서는 윈도즈로 설치하는 방법에 대해서

   정리한다.

   SD 카드는 보통 8GB 이상이 좋은데, NOOBS로 설정하는 것이 쉬운 것은 위에서 받은 파일을 Format이 된

   SD 카드로 복사해 주면된다. 순서는 아래와 같다.

  

 

 NOOBS download → 압축을 푼다. → Format된 SD카드로 복사. 

        

 

6. 이제 라즈베리 파이에 SD카드를 삽입하고, 잠시 기다리면 설치할 OS를 선택하는 화면이 나오는데,
   Rasbian을 선택 하고 상단의 Install 버튼을 마우스로 실행시키면 설치가 진행된다.


7. 설치와 부팅이 정상적으로 이루어 지면, GUI 화면이 나타나게 된다. 

   지난 9월에 릴리즈된 Rasbian Jessie는 바로 GUI화면을 제공하고 있는것 같다. 

   이전 버전에서는 CLI 기반에서 제공하는 설정 툴인 raspi-conig에서 기본 설정을 하였는데, 

   이 부분이 달라졌다.  아이들에게는 배우기 쉬운 친화적인 방식이거라 생각된다.



이전보다는 약간 달라진 GUI이지만 좀 더 사용하기 쉽고, 접근성도 용이하다.

아직 라즈베리 파이에 언어 설정과 무선랜 설정이 안되어 있다. 이는 다음 기회에 정리하려고 한다.


  


 

 

 

 

 

 

 

'좋아하는 것 > Hardware' 카테고리의 다른 글

NVIDIA의 ION(아이온) Platform에 대한 소개  (0) 2009.02.03
:
Posted by 행복상자
2013. 4. 11. 18:29

Gaelyk 사용하기 카테고리 없음2013. 4. 11. 18:29

Google App Engine과 Grails를 알기 시작한 것은 거의 동시 였다.

2009년인가 Google에서 Google App Engine을 공개할때 Spring Source에서 Grails를 GAE에 올리는 방법과 PlugIn을 공개하면서 부터였다.


지난 몇년간 두 기술들은 각자 자기 방식대로 발전해 왔지만, Grails의 GAE 0.8 플러그인의 배포 이후로 지원이 되지 않고 있고, GAE 에서 현재 최신의 Grails는 정상적으로 동작하지도 않고 많은 문제들을 안고 있다.


Gaelyk은 다음의 사이트에서 정보를 보거나 얻을 수 있다.

http://gaelyk.appspot.com/



:
Posted by 행복상자

오늘 오랜만에 Grails.com을 둘러 보았더니, Grails 2.3의 Async Support에 관련된 글이 올라왔다.

아마도 Grails 2.2에서 부터 지원하기 시작한 Suvlet 3.0의 async API에 대한 지원에 대한 것이라 관심있게 읽게 되었다. 읽다 보니 Grails의 기능 제공 보다는 Servlet 3.0에서 추가된 기능들에 대해서 알아봐야겠다는 생각이 들어 몇몇 사이트를 보면서 아래와 같이 정리하였다.

자료들을 찾다 보니, Servlet 2.5에서도 이미 제공하고 있었지만, 서버 vernder들의 상이한 기능제공으로 인해 사용하기에 적합하지 않은 부분들이 있었다고 한다. 그러나 3.0에서는 이러한 혼란 스러운 부분들이 제거되어 제공하게 되었다. Servlet 3.0은 2009년도 12월에 발표가 되었다.


[Servlet 3.0 변경사항]

배경을 약간 설명하게 되면, 기존의 Web Technology는 클라이언트(Web Browser)와 서버간의 전형적인 Request-Response 모델을 따르도록 설계되어 있었다. 이러한 구조는 Web 2.0이라는 기술적인 Trand가 변함에 따라서 작지만 많은 Request들을 연속적으로 Server에 요청을 하게 되고 이로 인한 지연과 성능적인 측변에서의 변화를 이끌어 내게 되었다. 

Servlet 3.0의 특징으로는 java web application을 위해서 3가지 configuration옵션을 제공한다. Annotation, API 그리고 Xml이용해서 configuration 변경이 가능하다. 


다음은 주요 기능들의 요약이다.


1. Annotations 추가:  기존 web.xml에서 제공하던 기능을 Annotation을 통해서 제공

- @WebServlet

- @WebListener

- @WebFilter

위 3개는 스프링 프레임워크 등을 사용해왔던 개발자라면 충분히 비슷하다고 생각할 것인데, 실제 사용번도 크게 다르지는 않다.

- @MultipartConfig

역시 스프링 프레임워크의 MultipartFile과 사용법과 용도가 유사하다.


2. Dynamic Registration of Servlet and Filters:  서블릿, 필터 클래스의 매핑과 등록 해제가 코드에서 가능

ServletContext.addServletMapping(..), ServletContext.addFilter(..)등의 ServletContext클래스를 이용하여 직접 코드상의 수정도 가능하다. 


3. Pluggability: Annotation을 통한 서블릿, 필터 정의 또는 web-fragment.xml을 통해 배포 기술자의 모듈화 가능

4. Asynchronous Support: 말 그대로 비동기 모드 지원

5. Security: Annotation을 통한 용청별 권한 이증 지원

- @RolesAllowed

- @DenyAll

- @PermitAll

- @TransportProtected


Servlet 3.0과 관련된 주요 사이트들.

- https://blogs.oracle.com/enterprisetechtips/entry/asynchronous_support_in_servlet_3

- http://www.java.net/blogs/mode/

http://ko.wikipedia.org/wiki/자바_서블릿

- http://en.wikipedia.org/wiki/Java_Servlet


[Grails 2.3 Async Support]

이제 본론으로 들어가야 할 때이다. Servlet 3.0이 생각보다 오래전에 발표되었지만, 아는 사람들과 실제 환경에서 적용하여 사용하는 사람들은 많지는 않아 보인다. 뭐.. google app engine도 최근에 지원하려고 준비고 있는 단계이니, 그럴수도 있겠지.)

오늘 읽어 본 글은 http://grails.io 에 올라온 글이다.

예제위주로 설명이 되어 있어서 이해는 어렵지 않은데 실제 코드를 만들지 않으면 별로 의미가 없을 수 있다. 나중에 꼭 해볼것을 다짐하면서...

Grails 2.3에서는 Promises패키지에 포함되어 있는 메소드들을 통해서 Async 기능을 제공하고 있다.

아래는 그 예제이다. 설명을 따로 하지 않아도 알겠지만 3개의 메소드를 async하게 실행해서, 그 결과를 wateAll 메소드를 통해서 전달 받는다.

import static grails.async.Promises.*

def p1 = task { 2 * 2 }
def p2 = task { 4 * 4 }
def p3 = task { 8 * 8 }
assert [4,16,64] == waitAll(p1, p2, p3)

아래는 GORM을 통한 query메소드를 호출하는 예제로 위의 예제와 사용법이 같다.

import static grails.async.Promises.*
def p1 = Person.async.get(1L)
def p2 = Person.async.get(2L)
def p3 = Person.async.get(3L)
def results = waitAll(p1, p2, p3)

그런데, 위의 예저들은 서블릿 3.0에서 제공하는 기능들과의 연관성이 전혀 없어 보인다.


음의 예제들이 Async 방식을 지원하는 예제로 Service를 Annotation을 통해서 Async 서비스로 노출을 시기는 코드이다. 그 아래의 코드는 모든 메소드를 Async로 실행하는 코드이다. 

import grails.async.*
class AsyncBookService {
   @DelegateAsync BookService bookService    
}

AsyncBookService asyncBookService
def findBooks(String title) {
    asyncBookService.findBooks(title)
       .onComplete { List results ->
          println "Books = ${results}"    			
       }
}






'공부하는 것 > GRails' 카테고리의 다른 글

GRails 대한 나의 생각...  (2) 2011.09.10
GRails 개발 환경 만들기 - Spring Tool Suite  (0) 2011.07.30
:
Posted by 행복상자
2012. 4. 29. 15:12

Spring Framework 3.0 MVC(1) 공부하는 것/Spring Framework2012. 4. 29. 15:12

스프링 프레임크를 사용하기 시작한지는, 만 5년 정도 된것 같다. 아니 정확하게 이야기하면 알기 시작한지 5년이다. 그 동안 몇개의 프로젝트에는 적극적으로 사용해왔고, 사용하려고 했었다.

솔루션을 위한 내부의 기반 프레임워크를 개발하기에도, 그 자체만으로도 스프링은 너무 훌륭하기 때문에, Application의 공통 부분을 위한 기능들만을 최적화하고, 정의하는 것 만으로도 노력대비 좋은 결과들을 낼수 있었다. 다 로드존슨 아저씨가 많은 시간을 들여서 갈고 닦고, 발전시킨 노력의 결과들이다.

시간이 흐를수록 큰 조직에서는 코드와 PC와 씨름하기 보다는 수 많은 회의와 씨름을 하는 일이 많아진다. 더군다나 같이 협업하는 사람들이 많아지면, 본인이 원치 않아도 관리자의 길에서 뛰고 있는 모습을 보게된다. 딱 지금의 나의 모습니다.

공부하지 않고, 적절하게 판단하고 선택하고 방향에 대해서 이야기 할 수 있을까?
많은 고민을 하지만, 역시 시간이 절대적으로 부족하다.

요즘은 코드를 보기가 힘들정도로, 공부할 여유가 별로없다.
하지만, 사둔 책이 아깝다는 이유이든, 공부의 재미를 알았다는 이유이든 개발자로 살아가는 한은
꾸준히 배워야한다.

스프링 3.1은 또 다른 변호들을 이야기 할지는 모르겠다. 이전에 책을 보면서 정리한 내용인데 일단 올려놓는다.

[Spring Framework 3.0 - MVC]

·         스프링은 DespatcherServlet 7개의 Strategy를 기반한 MVC 프레임워크를 제공한다.

·         이중 DespatcherServlet는 가장 기본적이면서도 SpringMVC의 필수적인 기본 Servlet 역할과 스프링의 특징중의 하나인 Light-weight 컨테이너의 역할을 수행한다.

 

1.     @RequestMapping 핸들러 매핑

o    @MVC는 메소드 레벨에서 컨트롤러를 작성할 수 있다.

o    Annotation은 타입(클래스, 인터페이스)레벨뿐 아니라 메소드 레벨에도 적용 가능함.

o    @MVC 핸들러 매핑을 위해서는 DefaultAnnotationHandlerMapping이 필요하다.

o    DefaultAnnotationHandlerMapping은 기본 핸들러 이므로 다른 Handler Mapping bean이 명시적으로 등록이 되지 않았다면, 기본으로 사용이 가능하다.

o    만약, 다른 핸들러 매핑 빈이 등록이 되었다면, DefaultAnnotationHandlerMapping
명시적으로 등록을 해주어야 사용이 가능하다.

2.     Class/Method 결합 Mapping 정보

o    DefaultAnnotationHandlerMapping

·         @RequestMapping 애노테이션을 활용해서 타입레벨과 메소드 레벨 지원하며
타입레벨을 기본으로 삼고, 메소드 레벨의 어노테이션 정보는 타입레벨의 매핑을 세분화 하는데 사용한다.

o    @RequestMapping Annotation

·         Spring[] value(): URL 패턴

1.     String 배열 타입으로 URL 패턴을 지정해서 사용

2.     URL 패턴은 ANT 스타일과 와일드카드를 사용이 가능하다.

·         @RequestMapping("/hellow")

·         @RequestMapping("/admin/**/user")

·         @RequestMapping("/hellow", "/hi")

3.     "{ }"를 사용할때는, "{ }"의 위치에 해당하는 내용을 컨트롤러 Method에서 파라메터로 전달받을 수 있다. "{ }"에 들어가는 변수를 "path variable"이라고 부른다.

·         @RequestMapping("/user/{userid}")

·         RequestMethoe{} method(): HTTP Request Method

1.     Request Method GET, HEAD, POST, PUT, DELET, OPTIONS, TRACE 7개의 HTTP 메소드가 정의되어 있다

2.     HTTP 메소드를 추가하면 요청 메소드에 따라 다른 메소드를 매핑해 줄 수 있다.

·         @RequestMapping(value="/user/add", method=RequestMethod.GET)

3.     정의된 메소드 이외의 사용시 "HTTP 405 - Method Not Allowed"를 받음.

4.     타입레벨에서 URL을 주고 HTTP 요청 메소드를 지정할 경우 URL 생략가능.

·         @RequestMapping(method=RequestMethod.GET)

·         String[] params(): Request Parameter

1.     이것은 요청 Parameter와 그 값을 비교해서 매핑해 주는 것이다.

2.     같은 URL을 사용하지만, Parameter값에 따라 다른 작업을 할 때 사용한다.

·         @RequestMapping(value="/user/edit", params="type=admin")

3.     특정 Parameter 값이 존재하지 않아야 한다는 조건을 둘 경우 사용

·         @RequestMapping(value="/user/edit", params="!type")

·         String[] header(): HTTP 헤더

1.     Header 정보에 따라 매핑이 가능하다.

·         @RequestMapping(value="/view", headers = "content-type="text/*")

 

o    Type level 매핑과 Method level 매핑의 결합

·   타입(클래스오 인터페이스)레벨에 붙는 @RequestMapping은 타입내의 모든 매핑용 메소드의 공통 조건을 지정할대 사용한다.

·   메소드 레벨의 매핑은 클래스 레벨의 매핑을 상속한다.

      1. 컨트롤러가 각각 /user/add, /user/edit, /user/delete URL에 매핑

@RequestMapping("/user")

public class UserController{

@RequestMapping("/add") public String add(){ }

@RequestMapping("/edit") public String edit(){ }

@RequestMapping("/delete") public String delete(){ }

}

2.     타입 레벨의 URL패턴에 * **를 사용하여 매핑 가능

·         /user/*

·         /user/**  

·         타입레벨에서 공통의 매핑을 정의하고, 메소드 별로 세분화 해서 사용

 

o    Method 레벨 단독 매핑

·   공통 매핑 조건이 없을 경우, 조건을 주지 않고 메소드 레벨에 정의해서 사용.

·   이렇게 정의하지 않는다면, 클래스 자체가 매핑이 되지 않는다.

·   만약, @Controller 애노테이션을 붙여서 자동 빈 스캔을 사용할 경우는, 클래스 레벨의 @RequestMapping을 생략할 수 있다.

o    Type 레밸 단독 매핑

·   클래스 레벨의 URL 패턴이 /*로 끝나는 경우, apthem 레벨의 URL 패턴으로 메소드 이름을 사용할 수 있음.

·   아래는 /user/add /user/edit 로 각각 매핑

@RequestMapping("/user/*")

Public class UserController {

@RequestMapping public String add( ) { }

@RequestMapping public String edit( ) { }

}

 

 

 

 

 

:
Posted by 행복상자