국제 프로그래밍 대회 Codeforce

Posted by ironmask84
2016. 4. 28. 16:34 컴퓨터공학


Codeforce라는 프로그래밍 대회를 개최하는 사이트가 있습니다.

저는 어제 알았네요..


사이트는 아래와 같습니다. 

http://codeforces.com/


가입은 Gmail 계정이 있으면 바로 인증이 가능합니다.


러시아에서 만든 사이트라고 들었으며, 대회 주최는 누구나 문제를 만들어서 할 수 있다고 합니다..

관련 소개 참고 : http://blog.naver.com/yechan54/10157522544
                      http://blog.naver.com/onjo0127/220598539332


대학 졸업 후 경력에 비해 코딩력이 그대로거나 오히려 떨어졌을지도 모른다는 생각이 들어서...
코딩스터디도 하며, 준비도 해보려 합니다. ㅎㅎㅎ

'컴퓨터공학' 카테고리의 다른 글

Software Process Model  (0) 2008.09.28
합병정렬 - 알고리즘  (0) 2008.09.21
퀵소트 - 알고리즘  (4) 2008.09.21
삽입정렬 - 알고리즘  (0) 2008.09.21
임베디드 시스템과 임베디드  (0) 2008.09.15
Embedded에서 ARM의 의미  (0) 2008.09.15
운영체제의 종류  (0) 2008.09.15
프로그래밍언어론 - 용어  (0) 2008.09.03
cache 적중률  (1) 2008.08.31
cache memory - 2  (0) 2008.08.31
 

정보보안관련 좋은 레퍼런스 사이트

Posted by ironmask84
2016. 3. 3. 08:54 컴퓨터공학/Security


http://www.boannews.com/default.asp

-> 보안관련 뉴스


http://isms.kisa.or.kr/kor/intro/intro01.jsp

-> ISMS 인증제도


http://www.kisa.or.kr/public/laws/laws3.jsp 

-> kisa 정보보호 가이드

 

악성코드를 이용한 해킹의 종류 및 대처법

Posted by ironmask84
2016. 2. 15. 00:49 컴퓨터공학/Security




1. Stack Buffer overflow 공격

1) strncpy() 사용해서 버퍼만큼만 복사하거나, if문으로 문자열 크기 비교체크해서 복사하면 해결


    process가 메모리에 로딩되었을 때의 메모리 구조에는 몇몇의 영역으로 구분되어있다.

       이는 low address부터 나열하면 다음과 같은 순서이다.


       Code Area (실행코드 위치, 기계어)

       Data Area (초기화 된 정적변수 및 전역변수)

       BSS Area (초기화 되지 않은 정적변수 및 전역변수)

       Heap (동적메모리 할당)

       Stack (함수를 처리하기 위한 영역, 함수 내 로컬변수, 함수의 매개변수)

 

위 영역 중에 Stack 영역에서 Buffer overflow 를 이용한 공격방법은 아래와 같다.

 

예를들어 어떤 프로세스의 main함수에서 func() 함수를 호출될 때,

func() 함수 처리 후 돌아왔을 때 수행되어야할 주소 RET를 저장하고,

func() 함수를 기준으로 하기위해 기존의 main함수의 EBP 레지스터를 저장하고,

func() 함수의 로컬변수 등 처리를 위한 데이터들이 stack에 push/pop 되어가며 수행되다가

func() 처리가 끝나면, 위에서 저장했던 RET, EBP를 불러와서 기존 main함수로 되돌아 오게 된다.

 

위 과정에서 RET를 임의의 주소로 덮어쓸 수 있다면,

해커는 이를 악용해서 공격용 process를 미리 메모리에 로딩해놓고, 이 process의 주소로 덮어쓰게 하여,

새로운 shell을 root권한으로 실행하는 등의 행위로 root권한을 획득할 수 있게 된다.

 

위 공격을 하려면 2가지 조건이 전제되어야 한다.

1) 공격에 이용하려는 프로세스는 root 소유이고, setuid가 설정되어 있어야 한다.

2) 악용하기 위한 공격용 process를 미리 메모리에 로딩해놓아야 한다.

 

*  CPU에는 여러 레지스터가 있지만, 아래 3가지를 참고하자.

1) ESP : 스택 연산이 발생하는 스택 프레임의 최상위 포인터 (EBP를 기준으로 상대위치 의미)

2) EBP : 해당 스택 프레임의 베이스 포인터

3) EIP : 다음에 실행할 명령어의 주소값을 가지고 있다. (= Program Count)

 

 

2. Race Condition 공격

   1) A 프로세스가 /tmp 디렉토리에 tmp.dat 라는 파일을 생성하고 오픈해서 write를 한다고 하고,
      A프로세스가 root소유의 프로세스이고, tmp.dat 라는 파일에 root권한을 가지도록 setuid를 한다고 가정.

      이 시점을 캐치하여, 공격용 프로세스를 통해 tmp.dat라는 동일한 이름의 파일을 심볼릭 링크파일로 해서 
      /etc/shadow와 같이 중요한 파일에 링크를 건 파일을 생성시킨다.


   2) 위 과정에서 A 프로세스와 공격용 프로세스가 tmp.dat라는 파일을 누가 먼저 생성 시키는지의 race가 발생하게 된다.
      정상적인 경로를 통해 A 프로세스가 먼저 tmp.dat 파일을 생성시키면,
      공격용 프로세스는 이 파일을 지우고, 자신이 생성시킨 파일을 수행하도록 유도할 것이다.


  ** 여기서도 마찬가지로 공격에 이용하려는 A 프로세스는 root 소유이고, setuid가 설정되어 있어야 한다.

 

 

3. Format String 공격

   1) process가 메모리에 로딩되었을 때의 메모리 주소에 잘못된 데이터를 덮어씀으로 인한 공격
   2) printf 계열의 함수 사용 시 틀리지 않고 쓰면 해결, %n은 변수의 주소값 이다.




 

Visual Studio 2010 Express 설치하기!!

Posted by ironmask84
2015. 11. 23. 10:42 컴퓨터공학/개발 유틸


Microsoft 홈피에서 Visual Studio 2010 Express 버젼 다운로드 페이지가 없어졌네요..

설치버젼 공유드립니다.

저작권은 프리라고 합니다.

web버전 설치프로그램으로 실행하면 자동 다운로드해서 설치가 됩니다.

제품등록은 Microsoft 계정이 있으시면 무료로 가능합니다.

vc_web.exe


기본 팁 2가지

테스트 시 콘솔창이 없어지는 부분은
프로젝트 속성 -> 구성속성 -> 링커 -> 시스템 -> 하위시스템 에서 콘솔로 선택해주시면 됩니다.

코드에 문제가 없는데 링커에러가 나는 부분은 
프로젝트 속성 -> 구성속성 -> 링커 -> 일반 -> 증분 링크 사용 -> 아니오 로 해주시면 됩니다.


이미 더 최신판이 나와서 더 이상의 업데이트는 없는 것 같네요..

아래키를 이용해서 등록을 해봅시다!!

등록키 : 6VPJ7H3CXHHBTPTX4T743YVY7





'컴퓨터공학 > 개발 유틸' 카테고리의 다른 글

HxD Hex Editor 1.7.7.0  (0) 2013.06.17
 

Key Derivation Functions (PBKDF2)

Posted by ironmask84
2015. 6. 24. 13:34 컴퓨터공학/Security


2년 전 부터 정보 보안에 대한 관심이 많아 지면서,

최근에 또 회사 업무로 인해 아래 암호화 알고리즘에 대해 알아보았다.

PBKDF2 라는 해쉬 컨테이너 알고리즘 이다. (Password-Based Key Derivation Function)

PBKDF2의 기본 파라미터는 다음과 같은 5개 파라미터다.

DIGEST = PBKDF2(PRF, Password, Salt, c, DLen)
  • PRF: 난수(예: HMAC)
  • Password: 패스워드
  • Salt: 암호학 솔트 (32bit 이상 추천.. 어떤 기준??)
  • c: 원하는 iteration 반복 수 (1000번 이상 추천 어떤 기준??)
  • DLen: 원하는 다이제스트 길이

PBKDF2는 NIST(National Institute of Standards and Technology, 미국표준기술연구소)에 의해서 승인된 알고리즘이고, 미국 정부 시스템에서도 사용자 패스워드의 암호화된 다이제스트를 생성할 때 사용한다.

위에서 PRF라는 것이 약간 헷갈리는데, 해쉬 함수를 의미하는 것으로 보인다.

기존 많은 웹서비스들은  패스워드 저장 시, SHA-1 이나 MD5와 같은 hash 알고리즘을 이용해 DB에 저장하여, 개인 정보를 보호하였으나, 이 방법도 HW의 눈부신 발전에 의해 무차별 공격 (brute-force-attack) 에 취약해지므로, 이를 대체 하기 위한 대표적인 알고리즘이다.

오픈소스이며, 최근에 여러 웹서비스나 프로그램에서 인기있는 알고리즘으로 보임.

내가 생각한 기본적인 사용법의 이해는 아래와 같다.

디바이스 내에는 DIGEST와 Salt 가 저장될 것이며,
Password는 저장되어서는 안된다.

유저가 Password를 입력할 때마다,
저장된 salt를 이용해서 PBKDF2를 통해, Digest가 출력될 것이고,
그 놈이 저장되어 있는 Digeest와 일치하는지의 여부를 볼 것이다.

마지막으로 참고할 만한 사이트 2개를 소개합니다.

1. 위키 : http://en.wikipedia.org/wiki/PBKDF2

2. NHN개발자 사이트 : http://helloworld.naver.com/helloworld/318732

 

C언어 정리하기 - 문자열과 문자열 함수

Posted by ironmask84
2015. 4. 8. 13:56 컴퓨터공학/C언어 레퍼런스


자료 출처 : http://ruvendix.blog.me/220263134254

컴퓨터와 문자에 대해서 얼마나 알고들 계시나요?


어떤 프로그래밍 언어든지 문자와 문자열을 다루는 것은 매우 중요해요!

문자를 출력하지않는 프로그램은 거의 없죠~

게임에서 문자가 하나도 나오지 않는다고 생각해보세요...


물론 레벨, 경험치, 돈은 출력이 되겠지만 캐릭터의 이름, 퀘스트의 내용, 공지 사항 등 중요한 것들이 나오지 않습니다...

특히 문자는 게임을 한글화할 때 중요하죠~ 게임을 한글화할 때는 단순히 문자를 출력하는게 아니라 기초 지식이 좀 필요합니다.

그 기초 지식을 아는 분과 모르는 분들을 위해서 포스팅을 가르겠습니다.

문자를 다루기 전에 꼭  알아야할 개념이 [문자 집합(Character Set)]입니다.

문자 집합은 말 그대로 문자들이 모인 것을 말하는데 경우에 따라서는 전 세계가 공유하는 문자 집합도 있습니다.

많이들 들어보셨겠지만 [유니코드(Unicode)]가 대표적이죠.


컴퓨터에서 문자를 표현할 때는 그냥 표현하는게 아니라 규칙이 있습니다.

그 규칙에는 SBCS, MBCS, WBCS 등이 있습니다. 하나씩 살펴볼게요.

<SBCS = Single Byte Character Set>

SBCS는 문자를 표현할 때 1바이트만 사용하는 방식을 말합니다.

컴퓨터는 미국에서 발명되었으므로 당연히 사용하던 문자도 영어였죠.

영어는 1바이트만 사용해서 문자를 표현할 수 있습니다.


정확히 말하자면 7비트를 문자 표현으로 사용하고 마지막 최상위 비트를 오류 검사용 비트인 패리티 비트로 사용해요.

SBCS는 미국의 ANSI에서 만든 ASCII가 대표적입니다.

 

ASCII는 정보 교환을 위해 ANSI에서 만든 코드를 말합니다.


ASCII 표를 보면 65부터 90까지가 영어 대문자 알파벳이고 97부터 122까지가 영어 소문자 알파벳입니다.

어떤 프로그래밍 언어를 배우던지 ASCII를 모르면 문자를 다룰때 좀 어려울거에요.

ASCII는 모든 프로그래밍 언어에서 사용이 가능합니다.


비트탕 2개의 데이터를 표현할 수 있으므로 ASCII는 최상위 비트를 제외하고 127개의 데이터를 표현할 수 있지만

최상위 비트까지 사용해서 총 256개의 데이터를 표현하는 확장형 ASCII도 있습니다.


<DBCS = Double Byte Character Set>

SBCS는 치명적인 문제가 있었는데 일부 다른 나라의 언어들을 표현할 수 없다는 점이였습니다.

즉, 1바이트만으로는 한글, 일본어, 중국어 등은 표현할 수 없습니다.

DBCS는 SBCS의 문제를 해결한 문자 집합으로 문자의 표현 크기를 2바이트로 늘렸습니다.

하지만 DBCS도 ASCII를 사용하기 때문에 코드가 중복되는 문제가 발생했습니다.

이 때문에 SBCS와 DBCS 둘 다 사용해야 했습니다...



<MBCS = Multi Byte Character Set>

MBCS는 SBCS와 DBCS를 잘 조합한 문자 집합입니다.


ASCII는 전 세계가 공통으로 사용하고 그 외의 코드들을 한글, 일본어, 중국어 등의 문자로 표현합니다.


자세히 말하자면 ASCII는 0x00부터 0x7F까지니까 여기까지는 전 세계가 공통으로 사용하고


0x80부터는 각 나라마다 따로 사용합니다. 따라서 0x80부터는 각 나라마다 코드가 겹칠 가능성이 높죠.


일본 게임에서 많이 등장하는(미소녀 연애 시뮬레이션, JRPG, 라이트 노벨 게임 등) S-JIS가 대표적입니다.

MBCS는 지금도 사용합니다. 이 때문에 좀 문제가 발생하기도 해요.

문자를 출력할 때 비주얼 스튜디오에서 설정을 좀 바꿔야하는 경우가 있습니다...


MBCS냐 WBCS냐에 따라 문자의 출력 방식이 달라집니다.

이 부분은 잘 알아두세요.

<WBCS = Wide Byte Character Set>

?WBCS는 MBCS를 보완한게 아니라 전 세계가 공통적으로 사용할 수 있도록 만든 문자 집합입니다.


WBCS보단 MBCS가 편한 경우도 많아서 그런지 대부분의 프로그램들이 WBCS를 잘 안쓰죠.


모든 프로그램들이 WBCS를 사용한다면 게임 한글화도 정말 쉬워집니다...

?WBCS는 주로 인터넷에서 사용됩니다. 전 세계가 공통적으로 사용해야할 필요가 있으니까요.


WBCS의 대표가 유니코드입니다. 유니 코드는 모든 문자를 전부 다 2바이트로 표현합니다.

그리고 전 세계 문자를 다 넣으려다보니 용량이 많이 큽니다... 그래서 MBCS를 많이 사용하긴 하죠.?


문자에 대해서 이해할 때는 가장 넓은 개념이 문자 집합이고 그 안에 EUC-KR, S-JIS, 유니코드 등이 있다고 이해해야 됩니다.

그럼 폰트는 뭔가요? 폰트는 문자를 표현하는 방법을 말합니다.

문자에 해당되는 코드는 그대로 유지하고 문자의 크기, 삐침, 굵기, 기울기 등만 변경하는걸 폰트라고 합니다.

한글화를 해봤는데요 문자 코드가 없던데요? 문자를 코드 말고 이미지로 사용하는 방법도 있습니다.

이런걸 고유 폰트라고 하는데 각 이미지를 코드와 연결해서 사용하는 방식입니다.

고유 폰트를 사용하는 게임들은 한글화가 무진장 어렵습니다...

 

문자 집합에 대해서는 이걸 잘 기억하세요.


MBCS에서는 영어가 1바이트이고 다른 대부분의 문자들이 2바이트입니다. (일본어에서 히라가나는 1바이트)


WBCS에서는 모든 문자가 2바이트입니다.


그렇다면 한글은? 한글은 대부분 2바이트로 표현됩니다.


문자열을 다루는 함수를 사용하기 위해서는 먼저 헤더 파일을 포함시켜주세요.

"string.h" 헤더 파일은 문자열을 다루는 함수들이 선언되어 있고


"ctype.h" 헤더 파일은 문자를 판단하는 함수들이 선언되어 있습니다.

제가 사용한 포인터와 배열입니다.


여기서 중요한건 포인터는 문자열의 주소를 가지고 있을뿐 조작하거나 그런건 못합니다.

문자열을 복사 및 결합 및 변환하려면 문자 배열을 사용해야 합니다.


"strlen()" 함수는 종료 문자(\0)를 제외한 문자열의 크기를 알려주는 함수입니다.

한글은 2바이트이고 공백 문자는 1바이트니까 출력은 제대로 나왔군요.

"strcpy()" 함수는 String Copy의 약자로 문자열을 복사하는 함수입니다.

포인터는 작동하지 않으므로 문자 배열을 사용하세요.

첫 번째 인자가 문자열을 저장할 인자고 두 번째 인자가 복사할 문자열입니다.

보안상의 문제로 "strcpy_s()" 함수를 사용했습니다.


"strncpy()" 함수는 "strcpy()" 함수와 비슷합니다.

마지막 인자는 바이트를 나타는데 몇 바이트만큼 복사할지를 설정합니다.



"strcpy()" 함수의 문제를 "strdup()" 함수로 해결할 수도 있습니다.

String Duplication의 약어로 문자열을 복사하는 함수입니다.


다만 문자열을 복사할 때 동적 메모리 할당을 이용해서 문자열의 크기만큼 복사합니다.

동적 메모리 할당을 이용하므로 포인터를 사용해서 주소를 받아야 합니다.?

"strcat()" 함수는 String Concatenation의 약어로 문자열을 붙이는 함수입니다.



"strchr()" 함수와 "strstr()" 함수는 문자열에서 문자와 문자열을 찾는 함수입니다.

약간 사전과 비슷하죠? 사전 프로그램을 만들 때 많이 사용하는 함수입니다.


"strcmp()" 함수는 조건문을 사용할 때 많이 사용하는 함수입니다.

문자열과 문자열을 비교해서 같은지 다른지를 판단합니다.

조건문에 사용하면 문자열을 입력받아 문자열을 검사하는 프로그램을 만들 수 있어요.

문자열1 > 문자열2면 양수를 반환하고

문자열1 == 문자열2면 0을 반환하고

문자열1 < 문자열2면 음수를 반환합니다.


"strupr()" 함수와 "strlwr()" 함수는 영어 알파벳을 대문자 및 소문자로 바꿔주는 함수입니다.

보안상의 이유로 "_strupr_s()" 함수와 "_strlwr_s()" 함수를 사용해야 하지만 이게 더 불안정합니다...

그래서 "_strupr()" 함수와 "_strlwr()" 함수를 사용했습니다.

컴파일하면 경고문이 출력되긴 하지만 무시해도 괜찮아요.

그냥 함수를 새로 만들 수도 있습니다.

ASCII에서 영어 대문자와 소문자의 코드를 이용하면 대소문자 바꾸는건 간단해요.

영어 대문자를 영어 소문자에 해당되는 코드로 바꿔치기하면 간단하죠~



입력한 문자가 무슨 문자인지 잘 판단해주네요~

이 함수들을 자세히 파헤치자면 문자가 맞으면 0이 아닌 값을 반환하고 문자가 틀리면 0을 반환하는 형식입니다.


C언어의 기초를 어느정도 알고나면 후반부는 이런식으로 함수들을 몇 개 소개합니다.


그리고 그 함수들을 싹~다 모은걸 라이브러리라고 하는데 라이브러리는 보통 책에서는 잘 나오지 않죠.


C언어에서 제공하는 함수를 C 라이브러리라고 하는데 정말 많습니다... 그렇다고 다 알 필요는 없고요.

필요할 때 찾아서 사용하면 되는거에요~ 대부분의 프로그래밍이 이런 방식입니다.


머리가 정말 좋다면 모든 함수를 다 외워서 사용하겠지만... 기초 함수들만 알고 있어도 수많은 응용이 가능하답니다.

 


 

C언어 강좌 문자열 배열과 null

Posted by ironmask84
2015. 4. 3. 16:53 컴퓨터공학/C언어 레퍼런스


출처 : http://blog.naver.com/kwy4122?Redirect=Log&logNo=220305490766

■ 배열까지 진도가 나갔네요. ㅎㅎ 혹시 이 글을 가장 먼저 보시는 분들은 배열의 개념에 관련된 내용은 앞쪽 글들 참고하시고요. 여기서는 문자열 배열(char)과 null에 대해서 알아보겠습니다. 


■ C언어 자료형 중에서 char 자료형을 이용하면 문자열 배열을 저장할 수 있고, 변경도 가능합니다. 변경이 가능하다는 건 변수 형태로 문자열 저장이 가능하다는 의미이기도 하겠죠? C언어에서는 문자열을 표현할 때 큰따옴표(")를 사용하는데요. 이번에도 역시 예제를 먼저 만들어보겠습니다.



■ char형 aaa라는 배열이 메모리에 할당되고, [Hello World!] 문자열이 순서대로 저장됩니다. 그리고 지난 글에서 알아봤던 sizeof() 함수를 이용해서 배열의 길이를 구해서 출력하고 있는데요. 배열의 길이가 '13'이군요. 위 예제에서 char aaa[]="Hellw World!"는 char aaa[13]..... 인데, 배열 길이 값 '13'을 생략하고 초기화 하면 컴파일러가 자동으로 길이 값을 채워준다는 것도 배열 개념 알아볼 때 정리했었습니다. 참고하시구요. 


■ 그런데 좀 이상하지 않나요? 큰따옴표 안에는 공백 포함해서 정확히 12개의 문자열이 저장되어 있습니다. 아직 안 세어보셨으면 세어보세요. 분명히 공백 포함해서 12개입니다. 그런데 배열의 길이가 13으로 표시되네요? 여기에서 null 문자(\0)가 등장하게 됩니다. C언어에서는 문자열을 저장할 때 맨 마지막에 무조건 null 문자가 저장되는데요. 이유는 다음과 같습니다. 


■ 메모리에 문자열이 저장될 때 이진수로 저장되기 때문에 문자열의 시작과 끝을 표시할 수 있는 방법이 없습니다. 하지만 문자열의 시작은 char aaa[0]; 자리인 건 알 수 있습니다. 문제는 끝을 알 수가 없다는 건데요. 그 끝을 표시해주는 게 null 문자(\0)입니다. 그래서 무조건 문자열의 끝에는 null 문자가 붙게 됩니다. 이 녀석의 아스키코드값과 char형의 값을 출력해보겠습니다.



■ 배열의 마지막 자리[13]에 있는 null의 값을 정수와 문자 형태로 출력했습니다. 숫자 값은 "0"인걸 알 수 있고요. 문자 형태의 값은 아무것도 없습니다. 여기서 주의해야 할게 하나 있는데요. 공백이 아니고, 아무것도 없는 겁니다. 참고로 공백의 아스키코드값은 "32"입니다. 마지막으로 null과 " " 공백의 아스키코드 값을 출력해볼게요.



■ char 형태의 '\0'과 공백 ' '의 값을 정수(%d) 형태로 출력하고 있는 내용입니다. 확실하게 구분이 되죠?^^

 

C언어 정리하기 - 자료형이 곧 핵심

Posted by ironmask84
2015. 4. 1. 21:57 컴퓨터공학/C언어 레퍼런스


아래 자료 출처 :  http://ruvendix.blog.me/220263134254 

오~ 드디어 자료형까지 왔네요. 그런데 여기서부터 변화를줄까 합니다.

제가 설명은 최대한 쉽게하고 있으나 너무 길어진다는 단점이 생겨서...

아예 확 줄여버릴까 해요.

너무 길면 보는 사람들도 지루해하고 제가봐도 좀 짜증나더라고요...

이제는 글보다는 그림으로~ 긴 설명은 죄다 요약글을 활용할게요.

?아무리 길어도 그림만 넘치면 지루하지는 않겠죠?

그래서 강의 자료의 도움을 받을게요.

원래 무료로 제공하는 강의 자료고 제가 뭐 돈 주고 판다던가 그런것도 아니고...

뭔가 그럴듯한 그림이라면 다 프리렉의 저작권이라고 보시면 됩니다.

강의 자료를 사용하는게 문제가 된다면 댓글로 알려주세요~

moon_and_james-3

와... 하고싶은 말만 했는데도 벌써 길어지네요? 이제 시작할게요.

[자료형(Data Type)]은 모든 프로그래밍 언어에서 사용해요.

왜 그럴까요? 자료형은 컴파일러가 정보를 메모리에 저장하거나 가져올때 유용하기 때문입니다.

집을 짓는데 주택인지 아파트인지 오피스텔인지 이렇게 구분하는거에요~

만약 구분을 하지 않는다면? 집이 어떤 형태의 집인지 알 수가 없겠네요...

자료형은 변수에만 해당되는게 아니라 함수에도 해당이 됩니다.

근데 뭐... 함수는 아직 설명할때가 아니므로 변수만 설명할게요.

 


그동안 포스팅을 진행하면서 몇 번 얘기했었지만 변수는 형식이 있어요.

변수를 만들때는 [자료형 | 변수의 이름 | 변수의 값] 이렇게 만든답니다.

이걸 비유하자면 "집의 종류, 집의 이름, 집에서 사는 사람" 이렇게 되겠네요.

"&"는 주소 연산자로 변수나 함수가 시작되는 위치를 알려줍니다.


자료형은 크게 고정 소수점 수 자료형과 부동 소수점 수 자료형이 있어요~1

moon_and_james-38

너무 어려운 말이죠?

컴퓨터는 2가지의 자료형만 아는데 [정수형 자료형]과 [실수형 자료형]으로 구분해요.

?이제 정수형 자료형부터 알아볼건데 이번 포스팅에서는 알면 좋은 정보가 있어요.?

 

자료형에 대한 설명을 봤던 분들이라면 잘 아시겠지만 자료형은 크기가 중요합니다.

주택과 아파트는 크기가 다르죠? 보통 아파트가 건물이 더 큽니다.

그리고 그 크기를 이용해서 최댓값과 최솟값을 알 수 있어요~ 아파트가 1층부터  몇 층까지 있는지 알 수 있듯이요.

C언어에서는 명령어 [sizeof()]를 사용하면 자료형의 크기를 알 수 있습니다.?

"()" 여기 안에 자료형이나 변수를 넣으면 크기를 바이트로 알려줘요.


그리고 그 바이트를 이용해서 최솟값과 최댓값을 알아낼 수 있습니다.

위의 이미저처럼 최솟값과 최댓값을 계산하는데 비트로 계산해요. 1바이트는 8비트입니다.

4바이트의 자료형의 최솟값과 최댓값을 구해보면 이렇게 되겠네요.?

-231 ~ +231 - 1?

즉, -2147483648 ~ 2147483647이 되겠네요~ 왜 저런 공식이 나왔을까요??

 


공식을 적용하면 바이트를 이용해서 최솟값과 최댓값을 구할 수 있겠죠?

정말 많이 사용하니까 잘 알아두세요~ 자료형의 크기를 알려면 [sizeof()]를 사용해야 합니다.

함수가 아니라 C언어의 명령어니까 헷갈리지 않도록해요~


그런데 최솟값과 최댓값의 범위를 넘어가면 어떻게 되는걸까요? 최상위 비트는 고정이므로 변하지는 않을테고...

최솟값의 범위보다 내려가는걸 [언더 플로우(Under Flow)]라 하고

최댓값의 범위보다 올라가는걸 [오버 플로우(Over Flow)]라 합니다.

자료형을 사용하면서 정말~ 많이 발생하는 오류니까 잘 알아두세요!


이제 자료형을 하나씩 알아볼건데 int형부터 알아볼거에요.


int형은 가장 많이 사용하는 자료형으로 종류도 다양합니다.

int형은 보통 [short, int, long, long long]으로 사용하고 여기에 [unsigned]를 조합한 형태로 많이 사용해요.

컴파일러가 알아서 판단하기는 하지만 원래는 short int, int, long int, long long int로 써야 맞습니다.

생략하기보다는 직접 다 써보는게 아마 더 도움이 될거에요~

최솟값과 최댓값을 알아내기 위해 몇 바이트인지 알아볼게요.


소스 코드가 슬슬 복잡해지네요... 천천히 읽어보세요...

?sizeof()를 잘 활용해야 합니다. 자료형을 넣어도 되고 변수를 넣어도되요~



?

?알록달록 하네요~ 각 크기를 알아본건데 short int나 short나 둘 다 2바이트죠? 같은 자료형입니다.

가장 큰 자료형은 long long int로 8바이트나 되네요.

그런데 int는 원래 4바이트가 아니였어요. 컴퓨터 시스템이 발전하면서 크기가 커진것이지요.

C언어는 약 40년동안 계속 업데이트되고 새로 생긴것도 많아요. scanf_s() 함수가 그런거지요.

그래서 이건 보고싶은 분들만 보세요~


 

int 자료형들의 바이트를 알았으니 최솟값과 최댓값을 알 수 있겠네요.

그런데 이걸 굳이 계산 안해도 C언어에서 매크로 상수로 제공해줍니다.

"limits.h"? 헤더 파일은 int 자료형의 최솟값과 최댓값을 매크로 상수로 제공해줘요.

각 매크로 상수의 이름들이 보이죠? int 자료형들과 비교해보세요~


"%u"는 unsinged 자료형의 값을 제대로 출력하기 위해서 사용하는 형식 문자입니다.


 "%lld"는 long long int를 출력할때 사용해요. 나중에 만들어진 자료형은 형식문자가 따로 있어요.


"%llu"는 unsigned long long int를 출력할때 사용합니다.

?4바이트와 8바이트의 엄청난 값 차이...

unsinged long long int의 최댓값은 1844경...

moon_and_james-13

?

?char 자료형은 문자를 표현하기 위해 만든 자료형입니다.


ASCII로 문자를 표현할때는 7비트만 사용하고 나머지 하나의 비트는 패리티 비트3로 사용해요.


그러니 굳이 int처럼 4바이트로 만들 이유가 없죠? char 자료형은 1바이트 입니다.


char는 1바이트니까 메모리에서 한 칸을 차지하고


int는 4바이트니까 메모리에서 4칸을 차지합니다.


실제로 숫자가 저렇게 들어가는건 아니므로 오해하면 안돼요~


컴퓨터는 문자도 다 숫자로 인식합니다. 이 얘기만 몇 번째야...


컴퓨터가 문자를 숫자로 인식하는 방법이 참 여러가지인데 ASCII가 그 중 하나입니다.


ASCII는 영어와 일부 특수 문자들을 1바이트로 만든건데 개수도 255개4인가 그래요.


ASCII 표를 보면 영어 대문자가 65부터 90까지고 영어 소문자가 97부터 122까지네요.


약간 헷갈릴 수 있는게 ASCII는 영어를 1바이트로 표현하지만 유니코드는 2바이트로 표현해요.


ASCII나 유니코드 같은걸 문자 집합(Character Set)이라 하는데 이건 나중에 설명할게요.

 

char에 그냥 숫자를 넣어도 되고 작은 따옴표('')를 사용해서 넣어도 됩니다.

단! char 자료형은 1바이트이므로 문자 하나만 인식할 수 있어요.

그리고 큰 따옴표("")는 사용할 수 없답니다.



? 

첫 번째 출력 결과는 10에서 1이 짤리고 0만 출력되었네요.


두 번째 출력 결과는 ASCII로 10이 "\n"이므로 다음 줄로 갔군요.


문자를 입력하면 ASCII로 바꿀 수 있고 ASCII를 입력하면 문자로 바꿀 수 있어요.


?float 자료형은 int 자료형보다 보다 더 정확한 값이 필요할때 사용해요.


int 자료형만큼 종류가 많지도 않고 굉장히 간단합니다.


[float, double, long double] 이렇게 3개만 있어요. unsigned는 없답니다.


?float 자료형은 소수점마다 출력 범위가 다른데 float은 소수점 이하 6번째 자리까지 제대로 출력합니다.

double이나 long double은 같은 자료형이에요. 소수점 이하 15번째 자리까지 제대로 출력합니다.


?0.12345678908765432이라는 소수점 17자리 수를 출력하면 float은 0.123456까지 제대로 나옵니다.


0.1234567까지 나오는데요? 제대로 나온게 아니라 숫자가 말린겁니다.


double이나 long double은 0.123456789087654까지 제대로 나옵니다.

?바이트를 알았으니 float 자료형의 최솟값과 최댓값을 알아보죠.



?float 자료형의 최솟값과 최댓값은 "float.h" 헤더 파일에 매크로 상수로 있습니다.

소스 코드를 보면 매크로 상수를 알 수 있을거에요.


?

?float 자료형의 최솟값과 최댓값은 뭔가 환상적이네요?


아니 8바이트인데 뭐가 이렇게 복잡하게 나오는걸까요?


고정 소수점 수와 부동 소수점 수의 차이입니다.?


숫자의 범위가 워낙 크기 때문에 "%lf"로는 출력이 어려워요.

그래서 지수 표현으로 출력하는 "%le"를 사용합니다.?

int 자료형과 char 자료형 그리고 float 자료형을 알아봤어요.


그런데 각 자료형은 서로 섞일 수도 있고 다른 자료형으로 바꿀 수도 있습니다.


자료형을 섞으면 보통 바이트가 큰 자료형으로 합쳐져요.


int 자료형과 float 자료형을 섞으면 float 자료형이 됩니다.


char 자료형과 int 자료형을 섞으면 int 자료형이 되고요.


이렇게 섞는거 말고 자료형을 바꿀 수도 있는데 2가지의 경우가 있어요.

하나는 컴파일러가 알아서 바꾸는 [자동 형변환(Auto Type Casting)]이 있고


사용자가 자료형을 바꾸는 [강제 형변환(Coercion Type Casting)]이 있습니다.

?자동 형변환은 이렇게 컴파일러가 자료형을 막 바꿉니다.


컴파일러는 기본적으로 실수를 double로 보는데 사용자가 float으로 선언하면 잘라버립니다.


그래서 float은 값이 제대로 나올때도 있고 아닐때도 있어요...



강제 형변환은 이렇게 사용자가 직접 자료형을 바꿉니다.


"()" 안에 바꾸고싶은 자료형을 입력하면 자료형이 변해요.

int 자료형과 double 자료형을섞는 소스 코드입니다.

double 자료형을 제대로 출력하려면 "%lf"를 써야해요.


?int 자료형과 double 자료형을 더하면 double이 되네요.


int 자료형끼리 연산하면 int 자료형이 되지만~

강제 형변환으로 double로 바꾸면 double 자료형으로 값이 바뀝니다.

C언어에서는 사용자가 직접 자료형을 만들기도 합니다.

정확히 말하자면 원래있던 자료형을 이용해서 이름을 바꾸는거지요.


??typedef는 Type Definition의 줄임말입니다.


typedef를 쓰고 기존 자료형을 쓰고 새로운 이름을 쓰는건데 이걸 왜 쓰는걸까요?


기존 자료형을 두는게 더 좋은거 아닌가요? 맞는 말이긴 하지만 아닌 경우도 있어요.


?unsigned long long int 같은 경우는 기존 자료형이지만 무지 깁니다.


그래서 typedef를 사용하면 이걸 확~ 줄일 수 있어요.


unsigned long long int를 ULLINT로 새롭게 만들면 줄어들겠죠?

?typedef를 사용하면 뭐가 뭔지 모르는 경우가 있는데 그러면 자료형에 마우스를 올려보세요.

빨간색으로 표시한 것처럼 어떻게 만들어진 자료형인지 알려준답니다.


?

unsigned long long int나 ULLINT나 둘 다 똑같은 자료형입니다.


둘 다 8바이트의 자료형이라는걸 확인할 수 있죠??

여기까지~ 자료형에 관한 포스팅이였습니다.


포스팅 방식을 좀 새롭게 바꾸니까 평소보다 짧아진 느낌이 들죠?


다음 포스팅에서는 C언어의 꽃이자 프로그래밍 언어의 꽃인 반복문을 설명할게요.

 

HxD Hex Editor 1.7.7.0

Posted by ironmask84
2013. 6. 17. 14:32 컴퓨터공학/개발 유틸


'컴퓨터공학 > 개발 유틸' 카테고리의 다른 글

Visual Studio 2010 Express 설치하기!!  (0) 2015.11.23
 

Time Stamp와 MD5

Posted by ironmask84
2013. 2. 4. 09:07 컴퓨터공학/Security


3번 문제를 풀기 위해 http://webgame.wowhacker.com/weblevel3/list.php로 접속합니다.


또 아까와 같은 게시판이 보이시죠? 이번에도 게시글을 하나씩 클릭해가며 살펴보도록 합시다.


1번 게시글을 클릭하자 오픈기념사진이란 파일이, 2번 게시글은 몸매짱, 3번 게시글은 Hint, 4번 게시글은 내사진, 5번 게시글은 비밀글 처리되어 내용을 볼 수 없습니다. 1~4번에 업로드된 파일들을 모두 다운로드 받아봅시다. 그러면 아래의 링크로 접속되어 다운로드 되는것을 확인하실 수 있습니다.



다시 게시글을 들어가봅시다. 게시글을 올린 날짜 옆에 숫자가 보이시죠? 게시글마다 각각 숫자가 서로 다릅니다.


1: 2006.10.18 09:05:25 0.25616200

2: 2006.10.19 10:01:05 0.57833500

3: 2006.10.20 12:05.19 0.78252100

4: 2006.10.20 18.24.43 0.65272100

5: 2006.10.22 15:49.52 0.85428900


. 뒤에 있는 숫자와 파일 뒤에 붙는 숫자가 일치하죠? 그리고 5번은 85428900이고 말이에요. 그럼 아래와 같이 유추할 수 있습니다.


http://webgame.wowhacker.com/weblevel3/down/############.85428900


그렇다면 앞에 있는 암호화된 값은 무엇을 의미할까요? 모두다 소문자와 숫자로 조합된 32자리의 값으로 MD5로 인코딩 됬다는걸 쉽게 알 수 있습니다. 한번 MD5로 디코딩을 해봅시다. 아래의 링크로 접속합시다.


링크: http://md5.web-max.ca/

[위 사이트에서 MD5 Encrypt시 입력한 값이 MD5 해쉬사전(데이터베이스, DB)로 넘어갑니다. Decrypt는 이 해쉬사전을 탐색하여 원본값을 가져오는 것입니다. 주민등록번호, 비밀번호 등 역시 이 데이터베이스 내에 남습니다.]


그런뒤에 하나하나 디코딩을 해봅시다.


1: b72776c5eb0c5a05a7188959a49e1f1b -> 1161129925

2: 28d805e190f11ba1da5283d494ee8492 -> 1161219665

3: b08e7acd151d17cbc5f205edf151d7e7 -> 1161313519

4: 779bbf24b15bb7cb0f6b51507f0615f4 -> 1161336283


이 값들은 바로 타임스탬프(Timestamp)값임을 알 수 있습니다. 타임스탬프란 1970.1.1 00:00:00 이후의 시간을 초로 환산하여 문자열로 나타낸 값으로, 아래의 링크로 접속하면 쉽게 시각->타임스탬프, 타임스탬프->시각 변환이 가능합니다.


링크: http://www.4webhelp.net/us/timestamp.php


Timezone는 GMT +9 Hours를 선택하고(우리나라의 표준시는 그리니치 표준시(GMT)보다 9시간 앞서므로 그렇습니다.), Timestamp에 아까 디코딩 된 값 4개를 넣어서 Convert to date를 누릅시다.


1: 1161129925 translates to Wednesday, October 18th 2006, 09:05:25 (GMT +9)

2: 1161219665 translates to Thursday, October 19th 2006, 10:01:05 (GMT +9)

3: 1161313519 translates to Friday, October 20th 2006, 12:05:19 (GMT +9)

4: 1161336283 translates to Friday, October 20th 2006, 18:24:43 (GMT +9)


게시글을 올린 시각이랑 일치하죠? 그렇다면, 여기서 한번더 유추할 수 있습니다. 게시글을 올린 시각을 타임스탬프값으로 변환하여 이를 MD5로 인코딩하면 .앞의 암호화 된 값이 나오므로, 비밀글을 올린 시각인 2006.10.22 15:49.52를 타임스탬프 값으로 변환해봅시다. Day엔 22, Month엔 10, Year엔 2006, Hour에는 15, Minute에는 49, Second에는 52, Timezone은 GMT +9 Hours를 택하고 Convert to a timestamp를 누릅니다. 그러면 아래와 같이 결과물이 출력됩니다.


Sunday, October 22nd 2006, 15:49:52 (GMT +9) translates to 1161499792


1161499792을 가지고, 아래의 사이트로 들어가서 MD5로 암호화 해줍시다.

링크: http://tools.web-max.ca/encode_decode.php


그럼 아래와 같은 값을 얻을 수 있습니다.

fb6e412cf733d6b9cdf777cbcafa35c3


이제 한번 조합해봅시다.

http://webgame.wowhacker.com/weblevel3/down/fb6e412cf733d6b9cdf777cbcafa35c3.85428900


위의 사이트로 들어가면 답이 나와있습니다.


Level3 key: iwantknowmoreMrjones!


즉 답은 'iwantknowmoreMrjones!' 입니다. 수고하셨습니다.

출처 : http://exynoa.tistory.com/108

 

자바 AES 128비트 암호화

Posted by ironmask84
2013. 2. 4. 09:05 컴퓨터공학/Security


String sKeyString = "";
String message = "this is just an example";

 

// 1. 128 비트 비밀키 생성    
KeyGenerator kgen = KeyGenerator.getInstance("AES");    
kgen.init(128);    
SecretKey skey = kgen.generateKey();

 

// 2. 비밀 키를 이렇게 저장하여 사용하면 암호화/복호화가 편해진다.    
sKeyString = Hex.encodeHexString(skey.getEncoded());

 

// 3. 암호화 수행 
SecretKeySpec skeySpec = new SecretKeySpec(skey.getEncoded(), "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(message.getBytes());
System.out.println("encrypted string: " + Hex.encodeHexString(encrypted));

 

// 4. 복호화 수행
cipher.init(Cipher.DECRYPT_MODE, skeySpec);   
byte[] original = cipher.doFinal(encrypted);    
String originalString = new String(original);    
System.out.println("Original string: " + originalString + " " + Hex.encodeHexString(original));

 

 

jar : commons-codec-1.6.jar

출처 : http://blog.naver.com/PostView.nhn?blogId=yunta8&logNo=100162235590&redirect=Dlog&widgetTypeCall=true

 

문자열을 SHA-512 방식으로 암호화(단방향 암호화 방식 : 예 로그인)

Posted by ironmask84
2013. 2. 4. 09:03 컴퓨터공학/Security


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50

import java.security.*;
 
// 문자열을 SHA-512 방식으로 암호화
 
public String encrypt(String input) throws NoSuchAlgorithmException {
 
    String output = "";
 
   
 
    StringBuffer sb = new StringBuffer();
 
    MessageDigest md = MessageDigest.getInstance("SHA-512");
 
 
 
    md.update(input.getBytes());
 
    byte[] msgb = md.digest();
 
 
 
    for (int i = 0; i < msgb.length; i++) {
 
        byte temp = msgb[i];
 
        String str = Integer.toHexString(temp & 0xFF);
 
        while (str.length() < 2) {
 
            str = "0" + str;
 
        }
 
        str = str.substring(str.length() - 2);
 
        sb.append(str);
 
    }
 
   
 
    output = sb.toString();
 
   
 
    return output;

}
 


 

자바 데이터 암호화: DES, 3DES, AES, RSA, MD5, SHA1

Posted by ironmask84
2013. 2. 4. 09:02 컴퓨터공학/Security


* 스트림 암호화 방식

: Clear text를 encode한 것을 1문자씩 변환


* 블럭 암호화 방식

: Clear text를 정해진 블럭으로 나눈후 해당 블럭을 암호화


* 대칭키 암호화 방식(old)

: 암호화 키와 복호화 키가 동일


* 비대칭키 암호화 방식(new)

: 암호화키는 공개키, 복호화키는 비밀키, 대칭 암호화에 비해 속도가 느림

  주로 개인키를 교환하는 목적으로 많이 사용

  A와 B가 Data를 주고 받는다고 할때 :

  개인키로 암호화하면 공개키로만 풀 수 있다. 공개키로 암호화하면 개인키로만 풀 수 있다.

  A와 B 각각이 공개키/개인키 한쌍씩을 가지고 있으면서

  서로에게 공개키만 알려줌

  A -> B Data 전송시 :

  A는 B의 공개키로 Data를 암호화시켜서 B에게 전송

  Data를 받은 B는 자신의 개인키로 Data를 복호화.

  B는 A의 공개키로 return값을 암호화시켜서 A에게 전송

  return값을 받은 A는 자신의 개인키로 return값을 복호화.


* 메시지 다이제스트

: 원문에 일방향 해쉬 함수를 적용, 일정 길이의 유일한 문자열로 변환하는 방식

  복호화 불가능, 전자서명시 사용



- DES

블럭 암호화 방식, 대칭키 암호화 방식

텍스트를 64bit 단위로 나눠 56bit 키로 암호화하는 알고리즘


- 3DES

DES의 짧은 키를 보완한 방식(DES를 세번 적용)


- AES

블럭 암호화 방식, 대칭키 암호화 방식

텍스트를 128bit 단위로 블럭화

128bit, 182bit, 256bit의 키로 암호화


- RSA

블럭 암호화 방식, 비대칭키 암호화 방식

두 개의 큰 소수들의 곱과, 추가 연산을 통해 키 생성

가장 보편적으로 사용


- MD5

블럭 암호화 방식, 메시지 다이제스트

임의의 길이의 입력데이터를 128bit의 출력데이터로 변환

512비트 단위로 알고리즘 수행, 메시지 길이를 512bit 배수로 패딩 

단, 원래의 메시지 길이 입력을 위한 64bit는 남겨둬야함


- SHA1

블럭 암호화 방식, 메시지 다이제스트

임의의 길이의 입력데이터를 160bit의 출력데이터로 변환


(참조 http://minix.tistory.com/397)

 

차세대 웹브라우저 전쟁 (펌)

Posted by ironmask84
2011. 4. 6. 17:50 컴퓨터공학/IT 트렌드



프롤로그
3월 14일(한국 시간으로는 15일)은 화이트데이(개발자라면 파이π데이라고 읽는다)였으며 마이크로소프트에서는 오랫동안 야심차게 준비한 새로운 웹브라우저 인터넷 익스플로러 9이 정식으로 출시되는 날이기도 했다. 하지만 주말에 일본을 비롯한 태평양 연안에 불어 닥친 지진과 해일 피해로 마냥 축제 분위기를 낼 수는 없었다. 일본 내에서는 구호활동을 위한 통신 인프라에 부하를 주지 않기 위해 출시 일정 자체를 연기했다고 한다. 하지만 전 세계적으로 새로운 브라우저가 선보였고 국내에서는 출시 당일 실시간 검색어로 익스플로러 9이 상위권을 차지하기도 했다. 이렇게 차세대 웹브라우저 전쟁은 조심스럽게 시작됐다.


브라우저 전쟁(Browser wars)이라는 단어는 온라인 백과사전인 위키피디아에 올라올 만큼 일반적으로 인지되고 있다. 고전에서 배우는 교훈처럼 전쟁의 승자는 한동안 새로운 정치와 제도로 세상을 안정시키는 것 같지만 시간이 지나면서 스스로의 자만에 빠져 향락에 놀아나는 모습이 반복되곤 했다. 

<화면 1> 세계 최초의 브라우저 월드와이드웹

첫 번째 브라우저 전쟁에서 승리한 마이크로소프트도 마찬가지였다. 2001년 IE6을 출시한 이후 2006년까지 새로운 브라우저가 나오지 않았고 경쟁상대도, 웹의 혁신도 없었다. 하지만 2006년 11월 파이어폭스와 IE7이 동시에 출시되면서 두 번째 웹브라우저 전쟁이 시작되었고 더 이상 웹은 누구의 소유도 될 수 없었다. 오페라 소프트웨어에서 출시된 오페라는 IE보다 조금 먼저 선보였지만 10여 년간 시장에서 주목을 받지 못하다가 오페라 9이 나오면서 비로소 경쟁력을 갖게 되었지만 여전히 데스크톱 브라우저보다는 모바일 디바이스와 게임 디바이스에서 오페라 미니가 더욱 주목받고 있다. 애플의 사파리 역시 윈도우 시장보다는 맥OS를 중심으로 어느 정도의 규모만 가져가면서 IE7과 파이어폭스 양자의 대결 구도가 꽤 오랜 기간 이어졌다.

얼마 전 공개된 ‘웹브라우저의 역사‘라는 인포그래픽은 1994년부터 시작된 브라우저의 역사 중 시장에 대한 영향력을 한눈에 볼 수 있도록 정보가 재구성돼 있다. 스케이프와 IE의 점유율이 변해가는 모습과 파이어폭스, 크롬의 등장을 극적으로 표현하고 있으며 2011년에 멈추어 있는 제품 라인이 내년 이맘때쯤에는 어떤 모습으로 변할지를 궁금하게 만든다. 해당 도표에서는 1994년부터 표기하고 있지만 브라우저의 역사를 보면 이보다 좀 더 앞선 시점으로 들어가야 한다. 최초의 웹브라우저는 팀 버너스리가 NeXT 컴퓨터 시스템에서 만든 월드와이드웹(World WideWeb)이며 1991년 소개됐다. 월드와이드웹은 세계 최초의 웹브라우저이면서 위지웍 기능을 가진 HTML 편집 소프트웨어였다. 이후에 우리가 알고 있는 월드 와이드 웹(WWW)과 이름이 겹치는 문제가 발생해 넥서스라고 개명했다. 애플 진영에서는 사파리 이전에 나왔던 브라우저로 옴니웹이 있다. 사파리가 출시되고 나서도 초기 버전에 몇몇 버그가 있어 옴니웹을 사용하는 사용자층은 꽤 두터웠다. 다른 브라우저가 대부분 무료로 배포되는데 반해 옴니웹은 2009년까지 유료로 판매되었음에도 다른 브라우저와 차별화된 성능과 특화된 기능으로 마니아층을 형성하고 있었다. 하지만 시간이 지나면서 다른 브라우저와의 차이가 점점 희미해지면서 더 이상 유료를 고집할 수 없게 됐다.

웹브라우저가 수행하는 근본적인 역할은 20년이 지나도 변하지 않았다. 위키백과의 정의처럼 ‘웹서버에서 쌍방향 통신하는 HTML 문서나 파일과 연동하고 출력하는 응용 소프트웨어‘로 그 역할을 수행하고 있다. 초기 브라우저에서 단순한 HTML 기능을 지원하던 것이 다양한 사용자 요구와 비표준 확장으로 웹 호환성에 심각한 문제가 생겨나기 시작했다. 특히 통신 인프라가 빠른 속도로 성장한 국내에서는 과도하게 사용된 액티브X의 문제뿐만 아니라 기본이 되어야 할 HTML 코드 자체에 수많은 문제점을 안고 있는 상태이다. IE9 출시를 준비하면서 한국마이크로소프트에서 가장 난감해 했던 부분 중 하나가 수많은 오류에 대한 부분을 어디까지 지원할 것인가에 대한 고민이었다. 1년여 기간 동안 호환성을 해결하려 노력했지만 여전히 부족한 부분이 있음을 이야기했으며 개발자 커뮤니티에서도 지금까지 나타나지 않았던 문제들이 서서히 나타날 것이라고 이야기하고 있다. 이런 호환성 문제는 개발자들이 관심을 가지지 않기보다는 기존의 인력만으로 새로운 이슈를 같이 대응하기에 어려움이 있고 의사결정권자 역시 당장 문제가 되지 않은(IE9 사용자가 많지 않으니) 부분을 끄집어내기 꺼려하기 때문이라고 한다.

웹의 아름다움을 다시 만나는 IE9
IE9을 처음 만난 것은 1년 전으로 거슬러 올라간다. MIX10 행사를 집에서 시청하면서 플랫폼 프리뷰 버전을 설치했다. 현장의 분위기에 직접 동참하지 못한 것이 아쉽긴 했지만 자막까지 제공되는 동영상 서비스와 함께 방 안에서 공개된 최신 자료를 바로 찾아보고 새롭게 출시된 제품을 설치해볼 수 있는 것은 흥미로운 경험이었다. 개발자를 위한 테스트 버전이라 일반 사이트를 이용하는 것에는 조금 어려움이 있었지만 이전 버전과 확실한 달라진 모습에 만족했다. HTML5와 CSS3와 관련된 대중적인 이슈를 모두 대응할 준비를 갖추고 비로소 다른 브라우저들과 제대로 붙어볼 준비가 된 것이다. 그로부터 1년이 지나고 이제 정식으로 제품이 출시됐다.

IE9은 4가지 특징을 내세우고 있다. 첫 번째는 빠른 속도와 놀라운 성능이다. 웹브라우저를 통한 다양한 멀티미디어를 경험하게 되면서 사용자는 데스크톱 애플리케이션에서와 동일한 수준의 경험을 기대하게 됐다. 특히 윈도우7에서 제공하는 강력한 그래픽 기능을 웹에서도 적극적으로 활용할 수 있게 되면서 최고의 웹 경험을 할 수 있게 됐다. 어도비에서도 일찍부터 IE9의 하드웨어 가속 렌더링을 지원하는 기능을 플래시 플레이어 10.2의 대표적인 기능으로 홍보해왔다. 그래픽 관련 요소가 많은 화면이나 비디오를 렌더링하는 과정에서 PC의 자원을 많이 사용하는 문제점이 있었는데 이런 부분도 어느 정도 해소될 것으로 보인다. 플래시 플레이어 10.2는 지난달 윈도우, 맥, 리눅스 용으로 공개되었고 3월 18일 구글 안드로이드용 플래시 플레이어 10.2가 공개될 예정이다.

두 번째는 심플해진 인터페이스 디자인이다. 새 탭 페이지나 즐겨찾는 사이트 관리는 이미 크롬에서 제공하는 스냅샷에 익숙한 사용자라면 오히려 만족스럽지 못할 수도 있다. 이전 IE 브라우저만을 사용해보았고 다양한 툴바 사용에 익숙한 사용자라면 심플한 인터페이스가 당황스러울 수도 있다. 당장 즐겨찾기는 어디서 보아야 하는 것인지 혼란스러워할 수 있다. 대부분의 학교나 학원에서 사용하는 교재에서 설명하는 내용과 인터넷을 사용하는 프로세스가 달라진다면 이를 쉽게 설명하기는 어려울 것이다(물론 IE9에서도 메뉴바를 노출시킬 수 있는 옵션을 제공하고 있다). 또한 IE9은 비스타 이상의 환경에서만 설치가 가능하기 때문에 아직은 XP가 주로 사용하는 브라우저인 환경에서 당분간은 어려움을 느끼지 않을까 싶다(지극히 IT적인 필자의 블로그 통계만 보더라도 아직까지 XP 사용자가 52%, 윈도우7 사용자가 41%이며 브라우저 사용 통계는 IE가 70%, 크롬이 20%, 파이어폭스가 5%로 집계된다. 일반적인 국내 통계에서는 IE가 94%, XP 사용자가 72%를 차지하고 있다 - statcounter 기준).

<화면 2> IE6 장례식

세 번째는 세상에서 가장 안전한 브라우저이다. 보안과 관련된 문제가 터질 때마다 액티브X는 모든 문제의 원인으로 지목되어 왔고 MS에서 적극적으로 나서서 보안 취약점을 갖는 IE6의 업그레이드하게 독려하고 있다. 액티브X 기술 자체가 문제는 아니지만 이미 암세포처럼 모든 사이트에 퍼져버린 상황에서는 더 이상 치료만으로는 막을 수 없다는 결론이 아닌가 싶다. 액티브X 필터링 기능은 IE8에서도 제공되었지만 여전히 많은 사이트를 이용하려면 액티브X를 설치해야 하고 너무 많은 경고 메시지는 메시지 자체를 둔감해지게 만들었다. 정부에서 나서서 대체적인 수단을 만든다고는 하지만 사용자의 눈높이와의 격차를 얼마나 좁힐 수 있을지가 의문이다. 얼마 전 연말정산자료를 IE가 아닌 다른 브라우저에서 인쇄하려는데 생소한 용어(보안이 적용된 PDF가 사용됐는데 절차가 상당히 복잡했다)와 절차로 후회했던 경험이 있다. 기능 구현 자체가 급한 것이 아니라 쉽게 이전처럼 사용할 수 있게끔 하는 간격(gulf)에 대한 조정이 필요할 것이다.

네 번째는 최신 웹표준에 대한 이야기이다. 최신 HTML5와 CSS3를 사용하는 것까지는 좋지만 ‘본 페이지는 Internet Explorer 9에서 최적화 되었습니다’와 같은 메시지를 보는 것은 그렇게 유쾌한 일은 아니다. 기능을 테스트하는 특별한 용도가 아니라면 적절한 스크립트를 사용해 대체 가능한 콘텐츠를 제공하는 것이 당연할 것이다. modernizr와 같은 도구는 개발자가 이런 요구사항을 충족하는 감지 기능을 쉽게 적용할 수 있도록 제공하고 있다. 그 외 일반적인 라이브러리에서도 유사한 기능을 제공하고 있기 때문에 사이트 구현 시 체크해 보아야 하는 기능이다. 위에서 언급한 것처럼 XP 사용자가 상당히 많은 국내 실정에서 새로운 기술의 적극적 수용은 IE9으로서는 다른 브라우저로 사용자를 빼앗길 빌미를 제공하는 것일 수도 있지만 주사위는 던져졌고, 사용자의 선택을 기다릴 뿐이다.

최고를 노리는 파이어폭스 4
마이크로소프트가 IE9까지 오게 된 데 파이어폭스의 영향이 가장 크다고 볼 수 있다. 파이어폭스는 2004년 11월 첫 번째 버전을 선보였고 2006년과 2008년 새로운 버전을 선보이며 2008년에는 전체 시장에서 점유율 20%를 돌파했다. 파이어폭스가 독점적인 IE의 아성을 깨뜨릴 수 있었던 배경에는 탭 브라우징, 검색, 라이브 북마크, 다운로드 관리자 등 다양한 기능도 있지만 2억 개 이상의 부가기능을 추가할 수 있어 순정 브라우저를 넘어 강력한 도구로 재탄생시킬 수 있다는 점에 매력이 있다. 물론 IE에서도 이런 부가기능이 없었던 것은 아니지만 파이어폭스만큼 개방적이지 못했고 특히 파이어버그와 같은 개발자 도구의 지원은 IE와 차별화된 개발자를 위한 브라우저라는 인식까지 심어주었다.

국내 금융권이나 정부기관 사이트 등을 이용하려면 인증이나 보안 등의 이유로 IE만 사용가능한 환경을 제공하고 있어 파이어폭스 사용자들에게 가장 인기 있는 플러그인은 IE Tab이다. 특정 사이트만 목록에 추가하고 IE 환경에서 사용할 수 있으며 웹사이트 로딩 중에 렌더링 엔진을 바꿀 수 있는 옵션을 제공하기 때문에 파이어폭스에서 기본기능처럼 사용됐다.

파이어폭스는 브라우저의 이름처럼 캐릭터를 가지고 있다. 기본 로고에 표현된 동물은 너구리팬더(Red panda)라고 한다. 이 너구리팬더의 다른 이름이 파이어폭스이고 국내에서는 불여우라고 단어에 따른 해석으로 들어오게 됐다(국어사전상에서 불여우는 붉은 여우를 의미한다고 한다). 동물을 캐릭터로 가지고 있다 보니 지역별로 특색에 맞게 캐릭터가 만들어지기도 한다. 특히 2006년 파이어폭스 개발자 행사에서 처음 소개된 Kit는 어린 불여우를 주인공으로 웹표준을 지키자는 메시지를 담고 있으며 오랫동안 사랑받는 캐릭터가 됐다.

<화면 3> 파이어폭스 캐릭터 중 하나인 Kit

파이어폭스가 다른 브라우저와 가장 큰 차이점은 커뮤니티를 기반으로 만들어지고 있다는 것이다. 브라우저 개발뿐만 아니라 도움말을 만들고 번역하는 일도 커뮤니티에서 진행하는 일이다. 국내에서도 몇몇 자발적인 참여자가 커뮤니티에 참여하며 한국어와 관련된 이슈를 처리하고 브라우저의 한국어 버전 개발에 참여하고 있다. 제품의 개발 프로세스와는 별도로 사용자들이 자주 겪는 문제점에 대응하는 도움말 문서를 만드는 커뮤니티로 SUMO라는 프로젝트가 있다. 

SUMO는 지원사이트 url인 SUpport.Mozilla.com에서 따온 이름으로 전 세계적인 자원봉사자에 의해 만들어지는 커뮤니티다. 일부 업체에서도 포인트와 같은 보상 제도를 두고 제품의 도움말이나 팁을 제공하는 자발적인 참여를 유도하고 있지만 모질라 재단은 순수한 참여를 전제로 하고 있어 색다른 경험을 할 수 있을 것이다.

바이러스 걱정 없이 컴퓨터를 쓰는 세상
아무리 최신 컴퓨터를 구입하더라도 컴퓨터를 전원에 연결하고 나서 해야 할 일들이 적지 않다. 일단 바이러스 감염 예방을 위해 백신을 최신 버전으로 업데이트해야 하고 운영체제의 서비스팩이 설치되지 않았다면 몇 차례 재부팅을 통해 운영체제 업데이트를 해야 한다. 문서편집에 필요한 프로그램을 설치했다면 역시 관련된 업데이트를 설치해 주어야 하는 작업에서 꽤 많은 시간이 소요된다. 지난달 DDoS 공격이 이슈가 되었을 때 포털 사이트 첫 화면 대신 전용 백신 다운로드 페이지가 열리는 해프닝이 있었을 때는 정말 누군가 이 모든 것을 알아서 해 주었으면 하는 생각이 들기도 했다.

구글이 웹브라우저를 만들겠다고 했을 때 많은 이들이 성공 여부에 의문을 가졌다. 하지만 2008년 첫 번째 버전을 내놓은 지 2년도 지나지 않아 IE, 파이어폭스에 이어 세 번째 점유율을 가진 브라우저가 됐고 특정 사이트(필자의 블로그같은)경우에는 오히려 파이어폭스보다 점유율이 높기도 하다. 구글 문서 도구 기능이 상당부분 개선되고 기업 내 사용자를 위한 도구로서 사용이 확대되면서 해당 도구와 최적의 성능을 보여주는 크롬 브라우저가 인기다. 또한 타 브라우저에 비해 가볍고 빠른 속도 역시 추종자들을 늘리는데 기여했다.

브라우저에서 더 나아가 크롬 OS에 대한 소문이 현실로 밝혀지면서 구글은 세계 정복의 음모가 있는 게 아닌가 하는 이야기가 떠돌기도 했지만 크롬 OS는 여전히 진행 중이다. 다만 크롬 OS는 사용자가 시스템 자체를 제어하는 것이 아니라 구글이 중앙에서 제어하게 구성되어 있다는 점에서 수많은 업데이트와 오류, 선택해야 하는 부담에 힘들어하는 사용자에게 만족스러운 선택이 될 수 있다. 물론 테스트 중인 넷북이 좋은 평가만을 받고 있지는 못하지만 교육이나 개인 사용자를 대상으로 하는 시장에서는 상당한 가능성을 보여준다. 브라우저를 플랫폼으로 보는 시각은 크롬뿐 아니라 IE9에서도 브라우저를 액자에 비유해 사용자가 브라우저에 신경 쓰지 않고 웹 콘텐츠에 집중할 수 있게 하려고 노력했다는 이야기를 들으면서 다음 버전의 브라우저는 어떤 모습일지 기대가 된다.

모바일 브라우저
스마트폰이 나오기 전 모바일 환경은 데스크톱과 비교해서 상당히 열악했다. 지금은 듀얼코어 이야기가 나오면서 오히려 구형 데스크톱보다 훨씬 강력한 시스템을 갖춘 디바이스가 등장하기도 하지만 불과 얼마 전까지만 해도 모바일 상에서 동일한 웹을 본다는 것이 큰 이슈였다. 데스크톱 브라우저의 대표주자는 아니지만 오페라소프트웨어의 오페라 미니는 모바일 시장에서는 전 세계 1억 명이 넘는 사용자를 가지고 있다. 일반적인 브라우저와 달리 통신망 속도가 느리거나 사양이 낮은 휴대폰에서도 웹 페이지를 부담 없이 구동할 수 있도록 데이터를 서버에 압축해 놓고 휴대폰으로 전송하는 방식을 택했기 때문. 아이팟 터치를 제외한 시장을 놓고 보면 오페라 미니가 세계 시장에서 점유율 1위인 셈이다. 그 뒤를 노키아와 블랙베리가 따라오고 있고 그 다음이 안드로이드 기반의 브라우저가 차지하고 있는 상황이다. 하지만 한국 시장을 보면 전혀 다른 양상을 보이고 있다. 안드로이드 기반의 브라우저가 전체 시장의 75%를 차지하고 있으며 노키아나 오페라는 2% 정도에 불과할 뿐이다. 물론 각 국가별로 비교해 보면 명확한 차이가 난다.

여러 통계 자료를 보면 2011년을 기점으로 스마트폰에서 웹을 탐색하는 사용자가 PC를 추월할 것으로 예상되고 있다. 우리 일상을 돌아보자. 실시간 검색어 중 많은 건이 TV 시청을 하면서 관련된 검색어로 올라오는 것이다. ‘지금 나오는 저 배우의 나이는 몇 살이지?’라는 질문을 PC를 켜서 웹을 찾는 것이 아니라 주머니에 있는 스마트폰을 꺼내서 검색하고 간단하게 답을 얻고 있으며 이러한 양상은 다양한 분야로 확대되고 있다.

브라우저 밖의 브라우저
웹브라우저는 다양한 웹 콘텐츠를 담아야 한다는 태생적 한계 때문에 여러 가지 제약에 묶인다. 특히 보안과 관련된 다양한 이슈는 버전이 올라갈수록 사용자가 좀 더 안전한 웹 콘텐츠를 사용할 수 있도록 여러 장치들을 제공한다. 일반 사용자에게는 당연한 일이지만 기업이나 공공장소와 같은 곳에서는 각 사용자별로 제어 가능한 환경은 관리하기가 어려워진다. 사용자가 자바스크립트 기능을 꺼버리고 나서 특정 사이트에 접근이 안 된다고 하거나 플러그인을 동작하지 않게 해 놓고 플래시로 만든 화면이 보이지 않는다고 문의할 수도 있다.

2008년 뉴스 기사를 찾아보면 안랩에서 금융거래를 위한 별도의 브라우저를 개발했다는 소식을 찾을 수 있다. 그리고 최근 ‘안랩 온라인 시큐리티 2.0(AOS 2.0)이라는 이름으로 패키지 제품으로 업데이트되어 시중 은행에는 적용된 상태이며 해외 시장 진출의 동력으로 삼는다는 내용이다. 그리고 투비소프트의 엑스플랫폼 제품의 경우에는 전용 브라우저 내에서 서비스를 제공하는 기능 구현이 가능하다. 기존 웹브라우저에서 동작하는 방식과 달리 각 화면별 세션처리나 옵션 관리를 사용자가 아닌 중앙에서 관리자가 제어할 수 있어 기업 시스템 사용 시 오류를 최소화할 수 있고 업무 맥락에 따라 최적화된 사용자 경험을 제공할 수도 있다. 또한 위젯 형식의 애플리케이션은 일상적인 업무 관리에 있어서 효율적인 활용이 가능하며 기존 자원을 가지고 얼마나 빨리 구현할 수 있는지에 따라 기업 내에서 쉽게 활용할 수 있을 것이다.

<화면 4> 엑스플랫폼 위젯

어도비 에어는 모바일 디바이스까지 확장했다. 브라우저라고 표현하기에는 애매하지만 데스크톱 환경을 생각해 보면 최근 버전에서 USB나 카메라, 웹캡과 같은 외부 장치를 인식하고 연동하는 부분을 지원한다. HTML5에서도 디바이스 API 표준화를 진행하고 있어 기존 브라우저 기능이 확장될 가능성을 보여주고 있지만 아직 상용으로 활용하기에는 제약이 있기 때문에 브라우저 밖의 브라우저 기능은 여전히 흥미로운 주제다.

브라우저에 대한 다양한 이야기를 담고자 하면서 여러 자료를 찾아보니 너무 많은 변화가 일어나고 있다는 것을 느낄 수 있었다. 지금 하고 있는 일을 제대로 하지 못하고 트렌드만 따라가는 것은 어리석은 일이지만 다가올 미래를 준비하지 않는다면 어느 순간 흐름에 휩쓸려갈지 모를 일이다.

-------------------- 펌 ----------------------------
이준하 koko8829@naver.com
(http://koko8829.tistory.com / http://www.facebook.com/BizRIA)

 

KDF.. 한국 개발자 축제 2010!!

Posted by ironmask84
2010. 12. 2. 15:02 컴퓨터공학/IT 트렌드





 개발자의 눈에 비친 IT의 현재와 미래 [자세히 보기]

행사명 대한민국 개발자 콘퍼런스 2010
일시·장소 2010. 12. 9(목) 9:00~18:00 양재동 교육문화회관 등
트랙구성 Keynote 4개 세션
모바일/소셜/클라우드 개발 총 18개 세션
부대행사 - 스폰서 홍보 테이블
- 취업상담 테이블
- 커뮤니티 홍보 테이블
예상 참석자수 IT분야 개발자, 사용자, 기획자, 디자이너 등 약 1,000명


발표주제
10:00~10:40 개발자의 커리어패스
이스트소프트 김장중 대표
10:40~11:20 개발자가 꼭 알아야 하는 공모전 입상조건
서울버스 개발자 유주완
11:20~12:00 '앱마케팅의 실재 - 오빠믿지의 사례에서'
원피스 김정태 대표
12:00~13:00 Lunch Break
  Track Ⅰ모바일개발 Track Ⅱ 소셜개발 Track Ⅲ 클라우드 개발
13:00~13:40 안드로이드
스마트폰을 넘어서
소셜앤모바일 박성서 대표
네이트 앱스토어 현황 및
향후 계획
SK컴즈 김영을팀장

구글 앱 엔진을 활용한
애플리케이션 개발

인피언컨설팅 양수열 소장

13:40~14:20

엔터프라이즈 모빌리티
개발 : ADF Mobile

오라클 Embedded Global Business Unit

오라클 박지웅 팀장

네이버 SNS플랫폼 소개
NHN 권순선 팀장
클라우드 컴퓨팅을
위한 데이터 저장소
NoSQL(Not Only SQL)
개념 및 오픈소스 소개
그루터 김형준 수석
14:20~14:40 Break
14:40~15:20 윈도우폰7으로
여러분의 꿈을 창조하라!
BlueFish System
박현철 CTO

다음 SNS플랫폼 소개

다음 김동현 팀장

글로벌 서비스
플랫폼으로서의 클라우드

NHN 이두원 UI개발자

15:20~16:00 iPhone에서 iPad까지
다음 임강석 팀장

재미의 관점에서
본 소셜 게임분석

(소셜게임기획)

로드컴플릿 배정현 대표

Windows Azure를
이용한 클라우드
애플리케이션 개발

MS 박중석 개발자
에반젤리스트

16:00~16:10 Break
16:10~16:50

메신저와 구글코드를

이용한 이클립스

협업 개발

모비젠 허광남 팀장

국내 소셜게임 시장 현황 및 서비스 전략

아보카도 박찬형 팀장

네티로 구현하는

클라우드 스케일
대용량 웹 서버
레드햇 이희승 Principal Software Engineer

16:50~17:30 Mobile, Web,
그리고 HTML5

파워블로거 권정혁

소셜게임 개발 그 이후-

오픈 플랫폼에서

눈에 띄기

노리타운스튜디오
송교석 대표

안드로이드 플랫폼에서의

모바일 클라우드

서비스응용

옥상훈 컨설턴트
  경품추첨 및 Closing
※ 상기 일정은 사정에 따라 변경될 수 있습니다.

아... 돈은 좀 들지만 가고 싶네 ㅋㅋㅋ (개인 : 44,000원 5인 이상 : 33,000원)

학생이었으면 무조건 가는건데..

회사에서 간다고 하면 보내주긴 할것 같은데 눈치 보이네 ㅠㅠ..