'공부'에 해당되는 글 29건

  1. 2014.09.05 Java FileWriter 예제
  2. 2014.09.03 RejectedExecutionException 해결 방법 알아보기
  3. 2014.06.22 sbt 실행 오류
  4. 2014.06.22 Spring MailSender
  5. 2014.06.20 예외
  6. 2014.06.10 POJO
  7. 2014.06.08 자바의 주요 특징 및 개인적인 생각
  8. 2014.06.07 GIS 개요
  9. 2014.06.04 공간 DB (Spatial database) 정의
공부/java2014. 9. 5. 09:44

FileWriter 클래스가 어떻게 문자 스트림을 사용하는지에 대해 알아 보겠습니다. 기본적으로 파일을 사용할 수 있는지 혹은 생성이나 삭제가 가능 할지는 플랫폼(MAC, Linux, Windows ETC) 에 따라 달라집니다. 일부 플랫폼들은 특별히 파일을 쓰기 위해 여는 작업을 한번에 오직 하나의 FileWriter 객체를 사용 할 수 있습니다. 이러한 상황에에서는 관련된 파일이 이미 열려 있는 경우 FileWriter 생성자 호출은 실패 하게 됩니다.

FileWriter 클래스는 OutputStreamWriter 클래스를 확장하며 문자 스트림과 바이트 스트림 사이에 다리 역활을 합니다. 여기에 기록된 문자는 지정된 캐릭터셋을 이용하여 바이트로 인코딩 됩니다. 이 캐릭터셋은 지정된 이름을 사용하거나 명시적으로 부여 할 수 있고 또는 플랫폼들의 기본 캐릭터셋을 사용하게 됩니다.

FileWriter 클래스는 JDK 1.1 부터 존재 했습니다. 

FileWriter 클래스 구조

생성자
  • FileWriter(File file)
    File 객체를 매개변수로 넘겨 FileWriter 객체를 생성합니다.


  • FileWriter(File file, boolean append)
    File 객체를 매개변수로 넘겨 FileWriter 객체를 생성합니다. 만약 두번째 매개변수값이 true 이면 파일의 마지막 다음 줄 첫번째에 바이트를 쓰게 됩니다.


  • FileWriter(FileDescriptor fd)
    File descriptor 와 관련된 FileWriter 객체를 생성합니다.


  • FileWriter(String filename)
    지정된 파일이름으로 FileWriter 객체를 생성합니다.


  • FileWriter(String filename, boolean append)
    지정된 파일이름으로 FileWriter 객체를 생성합니다. 만약 두번째 매개변수값이 true 이면 파일의 마지막 다음 줄 첫번째에 바이트를 쓰게 됩니다.

FileWriter 예제를 살패 보겠습니다

FileWriter 의 기본적인 사용 예제 입니다.

package kr.co.leehana.example.filewriter;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class SimpleFileWriterExample {

	private static final String LINE_SEPARATOR = System
			.getProperty("line.separator");

	// jdk 7
	// private static final String LINE_SEPARATOR = System.lineSeparator();

	public static void main(String[] args) throws IOException {
		String name = "Hana Lee";
		int age = 37;
		double temp = 27.3d;
		FileWriter fw = null;

		try {
			fw = new FileWriter(new File("textfile.txt"));

			fw.write(String.format("My name is %s.", name));
			fw.write(LINE_SEPARATOR);
			fw.write(String.format("I am %d years old.", age));
			fw.write(LINE_SEPARATOR);
			fw.write(String.format("Today's temperature is %.2f.", temp));
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (fw != null)
				fw.close();
		}
		
		System.out.println("Done");
	}
}

예제에서 매개변수로 새로운 File 객체를 만들어 전달하여 FileWriter 객체를 생성하고 파일에 문자를 쓸때 System.lineSeparator 를 사용하여 줄바꿈을 해줬습니다. 파일에 더 이상 쓸 내용이 없을때 FileWriter 객체의 close 메소드를 호출 하여 닫아 주었습니다.
textfile.txt 파일을 열어보면 소스상에 적용된 문자가 입력되어 있는것을 확인 할 수 있습니다.

FileWriter 의 append 에 대한 예제 입니다.

FileWriter 의 append 매개변수 사용방법에 대한 예제 입니다. 이 예제에서 간단한 Logger 객체를 만들어서 로그 데이터를 파일에 작성하겠습니다.

package kr.co.leehana.example.filewriter;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;

public class Logger {
	private static final String LINE_SEPARATOR = System
			.getProperty("line.separator");
	private File logFile;

	public Logger() {
	}

	public Logger(String fileName) {
		this.logFile = new File(fileName);
	}

	public Logger(File logFile) {
		this.logFile = logFile;
	}

	public void log(String str) {
		FileWriter fw = null;
		try {
			fw = new FileWriter(this.logFile, true);
			String date = new Date().toString();
			fw.write(date + " : " + str);
			fw.write(LINE_SEPARATOR);
		} catch (IOException e) {
			System.err.println("Couldn't log this : " + str);
		} finally {
			if (fw != null) {
				try {
					fw.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

아래 클래스는 Logger 객체를 생성하고 log 메소드를 호출할때 로그 데이터를 매개변수로 넘겨 파일에 로그 데이터를 쓰는 작업을 하게 됩니다.
Logger 객체를 생성할때 두가지 다른 생성자를 만들어서 테스트 해볼 수 있는 예제 입니다.

package FileWriterAppendExample;

import java.io.File;

import kr.co.leehana.example.filewriter.Logger;

public class FileWriterAppendExample {

	public static void main(String[] args) {
		Logger log1 = new Logger("file1.log");

		File logFile = new File("file2.log");
		Logger log2 = new Logger(logFile);

		log1.log("This is written in the first file");
		log2.log("This is written in the second file");

		log1.log("This is appended to the first file");
		log2.log("This is appended to the second file");
	}
}

추가 정보

FileWriter 클래스의 모든 생성자들은 매개변수로 넘어온 File 객체나 파일이름이 이미 존재 하면서 디렉토리 일때 혹은 파일 생성이 되지 않거나 어떤 이유로 파일 열기가 되지 않을 경우 IOException 오류가 발생합니다.




소스 코드

출처


'공부 > java' 카테고리의 다른 글

Java BufferedWriter 예제  (0) 2014.09.06
Java List 를 배열로 변환 하는 예제  (0) 2014.09.05
RejectedExecutionException 해결 방법 알아보기  (0) 2014.09.03
예외  (0) 2014.06.20
POJO  (0) 2014.06.10
Posted by #HanaLee
공부/java2014. 9. 3. 15:39

java.util.concurrent.RejectedExecutionException 을 해결 하는 방법에 대해 예제 코드와 해결 방법에 대하여 이야기 해보겠습니다.

threads 를 만들어서 Executor 인터페이스를 이용하여 실행 하는 경우 실행 할 수 없는 상태가 될 수도 있습니다.

이것은 몇가지 이유가 있을 수 있고 아래의 예제를 통해 보여드리도록 하겠습니다.

그리고 RejectedExecutionExceptionjava.lang.RuntimeException 이라는 것을 주목 할 필요가 있습니다.

1. 간단한 Executor 샘플

RejectedExecutionException 예외를 설명 하기 위해 ThreadPoolExecutor 를 이용하여 몇개의 worker thread 들을 실행하는 간단한 java 어플리케이션을 만들것입니다.

어떻게 만들었는지 아래의 코드를 보겠습니다.

아래의 코드는 ThreadPoolExecutor 클래스가 어떻게 당신이 만든 task 들을 몇개의 thread 들을 만들어 실행하는지 보여줍니다.

프로그램을 실행하면 정상적으로 실행 되는 것을 확인할 수 있습니다.

우리는 ThreadPoolExecutor 를 이용하였는데 pool 의 크기를 3으로 설정 하였습니다.

이것이 의미 하는것은 3개의 thread 들을 만들것이고 3개의 task worker 들을 채워 넣을것입니다.

우리가 새로운 task 를 만들어 ThreadPoolExecutor 에 submit 을 하게 되면 3개의 pool 중 하나가 사용 가능 하게 될때까지 BlockingQueue 에 배치하고 대기 하게 됩니다.

이 예제의 경우 15의 크기를 가지는 ArrayBlockingQueue 를 사용합니다. ArrayBlockingQueue 를 사용한 이유는 나중에 설명 합니다.

예제에서 우리는 10개의 task 들을 만들어 실행 할 것입니다.

2. 간단한 RejectedExecutionException 예제

RejectedExecutionException 의 한가지 이유중에는 새로운 task 를 executor 가 shutdown 된 후에 실행 하려고 할때 발생합니다.

shutdown 메소드가 호출 된 후에는 오래된 task 들은 여전히 실행되지만, 더이상 새로운 task 들을 실행 할 수 없게 됩니다.

이 오류에 대한 내용을 아래의 예제를 통해 확인 해보겠습니다.

프로그램을 실행하게 되면 RejectedExecutionException 이 출력 될 것입니다.

3. RejectedExecutionException 두번째 예제

Executor 가 그의 책임 아래 더이상 task 들을 처리 할 수 없을때 나타나는 예제 입니다.

로컬 메모리의 한계에 도달했을 때 Exception 이 발생합니다.

이 예제에서 로컬 메모리는 ArrayBlockingQueue 의 크기인 15 에 해당합니다.

만약 ArrayBlockingQueue 에 저장 할 수 있는 것보다 더 많은 task 들을 실행 하려고 하면 RejectedExecutionException 이 발생합니다.

예제를 살펴 보겠습니다.

15의 크기를 가지는 ArrayBlockingQueue 는 자신의 크기인 15 보다 더 많은 thread 들을 저장 할 수 없습니다.

하지만 예제에서 우리는 20개의 thread 들을 실행 하려고 하였습니다.

20개의 thread 가 빠르게 처리 된다면 오류가 발생 하지 않을 수도 있지만 우리는 Worker.java 코드에서 Thread.sleep() 으로 딜레이를 주었기 때문에 ThreadPoolExecutor 에서 빠르게 처리 하지 못하고 BlockingQueue 에 저장하게 되는데 이때 15개를 넘어가기 때문에 오류가 발생 한것입니다.

만약 18개의 thread 들을 만들었다면 정상적으로 실행 될 것입니다. 한번 생각해보는것도 좋을꺼 같습니다.

4. RejectedExecutionException 해결 방안

먼저 다음 두가지의 경우를  체크 해봅니다.

  1) shutdown 메소드가 호출 된 후 Executor 가 실행 되는것을 주의 해서 프로그래밍을 한다.

  2) Executor 가 처리 할 수 있는 것보다 더 많은 task 들을 실행 하지 않는다.

두번째의 경우는 쉽게 해결이 가능 합니다. 크기에 제한이 없는 자료구조를 이용 하면 됩니다.

예를 들면 LinkedBlockingQueue 가 있습니다.

만약 LinkedBlockingQueue 를 사용 하였는데도 여전히 문제가 발생한다면 첫번째 케이스를 의심 해봐야 합니다.

만약 첫번째 케이스에도 해당하지 않는다면 분명 여러가지 복합적인 문제가 있을 수 있습니다.

예를 들면 다른 thread 들이 deadlock 에 걸려 메모리가 꽉 차거나 LinkedBlockingQueue 는 제한 없이 계속 쌓이므로 메모리의 사용이 많아져서 문제가 발생 할 수 있습니다.

우리는 두번째 케이스를 좀 더 세밀하게 촛점을 맞춰 해결하려고 합니다.

ThreadPoolExecutor 는 15개 보다 더 많은 task 들을 처리 할 수 있습니다. 

이 예제에서는 ArrayBlockingQueue 를 사용하고 있고 이는 새로운 task 가 실행되기 전에 처리가 완료된다면 자연스럽게 오류가 없이 실행이 될 수 있습니다.

약간의 꼼수 같은 예제 이지만 한번 살펴 보겠습니다.

예제를 실행 해보면 문제없이 실행 되는것을 확인 할 수 있습니다.

예제를 실행해 보면 마치 ThreadPoolExecutor 가 15개 이상의 task 들을 처리 할 수 있는 것 처럼 보이지만 사실 약간의 꼼수를 이용하여 딜레이를 줘 ThreadPoolExecutor 가 이미 처리 중인 task 들이 충분히 처리 되어 queue 를 비울 수 있는 시간을 벌게 해줬기 때문에 가능한것이다. Thread.sleep(3000); 이부분은 꼭 3000 이 아니라 적절한 값을 주면 됩니다.




소스

예제 출처 : 


'공부 > java' 카테고리의 다른 글

Java List 를 배열로 변환 하는 예제  (0) 2014.09.05
Java FileWriter 예제  (0) 2014.09.05
예외  (0) 2014.06.20
POJO  (0) 2014.06.10
자바의 주요 특징 및 개인적인 생각  (0) 2014.06.08
Posted by #HanaLee
공부/scala2014. 6. 22. 06:49

Coursera 에서 Scala 강의를 듣던중 Example assignment 를 위해 sbt 를 설치하고 진행 하였다.


헌데 sbt 가 필요한 라이브러리들을 가지고 와서 project 설정을 하던 중 아래와 같은 오류가 발생하면서 진행이 안되었다.


[info] Loading project definition from /Users/voyaging/dev/study/scala/coursera/example/project/project

error: error while loading CharSequence, class file '/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home/jre/lib/rt.jar(java/lang/CharSequence.class)' is broken

(bad constant pool tag 18 at byte 10)

[error] Type error in expression

Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore? i

[warn] Ignoring load failure: no project loaded.


이것저것 검색을 해보다 java8 과 호환이 안되는 문제가 아닐까 생각되어 현재 시스템의 기본으로 설정된 java8 을 java7 로 변경 하니 정상적으로 해결이 되었다.


혹시나 나와 같은 사람이 있을지 몰라 공유한다.


Coursera.org 에서는 Scala 의 창시자가 직접 무료 강의를 하고 있으니.. 관심 있으신분들은 강의를 한번 들어보시길..


https://class.coursera.org/progfun-004

Posted by #HanaLee
공부/Spring2014. 6. 22. 02:56

스프링에서 제공하는 JavaMail 에 대한 추상화 기능을 제공하는 스프링의 MailSender 인터페이스..


공부하는 내용중 MailSender 를 사용해야 하는 상황이 되었다.


스프링 프레임워크는 4.0.5


maven 으로 라이브러리의 의존성을 관리하는 프로젝트를 생성하였던지라 스프링 라이브러리는 필요할때 하나씩 추가 하는 작업을 하고 있었다.


하지만.. MailSender 인터페이스는 찾을수가 없었다.


스프링 레퍼런스 문서에도 없고, 인터넷에서 흔하게 찾아 볼 수 있는 MailSender 샘플들을 적어 놓은 블로그들에도 없었다


필요한 라이브러리가 뭔지..


참.. 답답한 마음에 이래저래 찾다보니 spring-context-support 에 포함되어있다는걸 알게 되어 혹시나 나처럼 헤메이는 사람이 있을까 싶어 공유한다.


역시 아직 나의 실력은 많이 부족한가 보다.



    org.springframework
    spring-context-support
    4.0.5.RELEASE
 


Posted by #HanaLee
공부/java2014. 6. 20. 07:49

자바에는 두가지 예외가 존재한다.


  1. Checked Exception
      • Exception 의 서브클래스이면서 RuntimeException 을 상속하지 않은 것들
      • 명시적인 예외처리를 강제 한다.
      • 예외가 어느정도 복구 가능한경우
      1. Unchecked Exception
        • RuntimeException 을 상속한 클래스들
        • 명시적인 예외처리를 강제 하지 않는다.
        • 프로그램에 오류가 있을 때 발생하도록 의도됨 (NullPointerException, IllegalArgumentException)
        • 예상 가능한 예외 상황

      일반적으로 예외라고 하는것은 Checked Exception 에 대하여 이야기 하는것이다.

      '공부 > java' 카테고리의 다른 글

      Java List 를 배열로 변환 하는 예제  (0) 2014.09.05
      Java FileWriter 예제  (0) 2014.09.05
      RejectedExecutionException 해결 방법 알아보기  (0) 2014.09.03
      POJO  (0) 2014.06.10
      자바의 주요 특징 및 개인적인 생각  (0) 2014.06.08
      Posted by #HanaLee
      공부/java2014. 6. 10. 06:33

      토비의 스프링3을 공부 하다 나온 POJO 에 대한 글 중 잊지 않기 위해 다시 한번 적어 본다.


      진정한 POJO란 객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 말한다. 그런 POJO에 애플리케이션의 핵심 로직과 기능을 담아 설계하고 개발하는 방법을 POJO 프로그래밍이라고 할 수 있다.

      출처 : 토비의 스프링3 672p


      POJO?

      마틴 파울러 (Martin Fowler) 가 2000년에 컨퍼런스를 준비 하다 만든 용어라고 한다.

      Plain Old Java Object 평범한 자바 오브젝트, 간단한 자바 오브젝트.

      참고사이트 : 위키피디아, WikipediaMartin Fowler


      POJO의 조건

      특정 규약에 종속되지 않는다.

      - POJO는 자바 언어와 꼭 필요한 API 외에는 종속되지 않아야 한다.


      특정 환경에 종속되지 않는다.

      - 특정 환경에 종속적이어야만 동작하는 오브젝트도 POJO라고 할 수 없다.


      예제코드 - 아래의 3가지 모두 특정 환경에 종속 되어 있기 때문에 POJO 라고 할 수 없다.


      ◈ Servlet 에 종속된 코드

      public class Foo extends javax.servlet.http.HttpServlet { ...
      

      ◈ EJB 의 EntityBean 에 종속된 코드

      public class Bar implements javax.ejb.EntityBean { ...
      

      ◈ JPA 의 Entity 에 종속된 코드

      @javax.persistence.Entity public class Baz { ...
      

      '공부 > java' 카테고리의 다른 글

      Java List 를 배열로 변환 하는 예제  (0) 2014.09.05
      Java FileWriter 예제  (0) 2014.09.05
      RejectedExecutionException 해결 방법 알아보기  (0) 2014.09.03
      예외  (0) 2014.06.20
      자바의 주요 특징 및 개인적인 생각  (0) 2014.06.08
      Posted by #HanaLee
      공부/java2014. 6. 8. 08:50

      자바 언어의 주요 특징을 알아 보고자 합니다.

      이미 자바의 역사는 오래 되었고, 인터넷에 많은 정보들이 널려 있지만 나름의 생각을 가지고 정리 해보고자 합니다.


      자바하면 가장 대표적으로 떠오르는게 Write once, run anywhere 입니다.

      자바의 철학이라고 할 수 있을 꺼 같습니다.


      개인적으로 저 문장을 좋아 합니다.


      어떠한 알 수 없는 이유로 선택 할 수 있는 것들이 제한이 된다면, 그건 매우 잘못 되었다고 생각합니다.


      마치 자유를 억압 받는 듯한 느낌마져 듭니다.


      이렇게 우리가 충분히 인지 하지 않으면 사람으로써 당연한 기본 권리인 자유를 매우 많은 곳에서 억압 받고 있다고 생각합니다. 우리 주변에는 그러한 것들이 너무 너무 많아서 가끔은 짜증이 날 때도 있지만, 이미 그러한 환경이 만들어진건 어쩔 수 없고 앞으로 나올 많은것들은 그러한 제한이 사라졌으면 하는 바램입니다.


      그래서 저는 이러한 문제를 적극적으로 해결하고자 노력한 자바의 철학을 무척이나 좋아 합니다.


      웹이라는 개념도 그러한 관점에서 매우 좋아하고요.


      이 글을 읽고 계실 여러분들의 생각은 어떠하신지요?


      사설이 길었습니다. 그럼 자바의 주요 특징을 간단하게 정리 및 개인적인 의견을 적어 보겠습니다.


      영문 위키피디아에는 자바의 페러다임으로 아래와 같이 나열했습니다.

      multi-paradigm, object-oriented, structured, imperative, functional, generic, reflective, concurrent


      그리고 이러한 글도 보이는군요

      출처 : 점프 투 자바

      Java: A simple, object-oriented, distributed, interpreted, robust, secure, architecture neutral, portable, high-performance, multithreaded, and dynamic language


      자바는 심플하다.

      그 당시의 언어들에 비해 상대적이었겠죠. 하지만 요즘은 자바가 심플하다고 말하기 힘들지 않나 생각합니다. 많은 수의 함수형 언어들이 등장하고, 사용도 많이 하게 되면서 자바는 좀 복잡한 언어가 되어버렸다고 생각합니다.


      자바는 객체 지향 언어 이다.

      자바가 철저한 객체 지향언어라고 하지만, 100% 객체 지향 언어는 아니라고 생각합니다. 거의 100%에 가까운 언어라고 보는게 맞을꺼 같습니다.

      이러한 이야기를 할때에 주로 예를 드는건 자바의 대표적인 primitive 타입에 대한 것입니다. 이 타입들은 객체지향하고 거리가 멀다고 생각합니다. 객체 하면 떠올리는 속성과 동작이 없기 때문이죠. 그리고 자바의 객체라면 당연한 Object 를 상속하지도 않습니다. null 도 포함되겠군요.

      그래서 전 이렇게 이야가 하고 싶습니다. 자바는 거의 객체 지향 언어 이다.


      자바는 플랫폼 독립적이다.

      JVM 을 빼놓고 이야기 한다면 플랫폼 독립적이라고 할 수 있습니다.

      어차피 JVM 은 플랫폼 독립적이 될 수 없기 때문에 JVM 을 빼고 이야기 해야 한다고 생각합니다.


      자바는 안전하다.

      자바는 안전했었던거 같다. 라고 하는게 더 맞지 않나 생각됩니다. 안전하다는 자바도 어차피 인간이 만드는것이라 헛점들이 많이 생길 가능성은 얼마든지 있고, 자바의 보안에 문제가 되는 경우도 있었으며, mutable 과 immutable 에 대해서도 느슨한 부분이 있다고 생각됩니다. 단, 자바는 정적인 언어이기 때문에 동적인 언어보다는 안전 할 수 있겠습니다.


      자바는 멀티 쓰레드(동시성) 를 지원한다.

      뭐.. 제대로 쓰기 시작하면 엄청나게 어렵다는게 함정이지만, 지원하는건 지원하는거니까요.


      자바는 동적인 언어이다.

      음.. 저는 자바는 정적인 언어인 걸로 알고 있었는데 어찌 된 영문일까요?

      아마도 자바의 다양성 때문인것 같습니다. 자바는 인터페이스를 활용하면 인터페이스를 구현한 클래스에 대해서는 동적으로 사용이 될 수 있으니까 아마도 동적인 언어라고 표현하는것 같습니다. 추상 클래스도 한몫 하겠군요.


      자바는 강력하다.

      자바는 설계가 자연스럽다.

      자바는 높은 성능을 보여준다.

      자바는 분산 환경을 지원한다.

      자바는 portable 하다.

      자바는 imperative 하다.

      자바는 generic 하다.

      자바는 reflective 하다.


      쓰다보니 왠지 안티 자바가 된것 같습니다만, 자바는 좋은 언어 입니다. 단지 자바의 특징이라고 하는게 제가 생각하는것들하고 맞지 않는것 뿐이지요.

      그리고 최근 폴리그랏 프로그래밍 이라는 책을 읽어 보니 일부 지역은 자바가 서서히 사용이 적어지고 있나봅니다.

      뭐, 크게 걱정할 부분은 아닌것 같습니다. 우리나라는 자바 천국 이니까요.


      잘못된 내용 및 제가 잘못 이해하고 있는 부분에 대한 지적은 언제든 환영입니다.

      '공부 > java' 카테고리의 다른 글

      Java List 를 배열로 변환 하는 예제  (0) 2014.09.05
      Java FileWriter 예제  (0) 2014.09.05
      RejectedExecutionException 해결 방법 알아보기  (0) 2014.09.03
      예외  (0) 2014.06.20
      POJO  (0) 2014.06.10
      Posted by #HanaLee
      공부/GIS2014. 6. 7. 03:43

      GIS 에 대한 정의를 한번 살펴 보고자 합니다.


      우선 한글 wikipedia 에 있는 정의 입니다.

      지리 정보 시스템(Geographic information system, 줄여서 GIS)은 지리공간적으로 참조가능한 모든 형태의 정보를 효과적으로 수집, 저장, 갱신, 조정, 분석, 표현할 수 있도록 설계된 컴퓨터의 하드웨어와 소프트웨어 및 지리적 자료, 인적자원의 통합체이다.

      출처 : wikipedia


      다음은 텀즈에 정의된 내용입니다.

      GIS[지아이에스]는 데이터의 지리학적 형상을 마음속에 그릴 수 있게 해주는 시스템이다. 원래 GIS는 관계형 데이터베이스의 질의나 분석을 통해 어떤 종류의 지도의 형태로 결과를 받아볼 수 있게 한다. 많은 종류의 데이터들이 중요한 지리적 형상을 가지고 있기 때문에, GIS는 일기예보, 판매분석, 인구예측 및 토지이용계획 등 다양한 분야에 쓰인다.

      출처 : 텀즈


      영문 wikipedia 에는 좀 더 자세한 설명이 되어 있습니다.

      A geographic information system (GIS) is a computer system designed to capture, store, manipulate, analyze, manage, and present all types of geographical data. The acronym GIS is sometimes used for geographical information science or geospatial information studies to refer to the academic discipline or career of working with geographic information systems and is a large domain within the broader academic discipline of Geoinformatics.


      GIS can be thought of as a system that provides spatial data entry, management, retrieval, analysis, and visualization functions. The implementation of a GIS is often driven by jurisdictional (such as a city), purpose, or application requirements. Generally, a GIS implementation may be custom-designed for an organization. Hence, a GIS deployment developed for an application, jurisdiction, enterprise, or purpose may not be necessarily interoperable or compatible with a GIS that has been developed for some other application, jurisdiction, enterprise, or purpose. What goes beyond a GIS is a spatial data infrastructure, a concept that has no such restrictive boundaries.


      In a general sense, the term describes any information system that integrates, stores, edits, analyzes, shares, and displays geographic information for informing decision making. GIS applications are tools that allow users to create interactive queries (user-created searches), analyze spatial information, edit data in maps, and present the results of all these operations. Geographic information science is the science underlying geographic concepts, applications, and systems.


      The first known use of the term "Geographic Information System" was by Roger Tomlinson in the year 1968 in his paper "A Geographic Information System for Regional Planning". Tomlinson is also acknowledged as the "father of GIS".

      출처 : wikipedia



      지리 정보 시스템은 캡쳐, 저장, 조작, 분석, 관리 및 모든 유형의 지리 데이터를 제공하도록 설계된 컴퓨터 시스템이다. GIS 약어는 때때로 학문 또는 지리정보 시스템으로 작업한 이력을 참조 하는 지리정보과학 또는 지리정보연구로 사용되며 폭넓은 지리정보공학 학문 내에서 대규모 도메인 입니다.


      GIS는 공간데이터 입력, 관리, 검색, 분석 및 시각화 기능을 제공하는 시스템으로 생각 할 수 있다. GIS의 구현은 종종 관할(예컨대 도시), 용도, 또는 어플리케이션 요구에 의해 달라진다. 일반적으로, GIS 구현은 조직을 위한 맞춤 설계가 가능하다. 따라서, 어플리케이션, 관할구역, 기업 또는 목적을 위해 개발되어 배포되는 GIS 는 또 다른 어플리케이션, 관할구역, 기업, 또는 목적을 위해 개발된 GIS 와 호환이 되지 않을 수 있습니다. 그 이상으로 GIS는 공간 데이터 인프라이며 경계의 제약이 없는 개념이다.


      일반적인 의미에서, 이 용어는 통합, 저장, 편집, 분석, 공유, 및 의사 결정을 위한 정보인 지리 정보 표시를 하는 정보 시스템을 설명합니다. GIS 어플리케이션은 사용자가 만들수 있는 대화형 쿼리들 (사용자가 만든 검색), 공간 정보 분석, 지도 수정, 그리고 모든 작업의 결과를 제공 할 수 있는 도구 입니다. 지리 정보 과학은 지리 개념들, 어플리케이션들 그리고 시스템들의 기초 과학 이다.


      "지리 정보 시스템" 용어는 1968년 로저 톰린슨의 논문 "지역 계획을 위한 지리 정보 시스템" 에서 처음 사용된 것으로 알려져있다. 톰린슨은 "GIS의 아버지"로 인정 받고 있습니다.


      휴.. 영어 번역은 너무 힘드네요

      Posted by #HanaLee
      공부/DB2014. 6. 4. 02:22

      우연히 공간 DB 라는것을 알게 되어 개인적으로 공부도 할겸 정리를 해보았습니다.

      항상 그렇지만 새로운것을 배우고 알게 된다는건 정말 좋은것 같습니다.

      첫번째로 공간 DB 의 정의부터 한번 알아보겠습니다.

      아래는 wikipedia에 있는 Spatial database 의 소개글을 짧은 영어실력으로 번역 해보았습니다.

      A spatial database is a database that is optimized to store and query data that represents objects defined in a geometric space. Most spatial databases allow representing simple geometric objects such as points, lines and polygons. Some spatial databases handle more complex structures such as 3D objects, topological coverages, linear networks, and TINs. While typical databases are designed to manage various numeric and character types of data, additional functionality needs to be added for databases to process spatial data types efficiently. These are typically called geometry or feature. The Open Geospatial Consortium created the Simple Features specification and sets standards for adding spatial functionality to database systems.

      <출처 : wikipedia>


      공간 데이터베이스는 저장과 쿼리데이터를 최적화하며 기하학적인 공간에 정의된 개체들을 나타내는 데이터베이스이다. 대부분의 공간 데이터베이스는 점들, 선들 그리고 다각형등의 간단한 기하학적 개체들을 나타낼 수 있다. 일부 공간 데이터베이스들은 3D 개체, 위상 범위, 선형 네트워크 그리고 삼각불규칙망(TIN) 등과 같은 더 복잡한 구조를 처리할 수 있다. 일반적인 데이터베이스들은 각종 숫자와 문자형의 데이터를 관리하게 설계 되었지만 공간 데이터 유형을 효율적으로 처리 할 수 있게 부가적인 기능이 추가 되어야 한다. 이들은 일반적으로 기하학(형상) 또는 요소(기능)라고 부른다. Open Geospatial Consortium 은 간단한 요소(기능)들의 사양을 작성하고 데이터베이스 시스템들에 공간 기능을 추가하기 위해 표준을 정합니다.


      한마디로 우리가 존재하는 모든 공간에 있는 사물들에 대한 위치? 좌표? 이런것들을 다루는 데이터베이스 인것 같습니다.

      해석을 통해 알게된건 일반적인 데이터베이스들은 공간 데이터 유형을 처리하는데 효율적이지 못한것 같습니다. 어차피 공간 데이터 유형이라는것도 텍스트 혹은 숫자로 이루어진 데이터 일꺼 같은데 효율적으로 처리해야 한다는건 어떤 의미인지 현재로썬 알수가 없네요.

      확인 해보니 왠만한 데이터베이스들은 모두 Spatial Data Type 을 지원하는것으로 보입니다.

      좀 더 자세히 알아 봐야겠지만 개인적인 생각으로는 주로 지도를 활용 할때 가장 많이 사용될것 같고 특정 지역의 실제 모습을 3D 모델링을 할때 매우 유용하게 쓰일것 같습니다.

      공간 DB 에 대한 정의를 간단하게 알아봤는데 다음엔 공간 DB 와 함께 많이 나오는 GIS(지리정보 시스템) 에 대한 정의를 공부 해볼까 합니다.

      갑자기 든 생각인데 우주속에서 우리의 위치도 공간 DB 로 관리 할 수 있을까요?

      Posted by #HanaLee