ACM 포커 패(Poker Hands)

2013. 8. 20. 17:14

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

문제 및 처리 방법


Vitual Box에서 다음과 같이 네트워크 관련 오류 메시지가 나오고, 네트워크 카드가 하나도 안잡혔을때는 처리 방법을 알아보겠습니다. 

network is unreachable


위와 같에 네트워크 카드를 Vitual Box에서 제대로 설정했음에도 가상 OS에서 네트워크를 잡지 못할 경우(Linux, CentOS 사용시, 다른 Linux에서도 비슷하겠죠?), 다음과 같은 순서로 네트워크 설정을 수정 합니다. 

1. /etc/sysconfig/network-scripts 안에 있는 ifcfg-eth# 파일의 맥주소와 Vitual Box에 설정된 맥주소 확인해 다르면 파일내 맥주소 변경

2. /etc/udev/rules.d/70-persistent-net.rules 삭제 또는 편집

3. Reboot


문제 원인 


네트워크가 이미 설정된 다른 컴퓨터의 Vitual Box  이미지를 복사해 사용할 때 주로 나타나는 증상입니다. 이 경우 원본에서 설정된 네트워크 설정이 자동으로 갱신되지 않기 때문에 발생되는 문제입니다. 가상 네트워크 설정시 맥주소가 변경되는데 맥주소 불일치 발생되는 것을 해결하면 됩니다.

Posted by 빌리 :

ACM 8

2013. 7. 9. 16:25

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

ACM 7

2013. 7. 8. 22:57

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

웹 서버와 웹 애플리케이션 서버


초기 인터넷 세상에서는 웹 서버 라는 용어로 모든걸 통칭해 사용했지만, 시간이 지나면서 사용자에게 원활한 서비스를 제공하기 위해 기능적인 계층(Layer)를 나누게 되었습니다. 여기서 웹 서버와 웹 애플리케이션 서버와 차이가 생기게 됐다고 보면 됩니다. 그럼 웹 서버와 웹 애플리케이션 서버가 어떤 차이가 있는지 확인해보고, 실제로 각 서버를 이용해 웹 사이트를 구성하는지 알아보겠습니다.


웹 서버 (Web Server)란?


인터넷 상에서 웹 브라우저 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 웹 페이지들을 보내주는 역할을 하는 프로그램입니다. 간단히 말하면 HTTP 요청에 따라 서버에 저장되어 있는 적절한 웹페이지를 클라이언트에게 전달하는 것입니다. 웹 페이지 뿐만 아니라 그림, 스타일 시트, 자바스크립트도 해당합니다. 


주로 서버에 있는 리소스를 전달하는게 주된 기능이기도 하지만, 클라이언트로부터 콘텐츠를 받는 것도 웹 서버 기능에 포함합니다.


웹 서버에는 다음과 같은 종류가 있습니다.

제품명

제작사

최신 버전

라이선스

아파치

Apache 재단

2.4.4

오픈소스

IIS

마이크로소프트

8.0

상용(윈도우 서버 사용시 무료)

nginx

NGINX, Inc

1.5.1

오픈소스

GWS

구글

 

 

 


웹 애플리케이션 서버 (Web Application Server/WAS)란?


인터넷 상에서 HTTP를 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해 주는 미들웨어라고 합니다. 단순하게 WAS라고도 합니다. Servlet, ASP, JSP, PHP 등의 웹 언어로 작성된 웹 애플리케이션을 서버단에서 실행된 후 실행 결과값을 사용자에게 넘겨주게 되고, 우리가 가진 브라우져가 결과를 해석해서 화면에 표시하는 순으로 동작을 합니다.


웹 애플리케이션 서버는 다음과 같은 3가지 기본 기능을 가지고 있습니다. 

  - 프로그램 실행 환경과 데이터베이스 접속 기능을 제공

  - 여러 개의 트랜잭션을 관리

  - 업무를 처리하는 비즈니스 로직 수행


그러나 웹 애플리케이션 서버의 명확한 정의가 존재하지 않아 일부 기능만 가진 웹 애플리케이션 서버도 있습니다. 웹 애플리케이션 서버는 다음과 같은 종류들이 있습니다. 들어본 것들도 있고, 처음 본 것들도 많이 있네요.

제품명

제작사

최신 버전

라이선스

제우스

한국 티맥스소프트

7.C

상용

웹로직

미국 오라클

10.3.6

상용

웹스피어

미국 IBM

7.C

상용

레진

미국 Caucho

4.0.7

상용

글래스피시

미국 오라클

3.1.2.2

오픈소스(CDDL,GPL)

제이보스

미국 레드햇

7.1.0.CR1b

오픈소스(LGPL)

인터스테이지

일본 후지쯔

9.0.0

상용

아파치 톰캣

Apache 재단

7.0.41

오픈소스

레진(Resin)

Caucho

4.0

상용

제이런(Jrun)

Adobe

4.0

상용

Winstone Servlet Container

Rick Knowles

0.9.10

오픈소스

Jetty

Eclipse 프로젝트

3.0

오픈소스



웹 서버와 웹 어플리케이션 서버의 차이 및 구성


위에서 설명한 각 서버에서 보듯이 기능적인 차이로 구분을 지어 사용합니다. 웹 서버는 정적 데이터를 처리하는 용도로, 웹 애플리케이션 서버는 동적 데이터를 처리하는 용도로 말이지요. 하지만 톰캣의 경우처럼 웹 애플리케이션 서버에 웹 서버 기능을 포함된 서버 프로그램도 존재합니다. 간단히 집에서 웹서버 기능이나 웹 애플리케이션을 이용하고자 한다면 톰캣만 설치해도 됩니다. 반대로 웹 서버에서 내부에 애플리케이션을 동작할 수 있는 기능을 내장하기도 합니다. 간단한 웹 사이트를 구축한다면 웹 서버와 웹 애플리케이션 서버를 구분 지어 사용할 필요가 없습니다. 톰캣 하나만 설치하면 되니까요.


그럼 웹 서버와 웹 애플리케이션 서버를 어떻게 구성해 사용하는지 살펴 보겠습니다.


1. 스위치 - WAS

그림

웹 사이트의 가장 기본적인 구성 환경입니다. 모든 컨텐츠를 WAS에 모아 놓고, WAS가 웹서버와 웹 애플리케이션 서버 역할을 동시에 수행합니다. 트래픽이 많지 않고, 간단한 웹 사이트 서비스를 제공하거나, 개발 및 테스트 시스템 구성시 활용하기도 합니다. 


스위치로 로드밸런싱을 하기 때문에 쉽게 다른 WAS를 설치하여, 부하를 분산 시킬 수 있는 장점이 있는 반면에, WAS가 웹서버와 웹 애플리케이션 서버 역할을 동시에 수행하기 때문에 각각의 기능이 다른 기능 수행시 부하를 발생 시킬 수 있기 때문에 성능 저하가 나타날 수 있는 단점을 가지고 있습니다.


2. 스위치 - 웹 서버 - WAS

그림

웹 서버와 WAS의 기능적 분류를 통해 효과적인 분산을 유도한 형태라고 합니다. 정적인 데이터는 웹 서버가, 동적인 데이터는 WAS가 담당하게 함으로써 간단한 1번 구조보다 더 나은 성능을 발휘 합니다. 


3. (스위치 - 웹 서버 - WAS) + 이미지를 위한 웹 서버

그림

초고속 인터넷이 발달함에 따라 고화질의 이미지나 동영상을 제공하는 페이지가 증가하고 있습니다. 이러한 페이지는 네트워크 비중의 상당 부분을 차지합니다. 그래서 고화질 이미지나 동영상 데이터 제공을 위한 웹서버를 따로 추가하여, 기존 네트워크 비중도 줄이고, 기존의 웹 서버와 WAS를 좀 더 효율적으로 사용할 수 있도록 하는 구성입니다.


이러한 구조는 다양한 환경의 대한 네트워크 이슈를 좀 더 용이하게 대처할 수 있지만, 구조를 정확하게 이해하지 않았을 경우 개발 및 테스트에 많은 시간이 소요 됩니다.


4. 스위치 - 웹 서버 - WAS(프리젠테이션) - WAS(비즈니스) 

그림

이 구조는 2번째 구조를 변경한 형태입니다. WAS단의 프로그램들이 많은 비중을 차지할 때, Presentation Logic을 담당하는 프로그램과 Business Logic을 담당하는 프로그램을 구분하여 각각의 WAS가 처리하도록 분리하는 형태입니다. 


이러한 구조는 계층 구조의 부하를 적절히 분산할 수 있는 반면, 구조가 복잡해 유지보수가 어려워지는 단점을 가지고 있습니다.



참고 사이트


http://round1tko.tistory.com/64

http://ko.wikipedia.org/wiki/%EC%9B%B9_%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98_%EC%84%9C%EB%B2%84

http://ko.wikipedia.org/wiki/%EC%9B%B9_%EC%84%9C%EB%B2%84

http://blog.naver.com/PostView.nhn?blogId=yswon72&logNo=66153035



Posted by 빌리 :

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

파이썬에서 Proxy 설정을 이용해 URL 열기


urllib 모듈을 이용해 웹페이지를 열어야 할 때, Proxy 가 구성되어 있다면 정상적으로 동작하지 않습니다. 이때 파이썬에 Proxy를 설정하여 사용하는 방법을 설명합니다. 


설정 방법은 두 가지가 있습니다. 전체 환경변수로 선언하는 방법urllib 모듈 사용시 Proxy 직접 지정 방법으로 나뉩니다. 


먼저 환경변수로 선언하는 방법입니다. 

http_proxy 또는 ftp_proxy 라는 이름으로 환경변수를 선언합니다. 

Windows 계열일 경우 제어판의 시스템 속성에 들어가 환경변수로 위 환경변수명을 이용해 proxy를 지정해 줍니다. 


http_proxy="http://www.myproxy.com:9999"


그리고 다시 python 콘솔 프로그램을 사용하면 인터넷 관련 연결을 사용할 수 있습니다. Windows 환경에서는 cmd.exe를 실행한 후 다음 명령을 실행하면 선언된 것을 확인 할 수 있습니다.


echo %http_proxy%


두번째로 urllib 모듈에 직접 proxy 정보를 기입하는 방법입니다. 코드로 보시면 바로 이해하실 수 있습니다.


# Use http://www.someproxy.com:3128 for http proxying

proxies = {'http': 'http://www.someproxy.com:3128'}

filehandle = urllib.urlopen(some_url, proxies=proxies)

# Don't use any proxies

filehandle = urllib.urlopen(some_url, proxies={})

# Use proxies from environment - both versions are equivalent

filehandle = urllib.urlopen(some_url, proxies=None)

filehandle = urllib.urlopen(some_url)


위와 같이 proxies 변수로 proxy 정보를 선언한 후 관련 메소드 이용시에 선언한 정보를 넘겨주면 인터넷 연결을 사용하실 수 있습니다.



참고사이트


http://docs.python.org/2/library/urllib.html


Posted by 빌리 :

** 본 요약은 한빛미디어 '하이버네이트 프로그래밍' 책을 기준으로 작성되어져 있다.

** 본 설명은 바로 따라하기 하기엔 어려움이 있다. 책을 보지 않은 사람에게는 간단히 어떤 기능을 제공하는지 이해하는데 목적을 둔다.

** 하이버네이트 3.2.5.ga 버전, Ant 빌드를 기본적으로 사용한다.


9장 HQL 살펴보기

본 장에서는 HQL 사용법, 그리고 HQL과 SQL의 차이점에 대해 설명합니다. 주요 내용은 다음과 같습니다. 


- HQL 사용방법

-> 테이블의 모든 데이터 조회하기

-> 프로퍼티와 일부분 선택하기

-> HQL을 이용해 정렬 하기

-> HQL을 이용해 통계 정보 가져오기

- 네이티브 SQL 이용하기

  


HQL 사용방법


HQL을 사용할 때 반드시 데이터를 다룰 클래스를 지정합니다. Track 인스턴스의 리스트를 가져오는 최소한의 쿼리의 예시는 다음과 같습니다.


from Track

또는 

from com.oreilly.hh.data.Track


위와 같이 하이버네이트는 매핑한 클래스의 이름을 자동으로 임포트 합니다. 하지만 하나 이상의 클래스에서 동일한 이름을 사용한다면 패키지명까지 기입해서 사용합니다. 주위할 점은 위 Track은 테이블명을 지칭하는 것이 아닌 클래스이다. 


만약 동일한 이름을 가진 하나 이상의 매핑 클래스가 있습니다면 다음 방법을 이용합니다. 

  - 인스터스 이름 명시할때 전체 패키지명을 기입한다.

  - 매핑 문서에 import 태그를 사용해 한 쪽 또는 양 쪽 클래스를 대체하는 이름을 선언해야 한다.

  - 매핑 문서의 hibernate-mapping 태그 속성에 auto-impot="false"를 추가해 자동 import 기능을 중지시킨다.

  


HQL의 특징 


from 절에 인스턴스명을 넣는 방법과 유사하게, 자바의 다형성을 HQL에서 이용할 수 있습니다. 만약 다음과 같이 HQL을 작성하면 데이터베이스의 모든 객체를 가져올 수 있습니다. 


from java.lang.Object


Object는 모든 자바 객체의 부모이기 때문에, 이를 기본적으로 상속받는 모든 객체가 검색 대상이 됩니다. 인스턴스를 확장한 클래스의 부모 클래스 혹은 인터페이스로 지정하면 해당 객체를 상속/구현한 객체가 검색 대상이 됩니다. 이러한 기능은 포괄적으로 데이터를 다룰때 유용합니다. 하지만 제약이 있는데, 전체 결과에 대해 order by  절을 사용할 수 없고, 결과에 대해 Query이너페이스의 scroll() 메소드를 사용할 수 없습니다. 

 


프로퍼티 일부분만 선택해 사용하기 


기존의 HQL은 Select 절이 없고, From절만 사용해 객체 전체를 반환하는 방법만 사용했습니다. 그런데 리포트를 만들때 사용하게 된다면 특정 값만 필요할 때도 있습니다. HQL에서는 SQL의 Select 절과 같은 방법으로 프로퍼티 일부분만 가져 올 수 있습니다.  


만약 playtime이 지정한 조건보다 작은 Track의 제목만 가져오고 싶을 때 다음과 같이 작성할 수 있습니다.


select track.title

from com.oreilly.hh.track as track

where track.playTime <= :length


그리고 코드에서는 해당 쿼리가 반환하는 값은 String의 List를 반환합니다. 여기서 하나 이상의 속성 값을 가져오고 싶을 때는 어떻게 해야 할까요? 이것 또한 기존의 SQL처럼 속성값을 넣어서 작성할 수 있습니다.


select track.id, track.title 

from com.oreilly.hh.track as track

where track.playTime <= :length


위와 같이 쉼표(,)로 구분해서 프로퍼티를 나열하는 것입니다. 위 쿼리가 반환하는 값은 각 결과 값은 Object 배열을 포함하는 값입니다. 다음 코드를 보면서 어떻게 접근하는지 확인합니다. 


List titles = tracksNoLongerThan(Time.valueOf("00:05:00"), session);

for (ListIterator iter = titles.listIterator(); iter.hasNext;) {

  Object[] row = (Object[])iter.next();

  Integer id = (Integer)row[0];

  String title = (String)row[1];

  System.out.println("Track: " + title + " [ID=" + id + "]");

}


이러한 기능을 사용하는 이유는 여러 값을 다른 매핑 클래스에서 골라 가져올때 유용하게 사용할 수 있습니다. 이때 모든 객체를 가져오는 방식보다 성능에 대한 이점을 기대할 수 있다. 


반환하는 값을 특정 객체를 지정할 수 있습니다.. 만약 TrackSummary 클래스의 생성자가 id와 title 프로퍼티를 받도록 한다면 다음과 같이 쓸 수 있습니다. 


select new TrackSummary(track.id, track.title)



정렬 방법


HQL을 작성하는 법을 보면, 기존 SQL과 비슷한 문법을 확인할 수 있습니다. 정렬도 SQL과 비슷한 방법으로 order by 절을 추가해 정렬 기능을 추가할 수 있다. 다음은 샘플 코드입니다.


select track.id, track.title 

from com.oreilly.hh.track as track

where track.playTime <= :length

order by track.title desc



통계 함수 값 다루기 


리포트 관련 정보를 다루다 보면, 데이터의 개수, 평균 등의 통계값이 필요할 때가 있다. HQL에도 SQL처럼 집합 함수 기능이 있습니다. count(), min(), max() 와 같이 동일한 함수명을 이용해 집합 함수 기능을 사용할 수 있습니다.


select count(*), min(track.playTime), max(track.playTime)

from Track as track


위 결과 값은 하나의 결과만 나타나기 때문여 Query인터페이스의 uniqueResult()라는 메소드를 이용하 한 개의 열만 반환하는 메소드를 사용할 수 있습니다. 결과 값은 일부분 속성값을 가져오는 것과 같이 Object배열이 됩니다.




네이티브 SQL 쿼리를 이용하기


특정 SQL Dialect만 지원하는 HQL을 작성한다면, 데이터베이스 변경을 매우 어렵게합니다. 또는 기존 JDBC 기반의 프로젝트를 하이버네이트로 이관할 때 최소한의 작업만 하고 싶을 경우, 기존의 SQL을 재활용하고 싶을때 기존 SQL을 하이버네이트에서 사용할 수 있는 방법을 제공합니다. 


네이티브 SQL 쿼리를 사용하기 위해서는 다음 방법을 사용합니다. 

  1) 매핑 클래스내에 query 태그 대신 sql-query 태그를 사용합니다.

  2) sql-query 태그 내에 반환하려는 매핑 클래스와 클래스를 쿼리 내에서 참조 할 수 있는 별칭을 지정해야 합니다. 쿼리 내에 별칭(alias)는 모두 중괄호({})로 감싸야만 합니다. 

  

다음은 네이티브 SQL을 작성한 예입니다. 


<sql-query name="com.oreilly.hh.tracksEndingAt">

  <return alias="track" class="com.oreilly.hh.data.Track"/>

  <![CDATA[

       select {track.*}

      from TRACK as {track}

      where SECOND({track}.PLAYTIME) = :seconds

    ]]>

</sql-query>

  

네임드 파라미터의 경우 기존의 HQL에서 처럼 중괄호를 사용하지 않고 똑같이 사용할 수 있습니다.


Posted by 빌리 :

수열- 등차수열, 등비수열

2013. 6. 25. 07:00 from 수학

수열이란?


먼저 등차 수열과 등비 수열을 설명하기 앞서 수열에 대해서 알아봅시다. 위키백과에 수열의 정의는 다음과 같습니다. 


수열(數列)은 어떤 규칙에 따라 차례로 나열한 수를 말한다. 여기에 속하는 각각의 수를 수열의 ‘항’(혹은 ‘원소’, ‘열’이라고도 함)이라고 한다. 수열의 각 항은 순서에 따라 구분되므로 (1, 2, 3)과 (1, 3, 2)는 서로 다른 수열이며, 집합의 경우와 달리 (1, 1, 2)처럼 하나의 수가 두 항에 동시에 등장할 수도 있다. 이때 항의 수를 수열의 ‘길이’라고 한다. 수열의 길이는 유한할 수도 있고, 무한할 수도 있다. 또한, 수열은 (2, 4, 6, 8, …)과 같이 일정한 규칙에 따라 놓일 수도 있고, (3, 7, 6, 5, …)와 같이 아주 규칙도 없이 놓일 수도 있다.

- 위키피디아(http://ko.wikipedia.org/wiki/수열)


넓은 의미에서는 꼭 수가 아니라도, 특정한 순서로 놓인 임의의 대상의 열을 ‘수열’이라고 한다. 예를 들어 문자의 열은 ‘문자열’, 행렬의 열은 ‘행렬렬’이라 하는데, 이런 것들도 일반적인 의미에서 ‘수열’이라고 불린다.


수가 나열되어 있고, 수의 순서에 따라 규칙이 있거나 없을 수 있는 것이다. 위 수열의 규칙을 따라 수열을 나누는데 그것이 등차/등비/계차 수열입니다. 


추가적으로 위에서 말한 행렬도 하나의 수열입니다. 그렇다는 것은 일정한 규칙을 가지고 있다는 것입니다. 그 규칙을 프로그래밍에서 이용한다면, 2차 배열을 1차 배열을 이용해서 구현할 수도 있다. 이에 대한 예제는 다음 숙제로 나두고, 등차수열과 등비수열에 대해 설명하겠습니다.



등차수열


등차수열은 연속하는 두 수의 차이가 일정한 수열을 말합니다. 즉, 각 항에 일정한 수를 더해서 얻어지는 수열을 뜻합니다. 일정한 수를 더하는 값을 공차라고 합니다.


등차수열의 일반항

수열의 첫항을 a_1, 공차를 d라고 하면 등차수열의 n번째 항은 다음과 같이 나타낼 수 있습니다. 

a_n = a_1 + (n-1)d


등차수열의 예

첫항이 1이고 공차가 2인 등차수열은 다음과 같습니다. 

1, 3, 5, 7, 9, .....


첫항이 50이고 공차가 -10인 등차수열은 다음과 같습니다.

50, 40, 30, 20, 10, 0, -10, .....



등비수열


등비수열은 각 항의 그 앞 항과 일정한 비를 가지는 수열을 말합니다. 즉 각 항에 일정한 수를 곱해서 얻어지는 수열을 뜻합니다. 일정한 수를 곱하는 값을 공비라고 합니다. 어떤 수열이 등비수열인지 확인하기 위해서는 각각의 연속된 항의 비가 일정한지만 확인하면 됩니다. 


등비수열의 일반항

수열의 첫 항을 a, 공비가 r인 등비수열의 n번째 항은 다음과 같습니다.

a_n = ar^(n-1)


등비수열의 예

첫항이 1이고 공비가 2인 등비수열은 다음과 같습니다. 

1, 2, 4, 5, 16, 32 ...


첫항이 3이고 공비가 -1인 등비 수열은 다음과 같습니다.

3, -3, 3, -3, 3, -3, ...


등차수열과 등비수열의 관계


등비수열은(공비가 -1, 1, 0이 아닌 경우) 등차수열과 같이 선형 변화를 보이는 것과 달리, 지수적 변화를 보입니다. 즉, 그래프를 보면, 기울기가 매우 커진다는 것이죠. 이 두 수열은 관계가 전혀 없어 보이지만, 등차수열에 거듭제곱을 취하면 등비수열이 되고, 반대로 등비수열의 각 항에 로그를 취하면 등차 수열이 되는 관계를 가진다고 합니다. 


등차수열^2 = 등비수열

log(등비수열) = 등차수열 



참고사이트


http://ko.wikipedia.org/wiki/%EB%93%B1%EB%B9%84%EC%88%98%EC%97%B4

http://ko.wikipedia.org/wiki/%EC%88%98%EC%97%B4

http://ko.wikipedia.org/wiki/%EB%93%B1%EC%B0%A8%EC%88%98%EC%97%B4

http://k.daum.net/qna/view.html?qid=546iH

'수학' 카테고리의 다른 글

수학 카테고리 생성  (0) 2013.06.24
Posted by 빌리 :

5번 그래픽 편집기

2013. 6. 24. 17:41

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.