eclipse는 설치파일을 다운받아 압축을 해제 하면 완료입니다.
다운로드 주소 : http://eclipse.org/downloads
원하는 버전을 다운받아 압축 해제하면 끝.
만약 apt-get으로 설치하게 되면 최신버전으로 설치가 됩니다.
$sudo apt-get install eclipse
저같은 경우엔 Luna버전을 설치하기 위해 직접 다운로드하였습니다.

MORE DOWNLOADS에서 원하는 버전의 다운로드 페이지로 이동 할 수 있습니다.
웹 개발을 위한 개발 환경 구축을 할 것임으로
Eclipse IDE for Java EE Developers를 다운로드 하였습니다.
이러한 버전에 따라 개발환경 구축 시 꼬일 수가 있으니 어떤 개발 환경을 구축할 것인지에 따라 잘 선택해야 합니다.
각 버전에 따라 필요한 plug-in이 추가되어 있거나 설정값이 다릅니다.
우분투에서 기본으로 설치되어 있는 JDK는 “java-7-openjdk-amd64”입니다.
openJDK라고 리눅스 진영에서 개발한 JDK인것 같은데, 그냥 JDK1.7를 설치합니다.
다운로드 주소 : http://www.oracle.com/technetwork/java/javase/downloads/jre7-downloads-1880261.html
다운로드 받은 JDK파일을 압축해제 한 후 path로 지정합니다.
$mv jdk-7u79-linux-x64.tar.gz /usr/lib/jvm/
$cd /usr/lib/jvm
$tar -xvf jdk-7u79-linux-x64.tar.gz
리눅스에서 참조하는 java path 지정하는 건 생략,
이후 eclipse에서 해당 프로젝트의 java bulid path를 변경
tomcat파일을 다운로드 받아 압축해제 하면 끝.
만약 apt-get으로 자동 설치하면 설정 파일들이 분산되어 설치가 됩니다.
Tomcat home : /usr/share/tomcat7
Tomcat conf : /var/lib/tomcat7/conf
Tomcat log : /var/log/tomcat7
Tomcat root directory : /var/lib/tomcat7
was를 구동하는데는 문제가 없지만 Eclipse에서 tomcat을 연동하기 위해서는 추가적인 작업이 필요합니다.
분산된 설정 파일에 다한 링크를 생성해 줍니다.
$sudo apt-get install tomcat7
$cd /usr/share/tomcat7
$sudo ln -s /etc/tomcat7/policy.d/03catalina.policy ./conf/catalina.policy
$sudo ln -s /var/log/tomcat7 log
$sudo ln -s /var/lib/tomcat7/conf conf
$sudo ln -s /var/lib/tomcat7/common common
$sudo ln -s /var/lib/tomcat7/server server
$sudo ln -s /var/lib/tomcat7/shared shared
$sudo chmod -R 777 conf
SVN과 연동하기 위해 필요한 plug-in을 설치합니다.
plug-in파일을 다운로드 받아 Eclipse 설치 디렉토리에 바로 넣는 방법도 있지만, 간단하게 MarketPlace를 이용해서 다운로드 받습니다.

다음의 기능과 연동하기 위해 추가적으로 plug-in을 설치합니다.
Svn Repository exploring 실행

최초로 실행하면 SVN connet를 설치하라는 Maketplace가 실행됩니다.
Svn kit 1.7을 선택하여 설치합니다.
정상 설치 되었을 경우 SVN Connetor에 SVNKit 1.7이 선택되어 있습니다.
(다른 것들도 모두 선택하여 설치한후 이 후 설정에서 변경 할 수 있음)

Svn Repository exploring에서 New-Repository location 클릭하여 SVN 저장소를 추가합니다.

프로젝트가 maven과 연동되어 있는 프로젝트일 경우.
1) Svn 서버로부터 가져올 데이터를 선택 한 후 check-out 실행
2) 가져온 프로젝트를 maven 프로젝트로 변환
(프로젝트 선택 후 마우스 오른쪽 클릭 → Configure → Convert To maven Project 3) maven으로 부터 라이브러리 다운로드.
(maven을 위한 설정은 pom.xml에 있으며 이에 대한 내용은 생략)
프로젝트 선택 후 마우스 오른쪽 클릭 → maven → update porject
4) maven으로부터 정상적으로 라이브러리 추가 된 경우 아래와 같음.
Eclipse에 sever를 추가합니다.

Tomcat의 설치 디렉토리를와 사용될 JRE 위치를 지정합니다.
앞전에 Tomcat의 설정 파일 링크를 정상적으로 수행되지 않았을 경우 여기서 문제가 발생합니다.
※ eclipse에 추가된 Tomcat에서 프로젝트를 복사하여 올렸을 때 class파일만 로드 시키지 못하는 경우
→ 프로젝트의 경로에 src와 class의 생성된 위치가 다른기 때문, 이를 동일하게 맞추면 해결.
eclipse에서 컴파일하고 class를 생성하는 위치 : java Build Path-Defaault output folder
eclipse의 웹 프로젝트에서 소스를 컴파일하면 workplace내에 임시로 구동 환경을 구축함.
위치 : workpase/.metadata/.plugins/org.eclipse.wst.server.core.tmp0/wtpwebapps
Tomcat에서 소스를 참조하는 위치
여기까지 모두 완료하면 Eclipse에서 SVN프로젝트를 가져와 Tomcat에 올려 개발을 할 수 있는 환경이 구축됩니다..
파일의 이름이 한글인 경우 시스템의 환경과 맞지 않으면 깨져서 보이게 됩니다.
이 때 convmv를 이용하여 변경하면 됩니다.
만약 설치가 안되있을 시
$sudo apt-get install convmv 로 설치하시기 바랍니다.
$convmv -f euc-kr -t utf-8 -r [파일 이름]
하면 변경된 파일 이름으로 보여줍니다. 하지만 실제로 변경되진 않습니다.
여기서 –notest 옵션을 붙여주면 테스트 결과를 보여주지 않고 바로 파일로 변경시켜 줍니다.
$convmv -f euc-kr -t utf-8 -r [파일 이름] --notest
$iconv -f [변경 전 인코딩 ] -t [변경 할 인코딩] [변경 할 파일]
위와 같이 수행하면 해당 파일의 변경된 인코딩으로 보여집니다.
이를 파일로 저장하면 됩니다.
iconv -f [변경 전 인코딩 ] -t [변경 할 인코딩] [변경 할 파일] > [변경할 파일 이름]
예시) a.c 라는 파일의 인코딩이 EUC-KR이고 이를 UTF-8로 변경하고 할 경우
$iconv -f EUC-KR -t UTF-8 a.c > a_utf8.c
매번 파일을 변경하고 하는 것은 매우 불편하고 귀찮은 작업입니다.
이를 스크립트로 간단하게 구현하여 실행하면 됩니다.
#!/bin/sh
files=$(find . -type -name "*.*")
for file in $files; do
iconv -f euckr -t utf8 $file > $file.tmp && mv -f $file.tmp $file
done
exit 0
리눅스에서는 프로세스보다 작은 개념인 쓰레드를 이용해 다중 작업을 구현할 수 있습니다.
fork()는 프로세스를 복사하여 새로운 메모리에 할당하는 것이므로 각 프로세스간의 메모리를 공유할 수 없습니다.
반면 pthread()는 같은 프로세스 안에 프로세스보다 작은 thread를 생성하여 각각의 작업을 수행하기때문에 같은 메모리를 공유합니다.
#include <pthread.h>
int pthread_create(pthread_t *thread,pthread_attr_t *attr, void*(*start_routine)(void *),void* arg);
thread에서 수행할 작업을 pthread_create()에 등록함으로써 동작합니다.
예제
void a() {
// thread에서 수행할 작업
}
void main() {
pthread_t pid;
pthread_create(pid, NULL, a, (void *)NULL);
}
여러개의 thread가 같은 변수에 접근하다보면 교착상태가 발생할 수도 있습니다.
이러한 문제를 해결하기 위해 변수에 접근할 때 누군가 사용하고 있으면 기다렸다가 사용할 수 있도록 설정해줘야합니다.
이때 사용하는 것이 mutex입니다.
mutex 변수에 thread가 접근하면 lock을 걸어 다른 thread가 사용하지 못하게 합니다. 다른 thread는 mutex변수가 unlook이 되기전까지 기다렸다가 unlook이 되면 수행됩니다.
/* mutex 선언 */
pthread_mutex_t sync_mutex;
/* 사용 시 */
pthread_mutex_lock(&sync_mutex);
/* 사용 후 */
pthread_mutex_unlock(&sync_mutex);
초기화 하는 방법은 2가지가 있습니다.
pthread_mutex_t sync_mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_init(&sync_mutex, NULL);
cond signal로 이러한 mutex를 보다 효율적으로 사용할 수 있습니다.
ptreahd_cond_wait()는 cond_t 변수의 신호를 전달받을때까지 기다립니다.
pthread_cond_signal()는 cont_t 변수에 신호를 전달합니다.
/* cond_t 변수 선언 및 초기화 */
pthread_cond_t thread_cond = PTHREAD_COND_INITIALIZER:
/* sync_cond 에 신호 발생 */
pthread_cond_signal(&sync_cond);
/* sync_cond에 신호가 발생될 때(pthread_cond_signal())까지 대기하였다가 발생하면 호출 됨 */
pthread_cond_wait(&sync_cond, &sync_mutex);
pthread_cond_wait()는 호출 될 때 2번째 인자로 받은 mutex를 자체적으로 관리해줍니다.
신호를 받기 위해 대기할 경우 pthread_mutex_lock()를 내부적으로 호출하고,
신호를 받아 처리한 경우 pthread_mutex_unlock()을 내부적으로 호출합니다.
GDB등 리눅스 디벙깅 툴에서도 ptrace를 기본적으로 사용하여 프로세스를 추적합니다.
이를 코드로 나타내면,
#include <stdio.h>
#include <sys/ptrace.h>
void main(int argc, char* argv[]) {
int pid = atoi(argv[1]);
if(ptrace(PTRACE_ATTACH, pid, 0, 0) == -1) {
printf("[%d] ATTACH fail...\n");
}
/* 작업 수행 */
sleep(10);
if( ptrace(PTRACE_DETACH, pid, 0, 0) == -1) {
printf("[%d] DETACH fail...\n");
}
}
리눅스에서는 기본적으로 ptrace를 사용안함으로 설정되어 있다고 합니다.
ptrace를 사용함으로 바꾸기 위해서 다음과 같이 환경변수를 바꿔줍니다.
$sudo bash
#echo 0 > /proc/sys/kernel/yama/ptrace_scope
또는 부팅시 자동으로 적용되기 위해 ptrace.conf를 수정합니다.
$vi /etc/sysctl.d/10-ptrace.conf
kernel.yama.ptrace_scope = 0 #이 값이 초기에 1로 설정되어 있음, 0으로 변경
Thunderbird, Evolution 등 전자우편 클라이언트를 통해 기존의 사용하던 전자우편 서비스를 이용할 수 있습니다.
전자우편 클라이언트에 IMAP/SMTP 등을 설정하는데 몇 가지 주의해야 할 부분들이 있어 정리합니다.
사용하고 있는 메일 서비스 업체에서 IMAP와 SMTP 서비스를 제공하는지 확인하고 해당 계정에서 사용 할 수 있도록 설정.

전자우편 클라이언트 설정
참고 : https://support.google.com/mail/troubleshooter/1668960?hl=ko&rd=2#ts=1665018%2C1665141%2C2769074
전자우편의 비밀번호를 입력하면 비밀번호가 맞지 않다며 접속이 되지 않는 경우가 있습니다.
구글 계정에서 다른 장치에서 접근하는 것을 관리하기 위해 앱 비밀번호라는 것을 사용합니다.
예전에는 전자우편 클라이언트에서 사용하던 전자우편 계정의 비밀번호를 사용할 수 있었는데, 최근에는 2차 인증 비밀번호를 입력해야 합니다.
참고 : https://support.google.com/accounts/answer/185833
2차 인증 설정하는 메뉴가 보이지 않는 경우가 있습니다.
그럴 경우 url로 접속을 하라고 합니다.
url : https://www.google.com/intl/ko/landing/2step/
구글 계정으로 로그인 후 2차 인증을 설정합니다.
하단에 기기와 앱을 설정 한 후 생성 버튼을 클릭하면 16자리의 코드가 생성되는데 이 코드가 비밀번호가 생성 됩니다.

위 코드를 비밀번호 창에 입력하면 됩니다.
해당 오류는 구글 크롬 사용 시 DNS에서 주소를 찾을 수 없는 경우에 발생하는 오류입니다.
다른 웹브라우저를 사용해도 오류 메세지가 조금 다를 뿐 해당 웹페이지를 찾을 수 없는 오류가 발생합니다.
VirtualBox에서 우분투를 돌리고 있는데 DNS 설정을 변경하니 해당 오류가 발생하였습니다.
wireshark로 패킷 캡쳐해보니

EDP(Extreme Discovery Protocol)
EDP is a vendor proprietary protocol from Extreme Networks.
즉, 가상머신에서 EDP를 통해 게스트OS의 네트워크 정보를 갱신하여 기본에 설정된 DNS가 먹통이 된것으로 판단됩니다.
해결과정 :