'server'에 해당되는 글 10건

  1. 2015.01.19 #20150119-03 :: go :: go를 이용한 TCP/IP Echo Server Example
  2. 2011.04.22 #20110422-04 :: Debian Linux :: sudo 명령이 안될 때...
  3. 2011.04.22 #20110422-02 :: Debian Linux :: mysql 설치
  4. 2011.04.22 #20110422-01 :: Debian Linux :: git 설치
  5. 2011.04.21 #20110421-06 :: Debian Linux :: Subversion 설치
  6. 2011.04.21 #20110421-05 :: Debian Linux :: Django framework 환경 설치
  7. 2011.04.21 #20110421-04 :: Debian Linux :: Apache 설정
  8. 2011.04.21 #20110421-03 :: Debian Linux :: 업데이트
  9. 2011.04.21 #20110421-02 :: Debian Linux :: 설치
  10. 2011.04.21 #20110421-01 :: FreeBSD :: 포기

#20150119-03 :: go :: go를 이용한 TCP/IP Echo Server Example

아래는 go를 이용한 간단한 TCP/IP Echo Server 예제 입니다.

관리 용이성을 위해 서버와 클라이언트를 한 코드에 넣었습니다.


package main


import (

  "bufio"

  "fmt"

  "net"

  "os"

  "time"

)


func main() {


  send := make(chan string)

  quit := make(chan string)


  addr, err := net.ResolveTCPAddr("tcp", ":9000")


  ln, err := net.ListenTCP("tcp", addr)

  if err != nil {

    fmt.Println(err.Error())

    return;

  }


  go runServer(ln, quit)


  time.Sleep(time.Duration(1) * time.Second)


  conn, err := net.Dial("tcp", "127.0.0.1:9000")

  if err != nil {

    fmt.Println(err.Error())

    return;

  }


  go runClient(conn, quit)

  go runScan(send, quit)


  stop := false

  for !stop {


    fmt.Println("main loop ...")


    select {

    case text, ok := <- send:

      if !ok {

        ln.Close()

        conn.Close()

        stop = true

      }

      conn.Write([]byte(text))

    case err := <- quit:

      fmt.Println(err)

      stop = true

    }

  }


  fmt.Println("complete.")

}


func runScan(send chan string, quit chan string) {


  fmt.Println("runScan begin.")


  scanner := bufio.NewScanner(os.Stdin)

  for scanner.Scan() {

    text := scanner.Text()

    if text == "." {

      close(send)

      break

    }


    send <- text

  }

  

  fmt.Println("runScan end.")

}


func runServer(ln *net.TCPListener, quit chan string) {


  fmt.Println("runServer begin.")


  for {

    conn, err := ln.Accept()

    if err != nil {

      quit <- err.Error()

      break

    }


    go runSession(conn, quit)

  }


  fmt.Println("runServer end.")

}


func runSession(conn net.Conn, quit chan string) {


  fmt.Println("runSession begin.")


  buf := make([]byte, 1024)


  for {

    size, err := conn.Read(buf)

    if err != nil || size == 0 {

      quit <- err.Error()

      break

    }


    _, err = conn.Write(buf[:size])

    if err != nil {

      quit <- err.Error()

      break

    }

  }


  fmt.Println("runSession end.")

}


func runClient(conn net.Conn, quit chan string) {


  fmt.Println("runClient begin.")


  buf := make([]byte, 1024)


  for {

    size, err := conn.Read(buf)

    if err != nil {

      quit <- err.Error()

      break

    }


    fmt.Println(string(buf[:size]))

  }


  fmt.Println("runClient end.")

}


#20110422-04 :: Debian Linux :: sudo 명령이 안될 때...


[참고][블로그] http://blog.naver.com/PostView.nhn?blogId=1to0&logNo=110024637646


계속 root 권한으로 작업을 하다가

일반 계정으로 sudo 를 이용해 작업을 하려고 하니 다음과 같은 메세지가 출력된다.

[account] is not in the sudoers file.  This incident will be reported.

루트권한으로 다음의 명령을 입력한다.

# visudo

 root    ALL=(ALL) ALL 밑에 계정 아이디를 넣고 똑같이 적어준다.

#20110422-02 :: Debian Linux :: mysql 설치

아래의 커맨드로 mysql을 설치한다.

# apt-get install mysql-server mysql-client

debian에서 설치하니 설치 도중 root 패스워드를 입력하도록 물어봐 준다.

이전과 같이 설치 후 mysqladmin 명령을 통해 root 패스워드를 설정하지 않아도 된다.

#20110422-01 :: Debian Linux :: git 설치

다음의 커맨드로 git을 설치한다.

# apt-get install git-core

서버에 Subversion이 설치되어 있으므로 git 과 svn 연동을 위해 git-svn 을 설치한다.

 커맨드는 아래와 같다.

# apt-get install git-svn

#20110421-06 :: Debian Linux :: Subversion 설치

다음과 같은 명령어들을 실행한다.

# apt-get install subversion
# apt-get install libapache2-svn 

svn 저장소로 쓸 폴더를 만든다.
위 폴더에 아파치에서 인증할 htpasswd 파일을 아래의 커맨드를 이용해 생성한다.

# htpasswd -c [파일명] [아이디]

vi 에디터를 이용해 각각의 프로젝트에 권한을 지정할  파일을 만든다.

# vi authz

/etc/apache2/sites-enables/000-default 파일에 아래의 내용을 추가한다.

    <Location /svn>
        DAV svn
        SVNParentPath /path/to/repository/svn
        AuthzSVNAccessFile /path/to/repository/authz
        AuthType Basic
        AuthName "Subversion Repository"
        AuthUserFile /path/to/repository/htpasswd
        Require valid-user
    </Location>

아파치를 재시동하고 확인한다.

#20110421-05 :: Debian Linux :: Django framework 환경 설치

현재 기본 설치 상태로는 Python 2.6이 기본으로 설치 된다.

때문에 mod_python 만 추가 설치 한다.

설치 커맨드는 아래와 같다.

apt-get install libapache2-mod-python

이제 장고 패키지를 설치해야 한다.

장고 홈페이지설치가이드를 참고하면 된다.

 wget으로 파일을 받고 압축을 해제한 후 설치한다.

적당한 디렉토리에 프로젝트를 만들고

/etc/apache2/sites-enabled/000-default 파일에 다음과 같은 내용을 적는다.

    <Location "/project/">
        SetHandler python-program
        PythonHandler django.core.handlers.modpython
        SetEnv DJANGO_SETTINGS_MODULE project.settings
        PythonOption django.root /project
        PythonDebug On
        PythonPath "['/path/to/projects'] + sys.path"
    </Location>

아파치를 재시동하면 장고로 된 시작 페이지를 볼 수 있다.

#20110421-04 :: Debian Linux :: Apache 설정

Debian을 설치 할 때 웹서버 모드로 설치했기 때문에

Apache 2.2 가 기본적으로 설치 되었다.

다만, 설정 파일 및 디렉토리가 달라 찾아다니느라 애를 좀 먹었다.

먼저, 아파치에 대한 기본 설정은 /etc/apache2 디렉토리에 있으며,

apache2.conf 파일을 중심으로 위 디렉토리 및 하위 디렉토리에 분할되어 있다.

Windows 및 FreeBSD 에서 httpd.conf 에 대부분의 내용이 집중되어 있던 모습과는

매우 대조적이다. 

DocumentRoot 및 VirtualHost 세팅을 바꾸기 위해서는

/etc/apache2/sites-enabled/000-default 파일을 열어 보아야 한다.

위 파일의 내용을 적절히 수정한다.
 

#20110421-03 :: Debian Linux :: 업데이트

FreeBSD의 포트 시스템과 비슷하나 사용법이 조금 달라 헤매였음.

/etc/apt/sources.list 파일을 vi 에디터로 수정한다.

파일을 열면 CD-ROM 이 기본으로 되어 있을텐데, 누락된 패키지가 매우 많다. 

처음에는 한국의 apt 싸이트를 사용하려 했으나 정상 동작하는 URL이 없었다 (Daum 포함) .

최종적으로 아래의 URL을 사용하여 업데이트에 성공하였다.

아래 내용을 위 파일에 고대로 적어 넣으면 된다.

deb ftp://ftp.debian.org/debian/ stable main non-free contrib
deb-src ftp://ftp.debian.org/debian/ stable main non-free contrib 
 저장한 후 아래와 같이 커맨드를 넣으면 된다.

# apt-get update
# apt-get upgrade
 

#20110421-02 :: Debian Linux :: 설치

FreeBSD를 버리고 Debian Linux로 변경.

데비안 홈페이지의 가이드를 따라 CD-ROM에 이미지를 꾸어서 사용.

HDD는 80GB와 300GB 두 개 장착된 상태로

80GB를 메인으로 하고, 300GB를 별도 데이터 저장소로 파티션 분할.

80GB는 데비안 설치 프로세스의 기본 분할에 따랐고,

300GB는 1GB의 SWAP과 나머지 저장 공간으로 파티션 분할.

설치 옵션은 웹서버와 기본 유틸리티를 제외하고 모두 해제하였음. 

#20110421-01 :: FreeBSD :: 포기


그 동안 공부했던 FreeBSD 서버를 버리고 데비안 서버로 이동.

이유는 FreeBSD의 안정 버전 포트들이

오픈소스 프로젝트들의 속도를 따라가지 못하기 때문에...

최근에 git과 svn 서버를 연동하려 했으나 git-svn 을 지원하지 않아 무산되었음.

최근에는 Django Framework 사용을 위해 mod_python을 설치하려 했으나

최신 안정 포트의 경우 Apache 1.3 호환 바이너리만을 지원함.

따라서 FreeBSD를 포기하고 데비안으로 이동하기로 결정함.