공부/네트워크2011. 7. 28. 09:52


Transport services and protocols

프로세스간 통신
발신쪽에서는 segments로 쪼개서 network layer에게 전달.
수신쪽에서는 segments를 조합하여 message로 만들어 application layer에 전달
TCP와 UDP 프로토콜이 있다.
TCP : reliable, 보낸 순서대로 도착. 
UDP : 순서가 없이 도착.
Transport layer는 delay를 보장하거나, bandwidth를 보장하지 않는다.

Multiplexing/demultiplexing

demultiplexing : transport layer에 있는 여러 segments를 적절한 socket으로 보내주는 것.
Multiplexing : 여러 소켓으로부터 data chunks를 모아서 각 data chunk마다 header 붙여주고 암호화해서 segment로 만들고, network layer에 전달하는 것.

Connectionless demultiplexing
udp socket들은 destination IP address와 destination port number로 구분된다.
IP datagram이 다른 host에서 왔더라도 dest ip와 dest port가 같으면 같은 소켓으로 들어간다.

Connection-oriented demux
TCP 소켓들은 출처아이피, 출처 포트번호, 목적지 아이피, 목적지 포트번호로 구분된다.
4가지 정보로 적절한 소켓으로 들어간다.
  
UDP

데이터를 읽어버릴 가능성이 있다.
세그먼트들이 순서없이 application layer에 전달된다. 
No connection
덕분에 header size가 작고, 빨리 보낼 수 있다.
reliability는 application layer에게 맡긴다.
에러체크는 한다.(checksum)
transport layer의 기본기능인 multiplexing과 demux 기능을 한다.

Reliable data transfer(RDT)

1.0
bit error, packet 손실 없는 이상적인경우

2.0
bit error가 있는 경우
받은 packet에 문제가 없으면 ACK을 전송
문제가 있으면 NAK 전송
ACK과 NAK에 비트에러가 있다면?

2.1
ACK과 NAK에 비트에러가 있으면
sender가 패킷을 재전송 한다.
패킷에 시퀀스넘버가 있어서  receiver가 이미 ACK을 보낸거면 ACK만 전송한다.

2.2
NAK대신 ACK을 사용.
ACK 패킷에도 시퀀스넘버 포함.

3.0
에러와 loss 둘 다 있을 때
timer 사용.
packet이 loss 되었을 때 – timeout, 패킷 재전송
ACK이 loss 되었을 때 – timeout, 패킷 재전송, 패킷 중복, 시퀀스 넘버로 알 수 있다.
ACK이  delay 될 때 – timeout, 패킷 재전송, 패킷 중복, 시퀀스 넘버로 중복 파악.

Pipelining

한번에 여러개의 패킷을 보낸다. ACK을 안기다린다.
링크 활용률이 올라간다.

Pipelining protocols

1) Go-Back-N
Sender : timeout 발생시 ack을 받지 못한 패킷 모두 재전송
Reciever : 다음번 수신할 패킷의 시퀀스 번호만 알고 있으면 된다. 이 번호가 아닌 패킷이 들어오면 버린다. 그리고 최근에 어디까지 받았다는 걸 알려주려고 시퀀스넘버를 담은 ACK을 보낸다. Cumulative acks(5번 ACK을 보내면 1,2,3,4도 잘 받았다는 것을 내포함)
2) Selective repeat
리시버는 패킷을 받으면 그 패킷에 대한 ACK을 보낸다. 순서대로 오지 않은 패킷은 버퍼에 저장했다가 나중에 순서대로 되면 그 버퍼에 있는 모든 패킷들을 윗 레이어로 보낸다. 센더는 개별 패킷에 대한 타이머를 가지고 있다. 

TCP

Byte stream (message의 경계가 없다.)
Round Trip Time(RTT) and Timeout
Timeout은 RRT보다 크게.
현재 RRT에 새로운 패킷의 RTT를 반영. 그리고 여유분을 둔다.
Cumulative acks
순서대로 오지 않은 segments들을 버퍼에 보관.
재전송 타이머 한개.
timeout이 발생하거나, 중복된 ack을 받으면 패킷재전송이 이루어진다.
Timeout 발생하면 가장 오랫동안 ack을 받지 않은 패킷을 재전송한다.

Fast Retransmit

time-out 까지 안기다리고, 리시버에서 3번 같은 ACK을 보내면 data가 loss되었다는 걸로 생각하고 재전송한다.
 
TCP flow control

sender가 receiver의 버퍼의 spare room 한도 내에서 패킷을 보낸다.
Segment 안에 RcvWindow 값을 넣어서 sender가 spare room를 알 수 있다.
 
Congestion control

네트워크망을 보고 전송속도를 조절한다.
아무리 sender쪽의 데이터 전송률이 높아도 Output link의 data 수용 능력은 한계가 있다.
패킷 loss로 인한 재전송과 delay로 인한 재전송 때문에 보내는 데이터 전송률이 실제로 받은 데이터 전송률보다 크다. 데이터가 적게 들어오는 셈.

Congestion control 두가지 방법

1) end-system에서 control
network로부터의 피드백이 없이, end-system이 loss와 delay를 판단한다.
2) Network-assisted
router가 end-system에게 피드백을 제공한다.

Congestion control 알고리즘

하기 전에 용어정리
MSS(Maximum Segment Size) : 하나의 TCP segment가 가질 수 있는 최대 data size. 
CongWin : Congestion Window (TCP sender가 네트워크에 트래픽을 보낼 수 있는 전송률)
sender는 CongWin의 크기를 조절하면서 Congestion Control을 한다.
sender는 최대 CongWin만큼 수신확인 없이 segments를 보낼 수 있다.
1) Additive Increase Multiplicative Decrease (AIMD)
Loss가 발생할때까지 CongWin을 매 RTT마다 1 MSS 씩 증가한다. (Additive Increase)
Loss가 발생하면 CongWin을 절반으로 줄인다. (multiplicative decreases)
이렇게 linear하게 증가하는 것을 congestion avoidance라고 한다.
2) Slow Start
CongWin이 1MSS부터 시작한다.
첫번째 loss가 발생할 때까지 CongWin이 지수함수를 따른다.

loss 발생했을 때 처리
3개의 duplicate ACKs을 받으면 CongWIn을 절반으로 줄이고, linear하게 증가시킨다.
Timeout이 발생하면 CongWin을 1로 줄이고, 지수함수를 따른다. (상황이 심각하니 과감하게 줄인다.) 그리고 threshold에 이르면 linear하게 증가한다.  threshold는 timeout 발생하기 전 CongWin의 절반.

'공부 > 네트워크' 카테고리의 다른 글

Link layer and LANs  (1) 2011.08.18
Network Layer  (0) 2011.08.15
Application layer  (0) 2011.07.23


Posted by skyjumps
공부/컴파일러2011. 7. 27. 21:12


Parsing
Scanning 과정에서 얻은 토큰들로 parse tree나 syntax tree를 만드는 과정.

Context-Free Grammars
syntactic structure(구문 구조)를 기술하는 문법.
이런 유형의 문법을 BNF라 한다.
exp → exp op exp | (exp) | number  
첫번째 symbol인 exp는 이 구조의 이름
→ 는 두번째 symbol
exp op exp | (exp) | number 는 symbol들의 string. token일 수도 있고, name이거나 '|'

derivation은 grammar rule의 오른쪽 부분을 구조 이름으로 교체 해 가는 과정. 결국은 Token symbols의 string이 된다.

Nonterminals and terminals
구조 이름은 nonterminals
token은 terminals

left recursive
A → Aa|a
A => Aa => Aaa => Aaaa=> aaaa

right recursive
A → aA|a
A => aA => aaA => aaaA => aaaa

parse tree
유도과정(derivation)을 구조화한 트리
exp → exp op exp | (exp) | number
op → + | - | *
(25+12)*21의 parse tree


Abstract syntax trees
사용자 편의대로 파스트리를 단순화.
Non terminal이 없다.


Ambiguity(모호성)
두가지 이상의 유도 과정으로 같은 문자열을 생성할 때.
34-3*42는 (34-3) * 2 와 34-(3*42) 두가지로 생성 가능하다.

모호성을 없애기 위해 문법을 새로 작성하거나
우선순위를 주거나, 결합 순서를 주는 방법 등이 있다.

EBNF(확장 BNF)
{}
Repetition
A → Aα | β (left recursive) : A → β{α}
A → αA | β (right recursive) : A →{α}β

[]
Optional
if-stmt → if (exp) statement [ else statement]

()
choice
exp → exp (“+” | “-” | “*” ) exp | “(“ exp “)” | number


참고 및 그림 출처
한양대 이욱세 교수님 강의노트 

'공부 > 컴파일러' 카테고리의 다른 글

구문 분석 (syntax analysis)  (0) 2011.08.22
context-free grammar  (0) 2011.08.20
regular language  (0) 2011.08.20
formal language  (0) 2011.08.20
2장 스캐닝 scanning  (0) 2011.07.26


Posted by skyjumps
공부/우분투2011. 7. 26. 16:01


난 에버라텍을 쓰지만 이 방법을 쓰니까 다시 작동하였다. 

Ctrl + ALT + F1 눌렀다가 ALT + F7을 누르니까 다시 작동한다.

http://www.linlap.com/wiki/samsung+q310 

'공부 > 우분투' 카테고리의 다른 글

터미널 실행 단축키 지정  (0) 2011.08.01
우분투 인터넷연결 하는 것이 사라졌을 때  (0) 2011.08.01


Posted by skyjumps
공부/컴파일러2011. 7. 26. 15:51


token을 만든다. 논리적인 단위.

Regular expression - 문자열의 패턴

Regular expression 연산

1) choice : L(a|b|c|d) = {a,b,c,d}
2) concatenation : L((a|b)c) = {ac,bc}
3) repetition : L((a|bb)*) = {ε,a,bb,aa,abb,bba,bbbb,...}

우선순위 : repetition > concatenation > choice
a|bc* = a|(b(c*))

regular definition(정규정의)
정규 표현식이 기니까 이름 부여
digit = 0|1|2|...|9

정규표현식 extention
    1) 최소 한번이상 반복 '+'
    (0|1)+ = (0|1)(0|1)*

    2) 임의의문자 '.'
    .*b.*

    3) 문자의범위 [0-9]
    [a-zA-Z] 모든 영어 대문자, 소문자

    4) 주어진 집합에 속하지 않는 임의의 문자
    [^abc]  a또는 b또는 c가 아닌 임의의 문자

    5) 선택적 부분표현식 '?'
    signedNatural = (+|-)? natural
    signedNatural = natural | +natural | -natural이랑 의미가 같다.

프로그래밍언어의 토큰의 범주
Number 
reserved word(keyword) : if, while, do
special symbol : <,> :=, ++
identifier : 연문자로 시작하는 영문자와 숫자의 나열
literal : 문자열 리터널, ‘Hello world’
constant : 수치

disambiguating
<> 는 여러가지로 해석될 수 있다. < , > , <>
문자열이 식별자 또는 키워드일 때 일반적으로 키워드가 우선적용.
Principle of longest substring : 단일 토큰을 구성할 수 있는 가장 긴 문자열을 토큰으로 한다. 

Whitespace
token delimiter ( 토큰 분리자) 역할
newline, blank, tab, comment

lookahead
분리자가 토큰에 포함되어서는 안된다.
xtemp=ytemp에서 =는 다음 토큰을 위해 입력에 남아 있어야 한다.
backup이 필요.

Finite automata(유한 오토마타)
알고리즘 기술 방법.
패턴을 인식하는 과정을 표현하는데 이용.

Deterministic Finite Automata (DFA)
하나의 상태와 symbol(문자)가 주어지면 다음 상태는 유일하다.

Nondeterministic finite Autumata(NFA)
하나의 상태와 symbol이 주어지더라도 다음 상태는 유일하지 않은 것.

주석은 regular expression으로 표현하려면 복잡한데, DFA로 쉽게 표현할 수 있다.

longest substring 원리에 따라 토큰 생성. lookahead를 해서 분리자(delimiting)은 다시 입력 문자열로 돌려준다.

DFA는 각 token 마다 하나씩 있다. 이 DFA를 합칠 수 있다.
하지만 체계적인 방법이 아니다.
체계적인 방법
Regular expression -> NFA -> DFA

NFA에는 ε전이가 있다.입력문자열을 안보고 가는 전이.

ε로 각 automata를 합칠 수 있다.

DNF 구현방법
이중 case문 써서 바깥 case는 상태, 안쪽 case는 transition(전이)에 따른 상태변화.
테이블 방식(table-driven), 테이블이 주어지면 코드를 만들 수 있다.

정규표현식을 DFA로 변환
1) 정규표현식 -> NFA

2) NFA -> DFA
ε를 없애야 한다. 그리고 하나의 상태와 하나의 문자로 상태 여러개를 나타낼 수 없도록.
Ε-closer이용 - 상태집합. 한 상태에서 0이상의  ε-transitions로 갈 수 있는 모든 상태의 집합.
두 상태집합을 Union 한 것은 그 상태에서 갈 수 있는 모든 상태들의 집합이다.
symbol이 하나 들어올 때마다 나오는 subset이 state가 된다.

DFA의 상태의 수 최소화하기
처음엔 최상의 시나리오로  전체 nonaacepting, accepting끼리 묶는다. 
nonaccepting집합에 있는 모든 상태가 그 상태집합의 모든 전이에 의해 nonaccepting 집합에 있는 상태로 간다면 그 집합을 새로운 상태로 정의할 수 있다.
accepting도 비슷함.
만족하지 않는 상태들은 따로  분리.
이 과정을 집합이 하나의 상태만 가지고 있을 때까지 반복.

Lex는 lex 문법에 맞게 정규표현식을 구현하면 scanner를 자동으로 생성해주는 프로그램이다.

'공부 > 컴파일러' 카테고리의 다른 글

구문 분석 (syntax analysis)  (0) 2011.08.22
context-free grammar  (0) 2011.08.20
regular language  (0) 2011.08.20
formal language  (0) 2011.08.20
3장 context-free grammars & parsing  (0) 2011.07.27


Posted by skyjumps
공부/네트워크2011. 7. 23. 16:37


Network application
email, web, p2p,network game 등.

end system에서 작동한다.
네트워크를 통해 통신한다.
network-core에는 없어도 된다.

Application architectures
Client-server
Peer-to-peer(p2p)
Hybrid of client-server and P2P

1) Client-server
server ; always-on host(항상 네트워크에 연결되어, 클라이언트의 서비스요청을 처리), server farms(server host가 여러대, 시스템 규모면에서 확장)
client : 서버와 통신, 서로 다른 client와 직접적으로 통신하지 않음.

2) pure p2p architecture
always-on server가 없음, 임의의 end system끼리 직접적으로 통신, 확장성면에서는 좋으나, 관리의 어려움이 있다. self-scalability(peer가 peer에게 file을 요청하는 동시에, 다른 peer들에게 파일을 전송할 수 있다.

Skype는 client-server방식, p2p둘다 사용, client끼리는 직접적으로 통신, 주소 찾을 때에는 서버와 통신.

Processes communicating
host에서 돌아가는 프로그램.
같은 호스트에서는 운영체제의 IPC(inter-process communication)에 의해 통신한다.
IPC - 파이프, 시그널, 메세지큐, shared memory, 세마포어, 파일시스템
다른 host의 process 통신은 socket을 통해 message를 주고받는 방식이다. client process가 요청하고, server client가 그 요청을 처리.
socket은 application layer와 transport layer 사이의 interface.
API(application programming interface)를 이용해서 아래 레이어에게 정보를 준다.

Addressing processes
프로세스끼리 메시지를 주고 받으려면 프로세스를 식별할 수 있는 값이 있어야 한다.
IP address와 port

Application layer protocol
메시지 교환 타입정하기(request인지 response인지)
syntax(message안에 어떤 field가 있고, field를 어떻게 작성해야 하는지)
semantics(field가 가진 정보의 의미)
언제 어떻게 보낼지 규칙
공식적인 프로토콜과 독자적인 프로토콜

application-layer가 필요한 transport-layer의 서비스
Data loss(일정부분을 손실해도 상관없는지, 100% 손실없는 데이터전송을 요구하는지)
Timing (low delay 요구 여부)
Throughput (최소 throughput을 보장하느냐 안하느냐)
bandwidth - 1초에 전송되는 비트수, bps, 속도가 아님. bandwidth가 높다는 것은 수도관에서 수도관이 커지는 것을 상상.
throughput - 실제 네트워크에서의 bandwidth.
보안여부

Internet Transport protocols services
TCP
connection oriented, reliable transport, flow control, congestion control제공, timing, minimum throughput 보장 안하고, security 제공 안함.
UDP
connection setup, reliability, flow control, congestion control, timing, throughput guarantee, security 다 제공 안함.
빨라서 쓴다.

HTTP
Hypertext transfer protocol
TCP 사용
stateless 프로토콜 (서버는 클라이연트의 과거 요청 정보를 유지하지 않는다.)

HTTP connections
Nonpersistent HTTP (한 tcp 연결에 최대 하나의 object(그림파일, html 파일 등)가 전송)
Persistent HTTP (한 tcp 연결에 여러 object가 전송.)

RTT(Round trip time)
한 작은 패킷이 client에서 server로 가서 다시 되돌아 오는 데 걸리는 시간
file transmission time : 2RTT + transmit time (연결요청, 연결승인, object요청, object승인 및 전송)

object당 2RTT 요구.
각 TCP connection overhead 문제.
 
Persistent HTTP
server와 client 연결 계속 유지. 파일보내는데 최소 하나의 RTT만 필요하다.
보통 파이프라인을 사용해서 요청에 대한 응답을 기다리지 않고 요청을 줄지어서 보낸다.

HTTP request message format
Request line(Get, Post, Head), Header line(Host, User-agent 등), Blank line, Entity line

출처 : project67555.appspot.com

Post method : input 값들이 entity body에 들어감.
Get method : input 값들이 URL 부분에 인코딩된다.

HTTP response message
status line(HTTP/1.1, 200, OK), header lines(Connection:close, Date, Server:Apache 등), entity body

출처 : project67555.appspot.com

User-server state : cookies
서버가 user를 식별하여 상태를 알 수 있는 방법.
http header에 쿠키정보 담아 주고 받는다.
쿠키파일은 사용자의 컴퓨터에 저장되며 웹브라우져가 관리한다.
 
Web cache
proxy server
client가 server에게 요청할 때 중간에 proxy server의 캐시에서 client가 요청하는 데이터가 있으면 client에게 보내준다.
server까지 안가도 되니까 빨리 얻을 수 있고, 외부 네트워크의 트래픽(네트워크로 전송된 데이터 량)도 줄일 수 있다. 
항상 최신의 데이터를 유지하고 있어야 한다. cache가 데이터가 수정되었는지 서버에게 메시지를 보내고 수정이 안되었다고 응답이 올 경우, client에게 데이터를 보낸다.

Electronic Mail
SMTP는 메일 전송 프로토콜
메일 서버는 user가 메일 서버의 자기 메일상자에 접속해서 메일을 다운받을 수 있도록 한다.
Pop protocol을 이용해서 메일에 접근하고 다운 받는다.

DNS (Domain name system)
도메인 이름과 IP 주소 매핑
DNS 서버는 계층적으로 분산되어 있다. 집중되어 있으면 위험하다. 트래픽도 많을 거고.
DNS 서버는 캐시를 사용해서 루트 DNS서버까지 가지 않아도 된다.
루트 DNS 서버도 여러군데 분산되어 있다.

Pure p2p 구조
항상 켜져있는 서버가 없다.
peer들끼리 연결해서 통신한다.

서버 방식보다  빨리 client들에게 파일을 전송할 수 있다.
서버는 파일을 한번만 올리면 되고, client들이 업로드에 참여.

서버가 index정보를 가지고 있을 때
클라이언트가 서버에게 peer 정보 리스트를 받고 peer들끼리 파일을 주고 받는다.
서버의 index가 집중되어 있는 경우 위험하다.

Query flooding
fully distributed이다.
overlay network : peer x와 y사이에 tcp 연결을 edge로 하는 가상의 그래프
tcp연결 되어 있는 peer에게 query message를 보내고 그 peer는 자기의 peer들에게 query message를 전달한다. 그래서 원하는 목적지에 도착하면 그 peer는 Queryhit을 메시지 보낸 peer에게 보낸다. 그래서 queryhit은 결국 처음 query message를 보낸 peer에게 전달된다.
traffic이 기하급수적으로 늘어나는 문제.

Hierarchical Overlay
super node끼리 p2p 네트워크 형성
한 super node에 여러개의 peer들.

Peers as relays
나가는 것은 문제가 없는데 들어오는 것은 문제가 되는 NAT에 대한 것.
NAT을 사용하는 서로 다른 수퍼노드에 있는 peer끼리 통신하기 위해 둘 사이에 session을 생성.

Socket programming
TCP는 데이터가 byte stream 형태로 전송
UDP는 데이터가 패킷단위로 쪼개져서 전송.

'공부 > 네트워크' 카테고리의 다른 글

Link layer and LANs  (1) 2011.08.18
Network Layer  (0) 2011.08.15
Transport Layer  (0) 2011.07.28


Posted by skyjumps
공부/웹2011. 7. 21. 17:21


시맨틱 웹과 의미적 연결성: 웹 사이언스를 위한 출발점을 읽고

하이퍼 텍스트
: 문서들을 연결

HTML
(Hypertext Markup Language) : 하이퍼 텍스트 문서

HTTP
(Hypertext Transfer Protocol) : 월드와이드웹에서 정보를 주고 받을 수 있는 프로토콜

URI
(Uniform Resource Identifier): 자원을 식별하기 위한 문자열, URL은 URI의 한 부분(자원의 위치)
(URI, URL교 : http://tostring.kr/39 참고)

월드와이드웹은 정보자원들의 의미적 관계를 명시적으로 표현할 수가 없다.
해결방법 중 하나로 시맨틱 웹 등장.

시맨틱 웹 - 기계가 정보의 의미를 이해하고 처리할 수 있는 정보의 공간.
정보를 컴퓨터가 이해할 수 있는 온톨로지로 표현하고 컴퓨터가 자동으로 처리.
정보자원에 의미를 부여하고 이것을 바탕으로 논리적인 추론이나 향상된 정보처리를 할 수 있다.
온톨로지는 어휘의 내용을 명확하게 정의하고, 어휘들로 표현된 사실들 사이의 논리적 관계를 통하여 새로운 사실을 추출해내기 위해 사용.
웹온톨로지 언어는 웹에 존재하는 물리적 개체와 추상적 개체를 의미적인 수준에서 표현.(추상적 개체도 연결됨을 주목)
보통 RDF(Resource Description Framework)나 OWL(Web ontology language)를 사용해서 온톨로지를 표현한다. 

웹의 연결성의 의미
1) 정보의 연결성을 의미적으로 구현하는 기술 시맨틱웹
2) 사회적 연결성을 위한 참여와 개방적 서비스를 구현하는 것은 소셜웹

기계가 사람처럼 의미를 이해하려면 정보 자원들 간의 관계를 컴퓨터가 처리할 수 있는 지칭과 식별자가 명시적인 언어로 표현되어야 한다. (웹 온톨로지가 하는 일)

소셜웹이 보편화 되고 소셜 웹사이트에서 사회문화적 데이터가 급증함에 따라 시맨틱 웹 기술의 필요성도 커지고 있다.

소셜웹과 시맨틱웹의 관계
시맨틱웹의 데이터 부족 문제 - 소셜 웹에서 생산되고 공유되는 데이터를 통해 어느 정도 해결됨.
데이터의 다양성 측면 - 기존의 학술논문이나 서지정보에 소셜웹이 등장하면서 사회문화적 데이터도 추가됨.
기술적 측면 - 대용량 온톨로지를 구축하는 것에서 벗어나 관계 데이터베이스에서 필요한 데이이터를 의미화 하는 방식으로 전환.

사회문화적 정보의 Linked data
웹 온톨로지 언어를 이용해 표현된 의미적 데이터는 서로 다른 정보 자원과 의미적으로 연결되거나 통합될 수 있다.
Linked data를 이용해서 웹에 있는 자원들을 노출, 공유, 연결할 수 있다.
개념이나 대상을 URI로 표현. HTTP로 URI에 접근. URI에 접근했을 때 RDF로 상세정보 제공, RDF에 포함된 다른 정보자원에 접근할 수 있다.
DBPedia - 위키피디아에 있는 정보들을 시맨틱 웹 기술을 이용해 구조화된 데이터로 변환한 것. 관계형 데이터베이스에서 온톨로지를 추출한 것을 바탕으로 Linked data의 허브 역할을 한다.

사회문화적 데이터와 현상을 의미적으로 연결하기 위해 대상 영역의 전문가, 정보 제공자, 그리고 소비자의 협업으로 이루어져야 한다.
RDF 어휘들을 연결하여 온라인에서 생성되는 다양한 현상을 의미적 수준에서 표현할 수 있다.
RDF 어휘 관계 뿐만아니라 도메인 온톨로지들의 관계를 정의할 수 있다.
RDF 언어를 재사용할수록 데이터를 연결하기 쉽다.


웹사이언스
기존의 컴퓨터사이언스의 연구방법을 넘어서 여러 학문의 경계를 넘나들면서 웹을 이해하는 학문.
웹사이언스는 소셜웹과 시맨틱웹이 융합된 공간에서 많은 영향을 미칠 것임.
사회문화, 비지니스 관련 데이터들은 어느정도 예측 가능한 수준이지만, 생물학, 법학, 심리학, 의과학 등의 다양한 도메인의 가공되지 않은 데이터가 웹에 공유되어 연결된다면 보다 복잡한 문제에 직면하게 될 것이다.
소셜웹을 통해 신뢰, 아이덴티티, 집단지성, 평판 및 윤리문제 등 윤리철학과 법학과 관련된 문제들이 생겨났다. 신뢰의 웹을 이해하는 데 도움이 될 것임.


 

'공부 > ' 카테고리의 다른 글

html,xml,rdf  (0) 2011.08.15
xhtml  (0) 2011.08.01
웹사이언스  (0) 2011.07.20


Posted by skyjumps
공부/웹2011. 7. 20. 14:08


한상기 교수 TED 강연, 소셜웹을 이용한 연구의 새로운 패러다임

웹은 과거에는 공학적인 측면에서만 이해되었다면, 이제는 웹을 이해하기 위해서는 철학, 수학, 인문학, 심리학, 과학 등 다양하고 전문화된 학문의 지식을 합쳐야 한다는 것을 인식하기 시작했다. 학문간 경계를 무너뜨리고 다양한 측면에서 문제를 바라보는 능력이 요구된다.

웹을 공학이 아닌 과학적 연구 개발의 대상으로 봐야한다.
웹은 사람들의 삶을 편리하게 해주는 공학적인 인공물이었다면 이제는 사회현상을 만들어내는 하나의 공간으로 봐야 한다.

페이스북의 프라이버시문제 - 웹과 법이 엮겨 있는 문제.
스티브잡스가 인문학의 중요성을 말한점.
야후 CEO가 회사에 심리학자가 별로 없다는 것을 지적한 점.
구글의 지메일과 소셜네트워크 결합 시도의 실패 - 이메일 주소록에 있는 사람들과 소셜네트워크를 통해 연결되고 싶은 그룹이 다르다는 것을 몰랐기 때문.
트위터의  멘션, 리트윗 등 작은 기능들의 큰 파장력 - 인간의 근원적인 욕구, 재미, 노출의 관점에서 이해.
검색엔진에서 내가 입력하나 초등학생이 입력하나 같은 결과가 나오는 현실- 나의 흩져져 있는 정보들을 모아 분석해서 내가 원하는 것을 출력해주는 쪽으로 발전.

'공부 > ' 카테고리의 다른 글

html,xml,rdf  (0) 2011.08.15
xhtml  (0) 2011.08.01
시맨틱 웹, 의미적 연결성, 웹 사이언스  (0) 2011.07.21


Posted by skyjumps
공부/데이터베이스2011. 7. 19. 16:12


서브쿼리는 다른 쿼리에 둘러싸인 쿼리.
inner query라고도 함.

outer query, inner query
SELECT mc.first_name, mc.last_name, mc.phone, jc.title
FROM job_current AS jc NATURAL JOIN my_contacts AS mc
WHERE jc.title IN
(SELECT title FROM job_listings); 

SELECT last_name, first_name
FROM my_contacts
WHERE zip_code =
(SELECT zip_code FROM zip_code WHERE city = 'Memphis' AND state = 'TN'); 

위 코드는 다음 조인으로 표현한 쿼리랑 같다.
SELECT last_name, first_name
FROM my_contacts mc NATURAL JOIN zip_code zc
WHERE zc.city = 'MEMPHIS'
AND zc.state = 'TN';

내부 쿼리는 하나의 값만을 반환한다. IN은 예외.
 
Select 열에서 서브 쿼리 사용.
SELECT mc.first_name, mc.last_name
(SELECT state
FROM zip_code
WHERE mc.zip_code = zip_code
) AS state
FROM my_contacts mc; 
한 열에서 하나의 값만을 반환할 수 있다.

Noncorrelated subquery(비상관 서브쿼리)
서브 쿼리가 외부 쿼리를 참조하지 않고 독립적으로 사용되는 것.

SELECT mc.first_name, mc.last_name, jc.salary
FROM
my_contacts AS mc NATURAL JOIN job_current AS jc
WHERE
jc.salary > (SELECT jc.salary
FROM my_contacts mc NATURAL JOIN job_current jc
WHERE email='andy@weatherorama.com');

여러값을 반환하는 비상관 서브트리 (IN, NOT IN)
회원들의 현재 직업 중에서 구직란에 있는 직업이 있는지, 있으면 회원 정보 출력.
SELECT mc.first_name, mc.last_name, mc.phone, jc.title
FROM job_current AS jc NATURAL JOIN my_contacts AS mc
WHERE jc.title IN (SELECT title FROM job_listings);

Correlated subquery(상관 서브쿼리)
서브쿼리가 외부쿼리에 의존
같은 별명을 사용.
SELECT mc.first_name, mc.last_name
FROM my_contact AS mc
WHERE 3 = (SELECT COUNT(*) FROM contact_interest WHERE contact_id = mc.contact_id);

NOT EXISTS를 사용한 상관 서브 쿼리

my_contacts 테이블에서 job current테이블에 없는 사람들의 이름, 성, 이메일 주소 찾기
SELECT mc.first_name firstname, mc.last_name lastname, mc.email email
FROM my_contacts mc
WHERE NOT EXISTS
(SELECT * FROM job_current jc
WHERE mc.contact_id = jc.contact_id)

EXISTS도 있다.

 

'공부 > 데이터베이스' 카테고리의 다른 글

5장 SQL  (0) 2011.08.09
2장 introduction to Database Design  (0) 2011.08.06
8 조인과 다중테이블 연산  (0) 2011.07.19
7. 테이블이 여러개인 데이터베이스 설계  (0) 2011.07.17
6. 고급 SELECT문  (0) 2011.07.17


Posted by skyjumps
공부/데이터베이스2011. 7. 19. 15:24


SELECT status FROM my_contacts
GROUP BY status
ORDER BY status;

ORDER BY는 항상 맨 마지막에 온다.

문자열 추출
UPDATE my_contacts
SET interests = SUBSTR(interests, LENGTH(interest1)+2); 

 
3개 쿼리는 같은 결과
1)
CREATE TABLE profession
(
    id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    profession varchar(20)
);
INSERT INTO profession (profession)
    SELECT profession FROM my_contacts
    GROUP BY profession
    ORDER BY profession

2)
CREATE TABLE profession AS
    SELECT profession FROM my_contacts
    GROUP BY profession
    ORDER BY profession;
ALTER TABLE profession
ADD COLUMN id INT NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMARY KEY (id);

3)
CREATE TABLE profession
(
    id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    profession varchar(20)
) AS
    SELECT profession FROM my_contacts
    GROUP BY profession
    ORDER BY profession
 
별명(Alias) 사용
열이름을 간단하고 사용하기 쉽게 한다. 

CREATE TABLE profession
(
    id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    profession varchar(20)
);
INSERT INTO profession (profession)
    SELECT profession AS mc_prof FROM my_contacts
    GROUP BY mc_prof
    ORDER BY mc_prof

결과 테이블의 열의 이름이 alias값, 즉 mc_prof로 나온다.
원래 열의 이름은 변하지 않음. 저렇게만 보여주는 것임.

테이블 별명
SELECT profession AS mc_prof
FROM my_contacts AS mc
GROUP BY mc_prof
ORDER BY mc_prof;

AS는 생략 가능하다.

Inner join(내부 조인)
1) Cartesian 조인
한 테이블의 모든 행과 다른 테이블의 모든 행을 짝지워 반환한다.

SELECT t.boy, b.boy
FROM toys AS t
CROSS JOIN
boys AS b;

다음 쿼리도 같은 결과
SELECT toys.toy, boys.boy
FROM toys, boys;

2) equijoin(동등 조인)
같은지를 테스트하는 내부 조인
SELECT boys.boy, toys.toy
FROM boys
   INNER JOIN
   
toys
ON boys.toy_id = toys.toy_id;

3) non-equijoin(비동등 조인)
내부 조인이 같지 않은지를 테스트.
SELECT boys.boy, toys.toy
FROM boys
    INNER JOIN
    toys
ON boys.toy_id <> toys.toy_id
ORDER BY boys.boy

4) natural join (자연조인)
두 테이블에 같은 이름의 열이 있을 때
SELECT boys.boy, toys.toy
FROM boys
    NATURAL JOIN
    toys;
 

'공부 > 데이터베이스' 카테고리의 다른 글

2장 introduction to Database Design  (0) 2011.08.06
9. 서브 쿼리 (subqueries)  (0) 2011.07.19
7. 테이블이 여러개인 데이터베이스 설계  (0) 2011.07.17
6. 고급 SELECT문  (0) 2011.07.17
5장 ALTER  (0) 2011.07.16


Posted by skyjumps
공부/데이터베이스2011. 7. 17. 19:01


테이블에서 원자적이지 않은 열을 새로운 테이블로 옮기기.

데이터베이스 내의 데이터(열들과 테이블들), 그리고 데이터들 사이의 연결 방식에 대한 표현을 스키마라고 한다.

테이블의 연결
테이블을 연결하기 위해서는 테이블에 기본키와 같은 유일한 열이 필요하다.
테이블은 참조키를 통해 다른 테이블의 기본키를 가리킨다.
참조키에서 참조하는 기본키를 부모키(parent key)라고도 한다.
참조키는 한 테이블의 열들이 다른 테이블의 열과 연결 되도록 하는데 사용할 수 있다.
기본키는 null일 수 없지만 참조키는 null일 수 있다.(부모 테이블의 기본키(primary key)를 안가리키는 것) 
제약조건(constraint)를 사용해서 null을 갖게 하지 못하도록 할 수 있다.
참조키는 유일할 필요가 없다.

참조키 제약조건
부모 테이블에 존재하는 키의 값만을 넣을 수 있도록 할 수 있다. 참조 무결성(referential integrity)
기본키가 있는 테이블에서 행을 지우거나 바꾸려고 할 때 제약조건으로 인해 삭제 수정이 맘대로 안된다.
참조키의 값이 부모 테이블의 기본키일 필요는 없지만 그 값이 유일(unique)해야 한다.

UNIQUE 키워드
열의 값이 유일하도록.

참조키가 있는 테이블 생성

CREATE TABLE interests (
int_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
interest VARCHAR(50) NOT NULL,
contract_id INT NOT NULL,
CONSTRAINT my_contacts_contact_id_fk
FOREIGN KEY (contact_id)
REFERENCES my_contacts (contact_id)

);
CONSTRAINT my_contacts_contact_id_fk
제약조건.
my_contacts : 참조키가 어느 테이블을 참조하는지.
contact_id : 키의 이름
fk : 참조키이다.

FOREIGN KEY (contact_id) 
contact_id가 참조키이다.

REFERENCES my_contacts (contact_id)
참조키가 my_contacts 테이블을 참조하고 contact_id 열을 참조한다.

테이블간의 관계

1. 일대일
테이블 A의 레코드가 테이블 B에 많아야 한 개의 레코드와 연결된다.
자주 이용되지는 않음.
보안목적. 일부 데이터를 위한 테이블.
큰 데이터 따로 저장.
모르는 값을 따로 저장.
따로 때어냄으로써 데이터 조회 속도 향상 등.

2. 일대다
테이블 A의 한 레코드에 테이블 B의 레코드 여러개가 연결되고 B의 레코드는 테이블 A의 한 레코드만 연결될 수 있다.
예) 한 직업에 여러명의 사람들. 사람들마다 직업이 많아야 하나.

3. 다대다
여러 레코드에 여러 레코드 연결.
신발가게의 신발과 고객과의 관계. 
중복데이터가 생겨 연결테이블을 만든다.

연결테이블
다대다관계일 때는 중간에 테이블을 추가하여 일대다의 관계로 단순화.
두 테이블의 유니크키들을 열로 가지는 연결 테이블

이전까진 테이블의 데이터가 다른 테이블과 서로 어떻게 연결되는지(일대일, 일대다)에 대한 것.
이제부턴 한 테이블 내의 열들이 어떻게 연결되는지에 대한 것.

합성키
여러 개의 열들로 구성되어 유일무이한 키를 만드는 기본키.

Functionally dependent
열의 데이터가 변경되면 다른 열의 데이터도 변경될 때. 한 열이 다른 열과 종속관계에 있다.

Independent
다른 열에 종속되지 않는 열

Partial functional dependency
키가 아닌 열이 합성키의 일부에 종속되는 경우.
기본키로 테이블 인덱스용 id 필드를 사용하면 다른 열이 이 열에 종속되지 않기 때문에 부분 종속 관계를 피할 수 있음.

transitive functional dependency
키가 아닌 열이 변경될 때 키가 아닌 다른 열이 변경될 경우

제2정규형
제1정규형이고
Partial functional dependency가 없어야 한다.

제3정규형
제2정규형이고 transitive functional dependency가 없다. 

'공부 > 데이터베이스' 카테고리의 다른 글

9. 서브 쿼리 (subqueries)  (0) 2011.07.19
8 조인과 다중테이블 연산  (0) 2011.07.19
6. 고급 SELECT문  (0) 2011.07.17
5장 ALTER  (0) 2011.07.16
4. 좋은 테이블 설계, 정규화.  (0) 2011.07.16


Posted by skyjumps