공대생 워누입니다!

자바는 하면 할수록 그래도 흥미가 조금씩 생기는 것 같습니다.

알면 알수록 빠져드네요ㅎㅎ

지금 포스팅할 것도 과제 중 하나입니다. 숫자로 삽입 수정 삭제 연산을 하고 나서 오름차순, 내림차순을 결정하면 그 순서대로 정렬시켜주는 프로그램입니다. 생각해보면 조금 더 개선할 수 있었을텐데, 과제할 당시에는 잘 생각이 안났나봐요.. (너그러이 이해를..) 어쨌든 포스팅 해보겠습니다.

.

.

[ArrayListProgram.java -> 프로그램 실행 지점, 삽입, 수정, 삭제 연산 기능 제공]

(2장입니다만, 60-61번줄이 겹치므로 주의하셔야 합니다.)

.

 

[Descending.java -> 내림차순으로 정렬하는 클래스]

.

 

[Ascending.java -> 오름차순으로 정렬하는 클래스]

.

[결과 화면]

 

흐음.. 이건 제가 어떻게 구상해서 작성했는 지 보여드리는 것이 제일 좋을 거 같네요. 어떤 과제였고, 어떻게 풀어나갔는지 오늘은 시나리오를 작성하여 보여드렸습니다.

 

[수행 과제]

1. 데이터를 화면으로 부터 입력 받는다.

(수치데이터, 문자 데이터 모두 가능)

2. 입력 데이터 : 10개 이상 20개 미만

3. 입력된 데이터 화면 출력

- (실행 화면상에서 입력처리)

4. 입력된 데이터에 수정 값 입력 :

5. 입력된 데이터에 삭제 기능 :

6. 입력된 데이터에 삽입 기능 :

-

7. 실행 화면에서 내림 차순과 오름 차순 선택

) 내림 차순 : 1/ 오름 차순 : 0

-

8. 입력된 데이터 정렬 출력

.

 

[수행 과제에 따른 시나리오]

1~3 : 데이터를 화면으로 입력받는다. 입력 데이터는 10~20, 입력된 데이터는 화면으로 출력해야 한다.

Scanner 클래스를 사용하여 입력을 받겠습니다. Java 1.5이상부터 사용하기 쉽고 편리한 메서드가 많은 이유입니다.

입력 데이터를 10개 이상 받아야 하기 때문에 ArrayList 클래스를 사용하여 배열을 선언하고 배열 공간 안에 데이터를 출력 화면상으로 입력하여 바로 출력해줘야 합니다. 저는 처음 배열의 공간을 15로 정하고 15개의 데이터를 받아 바로 출력하는 것을 만들 것입니다.

 

4~6 : 입력된 데이터에 수정 값 입력 후 삽입, 기능 추가

ArrayList 클래스에 소속된 메서드 중 add(삽입), set(수정), remove(삭제) 메서드를 이용해서 기능을 추가합니다.

위의 세 가지 기능과 기능을 사용하지 않을 경우를 생각하여 switch-case문을 활용하여 원하는 번호를 입력하고 그 번호에 따라서 삽입, 수정, 삭제, 사용하지 않음을 선택하도록 만듭니다.

 

7. 실행 화면에서 내림차순과 오름차순을 선택

if문을 사용해서 입력 값을 주었을 때 2를 나눈 나머지가 홀수일 경우 내림차순, 짝수일 경우 오름차순을 수행하도록 프로그램을 작성합니다. , 입력 값에 따라 배열의 결과를 오름차순이나 내림차순, 둘 중 하나로 선택할 수 있습니다.

 

8. 입력된 데이터를 정렬, 출력

7번 과정을 통해 수행된 정렬방식(오름차순 or 내림차순)을 출력합니다.

.

.

이런 시나리오를 이용해서 코딩을 했더니 생각없이 하게 되었어요..ㅎ 객체지향의 장점을 놨두고 죄다 저렇게 작성을 했으니ㅋㅋㅋ 어쨌든 참고하실 분들은 참고하시기를 바랍니다. 비판 지적 환영합니다! 그럼 다음 포스팅에 뵐게요! 아농~

블로거 워누입니다!

현재 제가 다니는 학교에서 진행하는 프로젝트 중 SDN을 구현하는 프로젝트에 참여하게 되었습니다. 간단하게 SDN이 어떻게 동작하는지 실제로 구현하는 게 목적인데요. 한국에선 아직 선보일 만한 예시가 없습니다. 아마 SDN을 제대로 구현해 본다면 저에게 제대로 된 하나의 스펙이 될거 같네요 ㅎㅎ

.

거두절미하고 바로 본론으로 넘어가죠! 이곳엔 그저 프로젝트의 기록을 끄적일 겁니다. 작성한 날 까지의 기록만 남겨놓겠습니다.

.

일단 용어를 알아봅시다. 제가 이 프로젝트를 시작하면서 SDN이 뭘까 하며 용어에 대해서 조사하던 중 주요 키워드 3가지를 발견하였습니다. 바로 SDN과 NFV, 그리고 OpenFlow라는 말입니다. 그럼 일단 이 3가지에 대하여 알아봅시다.

.

SDN은 Software Define Network의 약자로, 소프트웨어 프로그래밍을 통해 네트워크 경로 설정과 제어 및 복잡한 운용 관리를 편리하게 처리할 수 있는 차세대 네트워킹 기술입니다. 이를 위해 SDN에서는 네트워크의 데이터 평면(data plane)과 제어 평면(control plane)을 분리하고 이 사이에 표준화된 인터페이스를 제공하며, 네트워크 운용자가 여러 상황에 맞추어 제어 평면을 프로그래밍하여 데이터 평면에서 이루어지는 통신 기능을 다양한 방식으로 제어할 수 있습니다.

 

[출처 : 네이버 지식백과 - 주요 네트워크 기술 (사물인터넷의 미래, 2014. 11. 28., 한국전자통신연구원(ETRI), 전자신문사)]

.

NFV는 Network Function Virtualization의 약자로 네트워크 기능 가상화라고도 합니다. 통신망 구성에 필요한 하드웨어를 소프트웨어화해서 서버 단에서 구현하는 기술입니다. 세계 주요 통신사들이 사업자 통신망 장비의 기능들을 가상화하여 네트워크의 유연성을 높이므로 하드웨어 장비를 줄일 수 있습니다. 설비투자(CAPEX)와 운용비(OPEX), 설치 면적, 에너지 소비량 등이 줄어드는 효과를 얻을 수 있습니다. 소프트웨어정의네트워킹(SDN) 제어 영역(control plane)의 중앙 집중화와 데이터 센터의 가상화가 융합되고 있습니다.

 

[출처 :네이버 지식백과 - 네트워크 기능 가상화 [Network Function Virtualization, -機能假想化] (IT용어사전, 한국정보통신기술협회)]

.

OpenFlow는 네트워크 장비의 패킷 포워딩(packet forwarding) 기능과 제어(control) 기능을 표준 인터페이스로 분리하여 네트워크 개방성을 제공하는 통신 프로토콜입니다.

사용자 데이터 트래픽에 영향을 주지 않고 네트워크를 통한 가장 알맞은 전송 경로를 정의하여 줍니다. 미국 스탠포드와 UC 버클리 대학에서 약 6년간 공동 연구 결과로 제안한 것으로, 인터넷의 네트워크 제어를 사용자가 소유할 수 있도록 각종 플로우를 정의하고 각각의 플로우가 최적의 전송 경로로 흐를 수 있도록 정의하는 라우팅 프로토콜입니다. OpenFlow는 인터넷 스위치, 라우터 등의 제어 평면(Control Plane)에 탑재될 수 있으며, 소프트웨어 정의 네트워킹(SDN: Software-Defined Networking) 기술에 사용됩니다.

 

[출처 :네이버 지식백과 - Openflow (IT용어사전, 한국정보통신기술협회)]

 

일단 한글로 알아 듣기에는 네이버 백과사전이 제일 적합한 거 같아서 출처를 남기고 가져왔습니다. 저희는 추가적으로 위키백과에 나온 사이트를 해석하고 공부하였습니다. (해당 사이트 주소는 맨 아래에 남겨놓았습니다. )

.

하지만 역시 사람은 글을 백번 읽어봐야 소용 없습니다. 어떻게 되는 것인지 그림이나 구현된 걸 체험해 봐야 합니다.... ㅎ 어쨌든 괜찮아 보이는 그림이 있어서 그걸 먼저 보겠습니다!

 

 

[소프트웨어 정의 네트워크 구조]

[소프트웨어 정의 무선 센서]

[그림 출처 : 네이버 지식백과 - 주요 네트워크 기술(사이트는 아래에 있습니다.)]

.

쉽게 말하면 네트워크 장비의 제어를 하드웨어가 아닌 네트워크로 한다는 이야기 입니다. 그리고 그 중간에서 OpenFlow가 인터페이스를 제공해주는 듯 합니다. 처음 접할 때는 "가능할까? 왜 필요하지 저렇게?" 라고 생각해서 그 부분도 조사를 진행해 보았는데요. 조사를 하면 할수록 "반드시 필요하구나.." 라는 생각으로 바뀌더라구요. 왜 SDN이 주목할 만한 기술이며 왜 탄생해야 했는가를 간단하게 중요한 것들만 요약하자면,

1. 모바일 기기 급증, 클라우드 기반 가상화 서비스 등장으로 인한 트래픽 패턴 변화.

2. 통신 환경의 급격한 변화

3. 3-4년 정도에 이르는 네트워크 장비 제품 수명 주기

이 세가지 입니다. 저 세가지가 과거에는 전~~혀 문제가 되지 않았으나, 현재 기술은 빠르게 발전하는데 반해, 처리할 수 있는 용량이나 속도에 한계가 있는 것이었습니다. 게다가 하드웨어 장비는 수명이 길어봐야 4년 정도라고 하니 한 번 샀다가 기술이 변하면 기존의 장비를 버릴 수밖에 없다는 경제적인 문제도 발생을 하다 보니 하드웨어 장비로만 네트워크를 다루기에는 너무 힘들었던 것입니다.

.

이런 환경 변화와 시장의 요구가 결국 SDN을 탄생시켰습니다. SDN은 소프트웨어 프로그래밍으로 네트워크 경로 설정이나 제어, 운용 관리 등을 처리할 수 있습니다. 소프트웨어로 네트워크를 제어하게 됨으로서 위의 3가지 문제점을 단박에 해결할 수 있게 되었습니다.

.

SDN을 구현하려면 OpenFlow를 잘 활용해야 합니다. 위에서 말했듯 SDN의 구성요소이자 각 네트워킹 명령어를 원활하게 주고 받을 수 있는 개방형 인터페이스를 만들 수 있는 하나의 표준 인터페이스이기 때문입니다! 즉 OpenFlow는, 외부에 있는 소프트웨어와 네트워크 장비에 직접 접속해 조작할 수 있게 도와주는 SDN의 핵심 기술이라고 보시면 됩니다.

.

이제 이걸 어떻게 구현할 까 하며 참고 서적을 둘러보던 중 'SDN 입문'이라는 책을 알게 되었습니다. 서영석, 이미주 님의 저서이며, 외국인 저자들의 책을 해석해 놓은 다른 책들보다 확실히 한국인의 글로 쓰여진 책이라 이해 자체는 조금 더 쉬운 듯 합니다. 아래에 자세한 정보 남기겠습니다. 

.

오늘은 일단 여기까지 하겠습니다. 글로 주구장창 쓰는 것보다야 어느 정도 진행해서 뭔가 설치하고 뚝딱 만들어 봐야 여러분도, 저도 이해가 쉬울 것 같습니다. 그럼 이만 글을 줄이겠습니다! 다음에 봅시다!

 

[참고 서적]

[참고 사이트]

네이버 지식백과 - 주요 네트워크 기술

http://terms.naver.com/entry.nhn?docId=2851199&cid=56756&categoryId=56756

위키피디아 - SDN

https://en.wikipedia.org/wiki/Software-defined_networking

공대생 워누입니다!

두 번째 포스팅이네요~ 두 개 블로그를 동시에 다룬다는 것은 조금 힘든 일인거 같아요 ㅎㅎ 게다가 블로그만 붙잡을 수 없는 노릇이기도 하구요..ㅜ 여튼! 힘내서 바로 진행하겠습니다.

.

학교 과제의 내용은 열개의 숫자를 입력받아서 정렬을 하는 프로그램을 작성하라고 하셨습니다. 정렬이라니.. 예전에 C언어로 정렬을 구현할 때 조금 어려웠던 기억이 있던지라 이번에도 어려울 것이라 생각했습니다만.. 이게 왠걸..? C언어로 작성했던 기억을 조금 살리니 자바는 훨씬 쉽더군요! 확실히 객체지향 언어가 쓸만합니다 ㅎㅎ

그럼 바로 코드를 올려볼게요~

.

[Bubble.java]

 

-> 숫자 열개를 버블 정렬 시켜주는 클래스입니다!

.

[BubbleSortProgram.java]

 

-> 메인 메서드가 포함되어 실행을 시켜줄 클래스입니다.

 

[결과화면]

 

 

버블 정렬이 수행되는 과정이 포함되어 있습니다. 10개의 숫자를 받았으므로

총 9단계에 걸처 진행이 되는 모습입니다. 

설명은 사진에 보시는 것처럼 코드 한줄마다 주석을 달았으므로 자세하게 하지는 않겠습니다.

.

이번 버블 정렬에서 핵심이 되는 코드는 말하지 않아도 [Bubble.java] 클래스에 안에 있는 중첩 for문들입니다. 저 프로그램을 설계하는 과정중 의사 코드를 공개합니다.

 

+ Pseudo Code

(버블 정렬, 인접한 두 원소를 교환하여 왼쪽의 값이 오른쪽보다 크다면 교환하고 그렇지 않으면 교환하지 않는다.)

 

bubbleSort(a[], size)

for(isize-1; i>0; i--){

for(j0;j<i;j++){

if(a[j]>a[j+1]){

temp a[j];

a[j] a[j+1];

a[j+1] temp;

}

}

}

end bubbleSort()

 

저는 순서도보다 이렇게 의사 코드로 뭔가를 작성하는게 더 좋은거 같아요.

여기서 사용된 핵심 변수를 설명하자면,

i는 버블 정렬의 단계와 1단계 당 수행되는 버블 정렬의 횟수도 나타냅니다.

j는 버블 정렬의 비교를 위한 변수입니다.

.

이 정도면 설명도 충분히 된거 같고, 제가 표현하고자 싶은 것도 잘 표현된 것 같습니다만, 혹시나 제가 틀린 부분이 있거나 보완하면 좋은 점은 가르쳐 주시면 더욱 감사하겠습니다.

 

 

 

티스토리를 처음 접하게 되었습니다! 잘 부탁드립니다ㅎㅎ

이곳에 포스팅 할 글들은 학교에서 배운 것들을 그대로 가져와 정리하고 서로 공유하고자 함이니 틀린 것이나 더 좋은 방법이 있다면 가르쳐 주시기 바랍니다.

.

HTML은 학교에서 정규 과정으로 배우는 것이 아니라 고등학생들에게 실생활에서 접할수 있는 코드인 HTML5와 CSS를 가르치고 있는 "생활코딩" 프로그램에서 보조강사를 맡게 되었습니다. 사실 1도 몰랐었죠..ㅎ 그래서 따라가기에만 급급했었으나 조금 지나서 어느 정도 알게 되니 이걸 정리해야 할 필요성을 느꼈습니다. 이 홈페이지에 방문하시는 여러분과 조금 더 친숙하게 다가가 보도록 노력하겠습니다 ㅎㅎ

.

제가 프로그램을 처음으로 작성한 코드입니다. 일단 같이 보실까요?

 

<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <style type="text/css">
    a {text-decoration:none;}
    a:hover{ text-decoration:underline; font:bold 1em green; background-color:cyan;}
    #trends{ border:1px solid green; width:100px; }
  </style>
</head>
<body>
  <div id="news">
    <a href="http://www.daum.net" target="_blank"> Daum
    </a>
  </div>
  <div id="trends">
    <a href="http://trailers.apple.com" target="_blank"> Movie
    </a>
  </div>
  <div id= "notice">
    Notice Board
  </div>

</body>
</html>

 

 

시작과 끝을 명확하게 하기 위해 html 문서는 기본적으로 구조를 잡아주어야 합니다.

<html> </html>, <head> </head>, <body> </body> 등과 같죠! 이 세개는 반드시 필요한 문장들이기도 합니다. 저처럼 html에 관심있으신 분들은 꼭 알아두시기 바래요! 오늘은 맛보기 만이니까 자세한 설명은 차차 하기로 하고 일단 저걸 메모장에다 입력한 뒤에 저장을 하고 결과를 보실까요?

.

아차! 일단 저장하는 방법을 알려드리고 결과 보는 법을 알려드려야겠죠?

일단 저장할 때 어떻게 뜨는 지 볼까요?

.

 

이렇게 뜨네요! 그럼 이제 날코딩으로 작성한 메모를 저장해서 인터넷으로 띄우는 방법을 알아보겠습니다.

.

첫 번째는 저장하는 방법이에요. 다음 포스팅 때 한 번 더 알려드리겠습니다만,

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
이것을 통해서 저희가 인코딩 타입을 utf-8로 작성하겠다라고 선언했기 때문에 저장할 때 인코딩 타입 역시도 utf-8로 저장해야 합니다. 파일 형식도 html로 선언했기 때문에 html로 저장하기 위하여 파일 이름 아래의 파일 형식도 모든 파일로 바꿔주시고, 파일이름은 test02.html처럼 뒤에 .txt가 아닌 .html이 붙도록 해주세요!

다 바꾸시면 다음과 같은 화면이 출력될 것입니다.

.

 

다 되셨으면 저장 버튼을 꾸욱! 누르시고 저장된 파일로 가서 마우스 오른쪽 버튼을 누른 뒤 다음 그림처럼 진행해주세요!

.

 

이제 크롬을 클릭해 보겠습니다!

(크롬이 설치가 안되신 분들은 가급적 크롬을 설치하시는 것을 권장합니다.)

.

목록들이 생겼네요! 이제 갓 시작한 분들(당시 저도 포함합니다ㅎㅎ)이 보면 '오!' 하고 흥미를 가질만 합니다. 여기서 끝이 아니네요! 목록 중에 다음을 먼저 클릭해 볼까요?

 

 

오오 진짜 다음 사이트가 들어가졌네요? 그럼 아래 것도 한번 클릭해 볼까요?

.

 

어떻게 이렇게 사이트로 연결 될 수 있을까요?

우리가 선언한 문장들 중에 이런 애들 있었죠?

<a href="http://www.daum.net" target="_blank"> Daum
<a href="http://trailers.apple.com" target="_blank"> Movie

아마 이 문장들이 그 역할을 수행했을 겁니다. 더 자세한건 앞으로 공부해보도록 하겠습니다!

.

맛보기로 진행한 오늘의 포스팅, 어떠셨나요? 조금은 html에 흥미를 가질만 하신가요? 앞으로 재밌는 것들이 많을 것입니다! 알찬 내용으로 찾아뵐 것을 약속드리며 오늘의 포스팅은 여기서 마치겠습니다!

 

 

'HTML5&CSS3' 카테고리의 다른 글

[HTML5] 공간 분할 태그에 대해 알아봅시다!  (0) 2022.05.14

+ Recent posts