Server-B

cdc wiki
이동: 둘러보기, 검색

프로젝트 개요

기술개발 과제

국문 : 서울시립대학교 컴퓨터과학부 클라우드 웹 서비스

영문 : CSWS :: Computer Science Web Services

과제 팀명

Server-B

지도교수

안상현 교수님

개발기간

2020년 3월 ~ 2020년 6월 (총 4개월)

구성원 소개

서울시립대학교 컴퓨터과학부 20149200** 김*헌(팀장)

서울시립대학교 컴퓨터과학부 20148710** 김*태

서울시립대학교 컴퓨터과학부 20159200** 백*록

서울시립대학교 컴퓨터과학부 20158710** 서*훈

서울시립대학교 컴퓨터과학부 20168900** 장*선

서론

개발 과제의 개요

개발 과제 요약

* 컴퓨터과학부 학생 개개인만의 서버 제공
* 컴퓨터과학부 전용 커뮤니티 운영(코드 공유 등) 
* C, C#, Java, Python 등 다양한 언어 사용 가능

개발 과제의 배경 및 효과

* 부족한 컴퓨팅 자원을 대체할 수 있다.
* 코드 공유와 같은 정보 공유로 학습 효율을 증진 시킬 수 있다.
* 팀프로젝트에서 공동의 작업환경을 구축하고 호환성 문제를 해결한다.
* 클라우드 서버를 가볍게 체험해 볼 수 있다.

개발 과제의 목표 및 내용

* CLI 환경에서 접속가능한 (ssh) 서버를 구현한다.
* 서버 내에서 분리된 공간, 각자의 개발환경을 구현할 수 있게 한다. (Container)
* 로그인과 접근권한 등에 대해 구현한다.
* Web에서 위의 환경에 접근가능한 GUI 플랫폼을 구현하고 원터치 수준의 간편한 UX 환경을 제공한다.
* 코드 공유 커뮤니티 게시판을 구현한다.
* 자동 채점 웹페이지를 구현한다.

개발과저의 기술적 기대효과

* 학부생이 클라우드 서버를 가볍게 체험 가능.
* 부족한 컴퓨팅 자원을 대체 가능.
* 코드 공유와 같은 정보 공유로 학습 효율을 증진.
* 팀프로젝트에서 공동의 작업환경을 구축하고 호환성 문제 해결.
* 개발과제의 서비스를 제공하면서 운영 및 기술개발 역량 강화

개발과제의 경제적 및 사회적 파급효과

* AWS와 같은 유료 서비스를 무료로 체험할 수 있다.
* 외부 업체가 아닌 교내 자체 제공 서비스이므로 개발, 수정, 운영에 용이하다.
* 서비스를 좀 더 발전시켜 고용 창출이 가능하다.
* 외부 진출 시, 광고를 통한 수익창출이 가능하다.

관련 기술의 현황

관련 기술의 현황 및 분석(State of art)

  • 전 세계적인 기술현황
세계적으로 클라우드 시장은 Amazon, Google, Microsoft 3개의 회사가 주도하고 있다.
반면, 클라우드 인프라 서버 표준 클라우드 컴퓨팅에 특화된 국내 서버 장비 기술에 대한 원천 핵심 기술 확보는 미미한 상황이며 주로 기반의 외산 장비를 도입하고 있는 실정이고 외산 장비를 기반으로 한 소프트웨어 기술 연구가 수행 중 및 프로세서를 기반으로 다수의 컴퓨팅 노드가 고속의 연결망에서 통신 가능한 저전력 마이크로 서버 제작 원천 기술을 개발 완료.


  • 핵심기술 - 가상서버
클라우드 서비스에서 가장 기본적인 기능이 가상 서버(가상 머신)입니다.
가상 서버는 대표적으로 하나의 물리적 서버를 논리적으로 나누어 CPU, 메모리 등의 자원을 할당할 수 있습니다.
  • 핵심기술 - 가상화 기술
가상화를 다른말로 물리적인 하드웨어 장치를 논리적인 객체로 추상화하는 것을 의미합니다.
마치 하나의 장치를 여러개로 나눠 동작시키거나, 반대로 여러개의 장치를 묶어 마치 하나의 장치인 것 처럼 사용자에게 공유자원으로 제공할 수 있기 때문에 클라우드 컴퓨팅 구현을 위한 핵심적인 기술입니다.
가상화는 대표적으로 세가지가 있는데 호스트 가상화, 하이퍼바이저 가상화, 컨테이너 가상화가 있습니다.
  • 핵심기술 - 호스트 가상화
하드웨어 위에 기본이 되는 호스트 운영체제를 설치하고, 호스트 운영체제에 가상화 SW를 설치합니다. 호스트 가상화는 가상화 SW 위에 게스트 운영체제를 작동시키는 가상화를 뜻합니다. 하지만 호스트 운영체제 위에 게스트 운영체제를 작동시키기 때문에 필요 이상으로 CPU나 메모리 사용이 증가하는 오버헤드가 발생합니다.
  • 핵심기술 - 컨테이너 가상화
운영체제에 논리적인 영역(컨테이너)을 만들고, 애플리케이션을 작동하는 데 필요한 라이브러리와 애플리케이션 등을 컨테이너 안에 넣어, 마치 개별 서버처럼 사용할 수 있게 한 것이 컨테이너 가상화입니다.


  • 기술 로드맵

Server-b기술로드맵.JPG

도커란, 컨테이너 기반의 오픈소스 가상화 플랫폼입니다.
다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해줍니다. 백엔드 프로그램, 데이터베이스 서버, 메시지 큐등 어떤 프로그램도 컨테이너로 추상화할 수 있고 조립PC, AWS, Azure, Google cloud등 어디에서든 실행할 수 있습니다. 컨테이너를 가장 잘 사용하고 있는 기업은 구글인데 2014년 발표 에 따르면 구글은 모든 서비스들이 컨테이너로 동작하고 매주 20억 개의 컨테이너를 구동 한다고 합니다.


  • 특허조사

등록번호/일자 1014080340000 (2014.06.10), 출원인 ㈜ 케이티

클라우드 컴퓨팅 서버 시스템의 가상머신 정책 설정 시스템, 가상머신 정책 설정 방법 및 가상머신 정책 제공 방법 (본 발명은, 가상화된 컴퓨팅 자원을 이용하는 가상머신을 통해 가상화된 컴퓨팅 환경을 클라이언트에 제공하는 클라우드 컴퓨팅 서버 시스템에서 가상머신이 생성된 이후에 해당 가상머신에 적용할 정책을 자동으로 해당 가상머신에 설정하는 클라우드 컴퓨팅 서버 시스템의 가상머신 정책 설정 시스템, 가상머신 정책 설정 방법 및 가상머신 정책 제공 방법에 관한 것으로서, 정책이 수동이 아닌 자동으로 가상머신에 설정될 수 있어서, 동일한 템플릿의 가상머신을 대규모로 생성하거나 배포함에 있어서 가상머신의 정책을 분배하는 과정을 효율적으로 처리할 수 있다.)

출원번호/일자 1020180144708 (2018.11.21), 출원인 ㈜ 크로센트

클라우드 기반 호스팅 시스템 및 방법(본 발명의 실시예들은 가상서버 관리자의 요청에 의해 가상서버를 생성하는 가상서버 생성부, 상기 생성된 가상서버의 도메인이름 및 사설망 IP주소를 설정하고 도메인이름과 사설망 IP주소를 연관시켜 데이터베이스에 등록하는 가상서버 관리부, 클라이언트로부터 가상서버에 대한 도메인이름을 포함하는 연결요청정보를 수신하는 연결요청 수신부, 상기 데이터베이스로부터 상기 수신된 도메인이름과 연관된 사설망 IP주소를 검색하는 가상서버 검색부 및 상기 검색된 사설망 IP주소에 해당하는 가상서버와 상기 클라이언트 사이의 통신을 매개하는 통신매개부를 포함하는 클라우드 기반 호스팅 시스템을 제공한다. 이에, 본 발명의 실시예들은 가상서버에 공중망 IP주소를 할당하지 않아도 클라이언트에게 HTTP, HTTPS, MySQL, Mariadb, RDP 등의 다양한 서비스를 제공할 수 있고 프록시 서버에만 공중망 IP주소가 할당되므로 가상서버가 속한 사설망에 대한 보안이 강화될 수 있다. 또한, 가상서버에 공중망 IP주소를 사용하지 않을 수 있으므로 가상서버의 개수가 제한되지 않고 비용을 절감할 수 있다.)

등록번호/일자 1020973000000 (2020.03.31), 출원인 구글 엘엘씨

클라우드-기반 파일 시스템 내에서의 파일 핸들링(일 일반적인 양상에서, 컴퓨터-판독 가능한 저장 매체는 실행될 때 하나 이상의 프로세서들로 하여금 프로세스를 수행하게 하는 지시들을 저장하도록 구성될 수 있다. 프로세스는 컴퓨팅 디바이스 및 클라우드 환경 내에서 동작하는 저장 시스템 사이에 통신 링크의 적어도 일 부분을 수립하는 것을 포함할 수 있다. 프로세스는 복수의 파일들을 표현한 파일들의 목록을 포함한 사용자 인터페이스를 액세스하는 것을 포함할 수 있으며 복수의 파일들의 적어도 제 1 부분은 컴퓨팅 디바이스의 로컬 메모리에 저장되며 복수의 파일들의 제 2 부분은 저장 시스템에 저장된다.)

등록번호/일자 1021062230000 (2020.04.23), 출원인 부산대 산학협력단

오픈스택 기반의 클라우드 오케스트레이션 방법 및 장치(클라우드 오케스트레이션 방법 및 클라우드 오케스트레이션 장치가 개시된다. 본 발명의 일실시예에 따른 오픈스택 기반의 클라우드 오케스트레이션 방법은, 템플릿 스크립트의 생성 요청에 연동하여, 상기 생성 요청에 포함되는 사용자 요구사항을 분류하는 단계, 상기 사용자 요구사항을 기능적 요구사항으로 분류하는 경우, 상기 기능적 요구사항에 속한 선택 요구사항(Option PR)에 의해 결정된 선택 항목에 대해 쉘 스크립트를 작성하는 단계, 및 상기 쉘 스크립트를 실행하는 템플릿 스크립트를 생성 함으로써, 상기 템플릿 스크립트를 전달 받은 히트 오케스트레이터(Heat Orchestrator)에서 상기 기능적 요구사항을 구현하는 VM(Virtual Machine)이 구동하도록 하는 단계를 포함할 수 있다.)

출원번호/일자 1020130129520 (2013.10.29), 출원인 엘지전자 주식회사

클라우드 서비스 연동 장치 및 방법(본 발명은 복수의 클라우드 서비스에 대한 로그인을 통합적으로 수행할 수 있는 클라우드 서비스 연동 장치 및 그 방법에 관한 것으로, 최초 서비스 플랫폼 로그인시 사용자가 클라우드 서비스 목록에서 선택한 복수의 서비스를 연동시키고, 상기 복수의 서비스가 연동된 상태에서 사용자가 서비스 플랫폼에 로그인하면 서버로 상기 복수의 클라우드 서비스의 인증을 요청하여 상기 인증된 복수의 클라우드 서비스의 화면을 통합적으로 표시함으로써 서비스 플랫폼 1회 로그인으로 상기 연동된 모든 클라우드 서비스에 로그인 하는 효과를 얻을 수 있다.)
  • 특허 전략
클라우드 특허 분쟁이 급증할 전망이다. IBM과 마이크로소프트(MS) 등 주요 업체가 클라우드 컴퓨팅 특허 확보에 나섰고 공격형 특허관리전문기업(NPE)이 사들인 특허도 부쩍 늘었다. 전략적으로 중요해지는 특허를 매집하는 공격형 NPE 특성을 고려하면 향후 NPE발 클라우드 특허 분쟁이 활발해질 것이란 분석이다. 실제 소송이 벌어지면 클라우드 서비스 제공업체(CSP)보다는 클라우드 서비스 고객사가 표적이 될 가능성이 크다.
클라우드 특허 분쟁이 확산되면 클라우드 서비스 고객사가 NPE 표적이 될 가능성이 클 것이다. 렉솔로지는 클라우드 서비스 고객사가 클라우드 서비스 제공업체만큼 기술·소송 전문성을 갖추지 못해 특허권자로부터 침해경고장을 받으면 합의할 확률이 높다고 봤다. 앞서 MS는 이러한 소송 위험에 대비해 자사 애저 클라우드 플랫폼을 사용하는 고객사에 특허 1만여건을 활용해 특허 분쟁을 방어해주겠다고 밝혔다. IBM, 레드햇 등은 오픈소스 특허 공유단체인 OIN 등에 가입해 분쟁 방어책을 마련하고 있다.
배진우 한국지식재산전략원 그룹장은 “클라우드 특허는 사업모델(BM)에 가까워 관련 절차가 유사하면 특허 침해를 주장하기 쉬운 편”이라고 말했다.
위 세가지 정보를 바탕으로 클라우드 특허에서는 이미 특허를 보유한 측이 상당히 유리한 위치를 점하고 있음을 알 수 있다. 또한 그렇지 못한 측에서는 NPE의 표적이 될 가능성이 상당히 높고, 이는 우리 서비스에서도 마찬가지이다. 기술과 소송 전문성을 경쟁 대기업에 비해 갖추지 못했기에 분쟁보다는 일방적인 합의가 될 가능성이 크다. 따라서 우리만의 전문적인 서비스를 확립하여 특허 분쟁에 휘말리지 않는 것이 가장 중요한 전략이 될 것이다.

시장상황에 대한 분석

  • 경쟁제품 조사 비교

AWS ( Amazon Web Services)

모든 서비스는 API로 제어할 수 있다는 것이 특징. 기본적으로 HTTP나 REST, SOAP로 이루어지며, Java나 Python, PHP, Ruby, .NET 등에서 쓸 수 있는 라이브러리 및 샘플 코드도 제공. 물리적인 컴퓨팅 자원을 클라우드를 통하여 실행할 수 있는 다양한 인프라 및 애플리케이션 서비스 집합을 제공. 확장성이 뛰어나고 신뢰도가 높은 IT 솔루션을 배포할 수 있도록 AWS에서 인프라를 관리. 안전하고 신뢰할 수 있으며 쉽고 빠른 확장성과, 비용을 절감할 수 있는 플랫폼을 ‘Cloud’로 제공.

Microsoft Azure

대다수의 기능은 AWS와 유사. 기존 Microsoft App 과의 호환성이 좋음. 각자의 데이터센터를 활용할 수 있는 하이브리드 클라우드 컴퓨팅 제공.

Google Cloud Platform

대다수의 기능은 AWS와 유사. 빅 데이터 애플리케이션을 호스팅하는데 탁월한 효과. 구글의 인기있는 애플리케이션을 사용하는데 효율적.
  • 마케팅 전략 제시

Serverbswot.png

S (Strength,  강점)
무료 제공 서비스, 컴퓨팅 자원 제공, 코드 공유와 같은 정보 공유로 학습 효율 증진, 공동의 작업환경을 구축하고 호환성 문제를 해결, 클라우드 서버를 가볍게 체험 가능, 컴퓨터과학부 구성원만을 대상으로 하기 때문에 최적화된 서비스 제공 가능
W (Weakness, 약점)
교외 접속 불가, 경제적 이유로 인한 양질의 컴퓨팅 자원 제공 불가
O (Opportunity, 기회)
기반 기술이 발전함에 따라 컴퓨팅 자원에 대한 수요가 늘고 있음.
T (Threat, 위협)
망 사용료, 라이센스 문제

학부 홈페이지나 학부 공지방을 통한 홍보. 다른 학과에는 존재하지 않는 오로지 컴퓨터과학부생들을 위한 학부내 서비스!

교외 접속 불가가 단순히 기능의 제한이 아닌 강력한 보안이 이루어지고 있는 것임을 강조

타 경쟁 서비스(ex. AWS) 와 대비되어 무료 서비스임을 마케팅 전략으로 활용

컴퓨터과학부 수업인 “클라우드 컴퓨팅” 등의 수업에 직접적으로 활용할 수 있을 것으로 보이며, “유닉스 프로그래밍” 등의 수업에서 Ubuntu를 사용하므로 간접적으로 활용할 수 있을 것임.

서비스 대상 확장 가능. 서비스를 더 확대하여 교내 타 학과로 확장시 약 1만명의 사용자 확보 가능. 국내에는 해당 서비스를 운영하는 대학이 몇 없기 때문에 대학 이미지 및 교육 수준의 향상으로 이어질 뿐만 아니라, 타 학교에 설치 및 관리 서비스로써 판매한다면 대한민국 고등교육의 수준 역시 발전 가능.

개발과제의 기대효과

기술적 기대효과

* 학부생이 클라우드 서버를 가볍게 체험 가능.
* 부족한 컴퓨팅 자원을 대체 가능.
* 코드 공유와 같은 정보 공유로 학습 효율을 증진.
* 팀프로젝트에서 공동의 작업환경을 구축하고 호환성 문제 해결.
* 개발과제의 서비스를 제공하면서 운영 및 기술개발 역량 강화

경제적, 사회적 기대 및 파급효과

* AWS와 같은 유료 서비스를 무료로 체험할 수 있다.
* 외부 업체가 아닌 교내 자체 제공 서비스이므로 개발, 수정, 운영에 용이하다.
* 서비스를 좀 더 발전시켜 고용 창출이 가능하다.
* 외부 진출 시, 광고를 통한 수익창출이 가능하다.

기술개발 일정 및 추진체계

Plan.png

설계

설계사양

제품의 요구사항

- 원하는 이미지를 이용하여 자신만의 서버를 만들 수 있다.
- 해당 서버에 접속하여, 원하는 연산을 수행할 수 있다.
- CoLab과 같이 웹페이지에서 기본적으로 제공하는 여러 언어들을 이용하여, 컴파일을 하고 결과를 얻어올 수 있다.
- StackOverflow 처럼, 과제 또는 특정 분야의 질문을 자유롭게 올릴 수 있고, 질문 속에 Code Snippet 을 쉽게 작성할 수 있다.
또한, 해당 코드는 즉시 컴파일 되어 결과물을 볼 수 있다. - 유저는 자신만의 웹페이지를 만들 수 있다. HTML / CSS 등을 서버에 올리거나, 서버에 있는 것을 삭제할 수 있다.
또한, 다른 사람들은 유저가 만든 웹페이지를 언제든지 접속하여 볼 수 있다. - 교수는 웹사이트를 통해서 과제를 공지하고, 제출결과를 한번에 다운로드 받을 수 있다.
결과물은 자동으로 컴파일 되어 정답여부를 체크하고, 점수를 부여할 수 있다.

사용자 요구사항 만족을 위한 기능 정의 및 기능별 정량목표

CSCS (CS Cloud Services)

- (원하는 운영체제를 이용하여) 생성
- 삭제
- 유저 - 컨테이너 연결
- 연결에 성공하면 컨테이너에서 command 실행 가능

CS Overflow

- 게시글을 작성 (해당 게시글에는 짧은 코드 (Code Snippet) 를 첨부할 수 있으며, 해당 코드는 서버에 의해 자동으로 컴파일되고, 결과물을 웹상으로 보여줄 수 있다.)
- 과목별 게시판을 통해서 교수는 과제를 등록하고 학생은 등록된 과제에 결과물을 제출할 수 있다.
- 과제 소스코드를 실행하고 결과를 확인할 수 있으며 테스트 케이스 input에 대한 출력 결과를 기댓값(정답코드의 출력)과 비교할 수 있다. 이를 통해 자신의 코드가 정답인지 아닌지 확인가능하다.
- 게시글의 댓글 / 답글 작성

CSWS (CS Web Server)

- 웹 관련 파일(HTML / CSS / JS) 업로드 / 다운로드 / 삭제
- 외부에서 웹을 통해 해당 HTML 파일에 접근할 수 있다.

개념설계안

Concept design diagram.png

* 사용자가 웹페이지에 접속한다.
* 사용자가 WIKI, SHELL, WEB-HOSTING, BOARD 중 원하는 기능을 선택한다.
* 사용자의 요청을 서버에서 처리한다.
* 웹 상에 결과를 출력한다.

상세설계 내용

UI 설계

UIchart.png

Use-Case Diagram

Serverb-use-case-diagram.png

  • 액터 목록

Serverb-user-case-actor2.png

  • 설명

Serverb-user-case1.PNG

Serverb-user-case2.PNG

Serverb-user-case3.PNG

Serverb-user-case4.PNG

Serverb-user-case5.PNG

Serverb-user-case6.PNG

Serverb-user-case7.PNG

Serverb-user-case8.PNG

Serverb-user-case9.PNG

Serverb-user-case10.PNG

Serverb-user-case11.PNG

Serverb-user-case12.PNG

Serverb-user-case13.PNG

Serverb-user-case14.PNG

Serverb-user-case15.PNG

Serverb-user-case16.PNG

Serverb-user-case17.PNG

Serverb-user-case18.PNG

Serverb-user-case19.PNG

Serverb-user-case20.PNG

Serverb-user-case21.PNG

Serverb-user-case22.PNG

데이터베이스 설계

  • DBMS

Serverb-db-dbms.PNG

  • Client Side

Serverb-db-client-side.png

Serverb-db-model1-900px.png

Serverb-db-model2-900px.png

Serverb-db-model3-900px.png

Serverb-db-model4-900px.png

Serverb-db-model5-900px.png

Serverb-db-model6-900px.png

Serverb-db-model7-900px.png

Serverb-db-model8-900px.png

Serverb-db-model9-900px.png

  • Server Side - 데이터 모형

Serverb-db-server-model1-900px.PNG

A. Cinder

Serverb-db-server-model2-900px.PNG

B. Glance

Serverb-db-server-model3-900px.PNG

C. Keystone

Serverb-db-server-model4-900px.PNG

D. Nova - instances

Serverb-db-server-model5-900px.PNG

하드웨어 설계

  • Server Hardware
CPU: Intel(R) Core(TM) i7-2600K CPU @ 3.40GHz
RAM: 16GB
Storage: 250GB
  • Network Information
Server IP: 172.16.163.38 (UOS LAN Network)
Gateway: 172.16.163.1
DNS: 203.249.96.5 (Can Change like 8.8.8.8)
비고: 물리적으로 내부 네트워크와 공유기를 사이에 둠으로써 관리/보안에 효율을 높임.
  • Server Internal Information

Serverb network.png

소프트웨어 설계

  • 각 모듈로 분리하여 나타낸 그림.

Serverb-software-design.png

  • 클라우스 서비스 모듈의 컨테이너 생성/연결/삭제는 Openstack과 Shellinabox를 이용
  • 웹 호스팅 모듈에서 웹 서버를 통해 서버 내부와 통신하여 파일을 업로드/다운로드/삭제한다.
  • 게시판 모듈의 코드 컴파일링은 웹 서버를 통해 서버에 요청을 전송하여 리턴 받은 결과를 표시한다.
  • 개인 모듈의 계정 활성화는 UOS의 mail을 이용하여 활성화한다.

결과 및 평가

완료 작품의 소개

프로토타입 사진 혹은 작동 장면

• 메인 화면

Server b main.png


• 로그인 화면

Server b login.png


• 회원가입 화면

Server b signup.png


• 마이페이지 화면

Server b mypage.png


• CSCS 화면

Server b shell1.png


• 웹 호스팅 화면

Server b web hosting.png


• 웹 컴파일러 화면

Server b web compiler.png


• 게시판 화면

Server b board1.png

Server b board2.png


• 과제 출제 화면

Server b new assignment1.png


• 출제된 과제

Server b assignment.png


• 과제 제출 화면 1

Server b assignment submit1.png


• 과제 제출 화면 2

Server b assignment submit2.png


• 컨테이너 생성 과정 (In CLI)

       예시) Selected OS: CentOS 7 / 20GB / 1 CPU / RAM 2 GB

Server B 컨테이너생성과정1.jpg


• 유저 개인의 설정 과정 (cloud-init)

       예시) Selected OS: CentOS 7 / 20GB / 1 CPU / RAM 2 GB

Server B 유저개인설정1.jpg Server B 유저개인설정2.jpg


• 방금 생성된 컨테이너의 사양 체크

       예시) Selected OS: CentOS 7 / 20GB / 1 CPU / RAM 2 GB

Server B 사양체크1.jpg

SW 실행 방법 (단계에 따른 화면 포함)

• 회원가입

1) 회원가입 폼에 정보를 입력하고 회원가입 버튼을 누릅니다.

Server-B3.2실행-회원가입-1 900px.png


2) uos 메일 인증 요청 메시지가 뜹니다.

Server-B3.2실행-회원가입-2 900px.png

3) 홈으로 리다이렉트 되면서 uos 메일로 인증 메일을 발송합니다.

4) UOS 메일에서 인증을 하면 계정이 활성화됩니다.

Server-B3.2실행-회원가입-3 900px.png


• 로그인

1) 로그인 창에서 로그인을 합니다.

Server-b-3-2-execute-login-1 900px.png

2) 홈 화면으로 리다이렉트(Redirect) 됩니다.

Server-b-3-2-execute-login-2 900px.png


• 로그아웃

1) 로그아웃 버튼을 누르면 홈 화면으로 리다이렉트 됩니다. 로그인 되었을 때와 다르게 메뉴가 보이지 않습니다.

Server-b-3-2-execute-logout 900px.png


• CSCS

1) Main페이지에서 상단바의 SHELL을 클릭합니다.

실행-CSCS 900px.jpg

2) 기존에 생성해놓은 컨테이너가 없다면, 생성 페이지를 보여줍니다. 원하는 컨테이너의 종류를 골라 버튼을 눌러 생성할 수 있습니다.

실행-CSCS-2 900px.png

3) 신청버튼을 누르면 메인 페이지로 돌아가며, 다시 쉘을 클릭하면 생성 중이라는 메시지를 표시합니다. 생성에는 약 2분의 시간이 소요됩니다. 이미 만들어진 상태라면 해당 메시지를 표시하지 않습니다.

실행-CSCS-3 900px.jpg

4) 생성이 완료되어 접속하면 생성 시 선택한 컨테이너와 연결되어 사용 가능합니다. (초기 아이디와 비밀번호는 본인의 계정 이름과 password입니다. 변경 가능합니다. )

실행-CSCS-4 900px.jpg

5) 컨테이너를 삭제하고 다시 만들고 싶다면, Main페이지의 mypage에 들어갑니다. “Container Delete” 버튼을 누르면 삭제됩니다.

실행-CSCS-5 900px.png

6) 삭제 후 다시 생성하고 싶으면 SHELL에 들어가 2번의 과정을 시작하면 됩니다.

실행-CSCS-6 900px.png


• 웹 호스팅

1) upload - 파일 선택 버튼을 누른 후, 컴퓨터 내에서 업로드 하고싶은 폴더를 선택하고, upload file 버튼을 누르면 해당 폴더의 파일들이 업로드 됩니다.

Server-B-3.2실행-웹호스팅-1 900px.png

2) download - 다운로드 하고싶은 파일의 이름을 클릭하면 해당 파일이 다운로드 됩니다.

Server-B-3.2실행-웹호스팅-2 900px.png

3) delete - 삭제 하고싶은 파일에 체크 후 삭제 버튼을 누르면 해당 파일이 삭제됩니다.

Server-B-3.2실행-웹호스팅-3 900px.png

Server-B-3.2실행-웹호스팅-4 900px.png


• 웹 컴파일러

1) 웹 컴파일러 페이지에 들어갑니다.

Server-b-3-2-execute-webcompiler-1 900px.png

2) 프로그래밍 언어를 선택합니다.

Server-b-3-2-execute-webcompiler-2 900px.png

3) 에디터 모드를 변경합니다.

Server-b-3-2-execute-webcompiler-3 900px.png

4) 코드를 입력하고 실행 버튼을 누르면 결과가 출력됩니다.

Server-b-3-2-execute-webcompiler-4 900px.png

5) 작성한 소스코드를 다운로드 합니다.

Server-b-3-2-execute-webcompiler-5 900px.png


• 글쓰기

1) 과목별 게시판이 하나씩 있습니다.

실행-글쓰기-1 900px.png

2) 글쓰기 버튼을 눌러 글을 작성합니다. 코드를 첨부할 수 있습니다.

글쓰기-2 900px.png

3) 글 쓴 본인은 글의 수정과 삭제가 가능합니다.

실행-글쓰기-3 900px.png


• 댓글쓰기

1) 게시글에 들어가 댓글을 작성합니다. 댓글을 단 본인은 수정과 삭제가 가능합니다.

Server-b-3-2-execute-comment 900px.png


• 파일 제출 과제 출제

1) 새 과제 버튼을 눌러 새 과제를 입력합니다.

Server-B3.2실행-파일제출과제출제-1 900px.png

2) 출제한 과제를 보면 다음과 같습니다.

Server-B3.2실행-파일제출과제출제-2 900px.png


• 파일이 제출된 과제 관리

1) 과목 관리자가 과제 상세 페이지에 들어가면 제출 여부를 확인할 수 있습니다.

2) 다운로드 버튼을 누르면 제출된 파일들을 압축해서 내려 받습니다.

3) 점수를 입력한 뒤 점수등록 버튼을 누르면 채점할 수 있습니다.

파일제출과제관리 900px.png


• 파일 제출 과제 제출

1) BOARD를 누르면 내가 수강중인(수강했던) 강의 목록들이 뜹니다.

Server-B3.2실행-파일제출과제제출-1 900px.png

2) 과제를 클릭합니다.

Server-B3.2실행-파일제출과제제출-2 900px.png

3) 파일 선택 버튼을 눌러 과제를 제출합니다.

Server-B3.2실행-파일제출과제제출-3 900px.png

4) 과제를 수정합니다.

Server-B3.2실행-파일제출과제제출-4 900px.png

5) 제출 기한이 지난 과제는 제출이나 수정이 불가능합니다.

Server-B3.2실행-파일제출과제제출-5 900px.png


• 코드 제출 과제 출제

1) 관리자가 관리중인 과목에 들어갑니다.

Server-B-3.2실행-코드제출과제출제-1 900px.png

2) 새 과제 버튼을 눌러 새 과제를 입력합니다.

Server-B-3.2실행-코드제출과제출제-2 900px.png

3) 출제한 과제를 보면 다음과 같습니다.

Server-B3.2실행-코드제출과제출제-3 900px.png


• 코드 제출 과제 제출

1) 코드를 작성하여 컴파일을 누릅니다.

Server-B-3.2실행-코드제출과제제출-1 900px.png

Server-B-3.2실행-코드제출과제제출-2 900px.png

포스터

Concept 1 dark text.png Concept1whitetext.png

Concept2darktext.png Concept2whitetext.png

Concept3darktext.png Concept3whitetext.png

Concept4darktext.png Concept4whitetext.png

Concept5darktext.png Concept5whitetext.png

완료작품의 평가

Server-b완료작품평가.JPG

향후 평가

어려웠던 내용들

• Server

Openstack을 설치하는 과정에서 Linux Network에 가상의 Bridge를 연결하고, IP Port forwarding, Private Network Setting 등 네트워크 가상화에 대해서는 학교에서 배우지않아 어려웠습니다. 또한, Network의 특징상 안되는 이유를 찾기가 매우 어려운데(로그가 찍히지 않고 그냥 안됨.), 하드웨어 / 소프트웨어를 모두 동시에 생각하고 디버깅을 해야하기 때문에 어려웠습니다. 이와 같이 네트워크를 설정할 때, 많은 포맷 / 재설치 등의 과정이 있었습니다. Linux 경험이 부족하여, Bash Scripts 문법을 숙지하고, 문제 해결에 이용하는데 어려웠습니다. 우리가 지원하기로한 OS의 Cloud Image를 설치하는 과정에서 OS마다 버전이나 사용법이 다르고 그에 따라 Cloud-init 버전이나 명령어가 달라서 각 OS마다 Customization 하는데 많은 시행착오가 필요했습니다. 또한, QEMU / KVM 등에 대한 이해가 부족하여 Cloud image의 어떤 버전을 서버에서 준비해야하는지 몰라 어려운 점이 있었습니다. 일반적으로 Openstack을 이용하는 유저들은 각 컴퓨터의 Keypair(공개키 알고리즘)를 이용하여 각자의 Container에 접속하는데, 실제 우리의 유저(학생)에게 공개키를 받거나, 주는 것은 보안적으로 안전하지 못하고 / 또한 “손쉽게 사용”한다는 초기 개발 목표와 거리가 멀어진다고 생각하였기 때문에 이를 해결하는 아이디어를 떠올리기 어려웠습니다. 보안적으로 안전하면서 유저에게는 편리한 UX를 제공하기 위해서 보안과 관련한 아이디어를 구상하는게 정말 어려웠습니다. (이에 대해서는 Client - Web - Container 의 인터페이스 구조를 고려하여 실질적으로 Client는 Web를 통하지 않으면 Container를 이용하지 못하게 함으로써 보안과 편리함의 두마리 토끼를 잡았습니다.) 예산이 부족하여 Server의 사양을 높이지 못했는데, 그로 인해서 간헐적으로 RAM 부족 / CPU가 자원을 할당받지 못해서 생기는 에러 등이 발생함으로써, 원인을 파악하지 못해 생기는 에러의 원인을 파악하는데 많은 시행착오가 있었습니다. (덕분에 Linux에서 LOG 파일을 읽고 분석하는 능력을 배울 수 있었습니다.)

• CSCS

구현하고자 하는 서비스에 대한 Reference가 없는 것이 가장 큰 어려움이었습니다. 한국 사이트는 물론이고 외국 사이트에도 관련된 정보가 적었고, 가장 큰 커뮤니티인 “Stack overflow”에 질문을 올린지 2개월이 지나가지만 최종보고서를 쓰는 시점에도 답이 올라오지 않았습니다. 게다가 서비스가 서버 사이드에서 실행되기 때문에 서버에 관한 지식이 있어야했는데, Ubuntu나 CentOS7 모두 거의 처음 접하다시피 하여 사소한 명령어 하나하나에도 막힐 때가 많았습니다. 서버 간 통신을 만들어가는 것도 방화벽, 포트, 라우팅 등 수많은 시행착오를 거쳐야 했고, 서비스를 웹 상에서 담아낼 때도 Django의 사용에 어려움을 겪었습니다.

• WEB Backend

Django 사용이 처음이라 어려움이 많았습니다. 거의 모든 것들을 새로 배워가면서 개발을 해서 미숙한 점이 많이 보이는 것 같습니다. 최대한 자바스크립트 없이 HTML 자체와 장고만을 이용해서 서버로 데이터를 보내고자 하였는데, 역시 개발하다 보니 자바스크립트를 사용하는 것이 편리하겠다고 느꼈습니다. 가장 어려웠던 점은 처음 User 클래스를 설계할 때와 메일로 인증을 받는 것, 그리고 제출한 과제를 압축해서 내려받을 수 있도록 구현하는 것이었습니다. WEB Compiler를 제가 만들었던 웹에 임베딩할 때 적재적소에 변경하여 넣는 과정에서 조금 어려웠습니다. 

• WEB Compiler, sourcecode 채점

서버 사이드 웹 프로그래밍을 위한 ‘Django’ 프레임 워크에 사용에 많은 어려움을 겪었습니다. 학교에서 배워본적 없는 내용이라 듀토리얼과 서적을 보면서 기초부터 하나하나 알아 나가는데 많은 시간이 소요되었습니다. django에서 제공하는 view를 적절히 사용하는데 어려움을 겪었고, 컴파일된 결과를 ajax을 이용하여 같은 페이지에 결과를 띄워주는데 어려움을 겪었습니다, view측에서 웹으로 보내준 결과가 개행문자가 인식해서 출력되지 않은 어려움이 있었습니다. 이는 <pre>를 사용하여 해결하였습니다. 소스코드 에디터를 구현하는데 어려움을 겪었는데 일반 text를 입력할 수 있도록 구현하기는 쉽지만, 자동 들여쓰기, 언어 문법에 따른 highlight 효과 등을 추가하는데 어려움을 겪었습니다. 따라서 오픈소스 에디터인 ace_aditor를 사용했습니다. (https://ace.c9.io/)  이는 웹상에서 사용할 수 있도록 만들어진 javascript 모듈입니다. 이 모듈의 사용법을 익히고 저희 웹 컴파일러 서비스에 사용할 수 있었습니다. 과제 채점 서비스는 프로그래머스, 백준과 같이 테스트 인풋에 대해서 내 코드의 결과와 정답 코드의 결과를 비교 해주는 서비스입니다. 이를 구현하기 위해서  1.교수님이 입력한 input을 list로 받아오고 교수님이 입력한 정답코드(정답함수)를 이용해서 정압(기댓값)을 만들어낸 후 서버에 파일로 저장. 2.학생이 입력한 코드(함수)를 input_list의 원소들을 인자로 전달하여 실행하는 .py .c등을 만들어낸다. 3. 위의 .py를 실행하여 출력값을 만들어낸다. 이와 같은 3단계 방법을 사용했습니다. 실제 서비스에 이용되기 위해서는 더 많은 수정 과정을 거쳐야 할 것 같고. 학생이 입력한 코드를 모듈화해서 함수형태로 실행하는 방식을 도입중에 있습니다 


• WEB Hosting

Python 문법을 제대로 모르는 상태에서 Python을 기반으로 하는 Django를 사용하게 되었습니다. 처음 써보는 것이라 기본 제공되는 튜토리얼을 따라가 보기도 하고, 유투브에 다른 사람들이 설명해 놓은 것이나 구글을 이용해서 학습과 개발을 동시에 진행했습니다. 처음 시작단계에서는 Django의 작동원리를 제대로 이해하지 못해서 난관이 있었습니다. 그 후 html을 이용하여 Django에 View와 연동하는 부분이 매우 어려웠습니다. html에서 전송한 데이터를 어떤 식으로 처리해야할 지, 또 Django에서 제공되지 않는 데이터 타입은 어떻게 처리해야할 지가 가장 어려웠습니다. 가장 기본적인 파일 업로드, 다운로드, 삭제 기능은 구현하였으나, 여러 개 파일을 업로드할 수 있게 수정하는 부분, 체크박스를 이용하여 업로드된 파일을 한번에 삭제할 수 있게 하는 기능이 가장 어려웠습니다.

추후 개선사항

• Server

Cloud image를 제공하지 않는 OS도 개인적으로 OS를 가공하여 제공할 수 있도록 하는 것. 서버 자체의 사양을 높이는 작업. HDD Docking Station 을 이용한 용량 증축. 클러스터링을 이용한 각 프로세스 간 CPU 요청을 분할. (여러 컴퓨터를 하나의 서버로 묶기)

• CSCS

추가적인 OS 지원 / 팀 프로젝트 인원이 하나의 컨테이너에 접근 기능

• WEB Backend

UI 변경/boards 메인 화면의 UX 향상/교수님이 제출한 과제를 하나씩 확인할 수 있는 기능이나 미리보기 기능 추가/제출된 과제를 학생이 컴파일했을 때 컴파일 되고 몇 개 맞았는지까지는 구현을 했음/서버로 그 내용을 보내고 점수 처리를 하고, 교수님 관점에서 점수 볼 수 있도록 로직 추가/ 수강생들의 점수를 한번에(과제별, 과목 전체 한 번에) 엑셀 파일로 내려받을 수 있는 로직 추가

• WEB Compiler, sourcecode 채점

다양한 언어 지원, 컴파일에러시 user에게 alert, 컴파일 소요 시간 및 메모리 사용량 추가, 소스코드 채점시 받아온 user의 코드 모듈화, UI개선

• WEB Hosting

DRAG & DROP 기능 추가 / UI에 파일 디렉토리 구조 추가

부록

• 참고문헌 및 참고사이트

◇ 아마존 웹 서비스 메인 페이지 :  https://aws.amazon.com/ko/
◇ 아마존 웹 서비스(Amazon Elastic Container Service) : https://aws.amazon.com/ko/ecs/?hp=tile&so-exp=below
◇ Microsoft Azure : 클라우드 컴퓨팅 서비스 https://azure.microsoft.com/
◇ 구글 클라우드 플랫폼 : https://console.cloud.google.com/
◇현암 코딩 클라우드 핵심 기술 :  https://hyun-am-coding.tistory.com/entry/002-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%ED%95%B5%EC%8B%AC-%EA%B8%B0%EC%88%A0
◇도커란 무엇인가? : https://www.docker.com/resources/what-container
◇특허 조사 : http://www.kipris.or.kr/khome/main.jsp
◇ shellinabox Github : https://github.com/shellinabox/shellinabox
◇ Openstack Official Document : https://docs.openstack.org/rocky/
◇ Openstack 설치 : https://www.rdoproject.org/install/packstack/
◇웹 프레임워크 Django(python) 개념 정리 : https://www.youtube.com/watch?v=LYmZB5IIwAI&t=591s
◇클라우드의 역사 - 이글루 시큐리티
:http://www.igloosec.co.kr/BLOG_%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C%20%EC%BB%B4%ED%93%A8%ED%8C%85(cloud%20computing)%EC%9D%98%20%EA%B3%BC%EA%B1%B0,%20%ED%98%84%EC%9E%AC,%20%EB%AF%B8%EB%9E%98?searchItem=&searchWord=&bbsCateId=1&gotoPage=1
◇기타 - https://stackoverflow.com/