728x90
반응형

DAT는 자료구조입니다. 값을 배열의 index를 활용하는 것이 포인트 입니다. 

 

동작방식

배열을 사용하여 레코드를 해당 키에 매핑할 수 있는 데이터 구조입니다. 직접 주소 테이블에서 레코드는 키 값을 인덱스로 직접 사용하여 배치됩니다. 빠른 검색, 삽입 및 삭제 작업을 용이하게 합니다.

출처: https://www.geeksforgeeks.org/direct-address-table/

최대값에 1을 더한 크기의 배열을 만든 다음(0 기반 인덱스로 가정) 값을 인덱스로 사용합니다. 예를 들어 다음 다이어그램에서 키 21은 인덱스로 직접 사용됩니다.

시간복잡도

탐색,삽입,삭제 연산을 모두 O(1)

참고사이트

https://www.geeksforgeeks.org/direct-address-table/
 

Direct Address Table - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

기본코드

아래는 글을 입력받아 가장 많이 나온 문자를 찾아내는 간단한 코드입니다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;


public class DAT_example {
	
	/**
	 * DTA : Direct Address Table 자료구조 
	 * ==> 값을 index로 활용하는 것인 포인트
	 */
	
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

	public static void main(String[] args) throws IOException  {
		
		// 입력
		String input = br.readLine();
		int[] arr = new int[200];
		int max = 0;
		String maxChar = "";
		for(int i=0; i<input.length(); i++){
			arr[input.charAt(i)] += 1;
			if(arr[input.charAt(i)]  > max){
				max = arr[input.charAt(i)] ;
				maxChar = input.charAt(i)+"";
			}
		}
		
		// 풀이
		System.out.println(maxChar);
		
		br.close();
		bw.close();
	}

}

결과

AMDKIDD   <== 입력
D              <== 결과
728x90
반응형
728x90
반응형

요즘 많은 사이트들이 https 프로토콜을 사용을 합니다. 개발을 할때도 http 가 아닌 https 로 통신해야하는 경우가 있는데, SSL 인증서를 구입하기에는 비용이 비싼것으로 알고 있습니다. 간단하게 개발을 위한 사설 인증서를 발급받아서 https로 Tomcat을 구동하는 방법을 알아 보기로 합니다. 준비 사항이 있는데, 개발 PC에 JDK 와 Tomcat이 설치가 되어 있어야 합니다. 설치에 대한 내용은 간단한 것이므로 생략하도록 합니다.

* 명령어 중 빨간 글씨는 자신이 원하는 것으로 바꾸어도 됩니다.

JDK를 이용한 KeyStore 생성

JDK에서 제공하고 있는 keytool을 이용해 keystore를 생성합니다. Windows의 명령프롬프트를 관리자로 실행하여 아래와 같이 keytool을 실행합니다.

keytool -genkey -alias tomcat -keypass changeit -storepass changeit -keyalg RSA -keystore F:\Project\ssl\.keystore 

keytool은 다른 목적으로 storepass와 keypass를 사용합니다. storepass는 키 저장소에 액세스하는 데 사용됩니다. keypass는 특정 키 쌍의 개인 키에 액세스하는 데 사용됩니다. keyalg 는 key algorithm name 을 이야기하며 RSA라는 것으로 지정합니다. 그리고 저장장소는 "F:\Project\ssl\.keystore" 로 지정합니다. 

C:\WINDOWS\system32>keytool -genkey -alias tomcat -keypass changeit -storepass changeit -keyalg RSA -keystore F:\Project\ssl\.keystore
이름과 성을 입력하십시오.
  [Unknown]:  localhost
조직 단위 이름을 입력하십시오.
  [Unknown]:
조직 이름을 입력하십시오.
  [Unknown]:
구/군/시 이름을 입력하십시오?
  [Unknown]:
시/도 이름을 입력하십시오.
  [Unknown]:
이 조직의 두 자리 국가 코드를 입력하십시오.
  [Unknown]:
CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown이(가) 맞습니까?
  [아니오]:  예


Warning:
JKS 키 저장소는 고유 형식을 사용합니다. "keytool -importkeystore -srckeystore F:\Project\ssl\.keystore -destkeystore F:\Project\ssl\.keystore -deststoretype pkcs12"를 사용하는 산업 표준 형식인 PKCS12로 이전하는 것이 좋습니다.

C:\WINDOWS\system32>

C:\에 .keystore가 생성되었습니다. 그런데 키 생성시 경고가 발생했습니다. 생성된 keystoretype 이 JKS 키로 생성되었는데, 이는 "Java KyeStore"의 준말로 Java 환경에서만 사용이가능하니, 산업 표준 형식인 PKCS12(Public Key Cryptogrephic Standards)로 변환을 하라는 것 입니다. PKCS12 는 여러 플랫폼에서 사용이 가능합니다. 변환은 아래 명령어로 변환합니다.

keytool -importkeystore -srckeystore F:\Project\ssl\.keystore -destkeystore F:\Project\ssl\.keystore -deststoretype pkcs12

실행을 하면 아래와 같이 성공되었다고 나타납니다. 기존 keystore 파일은 keystore.old 로 백업이 된 것도 확인 됩니다.

C:\WINDOWS\system32>keytool -importkeystore -srckeystore F:\Project\ssl\.keystore -destkeystore F:\Project\ssl\.keystore -deststoretype pkcs12
소스 키 저장소 비밀번호 입력:
tomcat 별칭에 대한 항목이 성공적으로 임포트되었습니다.
임포트 명령 완료: 성공적으로 임포트된 항목은 1개, 실패하거나 취소된 항목은 0개입니다.

Warning:
"F:\Project\ssl\.keystore"을(를) Non JKS/JCEKS(으)로 이전했습니다. JKS 키 저장소가 "F:\Project\ssl\.keystore.old"(으)로 백업되었습니다.

C:\WINDOWS\system32>

CER 인증서 생성

앞에서 생성한 KeyStore를 이용하여 인증서를 만들어 줍니다. 명령어는 아래와 같습니다.

keytool -export -alias tomcat -storepass changeit -file f:\Project\ssl\tomcat.cer -keystore f:\Project\ssl\.keystore
C:\WINDOWS\system32>keytool -export -alias tomcat -storepass changeit -file f:\Project\ssl\tomcat.cer -keystore f:\Project\ssl\.keystore
인증서가 <f:\Project\ssl\tomcat.cer> 파일에 저장되었습니다.

C:\WINDOWS\system32>

명령어를 실행하면 tomcat.cer 파일이 F:\Project\ssl 폴더에 생성됩니다.

Tomcat 설정

저는 이클립스를 사용할 것이기 때문에 아래와 같이 간단하게 Tomcat 서버 설정 후 Test 라는 프로젝트를 만들어 테스트를 진행하였습니다. 우선 http 통신과 Test 프로젝트가 동작되는 환경을 구성합니다.

 

1. 이클립스 [Window → Show View → Servers] 를 클릭합니다.

2. 아래와 같은 Servers 탭이 나타나는데 파란색 글씨를 클릭합니다.

3. Tomcat 을 추가하기 위하여 리스트의 apache 폴더 안의 Tomcat 을 자신의 PC에 맞는 버전으로 선택하여 줍니다. 저는 Tomcat 8.5가 설치되어 있기 때문에 "Tomcat v8.5 Server"를 선택하였습니다. 그리고 Tomcat 이 설치된 경로를 잡아주고 완료합니다.

4. 간단한 Test 프로젝트를 생성하고 "index.html" 파일을 만들어 줍니다. 그리고 Severs 탭에서 Tomcat v8.5에 마우스 오른쪽 버튼으로 나오는 메뉴 [Add and Remove] 선택합니다. Test 프로젝트를 Add 버튼으로 오른쪽으로 옮겨 줍니다.

5. 서버를 기동하여 "http://localhost:8080/Test/" URL로 접근하면 아래와 같이 화면이 나타납니다.

 

그렇다면 이제 Tomcat 설정 파일 server.xml 파일을 열어 SSL 통신을 위한 Connector 에 등록합니다. server.xml 파일은 아래와 같은 위치에 있으니 참고하십시오.

<Connector port="8443" protocal="HTTP/1.1" maxThreads="150"
    SSLEnabled="true" clientAuth="false" keyAlias="tomcat"
    keystoreFile="F:/Project/ssl/.keystore" keystorePass="changeit"
    scheme="https" secure="ture" sslProtocol="TLS" />

설정이 완료되었다면 Tomcat을 구동하여 "https://localhost:8443/Test/" 로 접속합니다. 그런데 아래 그림과 같이 안전하지 않은 사이트라고 판단을 하여 위험 화면이 나타납니다. 이는 신뢰하는 보안 인증서가 아니기 때문에 아래와 같이 위험 화면이 나타나는 것으로 화면 하단의 "고급" 버튼을 클릭하여 "localhost(안전하지않음)으로 이동" 을 클릭하면 정상적으로 페이지가 출력됩니다. 

 

이러한 위험 페이지가 계속 나타난다면 개발하기 귀찮아 집니다. 그래서 아래와 같이 인증서를 브라우저에 등록하여 위험 페이지가 나오지 않다록 설정할 수 있습니다. 저는 크롬을 기반으로 설명을 하도록 하겠습니다.

 

1. 크롬에서 "chrome://settings/security" 를 입력하여 아래 "인증서 관리"를 클릭합니다.

2. 인증서 팝업창에서 "가져오기"를 선택하여 줍니다.

3. 인증서 가져오기 마법사가 실행되며 다음을 눌러 진행합니다. 이때 파일을 선택하는 화면에서 위에서 만들어준 "tomcat.cer" 파일을 찾아보기하여 선택합니다. 

4. 인증서를 저장하는 부분은 "모든 인증서를 다음 장소에 저장" 선택 후, 인증서 저장장소는 찾아보기로 "신최할 수 있는 루트 인증 기관"을 선택하여 다음으로 진행하고 마법사를 완료합니다. "마침" 버튼을 클릭하면 보안 경고가 나오는데, "예"를 눌러 설치를 마무리 합니다.

 이제 크롬을 재기동 후 "https://localhost:8443/Test/" 로 접속하면 위험페이지 없이 원하는 index.html 페이지가 표시되는 것을 확인 할 수 있습니다.

지금까지 Tomcat 에서 HTTPS 통신을 하는 개발환경을 구성하여 보았습니다. 

728x90
반응형
728x90
반응형

알고리즘 문제를 풀다보면 정렬을 해야하는 경우가 많이 발생합니다. 기본적으로 제공되는 Arrays.sort() 함수가 있지만 이것만으로 문제를 풀기에는 한계가 있습니다. 특히 다중차순을 요하는 문제는 직접 구현하는 것이 빠르고 이해가 쉽습니다.

 

기본적인 정렬 코드

아래는 오름차순, 내림차순, 다중차순의 기본 정렬 구현 코드입니다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Comparator;


class Node implements Comparable<Node>{
	int a;
	int b;
	
	public Node(int a, int b){
		this.a = a;
		this.b = b;
	}

	@Override
	public int compareTo(Node tar) {
		
		// tar 기준으로 tar vs this 중 tar 우선순위가 더 높으면 1
		// tar 기준으로 우선순위가 동등하면 0
		// tar 기준으로 tar vs this 중 tar 우선순위가 더 낮으면 -1
		
		if(tar.a > this.a) return 1;
		if(tar.a < this.a) return -1;
		
		// 첫 수가 우선쉰위가 도등할때 아래 조건을 따른다.
		if (tar.b < this.b) return 1;
		if (tar.b > this.b) return -1;
		
		return 0;
	}
}

public class Sort_ex01 {

	// 정렬
	// 1. 오름차순 
	// 2. 내림차순 
	// 3. 다중차순

	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

	
    public static void main(String[] args) throws IOException {

        Integer[] arr = {5,4,5,4,4,5};
        
        //1. 오름차순
        Arrays.sort(arr);
        
        //2. 내림차순
        Arrays.sort(arr, Comparator.reverseOrder());
        
        //3. 다중차순
        Node[] arrNode = new Node[6];
        arrNode[0] = new Node(5,8);
        arrNode[1] = new Node(4,2);
        arrNode[2] = new Node(5,1);
        arrNode[3] = new Node(4,9);
        arrNode[4] = new Node(4,7);
        arrNode[5] = new Node(5,3);
        
        // 정렬조건
        // 1) 첫번째 수가 큰수 우선
        // 2) 두번째 수가 작은 수 우선        
        Arrays.sort(arrNode);
        
        int a=1;

		br.close();
		bw.close();

    }
}

오름차순, 내림차순은 Arrays.sort() 함수를 이용하여 구현이 간단합니다. 하지만 다중차순의 경우 정렬 조건이 1) 첫번째 수가 큰수, 2) 두번째 수가 작은 수 우선이라고 한다면 위 코드와 같이 class 를 만들어 Comparable 을 이용하여 구현하여 줍니다. 정렬 우선순위는 compareTo() 함수를 오버라이드 하여 구현하는데, tar 기준으로 tar vs this 중 tar 우선순위가 더 높으면 1,  tar 기준으로 우선순위가 동등하면 0,  tar 기준으로 tar vs this 중 tar 우선순위가 더 낮으면 -1 이 중요합니다. 

이러한 방법을 통하여 "숫자와 문자를 다음과 같은 우선순위 조건으로 맞추어 정렬 후 출력" 하는 문제도 해결이 가능합니다. (ex, 1)짝수 우선 2)숫자 오름차순 3)문자 오름차순)

 

정렬은 알고리즘에서 응용을 많이 하는 것으로 방법을 꼭 숙지하여야 합니다.

728x90
반응형
728x90
반응형

플러드 필 알고리즘은 다차원 배열의 어떤 카과 연결된 영역을 찾는 알고리즘 입니다. 그림 프로그램에서 연결된 비슷한 색을 가지는 영역에 "채우기" 도구에 사용되며, 바둑이나 지뢰 찾기 같은 게임에서 어떤 비어 있는 칸을 표시 할 지를 결정할 때에도 사용됩니다.

 

동작과정

  1. 시작하는 칸을 큐에 넣고 방문했다는 표시를 한다.
  2. 큐에 원소를 꺼내어 그 칸에 인접한 칸(ex. 상,하,좌,우)에 대하여 3과 같이 동작한다.
  3. 인접한 칸에 대하여 방문여부를 판단하여 처음 방문했다면 방문 표시를 남기고 큐에 넣는다.
  4. 큐의 모든 원소가 빌 때까지 2의 행동을 반복한다.

시간복잡도

모든 칸이 큐에 1번 들어가는 것이 보장되므로 칸이 N개일 때 시간복잡도는 O(N) 입니다.

참고사이트

https://choijiuen.tistory.com/99
 

플러드 필(Flood Fill) - BFS , DFS

다차원 배열에서 어떤 칸과 연결된 영역을 찾는 알고리즘 그림판에서 색 채우기 명령으로 동일한 색을 전부 바꿔버리는 것과 동일하다. 플러드 필 문제는 BFS/DFS 알고리즘으로 해결할 수 있다. BF

choijiuen.tistory.com

https://ko.wikipedia.org/wiki/%ED%94%8C%EB%9F%AC%EB%93%9C_%ED%95%84
 

플러드 필 - 위키백과, 우리 모두의 백과사전

4방향 재귀적 플러드 필 플러드 필(영어: flood fill) 혹은 시드 필(영어: seed fill)은 다차원 배열의 어떤 칸과 연결된 영역을 찾는 알고리즘이다. 이 알고리즘은 그림 프로그램에서 연결된 비슷한 색

ko.wikipedia.org

기본코드

2차원 배열 (4*4) 에서 2,1 에서 시작하여 모든 배열을 도는데 걸리는 cnt를 알아내는 예제입니다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
import java.util.Queue;

class PNode {
    int y, x;
    PNode(int a, int b)
    {
        y = a;
        x = b;
    }
}

class Main {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

    static int [][]map = new int[4][4];
    static Queue<PNode> q = new LinkedList<PNode>();

    public static void main(String[] args) throws IOException {        

        map[2][1] = 1;
        q.add(new PNode(2, 1));

        int[][] direct = {{-1, 0}, {1, 0}, {0, 1}, {0, -1}};
        int cnt = 0;

        while(!q.isEmpty()) {
            PNode now = q.poll();

            //now에서 다음 퍼지는 길 모두 등록
            for (int t = 0; t<4; t++ ) {
                int ny = now.y + direct[t][0];
                int nx = now.x + direct[t][1];
                if (ny < 0 || nx < 0 || ny >= 4 || nx >= 4) continue;
                if (map[ny][nx] != 0) continue;

                map[ny][nx] = map[now.y][now.x]+ 1;
                if (map[ny][nx] > cnt) cnt = map[ny][nx];

                q.add(new PNode(ny, nx));
            }
        }

        bw.write(cnt + "\n");

        br.close();
        bw.close();
    }
}

실행하여 map 의 변화를 알아보면 처음 map은 (2,1) 에서 시작하기 때문에 아래와 같다.

[0, 0, 0, 0]
[0, 0, 0, 0]
[0, 1, 0, 0]
[0, 0, 0, 0]

전부 완료되었을때 map 은 아래와 같이 변경된다.

[4, 3, 4, 5]
[3, 2, 3, 4]
[2, 1, 2, 3]
[3, 2, 3, 4]

위와 같은 결과로 모든 배열이 채워지는데 마지막 숫자인 5가 결과로 나타난다.

728x90
반응형
728x90
반응형

BufferedReader / Writer 예제

10만개가 넘어가는 Data를 빠른 속도로 입력 / 출력 받기 위해서는 BufferedReader / BufferedWriter 를 사용해야합니다.

 

입력예시
5 3
5 4 3 2 1
1 3
2 4
5 5

출력예시
N : 5
K : 3
numbers : 5 4 3 2 1 
questions : (1, 3) (2, 4) (5, 5) 

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {

	static int[] numbers;
	static int[][] questions;
	static int N;
	
	
	public static void main(String[] args) throws IOException {
		// 파일에 이별된 예제를 사용.. 시험에서는 아래 한줄을 주석 처리
        System.setIn(new FileInputStream("input\\rsq.txt"));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        int K = Integer.parseInt(st.nextToken());
        
        numbers = new int[N+1]; // 0은 사용하지 않으니까 1부터 N까지
        questions = new int [K+1][2];
        
        st = new StringTokenizer(br.readLine());
        for(int i=1; i<=N; i++){
        	numbers[i] = Integer.parseInt(st.nextToken());
        }
        
        
        for(int i=1; i<=K; i++){
        	st = new StringTokenizer(br.readLine());
        	questions[i][0] = Integer.parseInt(st.nextToken());
        	questions[i][1] = Integer.parseInt(st.nextToken());
        }
        
        bw.write("N : " + N + "\n");
        bw.write("K : " + K + "\n");
        bw.write("numbers : ");
        for(int i=1; i<=N; i++){
        	bw.write(numbers[i] + " ");
        }
        bw.write("\n");
        
        bw.write("questions : ");
        for(int i=1; i<=K; i++){
        	bw.write("(" + questions[i][0] + ", " + questions[i][1] + ") ");
        }
        bw.write("\n");
        
        br.close();
        bw.close();
	}
}
728x90
반응형
728x90
반응형

오랫만에 블로그에 글을 남깁니다.
Flex에서 AMF통신을 이용할때 사용하는 RemoteClass 메타데이타 태그를 만들때, 너무 귀찮아서 프로그램으로 만들어 보았습니다. 왜  RemoteClass 메타데이타 태그를 사용해야만 하나...?? 정확한 답은 지돌스타님 블로그 "[ActionScript 3, Flex]되도록이면 직접적인 Object 클래스 사용을 지양해야하는 이유"를 참고 하면 될것 같습니다. 저는 시간적인 것 보다도...코딩을 하면서 Object로 받아서 사용하는것 보다 더 명료하게 사용할수 있기 때문이라고 말하고 싶습니다. 그래야 코딩하기도 편하고, 코딩 속도도 올라가는 느낌이라..;;



[프로그램 사용법]
기본적인 프로그램은 아래와 같습니다. 보시면 알겠지만 사용법은 간단합니다.



우선 RemoteObject로 넘겨 받을 JAVA 클래스 파일이 있다고 전제를 두고 개발을 하였습니다. '*'는 필수 입력입니다. 

 - VO java file :  RemoteObject로 넘겨 받을 JAVA 클래스 파일 
 - AS3 VO file Path : 생성될 VO 클래스 의 위치를 지정
 - AS3 VO file name : 생성될 VO 클래스 의 파일명 지정
 - AS3 VO package : 생성될 VO클래스의 패키지 지정
 - File charSet : "VO java file"의 문자셋 설정 (현재, UTF-8 , EUC-JP 지원)




위와 같이 입력후 [VO Generate] 버튼을 클릭하면 아랫부분의 생성될 VO클래스가 나타납니다.


 
필요한 부분을 수정하시고 [Copy to Clipboard]를 누르면 클립보드에 내용이 복사됩니다. 파일로 만들기를 원하신다면 [Save as File] 을 누르시면 됩니다. 파일은 "AS3 VO file Path"에 지정된 경로에 저장됩니다.

[참고]
1. JAVA파일의 주석은 되도록이면 모두 가져오겠끔 개발했습니다. (함수, 변수의 설명을 가지고 오고 싶었음)
    - "//" 로 시작하며 "*/" 문자가 들어있는 라인 --> 설명 주석으로 생각함
    - 처음 문자가 "*", "/*" 로 시작되는 라인 --> 함수의 설명이나 변수의 설명으로 생각함
2. JAVA파일에서 제외되는 라인
    - serialVersionUID 가 들어있는 라인
    - 라인의 문자길이가 0인  라인
    - "\r"만 존재하는 라인 
3. setter/getter 함수의 설명은 주석부분과 함수부분이 따로따로 되어있습니다. 이부분은 각자 에디터에서 처리 하세요. 지금은 고치기 귀찮네요..;;; ㅡ.ㅡ;;; 



아직은 좀 더 수정을 해야되는 부분이 있습니다. 저도 직접 사용하면서 불편한 부분이나 필요한 부분이 있으면 수정해 다시 이곳에 올리겠습니다.  

부족한 부분이 있으면 댓글로 달아주세요. 그럼..이만..;; 
728x90
반응형
728x90
반응형



한국에서는 잘 사용하지않는 부분이지만, 일본에서는 거의 모든 프로젝트에 들어가는 LDAP ...
처음에는 뭔지 잘 몰랐지만, 조금씩 알것 같은 느낌...

너무 많은 곳에서 LDAP 관련 인증을 이용하여 로그인을 하기 때문에 LDAP에 관련 Java 프로그램을 만들어 보았다.

그럼 LDAP은 뭘까? 아래는 위키에 설명된 것을 발취한 내용이다.

LDAP(Lightweight Directory Access Protocol, 라이트웨이트 디렉터리 액세스 프로토콜)은 TCP/IP 위에서 디렉터리 서비스를 조회하고 수정하는 응용 프로토콜이다.

디렉터리는 논리, 계급 방식 속에서 조직화된, 비슷한 특성을 가진 객체들의 모임이다. 가장 일반적인 예로는 전화 번호부(telephone directory)가 있는데 가나다 순의 일련의 이름을 가지고 있고, 이름마다 전화 번호와 주소가 포함되어 있다. 이러한 기본 설계 때문에 LDAP는 인증을 위한 다른 서비스에 의해 자주 사용된다.

LDAP 디렉터리 트리는 선택된 모델에 따라 다양한 정치적, 지질학적, 조직적 경계를 반영하기도 한다. 오늘날 LDAP의 배치는 최상위 수준의 계급을 구조화하기 위해 도메인 이름 서비스의 이름을 사용하는 경향이 있다. 디렉터리 안에 들어가면 들어갈수록 사람들, 조직, 프린터, 문서, 그룹 등을 대표하는 항목들이 나타난다.

LDAP의 현재 버전은 LDAPv3이다.


쉽게 생각하면 디렉토리 서비스...디렉토리 트리를 이용하여 빠른 검색을 이용한다..뭐 이런것 같음...


java로 구현한 LDAP 디렉토리 삭제
(하위 디렉토리 추가는 관리자 계정으로 로그인을 해야한다.)

위 소스를 실행하면 디렉토리가 삭제된다.

지금까지 LDAP에 관련된 검색, 추가, 삭제, 수정에 관한것을 java를 이용하여 구현 해보았다. 실제로 LDAP을 잘 이용하기 위해서는 좀더 공부를 할 필요하가 있다.



728x90
반응형
728x90
반응형


한국에서는 잘 사용하지않는 부분이지만, 일본에서는 거의 모든 프로젝트에 들어가는 LDAP ...
처음에는 뭔지 잘 몰랐지만, 조금씩 알것 같은 느낌...

너무 많은 곳에서 LDAP 관련 인증을 이용하여 로그인을 하기 때문에 LDAP에 관련 Java 프로그램을 만들어 보았다.

그럼 LDAP은 뭘까? 아래는 위키에 설명된 것을 발취한 내용이다.

LDAP(Lightweight Directory Access Protocol, 라이트웨이트 디렉터리 액세스 프로토콜)은 TCP/IP 위에서 디렉터리 서비스를 조회하고 수정하는 응용 프로토콜이다.

디렉터리는 논리, 계급 방식 속에서 조직화된, 비슷한 특성을 가진 객체들의 모임이다. 가장 일반적인 예로는 전화 번호부(telephone directory)가 있는데 가나다 순의 일련의 이름을 가지고 있고, 이름마다 전화 번호와 주소가 포함되어 있다. 이러한 기본 설계 때문에 LDAP는 인증을 위한 다른 서비스에 의해 자주 사용된다.

LDAP 디렉터리 트리는 선택된 모델에 따라 다양한 정치적, 지질학적, 조직적 경계를 반영하기도 한다. 오늘날 LDAP의 배치는 최상위 수준의 계급을 구조화하기 위해 도메인 이름 서비스의 이름을 사용하는 경향이 있다. 디렉터리 안에 들어가면 들어갈수록 사람들, 조직, 프린터, 문서, 그룹 등을 대표하는 항목들이 나타난다.

LDAP의 현재 버전은 LDAPv3이다.


쉽게 생각하면 디렉토리 서비스...디렉토리 트리를 이용하여 빠른 검색을 이용한다..뭐 이런것 같음...


java로 구현한 LDAP Attribute 수정
(하위 디렉토리 추가는 관리자 계정으로 로그인을 해야한다.)

위 소스를 실행후 검색을 해보면...아래와 같이 변경이 된것을 확인 할수가 있다.



[관련글 바로 가기]

728x90
반응형
728x90
반응형


한국에서는 잘 사용하지않는 부분이지만, 일본에서는 거의 모든 프로젝트에 들어가는 LDAP ...
처음에는 뭔지 잘 몰랐지만, 조금씩 알것 같은 느낌...

너무 많은 곳에서 LDAP 관련 인증을 이용하여 로그인을 하기 때문에 LDAP에 관련 Java 프로그램을 만들어 보았다.

그럼 LDAP은 뭘까? 아래는 위키에 설명된 것을 발취한 내용이다.

LDAP(Lightweight Directory Access Protocol, 라이트웨이트 디렉터리 액세스 프로토콜)은 TCP/IP 위에서 디렉터리 서비스를 조회하고 수정하는 응용 프로토콜이다.

디렉터리는 논리, 계급 방식 속에서 조직화된, 비슷한 특성을 가진 객체들의 모임이다. 가장 일반적인 예로는 전화 번호부(telephone directory)가 있는데 가나다 순의 일련의 이름을 가지고 있고, 이름마다 전화 번호와 주소가 포함되어 있다. 이러한 기본 설계 때문에 LDAP는 인증을 위한 다른 서비스에 의해 자주 사용된다.

LDAP 디렉터리 트리는 선택된 모델에 따라 다양한 정치적, 지질학적, 조직적 경계를 반영하기도 한다. 오늘날 LDAP의 배치는 최상위 수준의 계급을 구조화하기 위해 도메인 이름 서비스의 이름을 사용하는 경향이 있다. 디렉터리 안에 들어가면 들어갈수록 사람들, 조직, 프린터, 문서, 그룹 등을 대표하는 항목들이 나타난다.

LDAP의 현재 버전은 LDAPv3이다.


쉽게 생각하면 디렉토리 서비스...디렉토리 트리를 이용하여 빠른 검색을 이용한다..뭐 이런것 같음...


java로 구현한 LDAP 디렉토리 추가
(하위 디렉토리 추가는 관리자 계정으로 로그인을 해야한다.)

실행결과 LDAPAddSubDir success. 가 출력된다. 앞에서 만든 검색소스를 이용하여 검색을 하면 ...
와 같은 결과가 나온다.



728x90
반응형
728x90
반응형

한국에서는 잘 사용하지않는 부분이지만, 일본에서는 거의 모든 프로젝트에 들어가는 LDAP ...
처음에는 뭔지 잘 몰랐지만, 조금씩 알것 같은 느낌...

너무 많은 곳에서 LDAP 관련 인증을 이용하여 로그인을 하기 때문에 LDAP에 관련 Java 프로그램을 만들어 보았다.

그럼 LDAP은 뭘까? 아래는 위키에 설명된 것을 발취한 내용이다.

LDAP(Lightweight Directory Access Protocol, 라이트웨이트 디렉터리 액세스 프로토콜)은 TCP/IP 위에서 디렉터리 서비스를 조회하고 수정하는 응용 프로토콜이다.

디렉터리는 논리, 계급 방식 속에서 조직화된, 비슷한 특성을 가진 객체들의 모임이다. 가장 일반적인 예로는 전화 번호부(telephone directory)가 있는데 가나다 순의 일련의 이름을 가지고 있고, 이름마다 전화 번호와 주소가 포함되어 있다. 이러한 기본 설계 때문에 LDAP는 인증을 위한 다른 서비스에 의해 자주 사용된다.

LDAP 디렉터리 트리는 선택된 모델에 따라 다양한 정치적, 지질학적, 조직적 경계를 반영하기도 한다. 오늘날 LDAP의 배치는 최상위 수준의 계급을 구조화하기 위해 도메인 이름 서비스의 이름을 사용하는 경향이 있다. 디렉터리 안에 들어가면 들어갈수록 사람들, 조직, 프린터, 문서, 그룹 등을 대표하는 항목들이 나타난다.

LDAP의 현재 버전은 LDAPv3이다.


쉽게 생각하면 디렉토리 서비스...디렉토리 트리를 이용하여 빠른 검색을 이용한다..뭐 이런것 같음...


아래는 내가 사용한 LDAP 구조이다.

위부분에서 중요한 부분은 바로 dn이다. 바로 이부분...(예를들어서 썼음..)

java를 이용한 검색 소스

실행 결과

마지막 "Errors listing attributes: java.lang.NullPointerException"부분은 아직 지정되지 않은telephonenumber Attribute를 참조하려고 했는데 실제, telephonenumber부분이 아직 없기 때문에 나오는 것이다.



728x90
반응형

+ Recent posts