데이터베이스 2017. 2. 2. 00:43

PIVOT과 UNPIVOT


출력 데이터를 열 --> 행으로 또는 행 --> 열로 변환하기 위해 오라클 11g 이전 버전에서는 decode(CASE구분)을 사용해 해결하였으나, SQL의 가독성 및 성능에 문제점이 있었습니다. 그래서 오라클 11g 에서는 PIVOT/UNPIVOT이라는 기능을 지원하여 보다 쉽게 데이터를 가공할 수 있게 되었습니다. 


사용 사례를 보면서 PIVOT과 UNPIVOT의 기능을 알아보겠습니다.


1. PIVOT(열 --> 행)


오라클에 기본적으로 설치된 SCOTT계정의 "SALGRADE" 라는 테이블을 사용해 설명하겠습니다.

PIVOT 기능을 적용할 데이터는 아래 그림과 같습니다.


   

[PIVOT 적용전 데이터]


PIVOT 기능을 적용하여 열로(LOSAL 값) 된 데이터를 행으로 변환

SYNTAX

PIVOT (집계함수([행의로 변환할 칼럼]) FOR [칼럼명으로 사용될 칼럼] IN ( 칼럼명으로 사용될 칼럼의 값, ...))

1
2
3
4
5
WITH PIVOT_TEST AS (SELECT LOSAL, GRADE
                      FROM SALGRADE)
SELECT *
  FROM PIVOT_TEST
  PIVOT (SUM(LOSAL) FOR GRADE IN (1 AS G1,2 AS G2,3 AS G3,4 AS G4,5 AS G5))
cs

 


2. UNPIVOT(행 --> 열)

위에서 PIVOT 기능을 이용해 열 --> 행으로 변환된 데이터를 UNPIVOT 기능을 사용해 원래되로 다시 변환해 보겠습니다.



1
2
3
4
5
6
7
8
9
10
11
WITH PIVOT_TEST AS (
SELECT LOSAL
     , GRADE
  FROM SALGRADE )
, UNPIVOT_TEST AS ( 
SELECT *
  FROM PIVOT_TEST
  PIVOT ( SUM(LOSAL) FOR GRADE IN (1 AS G1,2 AS G2,3 AS G3,4 AS G4,5 AS G5)))
SELECT *
  FROM UNPIVOT_TEST
UNPIVOT ( LOSAL FOR GRADE IN ( G1 AS 1, G2 AS 2, G3 AS 3, G4 AS 4, G5 AS 5 ))
cs


이론적으로 좀 더 깊게 알고 싶으시면 여기를 참조하세요!

'데이터베이스' 카테고리의 다른 글

오라클 권한 조회  (0) 2017.06.28
오라클 계정과 권한  (0) 2017.06.23
오라클 TABLESPACE와 DATAFILE  (0) 2017.06.16
TIMESTAMP 연산  (0) 2017.05.11
오라클의 동적 PL SQL 작성 - EXECUTE IMMEDIATE  (0) 2017.01.24
posted by 생각퍼즐
:
프로그래밍 2017. 2. 1. 00:28

개발환경 구성(Eclipse + JDK + Tomcat)

IDE : Eclipse Neon

JDK : 1.8

Tomcat : 8.0


웹 개발 입문자도 천천히 따라할 수 있도록 개발환경 구성 및 설정 부터 웹 개발에 필요한 많은 기능(지식)이 포함된 공지사항 기능구현까지 몇 회에 걸쳐 작성하도록 하겠습니다.


그럼 첫 단계로 [웹 환경의 이해1] 과 [웹 환경의 이해2] 글에서 집중 설명된

Application Tier에 대한 개발환경 구성을 시작할까요?


1. 환경구성에 필요한 SW 다운로드


◈ Eclipse 다운로드(SW 개발을 쉽게 할 수 있도록 도와주는 통합개발환경 툴)

  • 이클립스 사이트 이동하여 최신버전의 이클립스를 다운로드 합니다.

  • zip파일 및 exe(설치형) 파일 형식 중 아무거나 다운로드 하시면 되요! 참고로 저는 zip파일 형식으로 다운로 할게요~

  • 설치할 컴퓨터의 OS와 비트를 확인 후 다운로드 하세요~

  • 다른 버전을 다운로드 받으려면 MORE DOWNLOADS 메뉴를 이용하시면 됩니다.



JDK 다운로드(JAVA로 SW를 개발하기 위한 JVM(플랫폼 독립성 확보), JRE(실행환경), 각종 API 등 제공)

  • JDK 다운로드 사이트 이동하여 JDK를 다운로드 합니다.(이클립스와 동일하게 자신의 OS에 맞는 버전을 다운로드~)

  • 참고로 이클립스 네온을 사용하려면 자바 8버전 이상이 필요합니다.



마우스 스크롤을 내리면 Java Archive라는 내용이 보이고 "DOWNLOAD"라는 버튼을 클릭하면 다른 버전의 JDK도 다운로드 받을 수 있습니다.




Apache Tomcat 다운로드(Web Server, WAS(Servlet 컨테이너) 역할)

  • Tomcat 사이트 이동하여 원하는 버전의 Tomcat을 다운로드 합니다.

  • 저는 8.0버전을 다운로드 하였습니다.

  • zip파일 및 exe(설치형) 파일 둘 중 아무거나 선택하시면 됩니다. 저는 조금은 개발자 스러운 zip파일 형식으로^^



2. 개발환경 구성(압출풀기 및 설치)

  • 개발환경 구성을 위한 폴더를 하나 생성 합니다.
  • 저는 devdic이라는 폴더명으로 만들었습니다.
  • 개발에 필요한 SW를 한곳에 통합함으로써 관리 및 개발환경 공유가 쉬워지는 장점이 있습니다.
  • 아래의 그림 [개발환경 폴더 구성]처럼 하는 것이 목표입니다.

[개발환경 폴더 구성]


Eclipse 압축풀기

  • 새로만든 폴더(devdic) 아래에서 압축을 풀어줍니다. 
  • 그러면, devdic\eclipse\~의 형태로 구성됩니다.


JDK 설치

  • 다운로드 받은" jdk-8u121-windows-x64.exe" 파일을 실행합니다.
  • 아래의 그림[JDK 설치] 처럼 설치 PATH를 변경해 주세요!


[JDK 설치]


Apache Tomcat 압출풀기

  • 새로만든 폴더(devdic)의 tomcat폴더 아래로 압축을 풀어줍니다. 
  • 그러면, devdic\tomcat\~의 형태로 구성됩니다.

Eclipse workspace 폴더 생성
devdic\eclipse\eclipse.exe 파일을 실행하면, 아래의 그림처럼 이클립스의 workspace 디렉토리를 설정하는 창이 띄워집니다.
Browser 버튼을 클릭하여 workspace 디렉토리를 변경합니다.


아래의 그림처럼 devdic 폴더를 찾아서 선택한 후 --> "새 폴더 만드기(A)" 버튼을 클릭 --> 폴더명을 변경(저는 work로 정의)


이제 우리가 원하는 devdic\work의 경로로 지정되었습니다.

지금 설정한 경로를 기본경로로 사용하고 다시 물을건지에 대한 옵션을 선택한 후 "OK" 버튼을 클릭합니다.



아래와 같은 그림이 나오면 정상적으로 eclipse가 구동이 된 것입니다.



웹 프로그램 개발을 위한 Application Layer의 필수 SW는 설치가 되었으니 Eclipse 플러그인 설치 및 환경설정/연동 단계로 넘어 갈까요? 

posted by 생각퍼즐
:
보안 2017. 1. 26. 03:34

SW의 안전한 배포를 위한 코드 난독화 기술을 알아볼까요?


 코드 난독화란 치환 및 자리바꿈 등의 기법을 사용해 소스코드를 알아보기 어렵게하는 만드는 기술입니다.

JAVA를 다루는 개발자라면 난독화 기술을 알아둘 필요성이 있습니다. 자바는 JVM(JAVA Virtural Machine)위에서 실행되는 바이트코드 형태로 컴파일되며 컴파일된 코드에는 자바 소스코드 정보가 그대로 포함되어 있어 역컴파일(Decompile)을 쉽게 할 수 있습니다.



난독화가 관심을 받는 이유를 정리해보면

▶ 역공학 방지

Decompiler를 통한 소스코드 분석 방지. 즉, 실행 중인 프로그램은 반드시 메모리에 적재되어야 하고 메모리에 적재된 코드를 Decompiler를 통해 원래의 소스코드로 변환이 가능하다는 이야기죠. 하지만 소스코드가 난독화가 되어있으면 디컴파일된 소스코드를 제대로 분석하기는 어려워요~~ 그래서 솔루션을 판매하는 기업은 핵심 알고리즘 및 라이센스 부분은 반드시 난독화를 적용 후에 판매해야 돈을 벌 수 있을겁니다.

 보안강화

외부 공격 및 통계적 공격에 의한 코드 조작이 어려워 집니다.



난독화는 적용 대상에 따라 소스코드 난독화와 바이너리 난독화로 나누어집니다.

소스코드 난독화는 java, c/c++과 같은 소스코드를 문자열 치환, 자리바꿈 등의 기법을 사용해 소스코드를 읽기 어렵게하는 것이고, 바이너리 난독화는 exe, apk와 같은 실행파일이 대상이며 컴파일 후에 생성된 바이너리의 심볼 정보를 제게 및 변형하여 역공학을 통해 코드를 분석하기 어렵게 만드는 기술입니다.


난독화 적용기법

- 배치 난독화

프로그램에 큰 영향을 끼치지 않는 세부적인 요소들을 변화시키거나 제거하여서, 복원된 프로그램의 내용을 부분적으로 훼손시킴으로써 난독화를 한다. 변수 및 식별자의 이름 변조, 주석제거가 대표적인 방법이다.

- 데이터 난독화

데이터를 담는 변수 str을 str1, str2, str3로 나누거나 합치는 방법을 이용하여 난독화 수행

- 제어난독화

프로그램의 실행순서 및 흐름을 변경하는 것으로 프로그램의 문장이 묶이는 단위를 조절함으로서 난독화 한다

- 방지 난독화

알려진 Decompiler의 역난독화 기법을 봉쇄하여 디컴파일 수행 시 프로그램이 충돌하게 만드는 방법이다. 


소스코드 난독화 적용 시 고려사항

- 난독화에 투입되는 비용과 효과를 분석하여 난독화 범위 및 수준 결정

- 높은 수준의 난독화는 시스템에 부하를 발생시켜 성능이 저하됨

- 난독화된 코드는 보안장비(IDS 등)를 우회할 수 있어 보안관리자 입장에서는 눈을 크게 뜨고 악성코드를 찾아야 겠죠~




'보안' 카테고리의 다른 글

SSL(TLS)란?  (0) 2017.04.13
Ransomware(랜섬웨어)  (1) 2017.01.25
posted by 생각퍼즐
:
보안 2017. 1. 25. 01:54

점점 악랄해지는 랜섬웨어


지피지기면 백전불패라고 랜섬웨어가 무엇인지 알아보자!


 '몸값'을 뜻하는 ransom과 '제품'을 뜻하는 ware의 합성어로 사용자PC에 Drive By Download 형태로 악성 소프트웨어가 배포되어 개인정보 및 중요파일을 암호화는 악성 소프트웨어(멀웨어)를 지칭. 즉, 암호화된 개인정보 및 중요파일을 인질로 삼아 돈을 요구하는 공격기법이다. 매년 10억$가 넘는 돈이 몸값으로 지불되는 큰 시장으로 성장(?) 했습니다.


최근에는 돈을 지불하더라도 데이터를 복호화해주지 않는 악랄한 랜섬웨어도 등장했습니다.




잠깐 악성코드(Malicious Code)에 대해서 알아보고 넘어가죠~

악성코드란 악의적인 행위를 하기위해 공격자가 만든 프로그램 및 구성요소를 총하는 단어로 해외에서는 악성 프로그램(Malicious Software), 줄여서 Malware라고 부릅니다. 

악성코드(Malicious Code) = 악성 프로그램(Malicious Software) = Malware


악성 프로그램(멀웨어) 종류는 어떤것이 있을까요?

1. Virus(바이러스)

가장 친숙한 단어죠!

정상파일을 감염 시키는 형태의 악성코드로 감염대상이 없을 때는 실행이 안되며, 감염파일에서 다른 정상 파일로자기복제가 가능하고 N/W를 통한 전파는 안

2. Worm(웜)

바이러스와 다르게 감염대상이 존재하지 않아도 스스로 실행이 되며 자기복제 및 N/W를 통한 전파 가능

3. Trojan(트로이목마)

우리가 알고있는 트로이목마 이야기처럼 정상파일로 가장하거나 정상파일 안에 삽입되어 실행되며 사용자의 정보를 공격자에게 유출

4. Adware

광고를 계속해서 띄워서 사용자를 불편하게 하는 악성코드로 정보유출은 하지 않는다.

5. Malicious Bot 

악성 프로그램이 스스로 실행을 못하고 공격자의 원격제어로 실행, 주로 취약점, 백도어(Back Door) 등을 이용해 전파

6. Back Door 

시스템 관리자가 고의적으로 만들어놓은 시스템의 보안 헛점으로 사용자 인증 절차를 거치지 않고 시스템에 접근할 수 있도록 응용프로그램 또는 운영체제에 삽입된 프로그램. 그래서 공격자는 다음 침입을 위해 관리자(사용자)가 모르는 백도어를 만들어 놓고 빠져나가죠~~


랜섬웨어로 다시 돌아와서 램섬웨어의 감염경로를 알아보죠~


 방법

감염경로 

내용 

 Spam

 이메일의 첨부파일

악성코드가 이메일의 첨부파일 형태로 전송

 Social Engineering

 사회적 친분 관계 위장

친분관계를 이용한 악성 프로그램 설치 유도

 Drive By Download

 위·변조 웹 사이트

잘 알려진 웹 브라우저 또는 플러그인의 보안 취약  점을 통해 웹 사이트에 접속만으로 사용자PC에 악성 프로그램 설치

 Malvertising 스파이웨어 

온라인 광고에 악성 프로그램을 심어서 공격



그러면 랜섬웨어에 감염되면 어떤 현상이 벌어지죠?

해커가 아래의 [그림1]처럼 아주 친절하게(?) 설명해줍니다ㅜ.ㅜ

당신의 컴퓨터가 잠겼으니 돈을 지불하면 해결해주겠다~



[그림1]


대부분의 사이버 공격이 그렇듯이 랜섬웨어도 마찬가지로 감염되면 완전한 복구(해결)이 힘듭니다.

 - CryptoLocker 같은 경우 비대칭키 암호화 방식(RSA-2048)을 사용하여 암호화한 공격자의 개인키가 없으면 복보화 불가능  


[그림1]과 같은 화면과 마주하지 싫으시다면 다음과 같은 방법으로 예방하세요~~

1. 백업 : 중요파일(사진, 동영상, 문서 등)을 미리 외장하드나 구글 드라이브 등에 백업한다.

2. 이메일 : 확인되지 않은 이메일의 링크 클릭, 첨부파일 다운로드를 하지 않는다.

3. 페치 : 귀찮더라도 OS 및 백신의 최신 보안 페치 업데이트

4. 브라우저 설정 : 무분별한 다운로드 방지를 위한 설정

5. Safe URL : 신뢰성있는 안전한 사이트 접속(도박 및 성인 사이트 접속 자제)


위의 예방방법을 보시면 알겠지만 기술적 접근보다는 보안에 대한 개인의 관심과 노력이 중요합니다.

'보안' 카테고리의 다른 글

SSL(TLS)란?  (0) 2017.04.13
코드 난독화 (Obfuscation)  (0) 2017.01.26
posted by 생각퍼즐
:
데이터베이스 2017. 1. 24. 02:11


PL SQL 작성 시 동적으로 DDL구문  또는 SELECT/INSERT/UPDATE/DELETE 구문을 수행해야 할 때가 있다.

이때 유용하게 사용하는 것이 EXECUTE IMMEDIATE 문법이다.


SCOTT 계정의 테이블들의 건수를 TBL_CNT_LIST라는 테이블에 INSERT하는 예시로 EXECUTE IMMEDIATE 구문을 이해해보자!


1. SCOTT 계정으로 생성된 테이블들의 레코드 건수 정보를 INSERT할 TBL_CNT_LIST 테이블 생성


1
2
3
4
CREATE TABLE TBL_CNT_LIST(
TBL_NM      VARCHAR2(30),
CNT         NUMBER(10)
);
cs

2. SCOTT계정의 테이블 목록으로 동적쿼리를 생성
   - 예시가 심플하여 PL SQL에 짧지만 DDL 및 DML 구문을 활용하여 복잡한 업무를 처리할 수 있다. 
   - 필요하다면 위의 TBL_CNT_LIST 테이블도 PL SQL 구문안에서 처리할 수 도 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DECLARE
BEGIN
    -- 테이블 건수 정보 테이블의 데이터 삭제
    DELETE FROM TBL_CNT_LIST;
    FOR X IN ( -- SCOTT 계정의 테이블 목록을 활용하여 INSERT 구문을 동적으로 생성한다.
                SELECT 'INSERT INTO TBL_CNT_LIST SELECT ' || CHR(39|| T.TABLE_NAME || CHR(39|| ' AS TBL_NM, COUNT(*) AS CNT FROM ' || T.TABLE_NAME AS INS_SQL
                  FROM USER_TABLES T
                 WHERE 1=1
    )
    LOOP
        -- EXECUTE IMMEDIATE 구문을 사용하여 INSERT 구문 수행
        EXECUTE IMMEDIATE X.INS_SQL;
    END LOOP;
    COMMIT;
END;
/
cs

3. 결과 보기

1
2
3
SELECT *
  FROM TBL_CNT_LIST T
 ORDER BY T.TBL_NM
cs




'데이터베이스' 카테고리의 다른 글

오라클 권한 조회  (0) 2017.06.28
오라클 계정과 권한  (0) 2017.06.23
오라클 TABLESPACE와 DATAFILE  (0) 2017.06.16
TIMESTAMP 연산  (0) 2017.05.11
오라클 - PIVOT과 UNPIVOT  (0) 2017.02.02
posted by 생각퍼즐
:
Useful/web Site 2017. 1. 20. 16:30


블로그에 프로그래밍 언어(JAVA, HTML 등)를 넣으면 일반 텍스트로 인식이 되어 아래의 소스코드 처럼 가독성이 떨어지죠!


public void initVariables(){

firstPageLabel    = "<a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \" class=\"btn\"><img src=\"" + servletContext.getContextPath() +  "/resources/img/page/btn_page_first.gif\" alt=\"처음\"   border=\"0\"/></a>&#160;";

        previousPageLabel = "<a href=\"?pageIndex={1}\" onclick=\"{0}({1});return false; \" class=\"prev btn\"><img src=\"" + servletContext.getContextPath() +  "/resources/img/page/btn_page_prev.gif\"    alt=\"이전\"   border=\"0\"/></a>&#160;";

}


이런 문제를 해결하기 위한 좋은 사이트가 있어, 소개해봅니다~~


Color Scripter 사이트로 이동

회원가입 및 로그인 이런거 없습니다~ 그냥 바로 사용하시면 됩니다.(주인장 서비스 마인드 좋네~~~)


1. [그림1]의 상단왼쪽에서 언어를 선택합니다. 저 같은 경우 JAVA로 한 번 해보았어요~


[그림1]


2. 이제 [그림2]처럼 블로그에 넣을 소스코드를 붙여넣기 합니다.

   짜~잔! 이클립스 등 IDE 화면에서 보는것 처럼 예쁘게 보이죠^^  붙여넣기 후 편집도 가능합니다.


[그림2]


3. 스타일도 한 번 바꿔 볼까요

   아래의 [그림3]의 스타일패키지를 클릭하면 3가지 스타일 중에서 선택할 수 있어요!

   저는 제일 화려해 보이는 "서브라임 블랙"을 선택했어요~

   세부설정에서 글꼴, 줄간격 등을 조정할 수도 있어요(그냥 기본설정으로 써도 괜찮네요^^)

[그림3]


4. 자신의 블로그로 예쁘게 작성된 소스코드를 가져오는 방법은 [그림4]의 오른쪽 하단에 있는 "클립보드에 복사" 버튼을 꾸~욱 눌러주세요!

   



[그림4]


5. 그리고 자신의 블로그에 붙여넣기 하면 끝~ 간단하죠!

이제 블로그에 소스코드를 넣게위해 고생하지 마시고 Color Scripter를 사용하세요!!!


posted by 생각퍼즐
:
아키텍처 2017. 1. 18. 01:20

Application Layer 집중탐구


주요구성 요소

  • Web Server : 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 정적 웹 페이지를 반환하는 SW/HW를 총칭

  • WAS(Web Application Server) : Java EE 명세를 만족하는 JAVA 구현체로 크게 두 가지로 구분할 수 있다. Java EE 명세를 대부분 지원하고, 다양한 형태의 모듈로 배포가 가능한 고가의 WAS와 웹 모듈의 배포만 가능한 경량 WAS 또는 서블릿/JSP 컨테이너다. 경량 WAS의 대표적인 예로 Tomcat이 있다.


※ Java EE 주요 명세(Specification)를 잠깐 보고 넘어가자!

  • Servlet : HTTP를 사용해 JAVA로 웹 서비스를 제공하기 위한 표준

  • JSP(Java Server Pages): JAVA 코드에 HTML 태그를 삽입하는 Servlet 방식의 문제점을 개선하기 위해 HTML태그에 Java 코드를 삽입할 수 있는 표준으로 JSP가 처음 실행될 때 Servlet/JSP 컨테이너가 JSP를 Servlet으로 컴파일시켜서 내부적으로는 Servlet으로 동작합니다

  • EJB(Enterprise Java Beans) : Java에서 제공하는 분산 컴포넌트 기술로 비즈니스 로직이나 데이터, 메시지를 처리할 수 있습니다

  • Remote Method Invocation(RMI): 프록시를 써서 원격에 있는 Java 객체의 메소드를 실행시키기 위한기술입니다

  • Java Naming Directory Interface (JNDI): 자바 기술로 만들어진 객체에 이름을 붙여 찾을 수 있도록 단일한인터페이스를 제공

  • Java Database Connector(JDBC): 여러 종류의 데이터베이스 시스템에 접근하는 단일한 인터페이스를 제공합니다. 각각의 데이터베이스에 맞는 JDBC 드라이버가 있어야 합니다

  • Java Connector Architecture(JCA): 이기종 플랫폼을 통합할 수 있도록 플랫폼 독립적인 인터페이스를 제공합니다

  • Java Message Service (JMS): 여러 가지 메시징 시스템에 대한 플랫폼 독립적인 인터페이스를 제공합니다


경량 WAS의 핵심 기술 서블릿과 서블릿 컨테이너

▶ Servlet(서블릿)

  • JAVA로 웹 서비스를 구현하기 위한 SUN사의 표준 스펙

  • 독립적으로 실행되지 않으므로 main 메소드가 존재하지 않는다

  • 서블릿 컨테이너에 의해 생성(init), 호출(service), 소멸(destory) 즉, 서블릿 컨테이너가 서블릿의 상태를 변경하면서 서블릿 인터페이스에 정의된 각 메소드를 호출

▶ 서블릿 컨테이너

  • Client의  HTTP 요청을 받고 분석하여 Servlet을 실행시키는 역할을 수행

  • 네트워크 통신, 서블릿의 생명주기 관리, 스레드 기반의 병렬처리



웹 애플리케이션과 배치(Deployment)


웹 애플리케이션

일반적으로 WEB-INF 디렉토리를 가지며, 최상위 디렉토리는 해당 웹 컨텍스트의 최상위 문서 루트가 되고, WEB-INF 디렉토리 아래 web.xml에 서블릿 설정 파일이 존재하며, 독립적인 클래스 로더를 공유하는 웹 프로그램의 모임


배치(Deployment)

위에서도 설명했지만 배치(Deploy)는 웹 애플리케이션을 서블릿 컨테이너가 인식할 수 있도록 컨테이너 내부로 끌어들이는 과정을 말한다.


위에서 배운 지식을 활용하여 HTTP요청이 Servlet에 전달되는 과정을 보면


▶ Servlet 상속구조 관점에서 HTTP 요청 처리과정


[그림1]


Client 호출 URL 분석

① 서버와 통신을 위한 Protocol 선언(http, https, ftp )

HOST 정보(목적지 IP주소(도메인))

N/W 서비스나 특정 프로세스 식별을 위한 논리 단위

④ 컨텍스트명(서블릿 컨테이너에 배치된 웹 애플리케이션명)

⑤ 서블릿 매핑 URL

⑥ 쿼리 스트링(Client가 입력 또는 선택한 정보)


Servlet 상속구조 관점에서 HTTP 요청 처리과정

① 서블릿 컨테이너는 먼저 Client의 HTTP 요청 URL을 해석하여/testServlet이란 컨텍스명으로 매핑된 웹 애플리케이션을 찾습니다그리고 Servlet에게 넘겨줄 HttpServletRequestHttpServletResponse 객체를 생성합니다.

② 웹 애플리케이션 하위 디렉토리의 WEB-INF/web.xml을 참조하여 url-patter에 일치하는 servlet-name servlet-clas 찾습니다.

 서블릿 관리자에게 해당 서블릿 클래스명을 넘겨주면 서블릿 관리자는 해당 서블릿의 인스턴스를 캐시에서 찾아

service(ServletRequestServeltResponse) 메서드를 호출한다캐시에서 없을 경우 인스턴스를 생성하고 캐시에 저장


web.xml

1
2
3
4
5
6
7
8
9
10
web.xml 파일의 서블릿 설정 부분
<servlet>
   <servlet-name>myServlet</servlet-name>
   <servlet-class>MyServlet</servlet-class>
</servlet>
<servlet-mapping>
   <servlet-name>myServlet</servlet-name>
   <url-pattern>myServlet.do</url-pattern>
</servlet-mapping>
 

c


▶ 웹 애플리케이션 구조 관점에서 HTTP 요청 처리과정


[그림2]


'아키텍처' 카테고리의 다른 글

소프트웨어 아키텍처 평가기법  (0) 2017.04.14
웹 환경의 이해(1/2)  (0) 2017.01.18
posted by 생각퍼즐
:
아키텍처 2017. 1. 18. 00:44

Web 환경의 이해


Web Framework(Struts, spring 등)가 대중화 되면서 SW의 생산성은 향상되었지만, 웹 서비스를 위해 1997년 SUN에서 제안한 Servlet, Servlet을 배치(Deploy) 및 실행하는 Servlet Container 즉, 웹 환경에 대한 이해의 필요성은 점점 줄어들어 졌습니다.


웹 프레임워크에서 제공하는 기능은 서블릿 컨테이너 위에서 동작하는 서블릿, 필터, 리스너 등을 조합하여 구현한 것이며

웹 애플리케이션은 결국 서블릿 컨테이너 위에서 동작하므로, 서블릿 컨테이너에 대한 이해가 웹 환경에서 가장 중요한 부분입니다.


기본에 충실하다면 빠르게 변해가는 IT(Web) 환경을 따라갈 수 있을거라는 바람으로 웹 환경에 대해 정리해봅니다. 그리고 웹 프로그래밍을 처음 시작하는 분들에게 유익한 정보가 되었으면 합니다.


Web 환경의 기본 아키텍처(3-Tier)

그림[3-Tier 아키텍처]과 같이 Web은 3-Tier 구조를 기본으로 합니다. message를 주고 받기위한 Layer가 3개라는 의미입니다. 또는 message를 주고 받기위한 Network node가 3개라 이해하셔도 될 것 같습니다. 모든 요청 및 응답 메시지는 반드시 Application Layer(Middleware)를 거쳐 가도록 설계되어 있어 대부분의 환경설정은 Application Layer에서 이루어집니다.


  • Middleware : 송/수신자 사이에서 메시지를 전달하는 중계자로(Broker) 데이터 포맷 변환, 로드 밸런싱, QoS(Quality Of Service)등을 수행하여 플랫폼의 독립성을 지원하는 소프트웨어

  • MVC(Model-View-Controller) : MVC 아키텍처는 View의 변화에 대한 Model의 영향도를 줄이기위한 SW 아키텍처 스타일로 그림[3-Tier 아키텍처]의 Application Layer에서 구현됩니다.




[3-Tier 아키텍처]


요청에서 응답까지의 흐름을 간단하게 설명하고 각 Layer에 대한 설명으로 넘어가겠습니다.

  1. 사용자가 Web Browser에서 요청 URL을 입력하거나 이벤트(조회 버튼 클릭 등)를 발생

  2. Web Browser는 요청 Message를 HTTP 메시지로 변환하여 Web Server에게 전달

  3. Web Server는 요청을 수락하고 HTTP 요청 URL을 분석하여 정적 페이지(HTML, Javascript, CSS 등) 요청이면 Web Server 자신이 처리를 하고 Business Logic 처리가 필요하면 WAS에게 다시 전달

  4. WAS는 Database에 접속하여 데이터 Insert, Update, Delete, Select 작업을 완료 후 요청과 같은 Chanel로 처리결과(응답 메시지)를 Web Browser에게 돌려준다

  5. Web Browser는 응답 메시지를 파싱 및 렌더링하여 사용자에게 보여준다.


각각의 Tier들은 무슨 일을 할까?

▶ Client Tier

HTTP를 사용하는 대표적인 User Agent로 사용자 PC에 설치된 Internet Explorer, Chrome, Fire Fox 등의 Web Browser를 말합니다.

HTTP를 이용해 웹 페이지를 가져오거나 Web Server에게 HTTP 요청 URL(Message)을 전송하는 역할을 합니다.

브라우저의 구조 및 동작과정 등의 자세한 내용은 http://d2.naver.com/helloworld/59361 를 참조하세요!


Application Tier

서비스 대상 SW가 배포(Deploy)되어 실행되는 Tier로 Client의 요청 Message를 처리하여 다시 Client에게 전달하는 역할을 수행한다. 웹 환경 이해의 핵심 Tier로 자세한 설명은 웹 환경의 이해(2/2)를 참조하세요!


Database Tier
업무 처리 시 생성 및 수집되는 데이터를 보관하고 있는 Tier로 빅데이터 시스템을 제외하면 대부분의 시스템에서 RDBMS를 사용하고 있습니다. Application Tier와의 인터페이스를 위해 JAVA의 경우 JDBC(JAVA Database Connectivity) API를 사용합니다. JDBC API를 사용하기 위해 설치된 RDBMS의 종류에 따라 JDBC Driver를 다운로드하여 웹 애플리케이션  폴더 하위에 (WEB-INF/lib 폴더 아래)에 위치해야 한다. 서블릿 컨테이너 기동 시 메모리에 로딩하되기위한 클래스 패스 내에 위치해야 합니다.


'아키텍처' 카테고리의 다른 글

소프트웨어 아키텍처 평가기법  (0) 2017.04.14
웹 환경의 이해(2/2)  (0) 2017.01.18
posted by 생각퍼즐
:
물음표 & 느낌표 2017. 1. 17. 00:12

IT분야(SI/SM, DB, 컨설팅)를 8년째 경험하면서 느낀점을 정리해봅니다. 

그리고 SI/SM분야로 취업을 고려하는 분들에게 도움이 되고자 합니다.


먼저 IT와 관련된 기업들의 종류를 알아볼까요...


기업구분 

설명 

대표기업 

 컨설팅

민간 및 공공기관의 비전 및 목표를 달성을 위한 IT 중장기 계획을 세우는ISP 및 업무 프로세스를 새롭게하는 BPR 등을 주로 수행. (감리도 포함)

IBM, 액센츄어, 기타 국내기업 

 SI/SM

민간 및 공공기관의 업무 프로세스를 정보기술을 사용하여 자동화 시스템으로 개발

삼성 SDS, LG CNS, SK C&C, 대우정보통신 등 

 DB

시스템을 통해 생산되는 데이터를 관리, 설계 및 성능개선

엔코아, 비투엔 등

 서비스

포털, e-커머스, 쇼핑몰 등 정보기술을 사용하여 서비스를 제공 

네이버, 다음(카카오), 쿠팡, 11번가 등

 게임

PC 및 Mobile에서 즐길 수 있는 다양한 게임을 기획, 개발, 호스팅 

넥슨, NC 소프트, 넷마블 등

 솔루션

위의 기업들이 필요로하는 SW/HW를 제작

오라클, 티맥스, 제니퍼 소프트, 투비소프트 등 

 보안

고객 사이드 모니터링(관제) 및 보안전문 SW/HW 제작

안랩, 알약 등 


너무나 주관적인 나의 생각...

물론 요즈음, 빅데이터, 인공지능(딥러닝, 머신러닝) 등의 분야가 핫 이슈지만 취업 시장이 그렇게 넓지 않은것 같습니다.

그래서 자신의 적성은 명확히 모르겠지만, IT분야로 취업을 원하는 사람들에게는 SI/SM 분야를 추천합니다. 그 이유는....

1. 시장규모가 가장 크고, 진입장벽이 낮은 편입니다(조금 씁쓸한 얘기지만…).

2. 시스템 구축 및 유지보수 시 IT분야와 관련된 거의 모든것을 경험할 수 있어 향후 자신의 진로 및 적성을 찾기 수월하다.

   - 개발언어 및 웹 환경의 이해 : JAVA, .NET/C#, C/C++, Unix/Linux 등의 서버 및 웹 환경

         - 업무지식 : 분석/설계 및 컨설팅 시 필요

   - DB : SQL/PL SQL, 데이터 모델 이해, 튜닝 등의 Database 지식 습득(유명한 튜너들은 개발자 출신이 많다)

   - NW 및 보안 : 네트워크 및 보안 지식 습득

   - 다양한 솔루션 경험 : DB, WAS, UI(Miplatform, Xplatform ), Report Tool

3. 다양한 경험을 바탕으로 컨설팅, DB, 보안, 솔루션 기업으로 전직이 가능하다

4. 자신만의 컨텐츠를 만들 수 있다 : 앱, 솔루션, 블로그(개인 사이트), 유튜브, 게임 등 


SI/SM분야로 진로를 정할 때 고려사항

1. 업무 도메인(젊을 땐 몰랐는데… 나이가 들수록 중요성을 느끼고 있어요...)

   -  최대한 공공기관은 후순위로 둔다. 공공기관에서 배운 업무지식은 해당기관에 특화된 업무가 많으므로 다른 곳에서 재사용 할 수 없다.

   -  금융(은행, 증권, 보험, 카드), 재무/회계, 물류/유통, 통신 등 수요가 많고 업무지식을 재사용할 수 있는 업무 도메인을 우선 선택

   -  물론 업무지식이 중요하지 않은 AA, TA DBA 직군도 있다.

2. 개발과 관련된 기술에 한 번은 미쳐라!

   - 개발언어 : JAVA개발자일 경우 - JAVA, JSP/Servlet, 디자인패턴, 리팩토링, 프레임워크(스프링 등), Javascript

   - 웹 환경 : 브라우저, 웹 서버, WAS, 빌드툴, 형상관리

 3. 고급이 되기전에 자기만의 특화된 기술[IT기술(분석/설계), 업무 지식, 인맥, PT, 문서작성 등]을 만든다.

    - 웹 프레임워크의 대중화로 시스템 구축 시 특별한 업무가 아니면 고급인력을 쓸 필요성이 없다.

posted by 생각퍼즐
: