728x90
300x250
[JSP] 5. Apache Tomcat 9 윈도우 10에서 수동으로 설치하기(Manually installing in Apache Tomcat 9 window)

 

MS윈도우 환경에서 아파치 톰캣 9를 설치하는 방법에 대해서 소개합니다.

(Here's how to install Apache Tomcat 9 in an MS Windows environment.)

 


1. 아파치 톰캣 공식 사이트에 접속하기(Access the Apache Tomcat official site)

 

https://tomcat.apache.org/download-90.cgi에서 다운 받을 수 있습니다.

"You can download it from `https://tomcat.apache.org/download-90.cgi.`"

 

그림 1) Apache 톰캣 공식 웹 사이트(Apache Tomcat official website)

 


2. 다운받은 파일 압축 풀기(Extract the downloaded file)

 

다운받은 파일을 압축 풉니다.(Unzip the downloaded file.)

 

 

그림 2) 다운받은 파일 압축 풀기

Figure 2) Extract the downloaded file

 

 

Figure 3) Extract the downloaded file

 

 

Figure 4) Extract the downloaded file

 


3. 압축 푼 폴더 C:\로 이동하기(Go to the extracted folder C:\)

 

압축 푼 폴더를 "잘라내기", "붙여넣기"로 이동시켜줍니다.

(Move the extracted folder to "Cut" or "Paste".)

 

 

그림 5) 복사 붙여넣기가 완료된 아파치 톰캣 폴더

Figure 5) Apache Tomcat folder with copy paste complete

 


4. 서버 실행하기(Run the server)

 

"c:\apache-tomcat.xxx\bin"에서 "startup.bat"을 더블클릭합니다.

(Double click "startup.bat" in "c:\ apache-tomcat.xxx\bin".)

 

 

그림 6) 서버 실행파일이 존재하는 위치

Figure 6) Location of Server Executables

 

 

그림 7) OpenJDK 또는 JDK 액세스 허용을 클릭하기 전의 모습

Figure 7) Before clicking OpenJDK or Allow JDK access

 


5. 아파치 톰캣 사이트(localhost) [Apache Tomcat site (localhost)]

 

http://127.0.0.1:8080 또는 http://localhost:8080에 접속하면 아래의 화면을 볼 수 있습니다.
(If you access http://127.0.0.1:8080 or http://localhost:8080, you will see the following screen.)

 

그림 8) 아파치 톰캣 처음화면

Figure 8) Apache Tomcat Home

 

 

그림 9) 아파치 톰캣에 사용되는 JSP, Servlet 예제 사이트

Figure 9) JSP, Servlet example site used by Apache Tomcat

 

반응형
728x90
300x250

[PC활용] Autodesk AutoCAD 2019 for Windows, Mac - 소개하기, Windows에서 설치하기

 

Autodesk AutoCAD 2019를 윈도우에서 설치하는 방법에 대해서 소개하겠다.

 


1. AutoCAD 2019의 새로운 기능에 관한 것

 

아래의 링크를 찾아가면 오토캐드 2019에서 지원하는 새로운 기능 등에 대해서 살펴볼 수 있다.

https://www.autodesk.co.kr/products/autocad/features

 

 

그림 1-1. AutoCAD 새로운 기능 - Autodesk

 


1-1. 오토캐드 시스템 요구사항에 관한 것

 

아래의 링크를 클릭하면 자세한 시스템 요구사항을 확인할 수 있다.

 

https://knowledge.autodesk.com/ko/support/autocad/learn-explore/caas/sfdcarticles/sfdcarticles/KOR/System-requirements-for-AutoCAD-2019-including-Specialized-Toolsets.html

 

 

그림 1-1-1. AutoCAD including Specialized Toolsets의 시스템 요구사항 - Autodesk

 


1-2. 오토캐드에 관한 것 (Windows, Mac)

 

오토캐드는 애플의 맥 기종에서도 지원하고 있다.

https://www.autodesk.co.kr/products/autocad/overview

 

 

그림 1-2-1. AutoCAD for Mac & Windows - Autodesk

 

 


2. 설치방법

 

AutoCAD 2019에 관한 것이다.

설치하는 방법은 아래처럼 실행하면 할 수 있다.

 

 

그림 2-1. 설치하기 / AutoCAD 2019 - 도도(Dodo)

 

 

그림 2-2. 설치하기 / AutoCAD 2019 - 도도(Dodo)

 

그림 2-2에서 "I Aceept"를 체크하고 "Install"을 누른다.

라이선스 엔 서비스 동의사항에 대해서 읽어보기 바란다.

 

 

그림 2-3. 설치하기 / AutoCAD 2019 - 도도(Dodo)

 

실행(R)을 클릭한다.

 

 

그림 2-4. 설치하기 / AutoCAD 2019 - 도도(Dodo)

 

기다린다.

 

 

 

그림 2-5. 설치하기 / AutoCAD 2019 - 도도(Dodo)

 

 

 

 

그림 2-6. 설치하기 / AutoCAD 2019 - 도도(Dodo)

 

"도구 및 유틸리티 설치", "설치"가 있다.

"설치"를 시연하였다.

 

 

그림 2-7. 설치하기 / AutoCAD 2019 - 도도(Dodo)

 

기다린다.

 

 

그림 2-8. 설치하기 / AutoCAD 2019 - 도도(Dodo)

 

설치사항을 확인한다. "설치"를 누른다.

 

 

그림 2-9. 설치하기 / AutoCAD 2019 - 도도(Dodo)

 

기다린다.

 

 

그림 2-10. 설치하기 / AutoCAD 2019 - 도도(Dodo)

 

 

그림 2-11. 설치하기 / AutoCAD 2019 - 도도(Dodo)

 

설치가 완료된 것을 확인할 수 있다.

 


3. 시연하기(Practice)

 

 

영상 3-1. AutoCAD 2019 시연하기 - 도도(Dodo)

 


4. 맺음글(Conclusion)

 

Autodesk의 AutoCAD 2019에 대해서 소개하였다.

 


5. 참고자료(Reference)

 

1. AutoCAD 2019의 새로운 기능 | 캐드 기능 | Autodesk, Last Modified, Accessed by 2018-09-02, https://www.autodesk.co.kr/products/autocad/features

2. AutoCAD for Mac & Windows | 오토캐드 소프트웨어 | Autodesk, Last Modified, Accessed by 2018-09-02, https://www.autodesk.co.kr/products/autocad/overview

3. AutoCAD 2019 including Specialized Toolsets의 시스템 요구사항 | AutoCAD | Autodesk knowledge Network, Last Modified , Accessed by 2018-09-02, https://knowledge.autodesk.com/ko/support/autocad/learn-explore/caas/sfdcarticles/sfdcarticles/KOR/System-requirements-for-AutoCAD-2019-including-Specialized-Toolsets.html

반응형
728x90
300x250
[PC활용] 김프(GIMP) 2.10.4 (GNU) - Windows 10에서 사용하기

 

김프(GIMP)에 대해서 소개하려고 한다.

김프라는 프로그램은 디자인 프로그램이라고 보면 된다.

 

GNU 라이센스를 적용받는다.

 

정통적인 GNU라이센스를 적용받기 때문에 리눅스커널하고 같은 라이센스라고 보면 도움이 될 것 같다.

 


1. GIMP 재단 홈페이지

 

GIMP는 재단 계열이라고 볼 수 있다.

http://www.gimp.org 사이트에 접속한다.

 

그림 1-1. GIMP GNU Image Manipulation Program - 도도(Dodo)

 

그림 1-1은 GIMP GNU Image Manipulation Program 로고가 떠있는 홈페이지를 구경할 수 있다.

 

 

                                                                 표 1. 영어 단어 한글로 읽어보기

 

번호

언어(Language)

단어(Word)

뜻(Mean)

읽기(한글)

1

영어(English)
->한국어(Korean)

Manipulation

조작

머니플레이션 또는

매니플레이션

2

영어(English)
->한국어(Korean)

Image

그림,

과거에 떠오르는 영상,

(... 모습을 담은 그림)

이미시 또는 이미지 

3

영어(English)
->한국어(Korean)

Program

프로그램 

프로그램 

4

영어(English)
->한국어(Korean) 

Recent

최근

리선트 

5

영어(English)
->한국어(Korean)

This

디스

이것

6

영어(English)
->한국어(Korean)

is

이다

이스

7

영어(English)
->한국어(Korean)

official

공식적,

공식적인

어피셜,

오피셜,

 


2. GIMP 다운로드 받기

 

https://www.gimp.org/downloads/

홈페이지에서 상단의 "Downloads(다운로드)"를 클릭한다.

GIMP에 관한 라이센스는 아래의 링크를 클릭하면 참고할 수 있다.

 

 

그림 2-1. GIMP 다운로드 - 도도(Dodo)

 

그림 2-1는 GIMP 다운로드에 관한 것이다.

 

Download GIMP 2.10.4 directly(다운로드 김프 2.10.4 다이렉트리)를 클릭하면 직접 연결된 다운로드 형태로 내려받을 수 있다.

Download GIMP 2.10.4 via BitTorrent(다운로드 김프 2.10.4 비아 비트토렌트)를 클릭하면 토렌트 파일 형태로 내려받을 수 있다.

 

(참고) 직접 다운로드가 느릴 경우에 BitTorrent를 사용하면 큰 도움이 될 것으로 보인다.

 

 

 

그림 2-2. 다운로드창(Gimp-2.10.4-setup-2.exe.torrent) - 도도(Dodo)

 

그림 2-2과 같이 다운로드 창이 뜨는 것을 알 수 있다.

 

 

그림 2-3. 토렌트 실행 전 확인 - 도도(Dodo)

 

이 창이 인터넷 익스플로러에서만 뜨는 창이다.

물론 "이 프로그램에 대한 경고를 다시 표시 안 함(S)에 체크를 하게 될 경우 해당 그림 1-4의 모습을 보지 않아도 된다.

 

 

그림 2-4. 토렌트 창 / 다운로드 진행 전 - 도도(Dodo)

 

그림 2-4는 토렌트 다운로드 진행에 관련된 창이다.

설정을 마친 후 "확인"을 누른다.

 

 

그림 2-5. GIMP-2.10.4-setup 진행중 - 도도(Dodo)

 

그림 2-5은 GIMP-2.10.4-setup-2.exe 파일이 내려받는 모습을 보여주고 있다.

몇 분을 기다리면 된다.

 

네트워크(통신) 등에서 토렌트에 관한 기본적인 이야기를 공부할 수 있다.

 

 

그림 2-6. 다운로드가 완료된 GIMP-2.10.4 - 도도(Dodo)

 

그림 2-6은 GIMP-2.10.4의 다운로드가 완료된 모습을 보여주고 있는 그림이다.

 


3. GIMP-2.10.4 설치하기

 

GIMP-2.10.4를 설치하려면, gimp-2.10.4-setup-2.exe를 클릭한다. (더블 클릭)

 

 

그림 3-1. GIMP 설치하기 - 도도(Dodo)

 

 

 

그림 3-2. GIMP 설치 언어 선택하기 - 도도(Dodo)


그림 3-2는 GIMP 설치 언어를 선택하는 창이다.

 

참고로 영어 이외에 한글도 지원한다.

 

 

 

그림 3-3. GIMP 설치하기 - 도도(Dodo)

 

Customize를 누르면 아래의 화면이 뜨고, Install을 누르면 복잡한 설치진행과정은 생략하고 설치를 진행할 수 있다.

 

 

그림 3-4. Customize(커스텀마이즈) / GIMP 설치하기 - 도도(Dodo)

 

그림 3-4는 GIMP에 관한 라이센스이다. http://fsf.org 재단에서 배포하고 있는 라이센스를 적용받고 있다.

Next(다음)을 누른다.

 

 

그림 3-5. 설치 경로 선택하기 - 도도(Dodo)

 

그림 3-5처럼 설치 경로를 잘 선택하도록 한다.

"Next(다음)"을 누른다.

 

 

그림 3-6. Setup / GIMP 선택 구성요소(Select Components) - 도도(Dodo)

 

그림 3-6은 GIMP에 관한 설치 구성요소 등에 관한 것이다.

GTK+라는 프로그램으로 작성된 것으로 추정된다. (GUI 프로그래밍)

파이썬(Python)도 보인다.

 

해당되는 사항에 선택하고 "Next(다음)"을 누른다.

 

 

 

 

 

 그림 3-7, 3-8, 3-9. 3-10. 선택 파일 확장자 - 도도(Dodo)

 

익스플로러(Explorer.exe) 기반의 Shell(쉘)에서 창을 열 때 연결되는 확장자를 선택하라는 뜻이다.

"Next(다음)"을 누른다.

 

 

 

그림 3-11. Select Additional Tasks(추가적인 작업 선택) - 도도(Dodo)

 

그림 3-11은 추가적인 작업 선택에 관한 것이다.

"Create a desktop icon(크리에이트 어 데스크탑 아이콘 / 뜻: 바탕화면 아이콘을 생성)"을 체크하면 바탕화면에 아이콘을 생성할 수 있다.

"Next"(넥스트 / 뜻: 다음)을 누른다.

 

 

 

 

그림 3-12. Setup / GIMP - 도도(Dodo)

 

 

 

 그림 3-12, 그림 3-13. 설치에 관한 사항 - 도도(Dodo)

 

그림 3-12, 그림 3-13은 GIMP Setup에 관한 사항이다.

확인이 되었다면 "Install(인스톨, 뜻: 설치)"을 누른다.

 

 

 

 그림 3-14, 그림 3-15. 설치 진행 중(김프-GIMP) - 도도(Dodo)

 

그림 3-14, 그림 3-15는 설치를 기다리는 중이다.

 

 

그림 3-15. 설치 완료 - 도도(Dodo)

 

그림 3-15는 GIMP 설치가 완료되었다.

사용하면 된다.

 


4. GIMP(김프) 실행하기

 

윈도우 시작메뉴에서 프로그램을 클릭하면 GIMP 2.10.4를 볼 수 있다.

클릭하면 실행하여 사용할 수 있다.

 

그림 4-1. 시작메뉴에서 GIMP 2.10.4 찾기 - 도도(Dodo)

 

 

 

 그림 4-2, 그림 4-3. GIMP 2.10 / 실행 모습 - 도도(Dodo)

 

그림 4-2와 그림 4-2은 GIMP 2.10.4 실행 모습이다.

기다리면 된다.

 


5. GIMP 그림 문서 작성해보기

 

GIMP(김프) 그림 문서 작성에 관한 것이다.

크게 몇 가지를 사용하지 않고 사용할 수 있다.

 

그림 5-1, 5-2, 5-3은 GIMP에 관한 것이다. 크게 어렵지 않을 것으로 보인다.

 

 

 

 

 그림 5-1, 그림 5-2, 그림 5-3. GIMP 2.10.4 사용하기 - 도도(Dodo)

 

아래의 그림은 GIMP를 사용하여 그림을 그린 것이다.

 

 

그림 5-4. 오렌지 그리기 - 도도(Dodo)

 

잘 그린 거 같다.

 

 

그림 5-5. 김프(GIMP) 2.10.4의 파일 내보내기 기능 시연 - 도도(Dodo)

 

파일 형태로 해서 내보내기를 진행할 수 있다. (포토샵 이미지(*.psd)) 등부터 다양한 확장자를 지원한다.

 

 

그림 5-6. 이미지 내보내기로 생성한 PSD 파일 - 도도(Dodo)

 

그림 5-6은 이미지 내보내기를 통해서 생성한 PSD 파일이다.

이외에도 다양한 파일을 지원하고 있다.

 

 

 

그림 5-7. 타 프로그램과의 호환성 - 도도(Dodo)

 

그림 5-7은 SketchBook이라는 프로그램에서 PSD 파일을 불러온 것이다.

호환성은 충분히 좋다고 볼 수 있다.

 

[첨부(Attachment)]

Orange-xcf.7z

Orange-psd.7z

 


6. 프로젝트 참여 방법

 

GIMP 프로젝트에 참여하고 싶은 분들은 아래의 사이트에 접속해서 프로젝트에 참여해도 괜찮다고 볼 수 있다.

https://www.gimp.org/develop/

 

 

그림 6-1. GIMP GNU Project 참여하기 - 도도(Dodo)

 

그림 6-1은 GIMP GNU Project에 대한 현황과 참여하는 방법에 대해서 소개하고 있다.

GIMP Project는 총 라인 "784,850줄"을 자랑하고, "103명"의 기여자(개발자, 번역자, 디자이너, 에디터, 문서 작성팀, 기획자 등)가 존재한다고 볼 수 있다.

 

아래의 사이트에 접속하면, 개발자를 위한 많은 유용한 정보 등을 소개하고 있다.

https://wiki.gimp.org/wiki/Main_Page

 

 

그림 6-2. GIMP 프로젝트 (Wiki) - 도도(Dodo)

 

참고하면 많은 도움을 받을 것으로 보인다.

 

 

그림 6-3. GIMP / Roadmap(로드맵) - 도도(Dodo)

 

새로운 기능 추가 및 버그 등을 잡는 작업을 많이 진행하고 있는 것으로 보인다.

최신 기능 등을 탑재하기 위해서 많은 활동을 하는 것으로 보인다.

 

https://wiki.gimp.org/wiki/Roadmap

 

 

그림 6-4. GIMP에 들어가는 알고리즘의 일부(Flood Algorithms / 플로이드 알고리즘) - 도도(Dodo)

 

구경을 조금 하면, 다음과 같다.

 

 

그림 6-5. Flood Algorithms(플로이드 알고리즘) - 도도(Dodo)

 

궁금하다면, 아래의 사이트에 접속하면, 많은 도움을 받을 수 있을 것으로 보인다.

 

https://gitlab.gnome.org/GNOME/gimp/tree/master/app/operations

 


7. 결론(Conclusion)

 

심도적으로 김프(GIMP) 2.10.4을 사용해보았다.

일러스트와 약간 차이점이 있다면, 레이어를 수동으로 생성한 후에 작업을 진행해야 한다는 점이다.

일러스트에서는 팬(Pan)을 사용하면, 레이어를 생성하지 않아도 팬(Pan) 등이 남아있는데 김프와의 차이점은 이런 점이 아니겠냐는 생각이다.

 


8. 참고자료(Reference)

 

1. GIMP - Downloads, Last Modified, Accessed by 2018-08-18, https://www.gimp.org/downloads/

2. GIMP.org (COPYING), Last Modified, Accessed by 2018-08-18, https://www.gimp.org/about/COPYING

3. GIMP - About, Last Modified, Accessed by 2018-08-18, https://www.gimp.org/about/

4. GIMP - GNU Image Manipulation Program, Last Modified, Accessed by 2018-08-18, https://www.gimp.org/

5. GIMP Developer Wiki, Last Modified 2018-07-13 21:18, Accessed by 2018-08-18, https://wiki.gimp.org/wiki/Main_Page

6. RoadMap - GIMP Developer Wiki, Last Modified  2018-06-28 21:53., Accessed by 2018-08-18, https://wiki.gimp.org/wiki/Roadmap

7. gimpoperationfllod.h - GNOME GIT Labs, Last Modified, Accessed by 2018-08-18,  https://gitlab.gnome.org/GNOME/gimp/blob/master/app/operations/gimpoperationflood.h

8. gimpoperationflood.c - GNOME GIT Labs, Last Modified, Accessed by 2018-08-18, https://gitlab.gnome.org/GNOME/gimp/blob/master/app/operations/gimpoperationflood.c

반응형
728x90
300x250
[PC활용] APMSetup 6 - 설치

 

이번에 소개할 것은 윈도우 환경에서 Apache + PHP + MySQL을 사용할 수 있는 프로그램이다.

비록 오래되긴 했지만 유용하다.

APMSetup 프로젝트에 대해서 내가 알고 있는 것은 꽤 오래된 프로젝트로 알고 있다.

 

한참 전성기에는 홈페이지도 구축했던 프로젝트로 기억한다.

몇 년전에는 웹서버를 운영한다는 것은 정말 어려운 일이었다. 지금은 조금만 하면 가벼운 웹사이트는 오픈소스 등을 활용하여 쉽게 구축할 수 있다.

 

웹 사이트를 구축하기 위해서는 제일 중요한 것으로 웹 서버가 존재해야 한다.

 

사용 프로그램(Using Program): 윈도우 10, APMSetup 6

 


1. APMSetup 6

 

http://kldp.net/apmsetup 사이트에 접속한다.

Release를 누른다.

 

 

 

그림 1-1. APMSetup 설치, 도도(Dodo)

 

2907-APMSETUP6_2009041200을 기준으로 소개하겠다.

 

그림 1-2. APMSETUP 6 다운로드 받기, Kldp

 

지금 보는 이러한 사이트를 미러링 사이트 또는 파일 사이트라고 한다.

anonymous(익명의 계정)으로 ftp 사이트 등을 열어놓는 곳들이 있다.

물론 이건 FTP 사이트는 아니고, 웹 사이트이다.

 

 

그림 1-3. APMSETUP 6 다운로드 받기, Kldp

 

 

 

그림 1-4. APMSETUP 6 언어팩 설정

 

 

 

그림 1-5. APMSETUP 6 설치, 도도(Dodo)

 

설치 마법사가 뜨면 "다음 >" 버튼을 누른다.

 

 

그림 1-6. APMSETUP 6 설치, 도도(Dodo)

 

실제 프로그램은 APMSETUP6이 아니고, Apache, MySQL, PHP 따로 존재한다.

 

 

그림 1-7. APMSETUP 6 설치, 도도(Dodo)

 

광고 등의 메시지가 나온다.

선택사항이다. 다음을 누른다.

 

 

 

그림 1-8. APMSETUP 6 설치, 도도(Dodo)

 

APM_Setup 6 for Win 32(required)는 필수적으로 체크되어있다.

CUBRID 2008은 CURRID라는 오픈소스 데이터베이스가 있다.

이의 사항을 확인하고 다음을 누른다.

 

 

 

 

그림 1-7. APMSETUP 6 설치, 도도(Dodo)

 

설치 경로를 선택하고 설치를 누른다.

 

 

그림 1-8. APMSETUP 6 설치마법사, 도도(Dodo)

 

APMSetup의 설치 진행 마법사가 진행된다.

지금 장면은 PhpMyAdmin(오픈소스: PHP기반)도 함께 설치되는 모습이다.

 

 

그림 1-9. 방화벽 동의, 도도(Dodo)

 

웹 서버를 사용하면, 포트 등으로 인해 방화벽 해제를 요구한다.

확인을 누른다.

localhost에서 사용할 경우에도 방화벽 해제는 중요하다.

 

 

그림 1-10. 설치 완료, 도도(Dodo)

 

설치가 완료되었다.

아래의 하단에 보면 APMSetup의 아이콘이 뜬다.

녹색으로 된 아이콘에 마우스를 오른쪽 버튼을 누르면 아래와 같이 메뉴가 뜨는 것을 확인할 수 있다.

 

 

그림 1-11. 하단 아이콘 (APMSetup), 도도(Dodo)

 

그림 1-12. APMSetup 6 프로그램

 

그림 1-12는 APMSetup 6이라는 프로그램을 말한다.

Apache Foundation의 Apache 2.2, Oracle의 MySQL Community Edition, PHP.net의 php 5.2가 담겨져 있다.

 

이 프로그램들을 관리하고 실행하는데 도와주는 프로그램이 APMSetup이다.

물론 APMSetup 6이 없어도 Apache 2.2, MySQL, PHP 5.2는 각각 독립적으로 실행이 가능하다.

 

 

 

그림 1-13. Localhost 웹 사이트, 도도(Dodo)

 


2. 참고자료(Reference)

 

1. "/apmsetup/release", kldp, https://kldp.net/apmsetup/release/, Accessed by 2018-08-05

반응형
728x90
300x250

[Windows 10] Installation to Windows 10(윈도우 10 설치하기)

 

윈도우 10 설치하는 방법에 대해서 소개한다.

 

* 소프트웨어 구분: 상용 소프트웨어

 


1. 설치방법

 

Press any key to boot from CD or DVD가 나오면 아무키나 누른다.

 

 

그림 1-1. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-2. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-3. 윈도우 10 - 설치하기, 도도(Dodo)

 

다음을 클릭한다.

 

 

그림 1-4. 윈도우 10 - 설치하기, 도도(Dodo)

 

지금 설치(I)를 누른다.

윈도우 10의 설치 기능에서 "시스템 복구"를 누르면 복원도 가능하다. 단, 백업 이미지가 있으면 가능하다.

 

 

그림 1-5. 윈도우 10 - 설치하기, 도도(Dodo)

 

시디키 입력창이 뜬다. 제품키가 있는 경우에는 입력하고, 제품키가 없는 경우에는 "제품 키가 없음(I)"를 클릭한다.

 

 

그림 1-6. 윈도우 10 - 설치하기, 도도(Dodo)

 

운영체제를 선택한다.

 

 

 

그림 1-7. 윈도우 10 - 설치하기, 도도(Dodo)

 

동의함에 체크하고 다음(N)을 누른다.

 

 

그림 1-8. 윈도우 10 - 설치하기, 도도(Dodo)

 

업그레이드(U)와 사용자 지정(C) 설치가 있다.

업그레이드의 경우에는 "기존 윈도우가 설치되어 있어야 하고, 이전의 버전이어야 한다. 그리고 업그레이드 대상 버전의 윈도우를 사용해야만 한다"라는
제약조건이 있다.

사용자 지정(C) 설치를 누른다.

 

 

그림 1-9. 윈도우 10 - 설치하기, 도도(Dodo)

 

새로 만들기(E)를 클릭한다.

 

 

그림 1-10. 윈도우 10 - 설치하기, 도도(Dodo)

 

용량 크기를 지정하고 적용(P)를 클릭한다.

 

 

그림 1-11. 윈도우 10 - 설치하기, 도도(Dodo)

 

확인을 누른다.

 

 

그림 1-12. 윈도우 10 - 설치하기, 도도(Dodo)

 

디스크를 선택한다. 그리고 다음(N)을 클릭한다.

 

 

그림 1-13. 윈도우 10 - 설치하기, 도도(Dodo)

 

설치가 진행되는 모습을 살펴볼 수 있다.

 

 

그림 1-14. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-15. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-16. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-17. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-18. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-19. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-20. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-21. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-22. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-23. 윈도우 10 - 설치하기, 도도(Dodo)

 

약 재부팅이 2번 정도 된다. 재부팅 후 기다린 화면이다. 해당 국가 언어를 선택한다.
그리고 "예"를 클릭한다.

 

 

그림 1-24. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-25. 윈도우 10 - 설치하기, 도도(Dodo)

 

자판기의 배열을 클릭한다.
큰 의미가 최근에는 없는 듯하다.

"Microsoft 입력기"를 클릭 후 "예"를 클릭한다.

 

예전에는 2벌식, 3벌식 키보드가 있었다고 한다.

 

 

 

그림 1-26. 윈도우 10 - 설치하기, 도도(Dodo)

 

레이아웃이 특별하게 선택할 게 없다면 "건너뛰기"를 누른다.

 

 

그림 1-27. 윈도우 10 - 설치하기, 도도(Dodo)

 

기다리도록 한다.

 

 

그림 1-28. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-29. 윈도우 10 - 설치하기, 도도(Dodo)

 

개인용 설정과 조직용 설정이 뜬다.
이것도 큰 의미는 없긴 하다. 개인용 설정을 누른다.

 

 

그림 1-30. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-31. 윈도우 10 - 설치하기, 도도(Dodo)

 

윈도우 8.1 설치에서도 유사한 화면을 경험했을 것이다.

차이점은 오프라인 계정(윈도우 자체 계정)을 생성할 수 있도록 해놨다.

오프라인 계정을 누른다면, 윈도우 자체 계정을 생성할 수 있다.

 

MSN 계정을 생성하여 윈도우 로그인을 하고 싶은 경우에는 로그인을 해도 무방하다.

 

오프라인 계정을 누른다.

 

 

그림 1-32. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-33. 윈도우 10 - 설치하기, 도도(Dodo)

 

계정명을 입력한다.

 

 

그림 1-34. 윈도우 10 - 설치하기, 도도(Dodo)

 

암호를 넣고 싶은 경우에는 입력하고, 넣기 싫은 경우에는 다음을 클릭한다.

 

 

그림 1-35. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-36. 윈도우 10 - 설치하기, 도도(Dodo)

 

음성인식 옵션 등이 있다. 수락을 누른다.

물론 사용하기 싫은 경우에는 "아니오" 등을 체크할 수 있다.

 

 

그림 1-37. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-38. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-39. 윈도우 10 - 설치하기, 도도(Dodo)

 

 

그림 1-40. 윈도우 10 - 설치하기, 도도(Dodo)

 

윈도우 10 설치가 완료되었다.

네트워크에 관한 질문이 오른쪽에 뜬다.

 

큰 의미는 없다. 회사 네트워크 또는 공용 네트워크 등.

기능상 차이이지 다시 재설정을 해서 바꿀 수도 있다.

 

아니오를 누른다.

 


2. 윈도우 설치 후 드라이버 설치할 것

 

 

그림 2-1. 윈도우 10 - 설치하기, 도도(Dodo)

 


3. 윈도우 10을 다운받고 싶다면

 

윈도우 10을 다운받고 싶다면, 아래의 사이트에 접속해서 다운 받을 수도 있다.

https://www.microsoft.com/ko-kr/software-download/windows10, Accessed By 2018-07-31

 


4. 윈도우 10 요구사항

 

디스플레이:  800x600


PC 또는 태블릿에서 Windows 10으로 업그레이드하려면 최소한 다음과 같은 사양을 갖춘 하드웨어가 필요하다.
업그레이드 가능 여부에 영향을 미치는 추가 요소를 알아보려면 아래 내용을 읽어 봐라.

[최신 OS]
Windows 7 SP1 또는 Windows 8.1 Update의 최신 버전을 실행 중인지 확인해라.


어떤 버전을 실행 중인지 확인하고 싶은 경우 여기를확인해서 찾아봐라. 최신 버전을 다운로드하려는 경우 Windows 7 SP1용 또는 Windows 8.1 Update의 경우 여기를 클릭해라

 

프로세서

 1GHz 이상 프로세서 또는 SoC 

RAM

 1GB(32비트) 또는 2GB(64비트) 

하드 디스크 공간

 16GB(32비트 OS의 경우) 또는 20GB(64비트 OS의 경우) 

그래픽 카드

 DirectX 9 이상(WDDM 1.0 드라이버 포함) 

디스플레이

 800x600 

 


5. 참고자료(Reference)

 

1. https://www.microsoft.com/ko-kr/software-download/windows10, Accessed By 2018-07-31
2. https://www.microsoft.com/ko-kr/windows/windows-10-specifications#primaryR2, Accessed By 2018-07-31

반응형
728x90
300x250

[네트워크(Networks)] C#, C++, Java에서의 소켓 프로그래밍

이번에 소개할 것은 C#, C++, Java에서 소켓 프로그래밍을 사용하는 방법에 대해서 소개한다.


1. 소스코드

C#에서의 소켓 프로그래밍 작성 예시이다.
IPv4 환경에서 확인함.

운영체제: Microsoft Windows 10
소프트웨어: Visual Studio Community 2015

 


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;

namespace Example
{
    class ServerSide
    {
        public string data = null;

        public void listenSocket()
        {
            byte[] buf;
            Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 8088);

            server.Bind(ipEndPoint);
            server.Listen(10);

            System.Console.WriteLine("연결 요청(Connection Request)");

            // 클라이언트 연결 받음.
            Socket client = server.Accept();

            // 클라이언트의 데이터 - 보내기 / 받기
            buf = new byte[1024];
            client.Receive(buf);

            System.Console.WriteLine(Encoding.Default.GetString(buf));

        }
    }

    class ClientSide
    {
        public void listenSocket()
        {
            //IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
            //IPAddress ipAddress = ipHostInfo.AddressList[0];
            // IPEndPoint ipep = new IPEndPoint(ipAddress, 8088);

            IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8088);
            String buf;
            Byte[] data;
           
            Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            client.Connect(ipep);

            Console.WriteLine("소켓 연결(Socket connect)");

            // 데이터 자료 바이트 형으로 받아오기
            data = new byte[1024];
            client.Receive(data);

            // 형 변환 -> getString() 형으로 인코딩
            buf = Encoding.Default.GetString(data);

            Console.WriteLine(buf);

            buf = "소켓 접속 확인 됐습니다.";
            data = Encoding.Default.GetBytes(buf);

            client.Send(data);
            client.Close();

            Console.WriteLine("아무 키나 눌러주세요.");
            Console.ReadLine();

        }
    }
}
 

 NetworkSide.cs

 

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;

 namespace Example
 {
       class Program
       {
               static void Main(string[] args)
               {
                       ServerSide serverside = new ServerSide() ;
                       serverside.listenSocket();
               }
       }
 } 

Program.cs

[첨부(Attachment)]
network_csharp.7z


2. (Gpp)C++에서의 소켓 프로그래밍 작성 예시입니다. (리눅스에서만 가능)

C언어로 구현된 소켓 프로그래밍을 C++에서도 지원이 가능한 형태로 제작하였다.
IPv4 기반에 맞춰 작성함.

 

 

 

운영체제: 우분투(Ubuntu 16.04)
소프트웨어: Gpp, Gcc

 

 

/*
 *   Network.h
 */

 #include <iostream>
 #include <unistd.h>
 #include <netinet/in.h>
 #include <sys/socket.h>
 #include <sys/types.h>
 #include <arpa/inet.h>

 using namespace std;

 #ifndef SERVER_H_
 #define SERVER_H_

 // 0.
 class INetwork{
       virtual void listenSingleSocket() = 0;
 };

 // 1. 서버사이드(Server-Side)
 class Server : public INetwork{

 protected:

 private:
     int welcomeSocket, newSocket;

 public:
     Server(){
            this->welcomeSocket = 0;
            this->newSocket = 0;
     }

     void listenSingleSocket(){

           char buffer[1024];
           struct sockaddr_in serverAddr;
           struct sockaddr_storage serverStorage;
           socklen_t addr_size;

           welcomeSocket = socket(PF_INET, SOCK_STREAM, 0);

           serverAddr.sin_family = AF_INET;
           serverAddr.sin_port = htons(8000);
           serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");

           int i = 0;

           while(i < sizeof(serverAddr.sin_zero) ){
                 serverAddr.sin_zero[i] = '\0';
                 i++;
           }

           bind(welcomeSocket, (struct sockaddr *) &serverAddr, sizeof(serverAddr) );

           if ( listen(welcomeSocket, 5) == 0 ){
                  cout << "Listening\n";
           }
           else
          {
                 cout << "Error\n";
          }

           addr_size = sizeof(serverStorage);
           newSocket = accept(welcomeSocket, (struct sockaddr *) &serverStorage, &addr_size);

           buffer[0] = 'H';
           buffer[1] = 'e';
           buffer[2] = 'l';
           buffer[3] = 'l';
           buffer[4] = 'o';

           send(newSocket, buffer, 13, 0);

     }

 };

 class Client : public INetwork{

 private:
         int clientSocket;
         char buffer[1024];
         struct sockaddr_in serverAddr;
         socklen_t addr_size;

 public:
         Client(){
               this->clientSocket = 0;
         }

         void listenSingleSocket(){

              clientSocket = socket(PF_INET, SOCK_STREAM, 0);

               serverAddr.sin_family = AF_INET;
               serverAddr.sin_port = htons(8000);

               serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");

               int i = 0;
               while (i < sizeof(serverAddr.sin_zero)){
                      serverAddr.sin_zero[i] = '\0';
                       i++;
               }

                addr_size = sizeof(serverAddr);

                connect(clientSocket, (struct sockaddr *) &serverAddr, addr_size);

                // 문자열 전달 받음 - (unsigned) char[1024]
                recv(clientSocket, buffer, 1024, 0);
                cout << "데이터 전송 받은 문자:" << buffer << endl;
          }

};

#endif /* SERVER_H_ */

 Network.h

 #include <iostream>
 #include "Network.h"

 using namespace std;

 int main() {
        /*
        Server *server = new Server();
        server->listenSingleSocket();
        */

       Client *client = new Client();
       client->listenSingleSocket();
       return 0;
 }

 Program.cpp

[첨부(Attachment)]
Network-gpp.zip


3. 자바에서의 소켓 프로그래밍

싱글 쓰레드 타입으로 작성함. IPv4 환경에서 확인하였다.
IPv6는 확인하지 못함.

 

 

 

운영체제: Microsoft Windows 10 
소프트웨어: Eclipse Luna, JDK 1.81

 

 
 package Network;

 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.net.Socket;
 import java.net.UnknownHostException;

 public class ClientSide implements IHost{
 
        private Socket socket;
        private Host host;
 
        public ClientSide(){
            socket = null;
            host = null;
        }
 
        public Host getHost(){
            return host;
        }
 
        public void setHost(Host host){
            this.host = host;
        }
 
        public void listenSocket(){
  
            InputStream in = null;
            OutputStream out = null;
  
            BufferedReader br = null;
            BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
            PrintWriter pw = null;
  
            String myMsg = null;  // 전달 메시지
            String echo = null;  // 받은 메시지
  
            try{
                 socket = new Socket( host.getIP() , host.getPort() );
    
                 in = socket.getInputStream();
                 out = socket.getOutputStream();
   
                 pw = new PrintWriter(new OutputStreamWriter(out));
                 br = new BufferedReader(new InputStreamReader(in));
   
                while((myMsg = input.readLine()) != null){
    
                      if ( myMsg.equals("/q")){
                            break;
                      }
    
                      pw.println(myMsg);
                      pw.flush();
    
                      echo = br.readLine();
                      System.out.println( "서버사이드 받은 메시지:" + echo );
     
                }
   
                pw.close();
                br.close();
                socket.close();
   
        }
        catch(UnknownHostException e){
                System.out.println("미확인 호스트: " + host.getIP() + ":" + host.getPort() );
                System.exit(-1);
        }
        catch(IOException e){
                System.out.println("입출력 안됨.");
                System.exit(1);
        }

    }
 
}

 ClientSide.java

 
 package Network;

 interface IHost{
        void setHost(Host host);
        Host getHost();
 }

 public class Host{
 
        private String ip;
        private int port;
 
        public Host(int port){
              ip = "";
              this.port = port;
        }
 
        public Host(String ip, int port){
                this.ip = ip;
                this.port = port;
        }
 
        public String getIP(){
                return this.ip;
        }
 
        public int getPort(){
                return this.port;
        }
 
 }

 Host.java

 
 package Network;

 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.net.ServerSocket;
 import java.net.Socket;

class ClientWorker implements Runnable{

         private int id;
         private Socket client;
         private String line;
 
         public ClientWorker(Socket client, int id){

              this.client = client;
              this.id = id;
         }
 
         public void run() {
  
             InputStream in = null;
             OutputStream out = null;
  
             PrintWriter pw = null;
             BufferedReader br = null;
  
             String recvStr = "";

             try{
                 in = client.getInputStream();
                 out = client.getOutputStream();
   
                 pw = new PrintWriter(new OutputStreamWriter(out));
                 br = new BufferedReader(new InputStreamReader(in));
   
             }catch(IOException e){
                 System.out.println("읽기 실패(Read Failed)");
                 System.exit(-1);
             }

             try {
   
                  while( (recvStr = br.readLine() ) != null ){
    
                        appendText(recvStr);
                        System.out.print( "쓰레드(Thread)" + id + ":" );
                        System.out.println(line);
                        pw.println(recvStr);
                        pw.flush();
                  }
   
                  client.close();
   
             } catch (IOException e) {
                   System.out.println("읽기 실패(Read Failed");
                   System.exit(-1);
             }
  
       }
 
        // 동기화 추가
        public synchronized void appendText(String strText){
  
              if ( line == null )
              {
                   line = strText;
              }
              else{
                   line = line + strText;
              }
        }
 
 }

 public class ServerSide implements IHost{

         private ServerSocket server;
         private Socket client;
         private Host host;
         private static int clientID;
 
         public ServerSide(){
                server = null;
                client = null;
                host = null;
                clientID = 0;
         }
 
         public Host getHost(){
                return host;
          }
 
          public void setHost(Host host) {
                 this.host = host;
          }
 
          // 싱글(Single)
          public void listenSingleSocket(){

                String line;
   
                InputStream in = null;
                OutputStream out = null;
  
                PrintWriter pw = null;
                BufferedReader br = null;
  
                String recvStr = null;
  
                try{   
                      server = new ServerSocket( host.getPort() ); 
                }
                catch(IOException e){
                      System.out.println("포트 " + host.getPort() + "번은 응답하지 않습니다.");
                      System.exit(-1);
                }
  
                try{
                      client = server.accept();
                }
                catch(IOException e){
                      System.out.println("응답 실패: 포트 " + host.getPort() + "번");
                      System.exit(-1);
                }
  
                try{
                      in = client.getInputStream();
                      out = client.getOutputStream();
   
                      pw = new PrintWriter(new OutputStreamWriter(out));
                      br = new BufferedReader(new InputStreamReader(in));
   
                }catch(IOException e){
                      System.out.println("읽기 실패(Read Failed)");
                      System.exit(-1);
                }

                try {
   
                     while( (recvStr = br.readLine() ) != null ){
     
                            System.out.print( "싱글" );
                            pw.println(recvStr);
                            pw.flush();
                    }
   
                   client.close();
                   server.close();
   
              } catch (IOException e) {
                     System.out.println("읽기 실패(Read Failed");
                     System.exit(-1);
              }
  
         }

        // 멀티(Multi-Threading)
        public void listenMutliSocket(){
   
              ClientWorker w = null;

              try{
                  server = new ServerSocket( host.getPort() ); 
              }
              catch(IOException e){
                  System.out.println("포트 " + host.getPort() + "번은 응답하지 않습니다.");
                  System.exit(-1);
              }
  
              try{
                   while(true){
   
                        w = new ClientWorker( server.accept(), clientID++ );
  
                        Thread t = new Thread(w);
                        t.start();
                   }
   
             }
             catch(IOException e){
                  System.out.println("응답 실패: 포트 " + host.getPort() + "번");
                  System.exit(-1);
             }
  
       }
  
       protected void finalize(){
  
             try{
                  server.close();
             }catch(IOException e){
                  System.out.println("소켓을 종료할 수 없습니다.");
                  System.exit(-1);
             }
  
       }

 }

 ServerSide.java

 package Network;

 public class Example{
 
        public static void main(String[] args){
  
             ServerSide server = new ServerSide();
             Host host = new Host(10001);
             server.setHost(host);
             server.listenMutliSocket();
        }
 }

 Example.java

[예제 - 첨부(Attachment)]
Network.zip


4. IPv4와 IPv6

 

네트워크와 관련된 주제로 IPv4와 IPv6에 대해서 소개한다.

 4-1. IPv4 

 IPv4는 인터넷 프로토콜의 4번째 판이며, 전 세계적으로 사용된 첫 번째 인터넷 프로토콜이다.

 과거에 인터넷에서 사용되는 유일한 프로토콜이였으나 오늘날에는 IPv6이 대중화되었다. IETF RFC 791(1981년 9월)에 기술되어 있다.

 IPv4는 패킷 교환 네트워크 상에서 데이터를 교환하기 위한 프로토콜이다. 데이터가 정확하게 전달될 것을 보장하지 않고,
 중복된 패킷을 전달하거나  패킷의 순서를 잘못 전달할 가능성도 있다. 데이터의 정확하고 순차적인 전달은 그보다 상위 프로토콜인
 TCP에서(그리고 UDP에서도 일부) 보장한다.

 IPv4의 주소체계는 총 12자리이며 네 부분으로 나뉜다. 각 부분은 0~255까지 3자리의 수로 표현된다. IPv4 주소는 32비트로 구성되어 있으며,
 현재 인터넷 사용자의 증가로 인해 주소공간의 고갈에 대한 우려가 높아지고 있다. 이에 따라 대안으로 128비트 주소체계를 갖는 IPv6가 등장하였다.

 중국의 경우 주소공간 고갈을 우려하여 일부에서 독자적으로 IPv9(십진제 인터넷 주소체계)과 숫자도메인(Digital Domain Name System, DDNS)이
 결합된 개념인 IP 주소와 도메인 이름이 동일한 네트워크 체제인 All-Digital-Domain-Address (ADDA)를 사용하기도 한다.

 2011년 2월 4일부터 모든 IPv4 주소가 소진되어 IPv4의 할당이 중지되었다.

 

CLASS 구성 범위
A 클래스 xxx.xxx.xxx.xxx 1.0.0.1 ~ 126.255.255.254 61.211.123.22
B 클래스 xxx.xxx.xxx.xxx 128.0.0.1 ~ 191.255.255.254 181.123.211.33
C 클래스 xxx.xxx.xxx.xxx 192.0.0.1 ~ 223.255.255.254 221.23.222.222
D 클래스 224.0.0.0 ~ 239.255.255.255
E 클래스 240.0.0.0 ~ 254.255.255.254

 그림 4-1-1. 쿼드 점으로 구분 된 IPv4 주소 표현을 이진 값으로 분해.

 이건 조금 해결할 수는 있을 듯하다. 다만 이것도 계산이 더럽다고 볼 수 있다.
 아래는 172에 대해서 해결한 것이다.

10 |  10  |  110  | 0  

  10 = | Flag |
  128번 = 000000
  129번 = 000001

   .........
  172번 = 101100

 

 4-2. IPv6

 인터넷 프로토콜 버전 6 (IPv6)은 네트워크상의 컴퓨터에 대한 식별 및 위치 시스템을 제공하고 인터넷을 통해 트래픽을 라우팅하는
 통신 프로토콜 인 IP (인터넷 프로토콜)의 최신 버전이다.

 
IPv6는 오랫동안 예상되었던 IPv4 주소 고갈 문제를 해결하기 위해 IETF (Internet Engineering Task Force)에서 개발되었다.
 
IPv6은 IPv4를 대체하기 위한 것이다. IPv6는 1998 년 12 월에 초안 표준이되었고, 2017 년 7 월 14 일에 인터넷 표준이 되었다.

 인터넷상의 모든 장치에는 식별 및 위치 정의를 위해 고유 한 IP 주소가 할당된다.
 
1990 년대의 상용화 이후 인터넷의 급속한 성장으로 인해 IPv4 주소 공간보다 장치를 연결하는 데 훨씬 많은 주소가 필요할 것이다.

 
1998 년까지 IETF (Internet Engineering Task Force)는 후임 프로토콜을 공식화했다.
 
IPv6은 128 비트 주소를 사용하며 이론적으로 2128 개 또는 약 3.4 × 1038 개 주소를 허용한다.

 
여러 개의 범위가 특수 용도로 예약되었거나 완전히 사용되지 않도록 실제 숫자가 약간 더 작다.
 
가능한 IPv6 주소의 총 수는 32 비트 주소를 사용하고 약 43 억 개의 주소를 제공하는 IPv4의 7.9 × 1024 배이다.
 
 
이 두 프로토콜은 상호 운용성을 위해 설계되지 않았기 때문에 IPv6 로의 전환이 복잡해졌다.
 
그러나 IPv4와 IPv6 호스트 간의 통신을 허용하기 위해 몇 가지 IPv6 전환 메커니즘이 고안되었다.

 IPv6은 더 큰 주소 지정 공간 외에도 다른 기술적 이점을 제공한다.
 
특히 인터넷을 통한 경로 집계를 용이하게 하는 계층적 주소 할당 방법을 허용하므로 라우팅 테이블의 확장을 제한한다.
 
멀티 캐스트 주소 사용은 확장되고 단순화되며 서비스 제공을위한 추가 최적화를 제공한다.

 장치의 이동성, 보안 및 구성 측면이 프로토콜 설계시 고려되었다.

 IPv6 주소는 그룹이 콜론으로 구분 된 네 개의 16 진수 8 개의 그룹으로 표시된다.
 (예: 2001:0db8:0000:0042:0000:8a2e:0370:7334).이 전체 표기법을 줄이는 방법이 있다.

 

그림 4-2-1. IPv6 주소 표현을 이진 형식으로 분해

 IPv6를 사람 손으로 푼다고 하면, 매우 많은 노가다가 필요하다.
 각 옥탯에 있는 16진수를 일일이 하나 하나씩 해결해야 한다.

4-3. IPv6의 패킷헤더

 



그림 4-3-1. IPv6의 패킷해더

 IPv6의 패킷해더이다. IPv6로 데이터를 송수신하면 이런 형태로 전송이 되는 것을 관찰할 수 있다.
 리눅스에 패킷 분석 툴킷이 있는데 한번 패킷해더를 추적해봐도 좋을 것이다. 

 이 패킷해더를 관찰하는 대표적인 툴킷(Tool-kits)으로 WireShark가 있다.

  
 그림 4-3-2. WireShark 시연 예

 [IPv4 to IPv6에 관한 이야기]

 IPv6를 실제로 사용하려면 많은 조건이 필요하다.
 IPv4에서 IPv6로 변환해줄 수 있는 변환장치 등이 필요하다.
 터널링도 하나의 기법이 될 수 있다.


5. 참고자료(Reference)

 

1. IPv4, Wikipedia, https://ko.wikipedia.org/wiki/IPv4, Accessed by 2018-07-27
2. IPv6, Wikipeida, https://en.wikipedia.org/wiki/IPv6, Accessed by 2018-07-27
3. IPv6 OSPFv3 ESP Packets and Decrypting with Wireshark, https://packetpushers.net/ipv6-ospfv3-esp-packets-and-decrypting-with-wireshark/, Accessed by 2018-07-27

반응형

+ Recent posts