TCPUDP의 차이점을 설명하라

 

TCP = 연결지향형 전송규약으로 연결 설정 후 통신 가능

데이터를 재전송하여 신뢰성 있는 데이터 전송

일대일 통신, 데이터 경계 구분 X(바이트 스트림 서비스)

 

UDP = 비연결 지향형 전송규약으로 연결 설정 없이 통신 가능

데이터 재전송을 하지 않아 신뢰성이 떨어진다.

일대다 통신, 데이터 경계 구분(데이터 그램 서비스)

 

 

TCP/IP 프로토콜 구조

 

네트워크 접근 계층 : 물리적 네트워크를 통한 실제 송수신 담당

네트워크 하드웨어, 운영체제가 제공하는 장치 드라이버

하드웨어적으로 정의된 물리주소 사용

인터넷 계층 : 논리 주소인 IP주소를 사용하여 데이터를 목적지 호스트 까지 전달

전세계적으로 유일성 보장

라우팅) 데이터를 목적지 까지 전달하는 작업

전송 계층 : 최종 통신 목적지를 지정하고 오류 없이 데이터를 전송하는 역할 포트 번호 사용

전송 계층에 해당하는 TCP/IP 프로토콜로는 TCP, UDP가 있다.

응용 계층 : 프로토콜을 사용하는 응용프로그램 포괄

 

 

SOCKET

 

1. 데이터 타입

2. 통신 종단점

3. 네트워크 프로그래밍 인터페이스

 

 

 

 

 

 

OSI 7계층

 

리계층 : 단말 시스템 간의 물리적 링크를 가동, 유지, 전기적, 기계적 기능적 절차 정의 계층

데이터링크 계층 : MAC 주소를 이용하여 호스트에서 다른 호스트로

네트워크 계층 : 두 단말 간의 논리적 주소로 경로 선택 및 라우팅 제공

트랜스포트 계층 : 신뢰성 있는 서비스 제공 하기 위해 논리적 연결 수행

세션 계층 : 두 응용프로그램 간의 연결 설정, 이용 및 연결 해제 등 대화를 유지하기 위한 수행

프레젠테이션 계층 : 데이터를 표준 포맷으로 교환, 암호화 복호화, 압축과 복원 수행

어플리케이션 계층 : 유용한 작업을 할 수 있도록 지원하는 계층

 

 

TCP 동작

 

1. Client

Socket함수를 통하여 소켓을 생성 후 Connect 함수를 통하여 연결 요청을 한다.

서버에서 승인이 되면 서버와 통신 후 소켓을 닫는다.

 

2. Server

Socket함수를 통하여 소켓 생성 후 Bind함수로 지역IP주소와 지역 포트번호를 결정

Listen 함수를 통하여 대기 상태로 변경 한다음. 클라이언트로부터 요청시

Accept 한 후 통신 후 소켓을 닫는다.

 

 

블로킹 소켓과 논블로킹 소켓

 

블로킹 소켓 : 버퍼의 여유공간 보다 작을 경우 프로세스는 대기 상태

크기만큼 데이터 복사가 일어난후 send가 리턴을 한다.

 

넌 블로킹 소켓 : 실제 복사한 만큼 바이트 수를 리턴 한다. 최소 1 최대 len


스레드 동기화 기법

 

임계영역(cs)

: 공유 자원에 대해 오직 한 스레드의 접근만 허용 한다.

( 한 프로세스에 속한 스레드 간에만 사용 가능 )

단점 :어떤 스레드가 먼저 진행 될지 모르기 때문에 프로그래머가 제어 불가능.

 

뮤텍스

: 공유 자원에 대해 오직 한스레드의 접근만 허용 한다. 대기열 구조

( 서로 다른 프로세스에 속한 스레드 간에도 사용 가능 )

 

세마포어

: 한정된 개수의 자원에 여러 스레드가 접근 할 때, 자원을 사용 할 수 있는

스레드 개수를 제한 한다.

세마포어 에서는 카운트가 하나씩 줄어들게 되며 리소스가 모두 사용중인 경우 카운트 0

그 다음 작업은 대기




'프로그래밍 > 네트워크프로그래밍' 카테고리의 다른 글

TCP / IP 란?  (0) 2019.02.05

2019.02.16


WPF의 Mainwindow에서 버튼을 누르면 기존 창이 가려지고, 

새로운 창이 나와야 하는 작업을 하는 과정에서 생각보다 시간을 많이 쓰게 되었다.

내가 같은 실수를 하지 않기 위해,

나와 같은 어려움을 겪은 분들을 위해 글을 남긴다.




1. DLL 생성



DLL 추가하고자 하는 솔루션에서 마우스 오른쪽 버튼을 눌러 [ 새 프로젝트 추가 ]를 누르고 [ 클래스 라이브러리 ] 를 생성 한다.




생성된 클래스라이브러리에서 나는 wpf 사용자 컨트롤을 사용 할 것이니 사용자 정의 컨트롤(WPF)를 눌러 생성한다.



시작 프로젝트의 참조에서 마우스 오른쪽 버튼을 눌러 [ 참조 추가 ]로 들어간다.



해당 DLL을 체크하고 확인을 누른다. 이후에 생성한 DLL 프로젝트에서 마우스 오른쪽 버튼을 눌러 시작프로젝트로 설정하여 주고

빌드하여 준다. 그렇게 하면 bin\debug 경로에 DLL 파일이 생성된다.


그런데 만약 빌드가 되지 않고 아래 이미지와 같은 에러가 뜬다면



위에서 참조추가 했던것과 마찬가지로 system.xaml을 참조추가하면 해결된다.



이제 DLL은 생성이 완료되었다. 메인윈도우에서 해당 버튼을 눌렀을때 방금 만들었던 사용자컨트롤 창을 띄우게 하면된다.




나는 유저 컨트롤이 생성되는 시점에서 Visibility를 hidden으로 두고 메인윈도우에서 해당 창을 띄우는 버튼을 눌렀을때 창이 visible 상태가 될수있도록 Show 함수를 작성하였다. 이제 메인에 사용자 컨트롤을 컨트롤 할 수 있는 변수를 생성하고 메인 canvas에 해당 childwindow를 add해주면 된다. 아래의

이미지를 참고하자









끝!


파일 시스템의 부족한 기능들


- 데이터 모델링 개념 : 데이터들 사이의 연관성을 표현해 줄 수 있어야 함. 

- 질의어 : 데이터들을 액세스 할 때 질의어 개념이 없음.

- 동시성제어 : 데이터가 있음. 이 데이터를 내가 혼자서 액세스할때는 문제X

  그러

- 파손, 회복

- 보안 : 이 데이터에 대한 액세스를 권한을 가진자만이 액세스 할 수 있도록

  가장 완벽한 보안은 그 데이터에 대한 존재 자체를 숨기는 것.

 


파일시스템은 이렇게 부족한 기능을 갖고있지만, 데이터베이스에선 이 모든 것을 지원해준다.




DBMS를 사용한 데이터베이스 관리



동시성 제어가능

질의어 기능 있음

여러 사용자에 적합한 다양한 인터페이스 제공

데이터 간의 복잡한 관계를 표현 -> 데이터 모델링기능

무결성 제약조건을 DBMS가 자동적으로 유지



데이터 베이스의 특징


1. 자기기술성 : 자기 자신을 표현하는 방법이 있다. 

2. 프로그램과 데이터의 분리 : 자기기술성을 통하여 

       독립적으로 존재 하도록 만든다.

3. 데이터 추상화

4. 데이터에 대한 다양한 뷰 



데이터베이스 시스템의 자기기술성 


데이터베이스에 대한 데이터(메타 데이터)를 통하여 데이터의 구조를

직접 알고 있지 않아도 데이터를 액세스 할 수 있음.


데이터와 프로그램이 독립성이 있으면 시스템의 성능은 느려진다.

계속 프로그램이 데이터를 물어봐야 하므로.


성능을 얻고싶다면, 데이터와 프로그램 사이의 의존성을 부여해준다.


데이터베이스 내의 데이터 저장구조가 변경되어도 데이터베이스 응용프로그램은 아무영향

받지 않음.


데이터의 추상화

데이터 모델을 사용함으로서 저장구조와는 별도로 데이터의 의미를

표현하는 방법을 제공함.

사람들이 인식하는 방식으로 데이터를 다룰수 있게 해줌.


데이터에 대한 다양한 뷰 


사용자는 전체 데이터베이스 보다는 관심이 있는 데이터베이스의

일부를 뷰로 정의 할 수 있음.

학생정보 DB를 보면 개략적인 내용만 나와있어.

실제 액세스는 학생들의 성격 까지 나와있음. 이게 뷰기능.

뷰라고 하는 것은 실제 데이터와 다르게 데이터를 표현. 

있는 데이터를 숨길수도, 없는 데이터를 만들수도 있음.

사용자들에게 내부구조를 숨기려고 하는 것.

기본적인 컨셉은 너네는 보여지는 데이터를 이용해 우리는 그 데이터를

활용할게



용어 정의 


ex )  

       직급 | 연봉

       대리 | 100


- 데이터베이스 스키마 : 

우리가 과목에 대한 정보를 모으고 싶어. 

그러면 학수번호, 과목이름, 교수이름, 강의시간, 학점수 등을 모아야함

이것이 스키마이다.

스키마는 변화를 자주 하지 않는다. 변화한다는 것은 필드를 수정, 삽입, 삭제

하는 것임. 

ex) 직급, 연봉

- 데이터베이스 상태 :

스키마 내의 데이터의 현재 상태 

상태의 변화는 자주 일어난다.

ex) 대리, 100


ex )  

       직급 | 연봉

       대리 | 100



데이터베이스에 변화가 일어났을때 스키마가 더 자주변화가 있을까

상태의 변화가 더 자주있을까.

-> 상태가 변환다는 이야기는 김창섭님이 대리->사장으로 바뀐다는 것.

-> 월급이 올랐어 100 -> 200 상태가 올랐음.

-> 스키마가 변화는 것은 필드가 추가 되는 것임.

-> 따라서 상태가 더 자주 변한다.



데이터 베이스 전문가들에게 있어서 

데이터베이스 구축, 설계, 모델링을 한다 -> 스키마를 정의 한다라는 의미





데이터베이스 기술의 발전은 중복을 없애는 것과의 싸움이다.

중복을 없앤다 = 데이터를 일원화 한다. 


DBMS의 사용효과


-> 표준화된 데이터 관리 : 조직 내 모든 부서에서 표준화된 문서 관리로 업무 효율증대

    

    데이터베이스 기술의 발전은 중복을 없애는 것과의 싸움이다.

    중복을 없앤다 -> 데이터를 일원화 한다.


-> 데이터 구조 변경에 융통성 부여 : 데이터베이스 내의 자료 구조가 변경되어도 

   사용자에 대한 영향은 거의 없음


-> 응용프로그램의 개발시간 단축 : 응용 프로그램이 상당한 부분을 DBMS가 처리


-> 항상 최신의 정보를 제공 : 


-> 규모의 경제성 : 부서마다 다른 방식으로 자료를 관리하는 것보다    

   통합 DB로 관리하는 것이 전체적으로 저 비용임





DBMS의 단점은 무엇일까?


1. 비용증가 - 비싸다

2. 성능감소 - 거의 모든 분야에 쓸수 있기 때문에 장착한 기능이 많음. 무거움

3. 고장의 영향 확대 - 중복된 데이터를 중복 없애면 통합됨.

   그러다 보면 데이터가 한가운데 모이게 됨.

   이렇게 되면 한곳이 고장나면 다 고장나게 됨.



데이터베이스 사용자



- DBMS 개발자 ( 핵심 코어 오라클, mySQL 을 만든 사람들 )

- DB관리자

- DBMS 설계자 ( 데이터 베이스 스키마를 만드는 사람 )

- 시스템 분석가 

- 도구 개발자

- 운영자

- 최종 사용자 ( 가장 바깥쪽에 있는 사람들, 응용프로그램 개발자, 사용자 ) 






데이터베이스를 공부하기 전에 관련 용어와 개념에 대해서 알아보자!!



데이터 


의미를 가지면서 기록 될 수 있는 알려진 사실

의미 =  객관적인 사실이 아닌 주관적인. 

(즉, 어떤사람에겐 의미가 있고,반대로 어떤 사람에겐 의미가 없을 수 있음) 누군가 에겐 데이터 일지라도, 다른 누군가에게는 데이터가 아닐 수 있다.

  


데이터베이스 


관련있는 데이터의 모임



데이터베이스 관리시스템 


데이터베이스의 생성과 관리를 담당하는 소프트웨어 패키지



데이터베이스 시스템 


Database와 그를 관리하는 소프트웨어(DBMS, 응용프로그램)

모두를 칭하는 용어



작은 세계  


데이터베이스 구축의 대상이 되는 실세계의 일부분




데이터베이스 프로그램은

적절한 시간내에 활용 할 수 있게 하는 것도 중요



파일이란?


물리적인 비트의 연속, 순차적인 레코드들로 구성

레코드는 연관된 필드들의 모임

레코드는 서로 연관된 필드들로 구성되어있다.



파일시스템의 가장 큰 문제는 


1. 데이터에 대한 프로그램의 의존도가 높다. -> 데이터 구조가 바뀌면

프로그램도 바뀌어야 한다.

2. 데이터의 중복성 -> 각각 2파일에 동일한 정보임에도 불구하고

중복되어 저장이 되면 데이터의 수정이 일어날때 

한쪽에만 수정이되고 다른 쪽에 수정이

되지 않는 경우가 발생 할 수 있음. 이 경우 데이터의 불일치 발생




오늘 WPF 관련 프로젝트를 진행하는 과정에서 컨트롤 속성창이 나오지 않아 당황을 했다.






바로 이 친구가 사라졌다. 


이 친구는 F4 Key를 입력 하거나


혹은



보기 -> 속성 창을 통해서 다시 활성화 시킬 수 있다.





[ 파이썬 기초 문법 - 3 ]에서는 

프로그래밍 흐름 제어에 관한 반복, 조건문에 대해서 소개하려고 합니다. 어렵지 않지만 개인적인 생각으로는 프로그래밍에 있어서 큰 부분을 차지하며 중요한 부분이라고 생각합니다. 




If문


조건식 내부의 결과가 참인지 거짓인지에 따라 if문 내부 구문 코드를 수행 여부를 결정 한다. 만약 조건식의 결과가 거짓이라면 해당 구문은 실행하지 않고 건너 뛴다. 특정 조건에 따라서 행동을 다르게 나타내고 싶다면 if문을 사용하면 된다!


if <조건식>:

    <구문>


예제 ) 

value = 5

if( value < 10 ):
print( value )

위의 예제는 결과가 참

즉, value가 10보다 작기 때문에 print( value )는 정상적으로 실행하게 된다.


자 그렇다면,

만약 1개가 아닌 2개이상의 조건문을 필요로 한다면 어떻게 하면 될까??

예를들어 value가 2보다 작은 조건과 4보다 큰 조건을 추가한다고 생각해보자 아래와 같이하면 될까?

value = 5

if( value < 2 ):
print( value )
if( value > 4 ):
print( value )


위의 방법이 틀렸다고 할수는 없다. 하지만 위와 같이 동일한 변수에 대해서 조건을 검사하는 경우에는 2개의 if문 모두 조건 검사를 하기 때문에 비 효율적이다. 다른 언어와 마찬가지로 Python에서는 elif와 else를 지원한다.  


value = 1

if( value < 2 ):
print( value )
elif( value > 4 ):
print( value )
else:
print ( value )

위의 예제에서는 첫번째 if문에서 True를 갖는다. 그렇기 때문에 컴파일러는 elif,의 조건과 else의 조건을 검사하지 않고 건너 뛴다.  위의 예제는 단 1번의 조건 검사만 하는 경우이다. 

-- 만약 if문이 거짓이라면 순차적으로 elif를 검사할 것이고, 그다음 else를 검사 할 것이다.


아무튼.... if문 여러개를 쓰지말고 상황에 따라 elif와 else를 쓰자!






True / false


조건식에서의 참 / 거짓 판단은 bool Type의 [ True, false ]를 반환한다.


value = 2

if ( value < 0 )에서 value < 0은 거짓이기 때문에 false를 반환한다.

즉 ( value < 0 ) == false와 같다.


또한 정수에서의 0, 문자열에서의 null 등 아무것도 없음을 의미하는 값은 거짓으로 판단이 되고,

그 외의 값은 모두 참이다.






while문


while <조건식 > :

      <구문>


- while문은 조건이 참일 경우에 계속적으로 반복하여 수행하도록 한다.

- while문을 빠져 나가기 위한 방법은 조건을 false가 되도록 바꾸거나 break를 통해 빠져나오면 된다.

- 무한루프 :

               while 1: 과 같이 조건을 항상 참이도록 만들어 while 루프 내부의 구문을 무한적으로 실행하도록 한다.

               빠져나가기 위한 방법은 오로지 break 뿐이다.


예제 )

#1

value = 30

while value > 0:
value -= 1
print( value )

#2

while 1 :
print(value)
value += 1
if value > 150:
break


#1은 30부터 0까지 출력

#2는 0부터 150까지 출력후 break를 통해 while문을 빠져나간다.





break / continue


1. break : 반복문을 빠져나가기 위한 키워드로 반복문 내에서 break를 만나면 반복문이 종료된다.

2. continue : 반복문 내에서 continue를 만나면 continue 이후에 있는 코드는 건너뛰고 반복문의 첫줄부터 다시 수행하도록 한다.




for문


for <원소> in <컨테이너>:

     구문



예시 )


lst = [ 1, 2, 3, 4]

for e in lst:
print ( e )


결과:

  1

  2

  3

  4


예시와 같이 for문을 통해서 lst라는 이름을 가진 리스트 변수의 각 원소인 [1, 2, 3, 4] 를 순회하여 출력한다. 이처럼 for문은 특정 컨테이너를 순회한다.



range( 시작값, 종료값, 증가값 )


for문을 이용하여 일정 범위 안에서 반복을 하고 싶을때는 range라는 함수를 사용하면 된다.

예를들어 1부터 10까지 반복하고싶다면


num = range(1,11)

for e in num:
print(e)

와 같이 범위값을 1,11로 값을 넣어주면 된다.




기타 기능


show log

  • 이전에 Commit 했던 리비전 정보, 작성자, 시간, 기록내용을 보여 준다.
    SVN SHOW LOG.PNG

revision graph

  • revision 정보, branch 정보를 보여준다.
    SVN REVISION GRAPH.PNG

lock - getlock / releaselock

  • commit을 할 때 다른 사람이 commit을 하지 못하도록 하는 기능
  • 본인이 commit을 하기전에 lock을 걸고 commit 완료 후 releaselock으로 lock을 해제 해주면 된다.
    SVN LOCK.PNG


switch

  • working copy가 바라보고 있는 branch를 변경 한다.
  • 설명 예시) turnk에서 파생된 branch 1에서 CheckOut을 통해 받은 workingCopy를 통하여 작업을 하다가 새로운 branch 2로 branch를 옮겨야 하는 상황에서 switch를 사용 한다.
    SVN SWITCH.PNG




relocate

  • url 정보를 변경 해야 할 때 사용
    SVN RELOCATE.PNG


ignore list

  • svn에 들어갈 필요가 없는 파일들을 무시 할 때 사용
  • 마우스 우클릭 -> TortoiseSVN -> Settings -> General -> Global ignore pattern에 제외할 파일을 입력 한다.
    SVN IGNORE.PNG


언어 설정

  • 마우스 우클릭 -> TortoiseSVN -> Settings -> General -> Language에서 영문/한국어를 설정
    SVN LANGUAGE.PNG





conflict[편집]

SVN을 통해 여러명이 공동 개발을 하는 상황인 경우, 동일한 부분의 소스 작업을 하면 제대로 커밋이 되지 않는 상황이 발생 할 수 있다. 이 상황을 conflict라고 한다. 예를들어 두명의 개발자가 function.cpp 파일에서 A라는 함수를 수정하는 상황에서 개발자 A는 아래와 같이 구현하였고, int A() { return A+b; } 개발자 B는 int A() { return A-b; } 와 같이 구현한 상황일때, conflict가 발생한다. 이러한 경우 해결방법으로는

개발자가 수작업으로 어느 잘못된 부분과 올바른 부분을 판단하여수정해야 한다.



+ Recent posts