앞에서 소개했던 막대그래프 샘플에서 두가지 이상 분류에 대한 표현 방법을 살펴보도록 하겠습니다.
우선 실행화면을 살펴보면 아래와 같습니다.
두개의 실행화면중에서 우선 왼쪽의 형태를 살펴보고 그런 다음 오른쪽 형태로 변경해 보겠습니다.
(파라미터 값을 한개만 변경하면 형태가 바뀝니다.)

   




프로젝트의 생성 및 그래프 라이브러의 참조 추가

achartengine을 사용하여 그래프를 표시하는 기본적인 방법은 다음의 포스팅을 참조하시기 바랍니다.
[Android Lib] 막대그래프 그리기 (1)



처리를 위해서 확인할 부분

처리를 위해서 확인할 부분은 두 부분 입니다. 우선 표시할 수치값들이 하나 더 늘어나야 합니다.
// 표시할 수치값
List values = new ArrayList();
// 안드로이드폰 수치값들
values.add(new double[] { 10230, 10300, 14240, 15244, 15900, 19200,
		22030, 21200, 19500, 15500, 12600, 14000 });
// 아이폰용 수치값들
values.add(new double[] { 15230, 17300, 9240, 10540, 7900, 9200, 12030,
		11200, 9500, 10500, 11600, 13500 });

그런 다음 두 종류의 수치값에 대한 분류명과 색상이 정의되어야 합니다.
// 분류에 대한 이름
String[] titles = new String[] { "안드로이드폰", "아이폰" };

// 항목을 표시하는데 사용될 색상값
int[] colors = new int[] { Color.YELLOW, Color.BLUE };


전체 소스코드

처리에 사용된 전체 소스코드는 다음과 같습니다. 앞 포스팅에서 소개한 소스에서 일부만 수정한 내용입니다.
package kr.pe.hoyanet.chartex;

import java.util.ArrayList;
import java.util.List;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.model.CategorySeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer;

import android.app.Activity;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.os.Bundle;
import android.widget.LinearLayout;

public class CharExActivity extends Activity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		// 표시할 수치값
		List<double[]> values = new ArrayList<double[]>();
		// 안드로이드폰 수치값들
		values.add(new double[] { 10230, 10300, 14240, 15244, 15900,
				19200, 22030, 21200, 19500, 15500, 12600, 14000 });
		// 아이폰용 수치값들
		values.add(new double[] { 15230, 17300, 9240, 10540, 7900,
				9200, 12030, 11200, 9500, 10500, 11600, 13500 });

		/** 그래프 출력을 위한 그래픽 속성 지정객체 */
		XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();

		// 상단 표시 제목과 글자 크기
		renderer.setChartTitle("2011년도 판매량");
		renderer.setChartTitleTextSize(20);

		// 분류에 대한 이름
		String[] titles = new String[] { "안드로이드폰", "아이폰" };

		// 항목을 표시하는데 사용될 색상값
		int[] colors = new int[] { Color.YELLOW, Color.BLUE };

		// 분류명 글자 크기 및 각 색상 지정
		renderer.setLegendTextSize(15);
		int length = colors.length;
		for (int i = 0; i < length; i++) {
			SimpleSeriesRenderer r = new SimpleSeriesRenderer();
			r.setColor(colors[i]);
			renderer.addSeriesRenderer(r);
		}

		// X,Y축 항목이름과 글자 크기
		renderer.setXTitle("월");
		renderer.setYTitle("판매량");
		renderer.setAxisTitleTextSize(12);

		// 수치값 글자 크기 / X축 최소,최대값 / Y축 최소,최대값
		renderer.setLabelsTextSize(10);
		renderer.setXAxisMin(0.5);
		renderer.setXAxisMax(12.5);
		renderer.setYAxisMin(0);
		renderer.setYAxisMax(24000);

		// X,Y축 라인 색상
		renderer.setAxesColor(Color.WHITE);
		// 상단제목, X,Y축 제목, 수치값의 글자 색상
		renderer.setLabelsColor(Color.CYAN);

		// X축의 표시 간격
		renderer.setXLabels(12);
		// Y축의 표시 간격
		renderer.setYLabels(5);

		// X,Y축 정렬방향
		renderer.setXLabelsAlign(Align.LEFT);
		renderer.setYLabelsAlign(Align.LEFT);
		// X,Y축 스크롤 여부 ON/OFF
		renderer.setPanEnabled(false, false);
		// ZOOM기능 ON/OFF
		renderer.setZoomEnabled(false, false);
		// ZOOM 비율
		renderer.setZoomRate(1.0f);
		// 막대간 간격
		renderer.setBarSpacing(0.5f);

		// 설정 정보 설정
		XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
		for (int i = 0; i < titles.length; i++) {
			CategorySeries series = new CategorySeries(titles[i]);
			double[] v = values.get(i);
			int seriesLength = v.length;
			for (int k = 0; k < seriesLength; k++) {
				series.add(v[k]);
			}
			dataset.addSeries(series.toXYSeries());
		}

		// 그래프 객체 생성
		GraphicalView gv = ChartFactory.getBarChartView(this, dataset,
				renderer, Type.STACKED);

		// 그래프를 LinearLayout에 추가
		LinearLayout llBody = (LinearLayout) findViewById(R.id.llBody);
		llBody.addView(gv);
	}
}

이 방법의 단점은 처음 표시된 항목이 아래 깔리고 그 위에 두번째 항목을 표시하기 때문에, 두번째 항목중에서 첫번째 항목보다 큰 값이 있다면, 그 값은 두번째 항목의 값에 가려져 표시가 되지 않는다는 점 입니다. (실행화면에서 1월과 2월의 데이터를 참조하세요)

만약 이런 현상을 해결하기 위해서 두개의 항목을 병렬(실행화면 두번째)로 표현하고자 한다면 105~106라인의 막대그래프 생성부분에서 마지막 파라미터를 Type.DEFAULT로 수정합니다.
// 그래프 객체 생성
GraphicalView gv = ChartFactory.getBarChartView(this, dataset,
                      renderer, Type.DEFAULT);


이제 즐깁시다~!!



저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by ☞호야☜

안드로이드 작업을 하다보면 레이아웃 XML파일이 아래 화면과 같이 design탭과 소스탭으로 표시되면서 레이아웃 작성화면이 보이지 않는 경우가 있습니다.

이클립스에는 원래 XML편집기가 여러개가 있는데, 간혹다가 이클립스가 Android Layout XML Editor로 열어야할 파일을 이클립스의 기본 XML 편집기로 열게 되는 경우입니다.




이 문제를 해결하려면 편집을 원하는 XML파일을 마우스 우클릭하여 Open With > Android Layout Editor를 선택하시면 됩니다.


저작자 표시 비영리 동일 조건 변경 허락

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by ☞호야☜

이번 포스팅은 윈도우 운영체제에서 안드로이드를 개발하기 위한 개발환경을 설정하는 과정을 소개하고자 합니다. 이 블로그에 안드로이드 관련 글들이 은근히 올라와 있는 시점에서 뒤늦게 이렇게 안드로이드 설정관련 포스티을 올리는 까닭은 제가 진행하고 있는 강의에서의 보조교제로서 이 포스팅을 활용하기 위해서 입니다.

안드로이드의 개발환경 구축단계는 다음의 과정을 거쳐서 진행됩니다.
  1. JDK의 설치와 환경변수 설정
  2. Eclipse Classic 버전의 다운로드 및 설치
  3. Android SDK의 다운로드 및 설치
  4. Android Development Tool (ADT) 플러그인의 설치

여기서는 설치가 완료된 전체 패키지를 압축하여서 나중에 다른 환경에서도 압축만 풀면 즉시 안드로이드 개발을 진행할 수 있도록 만들겠습니다.



JDK의 설치와 환경변수 설정

안드로이드 역시 자바기반에서 진행되는 개발이니만큼 JDK의 설치및 설정이 필수 입니다. JDK의 다운로드 및 설치는 다음의 포스팅을 참조하시기 바랍니다.
[JAVA] 개발환경 준비하기 - JDK의 설치


이클립스의 다운로드 및 설치

안드로이드 개발 툴킷은 이클립스의 플러그인 형태로 제공됩니다. 그렇기 때문에 안드로이드 개발을 위해서는 Eclipse를 다운로드 받아서 설치해야 합니다. 이클립스는 http://www.eclipse.org에서 다운로드 받을 수 있습니다.

사이트에 접속한 후 상단 메뉴에서 "Download"를 클릭하여 다운로드 페이지로 이동합니다. 다운로드 페이지에 나열되는 패키지들 중에서 "Eclipse Classic"버전을 설치되어 있는 운영체제의 버전에 맞게 선택합니다.





운영체제에 맞는 버전을 선택하면 다운로드 링크가 제공되는 페이지로 이동합니다. 여기서 아래 화면을 참조하여 이클립스를 다운로드 받습니다.





이클립스는 설치 패키지가 아닌 압축파일의 형태로 제공됩니다. C드라이브에 eclipse+andsdk-r16-win32-x86-64bit 라는 폴더를 만들고 그 안에 압축을 풀어둡니다. 이 때 폴더이름은 편하게 지으시면 됩니다. 다만 폴더 이름을 명시할 때 한글이나 공백이 들어가지 않도록 주의하시기 바랍니다.

이클립스의 압축이 모두 풀리면 그 안에 workspace라는 폴더를 생성합니다. 이 폴더에 소스파일들이 저장되도록 지정할 것입니다.





이제 이클립스를 실행하면 아래 화면과 같이 workspace를 물어보는 화면이 나타납니다. 이 화면에서 workspace의 경로를 앞에서 생성한 디렉토리로 지정하여 줍니다.
만약 이 단계를 무시하고 지나쳤다면 이클립스의 "File > Switch Workspace"메뉴를 통해서 다시 지정해 줄 수 있습니다.






Android SDK의 다운로드 및 설치

이클립스의 설치가 잘 마무리되면 이번에는 Android SDK를 다운로드 받아서 설치할 차례입니다.
Android SDK는 초기에는 단순히 압축파일의 형태로만 제공이 되었습니다. 후에 이 압축파일이 설치 패키지 형태로 변경이 되었는데 그렇다고 해서 변한것은 없습니다. 즉 설치 완료 후에 그 파일을 다시 압축해서 다른곳에 압축을 풀어도 정상적으로 사용이 가능하다는 것이죠.

이 점을 이용해서 이클립스가 설치된 디렉토리안에 android-sdk-windows라는 폴더를 만들고 그 경로에다 Android SDK를 설치할 것입니다.

그렇게 되면 설치 완료 후에 이클립스와 함께 통째로 압축하면 언제든지 재사용이 가능해 집니다.





안드로이드 SDK를 다운로드 받기 위해서 http://developer.android.com 에 접속합니다. 사이트에 접속한 후에 두번째 메뉴인 SDK를 클릭하면 운영제체 버전에 맞는 SDK를 다운로드 받을 수 있는 페이지가 나타납니다.

여기서는 Windows 환경에서 설치를 진행할 것이므로, Installer_r16_windows.exe 파일을 다운로드 받습니다.





다운로드가 완료되면 다운로드 받은 파일을 실행하여서 설치를 시작합니다.





설치 과정중에 JDK의 설치 여부를 확인합니다. 만약 JDK의 설치가 되어 있지 않다면 JDK를 설치하신 후에 다시 이 패키지를 실행하셔야 합니다.





SDK가 설치될 경로를 묻는 화면이 나타납니다. 앞에서도 이야기 했듯이 여기서는 C:\이클립스폴더\android-sdk-windows 경로에 이 패키지를 설치할 겁니다. 아래 화면을 참고하여서 "Browse"버튼을 누릅니다.





폴더 찾아보기 창이 나타나면 앞에서 생성했던 android-sdk-windows의 폴더를 지정하여 줍니다.





지정된 경로를 확인하고 "Next"버튼을 눌러서 설치를 계속 진행합니다.





시작메뉴 폴더를 물어봅니다. 가볍게 "Next"버튼을 누릅시다.





설치가 진행됩니다. 완료되면 여기서도 "Next"를 누릅시다.





설치가 완료되면 Android의 버전별 API를 내려받아야 합니다. 설치 완료 후 API 다운로드 창을 구동시키기 위한 "Start SDK Manager" 체크박스를 체크하고 "Finish"버튼을 눌러줍니다.





설치 프로그램이 종료되면서 Android SDK Manager라는 창이 나타납니다. 기본적인 SDK이외에 Android의 버전별 API와 추가적인 툴들을 내려받도록 하는 화면입니다.

Android API는 최신 버전인 Android 4.0.3 버전과 일반적으로 개발시에 최 하위 버전으로 적용하는 2.1버전만을 다운로드 받습니다. 1.6과 1.5는 지나치게 하위버전이여서 탑제되어 있는 단말기도 드물기 때문에 배제합니다.

실제 프로젝트 진행은 4.0.3으로 진행하면서 최하위 지원 버전을 2.1로 지정하기 위해서 위와 같이 체크합니다.
그 외에 Extra라는 추가 기능들도 포함시킵니다.





이용약관에 동의하고 다운로드를 진행합니다.





실제 다운로드가 진행됩니다. 이 과정이 상당히 오래 걸립니다. 저는 이거 걸어놓고 스타를 한판 했습니다. -.-;;;
다운로드가 완료되면 별다른 메시지가 나타나지 않고 진행되던 프로그래스바가 회색으로 바뀝니다. 그럼 이 창을 그냥 닫아주면 됩니다.






ADT의 다운로드와 설치

ADT란 Android Developement Tools의 줄임말로 이클립스에 설치되어 Android SDK를 다룰 수 있도록 도와주는 이클립스 플러그인을 말합니다.

ADT를 다운로드 받고 설치하기 위해서는 이클립스를 사용해야 합니다. 이클립스의 Help메뉴 하위의 "Install New Software"를 선택합니다.





"Install"창이 나타나면 우측 상단의 "Add"버튼을 누릅니다.





Add Repository창이 나타나면 Name 속성에 "ADT"라고 입력하고 Location 속성에는 다음의 주소를 입력합니다. 여기서 입력한 주소로부터 이클립스 플러그인을 내려받게 됩니다. 입력이 완료되면 "OK"버튼을 눌러 창을 닫고 원래의 화면으로 돌아갑니다.
https://dl-ssl.google.com/android/eclipse/





원래의 화면으로 돌아가면 화면 중앙의 목록에 잠시 "Pending..."이라는 메시지가 나타났다가 다운로드 받을 수 있는 항목들이 체크박스와 함께 나타납니다. 모든 항목을 체크한 후에 "Next"버튼을 눌러서 다운로드 받습니다.





선택한 항목을 확인하는 페이지 입니다. "Next"버튼을 누릅니다.





이용약관을 확인하는 페이지 입니다. 동의한다는 의미의 "I accept ..."에 체크하고 "Finish"를 누릅니다. 이 페이지의 내용을 꼼꼼히 읽어보실 분들은... 안말립니다. -_-;;;





다운로드가 시작됩니다. 이 과정이 상당히 오래 걸립니다. 식사라도 하고 오셔야 합니다.





다운로드 중에 Anti Virus 프로그램에 대한 경고가 나타나는 경우가 있습니다. 가볍게 "OK"를 누르시면 됩니다.





다운로드가 완료되면 이클립스를 재시작해야 한다는 메시지가 아래 화면과 같이 나타납니다. "Restart Now"를 눌러서 이클립스를 재실행 합니다.





이클립스가 재실행 되고 나면 아래 화면과 같이 Android API를 내려받는 창이 자동으로 나타납니다. 우리는 앞에서 Android SDK를 설치하면서 미리 받아두었기 때문에 여기서는 "Cancel"을 눌러서 창을 닫습니다.





이제 여기까지 진행한 후에 이클립스를 닫고 이클립스가 설치된 디렉토리를 통째로 압축하면 다른 PC에 가서도 동일한 경로에 압축만 풀어주면 바로 안드로이드 개발을 진행할 수 있습니다.

저는 압축을 풀기 전에 이클립스의 폰트를 변경하고 소스파일의 왼쪽에 라인수가 표시되는 설정을 추가한 후에 압축했습니다.

안드로이드의 세계에 오신것을 환영합니다.

이제 즐깁시다~!!!






저작자 표시 비영리 동일 조건 변경 허락

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by ☞호야☜

이번 포스팅에서는 윈도우 환경에서의 MySQL 설치 과정에 대해서 소개해 보겠습니다.
오라클이 MySQL을 인수한 후로 MySQL에도 많은 변화가 있어왔습니다. 5.1버전까지만 설치해서 사용해 보았었는데 5.5. 버전에서는 설치 단계가 획기적으로 변경이 되었더군요.
그래서 한번 소개해 보겠습니다.



MySQL의 다운로드

MySQL은 http://www.mysql.com/downloads에서 다운로드 받을 수 있습니다. 해당 사이트에 접속하면 아래와 같은 화면이 나옵니다. 화면 중앙에 보이는 큼지막한 다운로드 버튼을 클릭하여 다운로드 페이지로 이동합니다.





페이지를 이동하고 나면 화면 중앙부에 윈도우 버전에 맞는 다운로드 버튼이 제공됩니다. 이 버튼을 클릭하여 설치 패키지 파일을 다운로드 받기 위해서 페이지를 이동합니다.





MySQL사이트에 로그인하라는 인증 화면이 나타납니다. 하지만 스크롤을 더 내려보면 인증창 아래 로그인 없이 다운로드만 받겠다는 텍스트 링크가 있습니다. 이 링크를 통하여 MySQL을 가입이나 로그인 절차 없이 바로 다운로드 받을 수 있습니다.





설치 패키지 파일을 다운로드 받기 위한 링크가 제공됩니다. 아래 화면을 참고하여서 설치 패키지를 다운로드 받습니다.








MySQL의 설치

다운로드 받은 설치 패키지를 실행하면 Windows Installer가 실행되면서 MySQL의 설치를 시작합니다. 설치 과정이 이전보다 더 세련되게 바뀌어서 무척 마음에 들었었습니다.
설치 페이지의 첫 화면에서 세개의 메뉴가 제공되는데 Install MySQL Products항목을 선택하여 설치를 시작합니다.





이용약관에 동의합시다.





현재 설치 버전보다 높은 최신 버전을 온라인상에서 검색하는 페이지가 나타납니다. 조금전에 mysql.com에서 최신파일을 다운로드 받은 상태이기 때문에 여기서는 화면 하단부의 "Skip"체크박스를 체크하고 "Next"버튼을 눌러서 이 단계를 건너뛰었습니다.





설치 형태를 결정하는 화면입니다. 대부분 MySQL을 로컬PC에 설치하는 이유는 어떠한 플랫폼 기반으로 개발을 진행하면서 연동을 테스트하기 위함일 겁니다. 개발자를 위한 기본 환경이 구성되는 "Developer Default"항목을 선택하고 "Next"를 누릅니다.





설치하는데 필요한 구성요소가 있는지를 검사하여서 없다면 MySQL설치 전에 먼저 설치하는 화면입니다. 화면 중앙에 나오는 항목들이 모두 체크가 되어 있다면 MySQL 설치에 필요한 구성요소가 모두 설치되어 있는 경우 입니다. 그런 경우에는 가볍게 "Next"버튼을 누르면 다음단계로 넘어갑니다.

만약 아래 화면처럼 하나 이상의 항목이 체크가 되지 않은 상태라면 "Next"버튼을 누르면 개별적인 구성요소가 설치됩니다.





개별 구성요소가 설치되고 나면 아래와 같이 모든 항목이 체크된 상태로 변경됩니다. "Next"를 눌러서 다음 단계로 넘어갑니다.





설치될 MySQL 구성요소들을 보여줍니다. "Next"를 누르면 실제 설치 과정이 진행됩니다.





설치를 설치설치~!!





설치가 완료되면 비활성 상태였던 "Next"버튼이 활성화 됩니다. 이 버튼을 눌러서 다음 단계로 이동합시다.





기본적인 설치는 끝이 났으니 기본 환경설정을 진행하겠다는 화면입니다. 여기서도 가볍게 "Next"를 눌러 줍니다.





MySQL을 어떤 환경에서 구동할 것인지를 물어봅니다. 앞에서도 이야기 했듯이 여기서는 개발에 필요한 요소로서 설치하는 것입니다. 당연히 "Developer Machine"을 선택하고 "Next"를 누릅니다.





가장 중요한 MySQL 기본 환경 설정입니다. 기본적으로 TCP/IP 포트번호가 3306으로 지정되어 있는것을 확인할 수 있습니다. 또한 백그라운드에서 항상 실행할 수 있도록 Windows Service에 등록하는 옵션도 지정되어 있습니다.

이 두가지 옵션은 기본값대로 두고, 그 밑에 있는 MySQL의 관리자 계정인 root의 초기 비밀번호를 지정해 준 후에 "Next"를 누릅니다.





환경설정이 진행됩니다.






샘플과 예제들을 설치할지 결정하는 화면입니다. 가볍게 "Next"를 누릅시다.





설치가 완료되면 아래와 같은 화면이 나타납니다. "Start MySQL workbench after Setup"항목을 체크한 후에 "Finish"를 누르면 MySQL Installer가 종료된 후에 쿼리문을 작성하고 테이블이나 DB관리를 GUI 형태로 진행할 수 있는 기본 프로그램이 실행됩니다.

이전 버전에서는 포함되어 있지 않던 기능인데 5.5부터 지원하는가 봅니다. MySQL의 최신버전을 설치하면서 가장 놀랐던 부분이 여기였습니다.

MySQL workbench의 사용법은 나중에 한번 다루어 보겠습니다.








환경변수의 지정

MySQL workbench의 추가로 인해서 기존에 사용하던 커멘드 환경에서의 MySQL 접속은 이제 필요가 없어졌습니다만, 혹시라도 프롬프트상에서 접속이 필요한 경우를 대비해서 MySQL의 bin 디렉토리를 window 환경변수에 추가하겠습니다.

내 컴퓨터를 마우스 우클릭하여 맨 아래 있는 "속성"메뉴를 누릅니다. Windows7 환경에서는 아래와 같은 화면이 나타납니다. 왼쪽 메뉴에서 "고급 시스템 설정"을 선택합니다.

XP에서 실행하는 경우 내 컴퓨터의 "속성"메뉴를 클릭한 후 다음 단계로 바로 이동합니다.





시스템 속성창에서 "고급"탭으로 이동하여 화면 하단부에 있는 "환경변수"버튼을 누릅니다.





화면이 아래와 같이 나타나는데, 아래쪽에 있는 "시스템 변수"항목에서 Path값을 찾아서 "편집"버튼을 누릅니다.





시스템 변수값은 하나의 이름에 여러개의 값이 지정될 수 있습니다. 값이 여러개가 지정될 때 각 값의 구분은 세미콜론(;)으로 처리합니다.

기존의 값들과 구분하기 위해서 "변수 값"항목에 마우스 커서를 놓고 키보드의 End키를 눌러서 세미콜론(;)을 하나 추가합시다. 그 뒤에 MySQL이 설치된 경로의 bin 디렉토리를 입력합니다. (가급적 윈도우 탐색기에서 경로를 복사해서 넣으세요.)
C:\Program Files\MySQL\MySQL Server 5.5\bin





이제 열려있는 모든 창을 확인 버튼을 눌러서 닫습니다.

MySQL의 설치가 끝났습니다.

이제... 즐깁시다~!!!


저작자 표시 비영리 동일 조건 변경 허락

크리에이티브 커먼즈 라이선스
Creative Commons License

'DATABASE > MySQL' 카테고리의 다른 글

[MySQL] 윈도우환경에서 MySQL 설치하기  (0) 2012/01/24
[MySQL] MacOS에 MySQL 설치  (0) 2012/01/24
Posted by ☞호야☜
TAG IT, MySQL, 설치

톰캣의 디렉토리 구조

Apache Tomcat를 설치해서 이클립스 없이 (에디트 플러스나 울트라 에디트등을 사용하여) 개발시 톰켓 안에서 웹 프로그램(JSP소스)들이 위치하는 경로는 기본적으로 /톰캣설치경로/webapps 디렉토리 입니다. 이 디렉토리안에 있는 ROOT라는 경로가 http://localhost:기본포트(8080) 의 주소와 맵핑됩니다.

예를 들어서 /Applications/Apache Tomcar v7.0/webapps/ROOT/helloJSP.jsp 라는 파일이 존재한다면 이 파일에 대해서 웹상에서 접근하기 위한 주소는 http://localhost:8080/helloJSP.jsp 경로가 됩니다. 

만약 ROOT디렉토리 햐위에 다른 디렉토리가 존재한다면 웹 주소에서는 슬래쉬(/)로 구분하여 디렉토리 이름을 명시해 주면 됩니다.

다시 한번 예를 들어본다면 /Applications/Apache Tomcat v7.0/webapps/ROOT/HelloJSP/index.jsp 라는 파일이 있을 경우 이 파일에 대한 웹상에서의 접근 주소는 http://localhost:8080/HelloJSP/index.jsp 가 됩니다. 

다른 경우도 있습니다. /톰캣설치경로/webapps/MyApp/index.jsp 상에 위치한 파일도 웹에서 접근할 때는 http://localhost:8080/MyApp/index.jsp 의 주소가 됩니다.

디렉토리와 주소간의 관계를 정리한다면 다음의 표와 같습니다.

실제 디렉토리 웹 접근 경로 
톰캣 설치 경로/webapps/ROOT  http://localhost:8080 
톰캣 설치 경로/webapps/ROOT/myapp  http://localhost:8080/myapp 
톰켓 설치 경로/webapps/myapp  http://localhost:8080/myapp 
톰켓 설치 경로/webapps/ROOT/myapp/test http://localhost:8080/myapp/test 
톰켓 설치 경로/webapps/myapp/test http://localhost:8080/myapp/test

위의 표를 보면 두번째 경우와 세번째 경우의 웹 접근 경로가 같은 것을 확인할 수 있습니다.

톰캣은 웹 주소상에서 포트번호 뒤에 특정 디렉토리의 이름이 주어지면 우선 /webapps 디렉토리 안에 동일한 이름의 폴더가 존재하는지 찾습니다. 만약 없다면 ROOT 디렉토리 안에 동일한 이름의 폴더가 있는지를 찾습니다.

webapps 디렉토리 안의 디렉토리들은 모두 Context라고 불리는 단위로서 각각 독립적인 웹 어플리케이션 단위입니다. 이 Context 안에 위치하는 디렉토리들은 단순한 디렉토리 입니다.



이클립스를 통한 프로젝트의 디렉토리 구조

앞에서 살펴본 바로면 Context로 지정된 디렉토리 안에 위치한 JSP파일들이 웹 브라우저상에 노출이 됩니다. 하지만 이클립스를 통해서 프로젝트를 진행하게 되면 Context로 지정된 디렉토리 안에 특수한 디렉토리가 하나 더 생성되는 것을 볼 수 있습니다.

바로 WebContent라는 디렉토리입니다. 이클립스를 통해서 프로젝트를 진행하게 되면 이 디렉토리안에 JSP나 HTML파일들이 위치하게 됩니다.

 

문제는 이클립스의 Run버튼을 통해서 웹 어플리케이션을 실행하게 되면 실제 웹 브라우저에 노출되는 경로는 이 WebContent라는 디렉토리를 숨긴다는 점입니다.

예를 들어서 /톰캣디렉토리/webapps/HelloJSP/WebContent/index.jsp 라는 파일이 있을 경우 이 파일이 이클립스를 통해서 실행하게 되면 http://localhost:8080/HelloJSP/index.jsp 라는 주소로 실행이 되게 됩니다.

하지만 이클립스를 통해서가 아니라 그냥 톰캣만을 단독으로 구동시켜서 프로그램을 실행시켜 보면 WebContent라는 디렉토리가 숨겨지지 않게 됩니다. 즉 http://localhost:8080/HelloJSP/WebContent/index.jsp 의 경로로 실행이 되게 됩니다.

이런 현상은 이클립스가 톰켓을 구동할 때, 특정한 환경설정값을 지정하여 주기 때문입니다.
이클립스를 통한 실행이 아니라 직접 톰캣을 통하여 실행할 때는 무척 번거로운 작업이 됩니다.

이클립스상에서의 실행과 톰캣상에서의 직접 실행을 모두 동일하게 통일하기 위해서는 톰캣에 이클립스와 동일한 환경설정을 추가해 주면 됩니다.

톰캣이 설치된 디렉토리 안의 conf 디렉토리를 확인하면 server.xml파일이 있습니다. 이 파일을 텍스트 에디터로 엽니다.

server.xml 파일의 스크롤을 맨 아래로 내리면 다음과 같은 부분이 있습니다.
        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
               
      </Host>
    </Engine>
  </Service>
</Server>

이 파일의 끝에서 다섯번째 라인인 </Host>전 라인에 다음의 XML 구문을 추가합니다.
<Context path="/프로젝트명" docBase="프로젝트명/WebContent" reloadable="true"></Context>

새로운 구문이 추가된 후에는 톰캣을 재실행 합니다. HelloJSP라는 프로젝트에 대한 새로운 구문이 추가된 server.xml의 내용은 아래와 같습니다.
        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
               
        <Context path="/HelloJSP" docBase="HelloJSP/WebContent" reloadable="true"></Context>
      </Host>
    </Engine>
  </Service>
</Server>

이 설정은 이클립스에 프로젝트가 추가될 때마다 넣어주어야 합니다.

이렇게 구문을 추가해 주고 난 후에는 이클립스를 통해서 프로젝트를 실행했을 경우와 이클립스 없이 직접 톰캣을 실행해서 접근한 경우 모두 동일한 경로로 웹 브라우저를 통해서 결과를 확인할 수 있습니다.

WebContent 디렉토리는 웹 URL상에 숨겨지게 됩니다.

이제... 즐깁시다~!!!



 
저작자 표시 비영리 동일 조건 변경 허락

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by ☞호야☜