Posted by 양형

댓글을 달아 주세요



Posted by 양형

댓글을 달아 주세요



Posted by 양형

댓글을 달아 주세요



Posted by 양형

댓글을 달아 주세요



Posted by 양형

댓글을 달아 주세요

NAS 란?

웹서비스구조 2015. 11. 24. 14:32



'웹서비스구조' 카테고리의 다른 글

외부로부터의 무단침입을 지키는 방화벽  (0) 2015.11.24
네트워크 상태의 점검 기초. ping 명령어  (0) 2015.11.24
NAS 란?  (0) 2015.11.24
웹 호스팅이란 ?  (0) 2015.09.30
http 응답코드  (0) 2015.09.07
리다이렉트와 포워드  (0) 2014.10.21
Posted by 양형

댓글을 달아 주세요

Eclipse 디버거 사용법

Java 2015. 11. 24. 12:05

꽤 많은 분들이 디버거의 존재 자체를 모르고 있거나 혹은 디버거가 있다는 사실은 알아도 그 효용성에 의문을 제기하곤 합니다. 왜냐하면, 우리에겐 Log 클래스나 혹은 printf같은 훌륭한(?) 디버깅 도구가 있다고 생각하기 때문이죠. 물론 이렇게 필요한 변수를 찍어보면서 어떤 곳에서 버그가 있는지를 알아보는 일이 잘못된 일은 아닙니다만 복잡한 여러 상황이 맞물려 재현되는 버그는 이러한 고전적인(?) 방법을 써서 알아보기가 매우 어렵습니다.

원인을 정확히 그리고 빨리 파악하려면 디버거의 사용법을 숙지하고 사용하는 것이 가장 좋습니다. 대부분의 개발 환경에서 디버거를 제공하는데 다행히 이클립스에서도 쓸만한 디버거를 내장하고 있습니다.

오늘 포스팅에서는 이클립스 디버거 사용법에 대해 다루어 볼까 합니다.

이클립스 디버거 뷰


이클립스는 디버거 뷰를 제공하여 디버거를 사용할 수 있도록 합니다. 디버거 뷰는 어디에서 확인할 수 있을까요? 바로 우측 상단에 Debug 뷰에 들어가면 그곳에서 확인할 수 있습니다.

debugger-view

디버깅의 시작


그렇다면 어떻게 디버깅을 활성화한 상태로 프로그램을 실행할 수 있을까요? 상단 메뉴의 Run에서 프로그램을 실행할 때 Debug를 이용하여 프로그램을 실행하면 디버거가 작동하게 됩니다.

run-debug

브레이크 포인트 설정과 뷰


보통 디버깅을 할 때 가장 먼저 하는 일이 브레이크 포인트를 잡는 일입니다. 브레이크 포인트를 에러가 일어나는 라인이나 혹은 의심이 가는 변수를 추적할 수 있는 라인쯤에 잡아놓고 프로그램을 디버깅하면 해당 라인을 실행할 때 디버거가 작동하게 되고 그곳에서 프로그램을 라인 별로 진행해가며 관찰을 진행할 수 있게 됩니다.

브레이크 포인트 설정은 매우 간단합니다. 편집기 왼쪽에 파란 부분(마커 바)을 더블 클릭하게 되면 파란 원이 생기는데 이 원이 브레이크 포인트입니다. 혹은 오른 클릭하여 Toggle break point를 누르면 됩니다. 설정 후 다시 더블 클릭하게 되면 브레이크 포인트가 사라지게 됩니다.

toggle-breakpoint

또한, 디버그의 브레이크 포인트 뷰에서 지금까지 걸어놓은 모든 브레이크 포인트들의 위치를 확인할 수 있고 활성화/비활성화, 삭제도 할 수 있습니다. 여러 브레이크 포인트가 걸려있을 때에는 이 탭에서 확인하고 관리하는 것이 더 편합니다.

breakpoint-view

또한, 디버깅을 진행하고 있는 도중에도 다른 의심이 가는 라인에 브레이크 포인트를 걸 수 있습니다.

스텝 단위 진행


지정한 브레이크 포인트에 다다르면 동시에 디버거가 작동하게 되고 그 라인부터 스텝 단위의 진행을 할 수 있게 됩니다.

debug-ui

이제 이 뷰의 버튼들을 이용하여 현재 상황을 진행하거나 되돌릴 수 있습니다. 자주 사용하는 버튼의 사용법을 알아보면

  1. Resume : 다음 브레이크 포인트를 만날때까지 진행합니다.
  2. Suspend : 현재 작동하고 있는 쓰레드를 멈춥니다.
  3. Terminate : 프로그램을 종료합니다.
  4. Step Into : 메서드가 존재할 경우 그 안으로 들어가 메서드 진행 상황을 볼 수 있도록 합니다.
  5. Step Over : 다음 라인으로 이동합니다. 메서드가 있어도 그냥 무시하고 다음 라인으로 이동합니다.
  6. Step Return : 현 메서드에서 바로 리턴합니다.
  7. Drop to Frame : 메서드를 처음부터 다시 실행합니다.

등이 있습니다.

실제로 디버깅 화면에서 버튼들을 눌러보면 쉽게 그 쓰임새를 아실 수 있습니다.

변수의 상태 확인을 쉽게 해주는 변수 뷰


디버깅을 진행하는 도중 변수의 값이나 객체의 상태를 알고 싶은 상황이 생기게 됩니다. 현재 의심이 가는 변수 이외에도 이 변수에 영향을 끼칠 다른 변수들이나 객체들의 상황을 실시간으로 검사할 필요가 있을 때 변수 뷰를 이용하면 도움을 얻을 수 있습니다.

variables-view

이곳에서 변수나 객체의 상태를 확인하고 변수의 상황에 대해서 저장할 수 있습니다. 변수나 객체의 상황을 모두 저장해서 클립보드에 붙이고 싶은 일이 생기면 해당 변수를 오른클릭 후 Copy Variables를 선택합니다.

copy-var

편집 창으로 돌아가 변수에서 Command + shift + i를 누르게 되면(혹은 오른 클릭 후 Inspect를 선택) Inspector 창이 뜨게 됩니다. 이 창에서 다시 한번 Command + shift + i를 누르면 해당 변수를 Expression 뷰로 보내게 되고 이곳에서 지속해서 변수의 상태를 관찰할 수 있게 됩니다.

inspector

Expression 뷰 이용


Expression 뷰에서는 변수 이름을 입력하거나 수행해보고 싶은 명령어를 직접 입력하여 그 결과 값을 관찰할 수 있습니다. 결과 값을 관찰할 뿐만 아니라 Expression에 써놓은 변수들은 명시적으로 지우지 않는 이상 계속해서 관찰을 수행하기 때문에 변해가는 상황을 지속해서 관찰할 일이 있는 변수나 명령문을 등록해놓기에 좋습니다.

expression-view

Display 뷰 이용


디스플레이 뷰에서는 현 문맥에서 사용할 수 있는 명령어를 실행하거나 변수의 값을 조작하는 일을 수행하기에 적합한 환경을 제공합니다. Expression에서도 비슷한 기능을 제공하지만, 디스플레이 뷰를 이용하는 것이 더 편합니다. 메모장과 같이 쉽게 쓰고 지울 수 있기 때문입니다.

또한, 원본 코드의 수정 없이 편하게 현재의 맥락을 변화시킬 수 있는 것이 가장 큰 장점이라고 볼 수 있습니다.

필요한 명령어들을 적어놓은 후 실행하고 싶은 부분만 드래그하여 수행하거나 혹은 값을 리턴받을 수 있습니다. 지금은 boolean변수 하나의 값을 바꿔보기도 하고 조건 값에 따라 무언가를 리턴 받도록도 해놓은 상황을 스크린 샷으로 담아보았습니다.

값을 반환받고 싶을 때는 두 번째 버튼을, 단순히 실행만 할 때에는 세 번째 버튼을 누르면 됩니다.

display-get-result두 번째 버튼을 눌러 값을 반환받는 상황입니다.

display-execute단순히 실행만 하려면 세 번째 버튼을 누릅니다.

브레이크 포인트에 조건 걸기


브레이크 포인트에 조건을 거는 것이 굉장히 유용할 때가 있습니다. 특히 반복문안에 들어가 있는 코드들을 디버깅할 때 유용하지요. 반복문의 경우 모든 상황을 검사한다기보다는 특정 조건에서 값이 어떻게 들어가는지를 분석하는 경우가 더 많은데 이러한 상황을 검사하기 위해서 브레이크 포인트에 조건을 걸어야 합니다.

브레이크 포인트를 거는 과정까지는 똑같습니다. 브레이크 포인트를 건 후 그 포인트에서 오른 클릭을 하면 Breakpoint properties 옵션이 있는 것을 확인할 수 있습니다. 이 옵션에서 조건문을 설정하여 디버거의 활성화 조건을 설정할 수 있습니다.

breakpoint-properties

먼저 Conditional을 활성화하여 어떤 조건에서 디버깅 화면으로 전환할지를 쓰면 되는데 이 창에 조건식을 쓰면 됩니다.

breakpoint-condition

또 hit count를 이용하여 조건을 걸 수도 있습니다. hit count에 값을 적용하면 해당 라인에 브레이크 포인트가 hit count만큼 잡힌 이후 디버깅 화면으로 전환하게 됩니다. hit count 옵션은 반복문에서 한 100번쯤 이후에 디버깅을 시작하고 싶거나 하는 일이 생길 때 유용하게 쓸 수 있습니다.

breakpoint-hitcount


http://spoqa.github.io/2012/03/05/eclipse-debugger.html


'Java' 카테고리의 다른 글

CommonUtil.java  (0) 2015.12.15
jUnit 사용하기  (0) 2015.12.15
Eclipse 디버거 사용법  (0) 2015.11.24
자바 I/O란  (0) 2015.11.24
Exception Handling  (0) 2015.11.02
초보 개발자를 위한 디버깅 방법 소개  (0) 2015.10.27
Posted by 양형

댓글을 달아 주세요

데몬(daemon) 이란?
데몬이란 리눅스 시스템이 처음 가동될 때 실행되는 백그라운드 프로세스의 일종이며, 사용자의 요청을 기다리고 있다가 요청이 발생하면 이에 적절히 대응하는 리스너와 같은 역할을 한다. 즉, 메모리에 상주하면서 특정 요청이 오면 즉시 대응 할 수 있도록 대기중인 프로세스를 말한다. MS윈도우의 서비스(Service)와 유사하고 실제로 '서비스'라고 부르기도 하다. 보통 리눅스 시스템의 1번 프로세스인 init(PID=1)이 실행하고, 데몬 프로그램의 명령어는 'd'로 끝난다. (ex. ftpd, mysqld, httpd...)

리눅스 시스템은 주로 서버로서의 역할을 많이 수행하는데 (요즘은 데스크탑으로도 많이 쓴다만...) 가령, ftp서버, 웹서버, DB서버 등의 역할을 하는 시스템이라면, 해당 데몬이 실행중이어야 사용자의 요청을 처리할 수가 있다.

리눅스에서 데몬을 실행하는 방법은 크게 두가지가 있다. standalone 방식과, super daemon을 통하는 방식이 그것인데, 일반적으로 빈번히 사용하는 데몬을 standalone 방식으로, 자주 사용하지 않는 데온을 super daemon방식으로 실행한다. 만약 리눅스 서버를 웹서버로 사용한다면, 사용자의 웹 서비스 요청이 매우 빈번히 일어날 것이고, 따라서 'httpd' 와 같은 웹서버 데몬은 standalone 방식으로 실행한다.


standalone type daemon
- 독립적으로 수행되며 서비스 요청에 응답하기 위해 항시 메모리에 상주하는 데몬이다.
- 데몬의 실행 스크립트 위치 : "/etc/inetd.d/" 


inetd type daemon
inetd라고 하는 특별한 데몬에 의해 간접적으로 실행되는 데몬이다. 보안상의 이유로 xinetd로 수정되었으며 슈퍼데몬이라고도 한다. inetd에 어떠한 요청이 들어오면 inetd는 해당되는 데몬을 메모리에 올리고 요청을 처리하게 된다.
데몬의 실행 스크립트 파일 : "/etc/xinetd.d/" 


Ubuntu Server에서의 데몬
Ubuntu 8.10기준으로 Server 버전이든 Desktop 버전이든 기본적으로 Super daemon이 설치되지 않는다. apt-get명령어를 이용한 패키지 설치를 통해 설치할 수 있다.

$ sudo apt-get install netkit-inetd


Ubuntu에서는 프로그램을 실행하기 위해 특정 프로그램에 의존해하는 것을 지향하기 때문에, 기존과 같이 super daemon을 default로 사용하지 않는것 같다. Ubuntu 패키지 DB에서 제공하는 데부분의 프로그램들이 standalone 타입으로 설치되도록 설정되어 있으며(ex. sshd), 기타 외부 프로그램들도 대부분 standalone으로 설정할 수 있다고 한다. 만약 super daemon이 꼭 필요하다면 위의 명령어로 실행할 수 있고, standalone 방식과 super daemon방식을 동시에 사용할 수 있으므로, 사용자 취향에 맞게 사용하면 될 듯하다.


참고사이트 : http://blog.naver.com/yhpeople?Redirect=Log&logNo=20011282102

Posted by 양형

댓글을 달아 주세요

자바 I/O란

Java 2015. 11. 24. 10:30

자바 I/O란

자바에서 중급정도 소리를 들으려면 IO와 NIO를 넘어야 할 수 밖에 없죠.
저도 공부를 한다는 생각으로 이곳 저곳 참조해서 나름대로 정리를 연재해 나갈 생각입니다 
허접한 실력이지만 함께 나누는 공간이 되었으면 합니다. 많이 부족하니 더 좋은 내용, 덧붙일 내용이나 틀린점 있으면 바로바로 올려주시면 감사드리겠습니다.
결국 함께 공부하자는 목적이 제일 큰 듯 합니다. 

오늘 아침 출근해서 메일을 확인하는데 운영자님께서 메일을 보내주셨더라구요.
"지금 시작하지 않으면 늦는다. 고로 지금 하는 것이 제일 빠르다"라는 메일을 받고 느낀 것이 많았답니다. 
피할 수 없다면 즐깁시다 여러분! 

1. 입출력 스트림

  • 자바에서는 모든 데이터의 입출력을 스트림이라는 개념에 의해 이루어집니다.
  • 데이터 입출력시 모든 데이터를 형태와는 관계 없이 일련된 흐름으로 전송을 하는 것이 스트림 입출력 모델의 기본 개념입니다.
  • 자바에서의 입출력은 기본적으로 아래처럼 두 가지 형태로 이루어집니다.

1.1 바이트 스트림(ByteStream)

  • 바이트, 바이트 배열, 정수, 데이터 등의 흐름
  • InputStream/OutputStream Class, 그리고 이들의 하위 클래스를 통해서 제공
  • 크기는 8bit(=1byte) 갖는 스트림들이 입출력

1.2 문자 스트림(CharacterStream)

  • 문자, 문자 배열, 문자열의 흐름
  • Reader/Writer Class, 그리고 그들의 하위 클래스를 통해서 제공
  • 크기는 16bit(=2bytes) 갖는 유니코드 문자들의 스트림

2. 부가설명.

  • Reader/Writer Class는 기본적으로 InputStream/OutputStream Class와 같은 기능을 제공해 주고 있지만,
    ByteStream method는 바이트 또는 바이트 배열에 대해 동작하고, CharacterStream method는 문자, 
    문자 배열, 또는 문자열에 대해서 동작하도록 되어 있습니다. 
    따라서, ByteStream을 위해 사용가능한 대부분의 기능은 CharacterStream에 대해서도 사용가능합니다.
  • CharacterStream을 사용하는 이유는 두바이트 유니코드 방식으로 처리를 하므로 거의 대부분의 언어를 처리할 수 있기 때문입니다. 중공 빼고^^
    그러나 ... 텍스트 파일을 보면 아주 다양한 encoding 형태를 보여 거의 처리가 불가능하죠. 
    그래서 자바에서는 브릿지 개념으로 제공되는 클래스들이 있습니다.

텍스트 파일 처리방식이 전세계적으로 동일하거나 아니면 단일언어이면 아래에 있는 것들이 필요없겠죠.

  • InputStreamReader : Byte InputStream으로부터 한바이트씩 죄다 읽어 들여 주어진 인코딩에 해당하는 문자들로 만들어 줍니다. 그냥 읽는다면 깨질 확률이 아주 높겠죠.
  • OutputStreamWriter : 반대로 문자들을 한바이트씩 쪼개어서 바이트들로 변환해 Byte OutputStream으로 쓰겠죠. 

다음으로는 ByteStream / CharacterStream의 클래스들을 살펴보기로 하죠.

'Java' 카테고리의 다른 글

jUnit 사용하기  (0) 2015.12.15
Eclipse 디버거 사용법  (0) 2015.11.24
자바 I/O란  (0) 2015.11.24
Exception Handling  (0) 2015.11.02
초보 개발자를 위한 디버깅 방법 소개  (0) 2015.10.27
스택트레이스(stack trace)  (0) 2015.10.27
Posted by 양형

댓글을 달아 주세요

혹시 크롬(Google Chrome)이 뜨기만 하고 '앗, 이런! / 이 웹페이지를 표시하는 동안 문제가 발생했습니다. 어쩌구 저쩌구'하면서 다른 것이 아무 것도 되지 않는 분이 계시는지요?
이럴 때는 크롬 바로가기 단추그림[아이콘]에 오른쪽 딸깍 - 속성 들어가서 크롬 주소줄 맨 뒤(따옴표 뒤)에다 한 칸을 띄우고 ' --no-sandbox' 라는 글귀를 덧붙이고 나서 띄워보면 됩니다.

Posted by 양형

댓글을 달아 주세요