1. 운영체제 기초 활용하기
(1) 운영체제란?
-운영체제(Operating System)는 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 잇도록 한경을 제공하는 여러 프로그램의 모임입니다 운영체제는 켐퓨터 사용자화 컴퓨터 하드웨어간의 인터페이스로서 동작하는 시스템 소프트웨어 일종으로, 다른 응용프로그램이 유용한 작업을 할 수 잇도록 환경을 제공해 줍니다
-운영체제의 종류에는 Windows 98, Windows7, Windows8, Windows10,UNIX, LINUX, <S-DOS등이 있습니다
딘일 작업처리 시스템에는 DOS, 다중처리 시스템에는 Windows, UNIX, LINUX등이 사용됩니다
주로 Windows는 개인용,UNIX,LINUX는 서버용 운영체제로 사용됩니다.
-운영체제의 목적에는 처리능력 향상, 사용가능도 향상, 신뢰도 향상 반환 시간 단축 등이 있습니다. 처리능려, 반환시간,사용가능도, 신뢰도는 운영체제의 상능을 평가하는 가준이 됩니다.
-운영체제의 기능
.프로세서, 기억장치, 입출력장치, 파일 및 정보 등의 자원을 관리합니다.
.자원을 효율직으로 관리하기 위해 자원의 스케줄링 기능을 지원합니다
.사용자와 시스텝간의 편리한 인터페이스를 제공합니다.
.시스템의 각종 하드웨어와 네트워크를 관리 제어합니다.
.데이터를 관리하고 데이터 및 자원의 공유 기능을 제공합니다.
시스템의 오류를 검사하고 복구합니다.
자원 보호 기능을 제공합니다,
입/출력에 대한 보조 기능을 제공합니다
가상계산기 능력을 제공합니다
(2)CMD명령어 정리
-dir 디렉토리 보기
-cd chage diretory
-rd remove directory
-md make directory
-type 피일 내용읽기
-copy 파일/폴더를 다른경로로 복사
(3) 운영체제에서 제공하는 작업 우선순위 설정방법을 이용하여 애플리케이션의 작업우선순위를 조정 방법
작업표시줄에서 우클릭 -> 작업관리자 선택 -> 설정하고픈 프로그램우클릭 -> 우선순의 설정&선호도 설정 클릭
2. 데이터베이스 기초 활용하기 <Python으로 가계부 만들기와 ERD>
(1) 데이터베이스의 종류를 구분하고 응용 소프트웨어 개발에 필요한 데이터베이스를 선정할 수 있는지 판단 요소
=========================HomeBook=========================
'''
Created on 2019. 7. 8.
vo클래스
@author: vision
'''
class HomeBook():
def __init__(self,serialno,day,section,account_title,remark,revenue,expense,user_id):
self.serialno = serialno
self.day = day
self.section = section
self.account_title = account_title
self.remark = remark
self.revenue = revenue
self.expense = expense
self.user_id = user_id
def getSerialno(self):
return self.serialno;
def getDay(self):
return self.day;
def getSection(self):
return self.section;
def getAccount_title(self):
return self.account_title;
def getRemark(self):
return self.remark;
def getRevenue(self):
return self.revenue;
def getExpense(self):
return self.expense
def getUser_id(self):
return self.user_id;
# -*- coding: utf-8 -*-
###########################################################################
## Python code generated with wxFormBuilder (version Jun 17 2015)
## http://www.wxformbuilder.org/
##
## PLEASE DO "NOT" EDIT THIS FILE!
###########################################################################
import wx
import wx.xrc
import wx.dataview
import wx.adv
import Hello_HomeBook.HomeBook
import Hello_HomeBook.HomeBookDAO
import cx_Oracle as ora
###########################################################################
## Class MyFrame1
###########################################################################
class MyFrame1 ( wx.Frame ):
# columns = []
def __init__( self, parent ):
wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 650,308 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
self.SetBackgroundColour( wx.SystemSettings.GetColour( wx.SYS_COLOUR_INACTIVECAPTION ) )
bSizer1 = wx.BoxSizer( wx.VERTICAL )
bSizer4 = wx.BoxSizer( wx.HORIZONTAL )
fgSizer2 = wx.FlexGridSizer( 0, 2, 0, 0 )
fgSizer2.SetFlexibleDirection( wx.BOTH )
fgSizer2.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_SPECIFIED, )
self.user_id = wx.StaticText( self, wx.ID_ANY, u"ID", wx.DefaultPosition, wx.DefaultSize, 0 )
self.user_id.Wrap( -1 )
fgSizer2.Add( self.user_id, 0, wx.ALL, 5 )
self.user_id_tf = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
fgSizer2.Add( self.user_id_tf, 0, wx.ALL, 5 )
self.day = wx.StaticText( self, wx.ID_ANY, u"날짜", wx.DefaultPosition, wx.DefaultSize, 0 )
self.day.Wrap( -1 )
fgSizer2.Add( self.day, 0, wx.ALL, 5 )
self.day_tf = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
fgSizer2.Add( self.day_tf, 0, wx.ALL, 5 )
self.section = wx.StaticText( self, wx.ID_ANY, u"수지구분", wx.DefaultPosition, wx.DefaultSize, 0 )
self.section.Wrap( -1 )
fgSizer2.Add( self.section, 0, wx.ALL, 5 )
section_tfChoices = [ u"수입", u"지출" ]
self.section_tf = wx.ComboBox( self, wx.ID_ANY, u"지출", wx.DefaultPosition, wx.Size( 111,-1 ), section_tfChoices, 0 )
self.section_tf.SetSelection( 0 )
fgSizer2.Add( self.section_tf, 0, wx.ALL, 5 )
self.account_title = wx.StaticText( self, wx.ID_ANY, u"계정과목", wx.DefaultPosition, wx.DefaultSize, 0 )
self.account_title.Wrap( -1 )
fgSizer2.Add( self.account_title, 0, wx.ALL, 5 )
self.account_title_tf = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
fgSizer2.Add( self.account_title_tf, 0, wx.ALL, 5 )
self.remark = wx.StaticText( self, wx.ID_ANY, u"적요(수지내역)", wx.DefaultPosition, wx.DefaultSize, 0 )
self.remark.Wrap( -1 )
fgSizer2.Add( self.remark, 0, wx.ALL, 5 )
self.remark_tf = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
fgSizer2.Add( self.remark_tf, 0, wx.ALL, 5 )
self.revenue = wx.StaticText( self, wx.ID_ANY, u"수입", wx.DefaultPosition, wx.DefaultSize, 0 )
self.revenue.Wrap( -1 )
fgSizer2.Add( self.revenue, 0, wx.ALL, 5 )
self.revenue_tf = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.TE_RIGHT )
fgSizer2.Add( self.revenue_tf, 0, wx.ALL, 5 )
self.expense = wx.StaticText( self, wx.ID_ANY, u"지출", wx.DefaultPosition, wx.DefaultSize, 0 )
self.expense.Wrap( -1 )
fgSizer2.Add( self.expense, 0, wx.ALL, 5 )
self.expense_tf = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.TE_RIGHT )
fgSizer2.Add( self.expense_tf, 0, wx.ALL, 5 )
bSizer4.Add( fgSizer2, 1, wx.EXPAND, 5 )
bSizer7 = wx.BoxSizer( wx.VERTICAL )
self.history_tf = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size( 440,222 ), 0 )
bSizer7.Add( self.history_tf, 0, wx.ALL, 5 )
bSizer4.Add( bSizer7, 1, wx.EXPAND, 5 )
bSizer1.Add( bSizer4, 1, wx.EXPAND, 5 )
bSizer6 = wx.BoxSizer( wx.HORIZONTAL )
self.insert_bt = wx.Button( self, wx.ID_ANY, u"Insert", wx.DefaultPosition, wx.DefaultSize, wx.BU_EXACTFIT )
self.insert_bt.SetDefault()
bSizer6.Add( self.insert_bt, 0, wx.ALL, 5 )
self.update_bt = wx.Button( self, wx.ID_ANY, u"Update", wx.DefaultPosition, wx.DefaultSize, wx.BU_EXACTFIT )
self.update_bt.SetDefault()
bSizer6.Add( self.update_bt, 0, wx.ALL, 5 )
self.delete_bt = wx.Button( self, wx.ID_ANY, u"Delete", wx.DefaultPosition, wx.DefaultSize, wx.BU_EXACTFIT )
self.delete_bt.SetDefault()
bSizer6.Add( self.delete_bt, 0, wx.ALL, 5 )
self.fine_bt = wx.Button( self, wx.ID_ANY, u"Fine", wx.DefaultPosition, wx.DefaultSize, wx.BU_EXACTFIT )
self.fine_bt.SetDefault()
bSizer6.Add( self.fine_bt, 0, wx.ALL, 5 )
self.select_bt = wx.Button( self, wx.ID_ANY, u"Select", wx.DefaultPosition, wx.DefaultSize, wx.BU_EXACTFIT )
self.select_bt.SetDefault()
bSizer6.Add( self.select_bt, 0, wx.ALL, 5 )
self.reset_bt = wx.Button( self, wx.ID_ANY, u"Reset", wx.DefaultPosition, wx.DefaultSize, wx.BU_EXACTFIT )
self.reset_bt.SetDefault()
bSizer6.Add( self.reset_bt, 0, wx.ALL, 5 )
bSizer1.Add( bSizer6, 1, wx.EXPAND, 5 )
self.SetSizer( bSizer1 )
self.Layout()
self.Centre( wx.BOTH )
# Connect Events
self.insert_bt.Bind( wx.EVT_LEFT_UP, self.insert )
self.update_bt.Bind( wx.EVT_LEFT_UP, self.update )
self.delete_bt.Bind( wx.EVT_LEFT_UP, self.delete )
self.fine_bt.Bind( wx.EVT_LEFT_UP, self.fine )
self.select_bt.Bind( wx.EVT_LEFT_UP, self.select )
self.reset_bt.Bind( wx.EVT_LEFT_UP, self.reset )
self.select_bt.Bind( wx.EVT_LEFT_UP, self.dispInfor )
self.dispData()
def __del__( self ):
pass
def dispInfor(self, event):
self.history_tf.SetFocus();
selNum = self.history_tf.SelectedRow
xday = self.history_tf.GetValue(selNum, 1);
self.datePicker.SetValue(xday)
section = self.history_tf.GetValue(selNum, 2);
if(section=='수입'):
self.section_tf.SetSelection(0)
else:
self.section_tf.SetSelection(1)
accountTitle =self.history_tf.GetValue(selNum, 3)
self.account_title_tf.SetValue(accountTitle);
remark = self.history_tf.GetValue(selNum, 4)
self.remark_tf.SetValue(remark);
revenue = self.history_tf.GetValue(selNum, 5)
self.revenue_tf.SetValue(str(revenue));
expense = self.history_tf.GetValue(selNum, 6)
self.expense_tf.SetValue(str(expense));
user_id = self.history_tf.GetValue(selNum, 7)
self.user_id_tf.SetValue(user_id);
#print(self.history_tf.SelectedRow)
event.Skip()
# Virtual event handlers, overide them in your derived class
def insert( self, event ):
try:
serialno = 0
xday = self.datePicker.GetValue()
sect = self.section_tf.GetSelection()
if sect == 0:
section = "수입"
else:
section = "지출"
n = self.account_title_tf.GetValue()
account_title = self.account_title_tf.GetItems()[n]
account_title = str(self.account_title_tf.GetValue())
remark = str(self.remark_tf.GetValue())
revenue = int(self.revenue_tf.GetValue())
expense = int(self.expense_tf.GetValue())
user_id = str(self.user_id_tf.GetValue())
print(xday, section, account_title, remark, revenue, expense, user_id)
dao = Hello_HomeBook.HomeBookDAO.HomeBookDAO()
vo = Hello_HomeBook.HomeBook.HomeBook(serialno, xday, section, account_title, remark, revenue, expense, user_id);
res = dao.insert(vo);
except Exception as e:
print(e)
self.showMessage('입력에러!')
finally:
if res == True:
self.showMessage('입력성공')
self.showMessage('글세요? ')
self.dispData();
event.Skip()
def showMessage(self, msg):
wx.MessageBox(msg, 'Info', wx.OK | wx.ICON_INFORMATION)
def update( self, event ):
try:
selNum = self.history_tf.SelectedRow
serialno = self.history_tf.GetValue(selNum, 0);
xday = self.day_tf.GetValue()
sect = self.section_tf.GetSelection()
if sect == 0:
section = "수입"
else:
section = "지출"
account_title = str(self.account_title_tf.GetValue())
remark = str(self.remark_tf.GetValue())
revenue = int(self.revenue_tf.GetValue())
expense = int(self.expense_tf.GetValue())
user_id = str(self.user_id_tf.GetValue())
print("수정내역 >>>",xday, section, account_title, remark, revenue, expense, user_id)
dao = Hello_HomeBook.HomeBookDAO.HomeBookDAO()
vo = Hello_HomeBook.HomeBook.HomeBook(serialno, xday, section, account_title, remark, revenue, expense, user_id);
res = dao.update(vo);
except Exception as e:
print(e)
self.showMessage('수정에러 !')
finally:
if res == True:
self.showMessage('입력성공')
else:
self.showMessage('글세요? ')
self.dispData();
def delete( self, event ):
event.Skip()
def fine( self, event ):
event.Skip()
def select( self, event ):
event.Skip()
def reset( self, event ):
self.history_tf.DeleteAllItems()
self.history_tf.ClearColumns()
event.Skip()
def m_splitter1OnIdle(self, event):
self.m_splitter1.SetSashPosition(0)
self.m_splitter1.Unbind(wx.EVT_IDLE)
def dispData(self, sql='SELECT * FROM HOMEBOOK'):
if self.history_tf.GetColumnCount() > 0:
# 기존 컬럼을 제거합니다.
self.history_tf.ClearColumns()
self.history_tf.DeleteAllItems()
conn = ora.connect("web/java@localhost:1521/xe")
cur = conn.cursor();
try:
cur.execute(sql)
rows = cur.fetchall()
columnNames = [d[0] for d in cur.description]
for colName in columnNames:
column = self.history_tf.AppendTextColumn(u"" + colName)
# print(colName[0])
self.columns.append(column)
for row in rows:
#row[1] = row[1][-4:]+"-"+row[1][4:7]+"-"+row[1][8:10]
self.history_tf.AppendItem(row)
self.history_tf.Bind(wx.EVT_LIST_ITEM_SELECTED, self.dispInfor)
except Exception as e:
print(e)
finally:
cur.close()
if __name__ == '__main__':
app = wx.App(); # 가장먼저
frame = MyFrame1(parent=None);
frame.Show();
app.MainLoop();
실행화면
3. 네트워크 기초 활용하기<계층구조,통신방식,등 요약정리,이해>
(1)OSI 7계층구조
(2)UDP/TCP
(3) 패킷 스위칭 시스템을 이해하고, 다양한 라우팅 알고리즘과 IP 프로토콜을 설명 요약
패킷 스위칭 시스템을 이해하고, 다양한 라우팅 알고리즘과 IP 프로토콜을 설명 요약
패킷 교환(Packet switching)은 컴퓨터 네트워크와 통신의 방식 중 하나로 현재 가장 많은 사람들이 사용하는 통신 방식이다. 작은 블록의 패킷으로 데이터를 전송하며 데이터를 전송하는 동안만 네트워크 자원을 사용하도록 하는 방법을 말한다. 정보 전달의 단위인 패킷은 여러 통신 지점(Node)을 연결하는 데이터 연결 상의 모든 노드들 사이에 개별적으로 경로가 제어된다. 이 방식은 통신 기간 동안 독점적인 사용을 위해 두 통신 노드 사이를 연결하는 회선 교환 방식과는 달리 짤막한 데이터 트래픽에 적합하다.
라우팅 알고리즘은 네트워크를 통해 정보 이동 시, 최적의 경로를 결정하기 위한 방식이다. 즉 정보를 목적지까지 전송하기 위해서 인접한 라우터들의 네트워크 정보와 메트릭 값을 받아 최적의 경로를 설정하는 과정이다, 메트릭은 라우터는 인접한 라우터로 부터 전달받은 걸로정보로 비용을 계산하여 최적의 경로를 결정하는데, 이 비용계산에 영항을 미지는 요소등을 의미한다 흡수, 대역폭, 지연, 신뢰도, 부하등이 있다
4.기본 개발환경 구축하기
(1) 윈도우 운영체제 등 설치 경험
먼저 8GB이상의 USB를 준비한다
마이크로 소프트 공식 홈페이지에서 윈도우 10 미디어를 준비한 USB에 다운로드한다
전원을 끄고 USBf를 연결 후 부팅이 될떼 부트매뉴로 들어간다, 부트매뉴로 들어가는 키는 메인보드 제조사마다 다르다(보통 F9~F10사이)
부트매뉴에서 자신의 USB이름을 방향키로 찾아 선택한다.
지금설치 -> 윈도우 라이센스키 입력(없으면 하지 않아도 된다) -> 윈도우 10 버젼 선택 -> 동의함클릭 -> 사용자 지정 클릭 ->
포맷할 드라이브를 삭제하여 포맷하고 윈도우를 설치할 드라이브를 선택 후 다음 클릭 -> 윈도우가 자동으로 설치됨 -> 간단한 윈도우 설정 후 사용하면됩니다.
(2) 응용개발에 필요한 개발도구를 설치하고 운용능력
JDK 설치를 통해 JVM(Java Virtual Machine)과 자바클래스 라이브러리(Java API)외에 자바를 개발하는데 필요한 프로그램들을 간단히 설치할 수 있다.
ORACLE에서 JDK를 다운로드받을 수 있게 지원하고 있다. 다음 링크를 클릭하거나, http://java.sun.com 주소를 복사해서 이동한다.
다음 화면은 JDK를 다운받을 수 있는 웹페이지 화면이다. 화면의 중간에 Java SE를 클릭하여 다음 페이지로 넘어간다.
위에서 언급했듯이, JDK 버전은 10까지 출시된 상태이다. JDK 버전 9부터는 모듈과 라이브러리가 많이 사라졌다는 이야기를 들었기에, 버전 8을 다운로드받는다. 최신 버전은 오히려 안되는게 많다.
스크롤을 내려 Java SE 8U161/8u162를 확인하고, JDK 다운로드 버튼을 클릭한다.
JDK 버전 8은 다시 8u161과 8u162 버전으로 나뉘는데, 나는 릴리즈 차이라고 알고 있다. 아무튼 Accept License Agreement 버튼을 체크하고, 내 PC 사양에 맞는 파일을 다운로드한다.
다운로드를 받으면 다운로드 폴더에서 다음과 같은 아이콘을 가진 설치 파일을 확인할 수 있다. 다 끝났다. 실행한다.
Next를 눌러 JDK 및 JAVA를 설치한다. JAVA는 자동으로 설치할거냐고 물어보기에 별도로 설치 프로그램을 다운받거나 실행하지 않아도 된다.
중요한건 설치경로이다. JDK 설치 이후 환경변수에 이 경로를 추가해주어야 하기 때문에 설치 위치는 아주 중요하다.
기본 설치경로: C:\Program Files\Java\jdk1.8.0_161\
중간에 뜨는 JAVA도 설치하고
설치 이후 command창을 통해 JDK가 잘 설치되었는지 확인한다.
먼저 윈도우키 + R 버튼을 눌러 cmd를 입력한다. java -version을 입력한다. 설치된 java의 관련 version이 표시되면 설치가 완료된 것이다. 하지만 javac(java compiler)의 버전은 표시되지 않는다.
JDK환경변수 설정(Window 10기준)
의 내 pc 우클릭, 속성을 클릭한다.
시스템 속성 - 고급 탭으로 들어가 환경 변수를 클릭한다.
환경 변수 창에서 시스템 변수 - 새로 만들기를 클릭한다.
JAVA_HOME 시스템 변수를 만든 후, 변수 이름 Path를 찾아 더블클릭한다. 스크롤 살짝 내려보면 바로 보인다.
더블클릭하면 해당 변수의 환경 변수를 편집하는 창이 새로 뜬다. 빈 칸을 더블클릭하고 %JAVA_HOME%\bin을 추가한다. 윈도우7의 경우 Path 변수 값 끝에 ;%JAVA_HOME%\bin;을 추가한다.
마지막으로 command 창에서 JAVA 환경 변수가 잘 설정되었는지 확인한다. cmd 창에서 javac -version 명령어를 입력했을 때 javac 버전이 잘 나오면 정상적으로 설치된 것이라 할 수 있다.
다운로드 관련 웹페이지에는 왼쪽 중앙에 다시 다운로드 버튼이 준비되어있다. ECLIPSE는 기본 개발을 위한 버전부터 EE and Web, PHP, C/C++ 등 다양한 패키지 형태로 존재한다. 자신이 설치할 ECLIPSE 패키지가 확실한게 아니라면 그냥 다운로드 버튼을 클릭한다.
다운로드받은 패키지 통합 설치 프로그램을 실행한다.
다운로드받은 설치 프로그램을 통해 다양한 패키지를 설치할 수 있다. 처음 JAVA를 공부할 때에는 보통 Eclipse IDE for Java Developers를 설치한다. 향후 Web과 관련해서 개발을 하려면 Eclipse IDE for Java EE Developers 패키지를 설치하면 된다.
설치할 폴더를 확인 후 INSTALL 버튼을 클릭한다. eclipse는 패키지 형태라서 프로그램 제거를 위해서는 단순히 폴더만 지우면 되는데, 이 때문에 설치 경로를 알아두면 편하다.
중간중간 License 정책 관련해서 accept할건지 물어본다. 그냥 긍정적인 대답을 체크하면 된다. 1분정도 기다리면 eclipse 설치는 끝이 난다.
파이썬 계발환경 설정하기
Anaconda3 설치하기
아나콘다 홈페이지로 접속한다.
Python 3.6 버젼 가반 아나콘다를 다운로드 한다.
다운로드를 클릭하면 64bit 기반 아나콘다가 설치될 것이고, 32bit이신 분은 아래를 선택하면 된다.
설치하려는 컴퓨터 사용자의 접근 권한에 대한 내용압니다 Just Me\
아나콘다의 기본 환경을 파이썬 3.6버젼으로 선텍한다.