달력

122024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
프로그래밍/It 용어 2016. 9. 23. 10:51


평소 tomcat과 apache를 잘 구분하지 못하여 공부한 내용을 정리해 본다.

아파치 톰캣을 이용해서 웹서버를 띄우고 개발을 진행해왔다. 그런데 실제 일을 하면서 서버를 실핼할때 단순히 tomcat만 쓰는게 아니라 apache라는 프로그램을 별도로 실행하는 것에 혼란이 왔다. 그리고 평소에 apache tomcat은 그렇다면 두개의 프로그램을 합쳐놓은 것인가를 고민하게 되어 정리해 보았다.



apache 란?


apach란 것은 소프트웨어 단체 이름이다. 그리고 우리가 흔히 부르는 아파치서버라는 것은 이제단에서 후원하는 오픈소프 프로젝트 커뮤니티에서 만든 http웹서버를 지칭하는 말이다. (아파치 프로젝트는 웹서버 외에도 여러가지 프로젝트를 진행하고 있다고 한다. 이건 추후에 조사해볼것이다.) http 웹서버는 http 요청을 처리할 수 있는 웹서버이고, 아파치 http서버는 http요청을 처리하는 웹서버인 것이다. 클라이언트가 GET, POST, DELETE 등등의 메소드를 이용해 요청을 하면 이 프로그램이 어떤 결과를 돌려주는 기능을 한다. 아파치는 웹서버 이다!



tomcat 이란?


tomcat은 흔히 WAS(Web Application Server)라고 말한다. WAS는 웹서버와 웹 컨테이너의 결합으로 다양한 기능을 컨테이너에 구현하여 다양한 역할을 수행할 수 있는 서버를 말한다. 클라이언트의 요청이 있을 때 내부의 프로그램을 통해 결과를 만들어내고 이것을 다시 클라이언트에 전달해주는 역할을 하는 것이 바로 웹 컨테이너 이다. 앞에서 본 아파치 웹 서버와 차이는 이 컨테이너 기능이 가능하냐의 차이가 가장 크다고 생각한다.


was구조 이미지출처 : http://gap85.tistory.com/45


WAS역시 웹 서버로써 역할을 수행할 수 있기 때문에 둘을 잘 구별하지 못하면 필자 같은 혼란이 생길 수 있다.



둘의 차이는?


그렇다면 WAS만 쓰면 되지 어째서 웹서버를 따로 쓰느냐는 의문이 생길 수 있다. 그 이유는 목적이 다르기 때문이다. 웹 서버는 정적인 데이터를 처리하는 서버이다. 이미지나 단순 html파일과 같은 리소스를 제공하는 서버는 웹 서버를 통하면 WAS를 이용하는 것보다 빠르고 안정적이다(왜? 다른 글 소스로 써볼까?) WAS는 동적인 데이터를 처리하는 서버이다. DB와 연결되어 데이터를 주고 받거나 프로그램으로 데이터 조작이 필요한 경우에는 WAS를 활용 해야 한다.



기타(리눅스에서 설치 및 연동하기)


두 서버의 목적의 차이 때문에 두 개의 서버를 연동해서 사용하면 더욱 효과적인 서비스를 제공할 수 있다. 사용자 요청은 http 웹 서버를 통해 받고 내부 프로그램은 was를 통해 처리하는 식으로 한다면 정적인 데이터와 동적인 데이터를 효과적으로 처리가 가능할 것이다.



출처 : http://sungbine.github.io/tech/post/2015/02/15/tomcat%EA%B3%BC%20apache%EC%9D%98%20%EC%97%B0%EB%8F%99.html

Posted by 당구치는 개발자
|
프로그래밍/It 용어 2016. 9. 23. 10:50


잘 알려진 포트(well-known port)는 특정한 쓰임새를 위해서 IANA에서 할당한 TCP 및 UDP 포트 번호의 일부이다. 

일반적으로 포트 번호는 다음과 같이 세 가지로 나눌 수 있다.


0번 ~ 1023번 : 잘 알려진 포트 ( well-known port )

1024번 ~ 49151번 : 등록된 포트 ( registered port )

49152번 ~ 65535번 : 동적 포트 ( dynamic port )


대부분의 유닉스 계열 운영 체제의 경우, 잘 알려진 포트를 열려면 루트 권한이 있어야 한다.


이 번호는 강제적으로 지정된 것은 아니며, IANA의 권고안일 뿐이다. 

가끔 각 포트 번호를 그대로 사용하지 않고 다른 용도로 사용하기도 한다. 

이 경우, 트로이 목마와 같은 프로그램들이 악의적인 목적으로 포트를 변경하여 사용하는 경우도 있다.


Windows의 경우 C:\Windows\System32\drivers\etc\경로의 service 파일이 그 역활을 담당하고

unix계열은 /etc/ 경로의 service가 담당한다.

포트설명상태
0/udp예약됨; 사용하지 않음공식
1/tcpTCPMUX (TCP 포트 서비스 멀티플렉서)공식
7/tcpECHO 프로토콜공식
7/udpECHO 프로토콜공식
9/tcpDISCARD 프로토콜공식
9/udpDISCARD 프로토콜공식
13/tcpDAYTIME 프로토콜공식
13/udpDAYTIME 프로토콜공식
17/tcpQOTD (Quote of the Day) 프로토콜공식
19/tcpCHARGEN (Character Generator) 프로토콜공식
19/udpCHARGEN 프로토콜공식
20/tcpFTP (파일 전송 프로토콜) - 데이터 포트공식
21/tcpFTP - 제어 포트공식
22/tcpSSH (Secure Shell) - ssh scpsftp같은 프로토콜 및 포트 포워딩공식
23/tcp텔넷 프로토콜 - 암호화되지 않은 텍스트 통신공식
25/tcpSMTP (Simple Mail Transfer Protocol) - 이메일 전송에 사용공식
37/tcpTIME 프로토콜공식
37/udpTIME 프로토콜공식
49/udpTACACS 프로토콜공식
53/tcpDNS (Domain Name Syetem)공식
53/udpDNS공식
67/udpBOOTP (부트스트랩 프로토콜) 서버. DHCP로도 사용공식
68/udpBOOTP (부트스트랩 프로토콜) 서버. DHCP로도 사용공식
69/udpTFTP공식
70/tcp고퍼 프로토콜공식
79/tcpFinger 프로토콜공식
80/tcpHTTP (HyperText Transfer Protocol) - 웹 페이지 전송공식
80/udpHTTP (HyperText Transfer Protocol) - 웹 페이지 전송공식
88/tcp케르베로스 - 인증 에이전트공식
109/tcpPOP2 (Post Office Protocol version 2) - 전자우편 가져오기에 사용공식
110/tcpPOP3 (Post Office Protocol version 3) - 전자우편 가져오기에 사용공식
113/tcpident - 예전 서버 인증 시스템, 현재는 IRC 서버에서 사용자 인증에 사용공식
119/tcpNNTP (Network News Transfer Protocol) - 뉴스 그룹 메시지 가져오기에 사용공식
123/udpNTP (Network Time Protocol) - 시간 동기화공식
139/tcpNetBIOS공식
143/tcpIMAP4 (인터넷 메시지 접근 프로토콜 4) - 이메일 가져오기에 사용공식
161/udpSNMP (Simple Network Management Protocol)공식
179/tcpBGP (Border Gateway Protocol)공식
194/tcpIRC (Internet Relay Chat)공식
389/tcpLDAP (Lightweight Directory Access Protocol)공식
443/tcpHTTPS - HTTP over SSL (암호화 전송)공식
445/tcpMicrosoft-DS (액티브 디렉터리, 윈도 공유, Sasser-worm, Agobot, Zobotworm)공식
445/udpMicrosoft-DS SMB 파일 공유공식
465/tcpSSL 위의 SMTP - Cisco 프로토콜과 충돌비공식, 충돌
514/udpsyslog 프로토콜 - 시스템 로그 작성공식
540/tcpUUCP (Unix-to-Unix Copy Protocol)공식
542/tcp상용 (Commerce Applications) (RFC maintained by: Randy Epstein [repstein at host.net])공식
542/udp상용 (Commerce Applications) (RFC maintained by: Randy Epstein [repstein at host.net])공식
587/tcpemail message submission (SMTP) (RFC 2476)공식
591/tcp파일메이커 6.0 Web Sharing (HTTP Alternate, see port 80)공식
636/tcpSSL 위의 LDAP (암호화된 전송)공식
666/tcpid 소프트웨어의  멀티플레이어 게임공식
873/tcprsync 파일 동기화 프로토콜공식
981/tcpSofaWare Technologies Checkpoint Firewall-1 소프트웨어 내장 방화벽의 원격 HTTPS 관리비공식
993/tcpSSL 위의 IMAP4 (암호화 전송)공식
995/tcpSSL 위의 POP3 (암호화 전송)공식

출처 - 위키백



-아래는 Windows의 service 파일 내용-


# Copyright (c) 1993-2004 Microsoft Corp.

#

# This file contains port numbers for well-known services defined by IANA

#

# Format:

#

# <service name>  <port number>/<protocol>  [aliases...]   [#<comment>]

#


echo                7/tcp

echo                7/udp

discard             9/tcp    sink null

discard             9/udp    sink null

systat             11/tcp    users                  #Active users

systat             11/udp    users                  #Active users

daytime            13/tcp

daytime            13/udp

qotd               17/tcp    quote                  #Quote of the day

qotd               17/udp    quote                  #Quote of the day

chargen            19/tcp    ttytst source          #Character generator

chargen            19/udp    ttytst source          #Character generator

ftp-data           20/tcp                           #FTP, data

ftp                21/tcp                           #FTP. control

ssh                22/tcp                           #SSH Remote Login Protocol

telnet             23/tcp

smtp               25/tcp    mail                   #Simple Mail Transfer Protocol

time               37/tcp    timserver

time               37/udp    timserver

rlp                39/udp    resource               #Resource Location Protocol

nameserver         42/tcp    name                   #Host Name Server

nameserver         42/udp    name                   #Host Name Server

nicname            43/tcp    whois

domain             53/tcp                           #Domain Name Server

domain             53/udp                           #Domain Name Server

bootps             67/udp    dhcps                  #Bootstrap Protocol Server

bootpc             68/udp    dhcpc                  #Bootstrap Protocol Client

tftp               69/udp                           #Trivial File Transfer

gopher             70/tcp

finger             79/tcp

http               80/tcp    www www-http           #World Wide Web

hosts2-ns          81/tcp                           #HOSTS2 Name Server

hosts2-ns          81/udp                           #HOSTS2 Name Server

kerberos           88/tcp    krb5 kerberos-sec      #Kerberos

kerberos           88/udp    krb5 kerberos-sec      #Kerberos

hostname          101/tcp    hostnames              #NIC Host Name Server

iso-tsap          102/tcp                           #ISO-TSAP Class 0

rtelnet           107/tcp                           #Remote Telnet Service

pop2              109/tcp    postoffice             #Post Office Protocol - Version 2

pop3              110/tcp                           #Post Office Protocol - Version 3

sunrpc            111/tcp    rpcbind portmap        #SUN Remote Procedure Call

sunrpc            111/udp    rpcbind portmap        #SUN Remote Procedure Call

auth              113/tcp    ident tap              #Identification Protocol

uucp-path         117/tcp

sqlserv           118/tcp                           #SQL Services

nntp              119/tcp    usenet                 #Network News Transfer Protocol

ntp               123/udp                           #Network Time Protocol

epmap             135/tcp    loc-srv                #DCE endpoint resolution

epmap             135/udp    loc-srv                #DCE endpoint resolution

netbios-ns        137/tcp    nbname                 #NETBIOS Name Service

netbios-ns        137/udp    nbname                 #NETBIOS Name Service

netbios-dgm       138/udp    nbdatagram             #NETBIOS Datagram Service

netbios-ssn       139/tcp    nbsession              #NETBIOS Session Service

imap              143/tcp    imap4                  #Internet Message Access Protocol

sql-net           150/tcp

sqlsrv            156/tcp

pcmail-srv        158/tcp                           #PCMail Server

snmp              161/udp                           #SNMP

snmptrap          162/udp    snmp-trap              #SNMP trap

print-srv         170/tcp                           #Network PostScript

bgp               179/tcp                           #Border Gateway Protocol

irc               194/tcp                           #Internet Relay Chat Protocol        

ipx               213/udp                           #IPX over IP

rtsps             322/tcp

rtsps             322/udp

mftp              349/tcp

mftp              349/udp

ldap              389/tcp                           #Lightweight Directory Access Protocol

https             443/tcp    MCom                   #HTTP over TLS/SSL

https             443/udp    MCom                   #HTTP over TLS/SSL

microsoft-ds      445/tcp

microsoft-ds      445/udp

kpasswd           464/tcp                           # Kerberos (v5)

kpasswd           464/udp                           # Kerberos (v5)

isakmp            500/udp    ike                    #Internet Key Exchange

crs               507/tcp                           #Content Replication System

crs               507/udp                           #Content Replication System

exec              512/tcp                           #Remote Process Execution

biff              512/udp    comsat

login             513/tcp                           #Remote Login

who               513/udp    whod

cmd               514/tcp    shell

syslog            514/udp

printer           515/tcp    spooler

talk              517/udp

ntalk             518/udp

efs               520/tcp                           #Extended File Name Server

router            520/udp    route routed

ulp               522/tcp    

ulp               522/udp    

timed             525/udp    timeserver

tempo             526/tcp    newdate

irc-serv          529/tcp

irc-serv          529/udp

courier           530/tcp    rpc

conference        531/tcp    chat

netnews           532/tcp    readnews

netwall           533/udp                           #For emergency broadcasts

uucp              540/tcp    uucpd

klogin            543/tcp                           #Kerberos login

kshell            544/tcp    krcmd                  #Kerberos remote shell

dhcpv6-client     546/tcp                           #DHCPv6 Client

dhcpv6-client     546/udp                           #DHCPv6 Client

dhcpv6-server     547/tcp                           #DHCPv6 Server

dhcpv6-server     547/udp                           #DHCPv6 Server

afpovertcp        548/tcp                           #AFP over TCP

afpovertcp        548/udp                           #AFP over TCP

new-rwho          550/udp    new-who

rtsp              554/tcp                           #Real Time Stream Control Protocol

rtsp              554/udp                           #Real Time Stream Control Protocol

remotefs          556/tcp    rfs rfs_server

rmonitor          560/udp    rmonitord

monitor           561/udp

nntps             563/tcp    snntp                  #NNTP over TLS/SSL

nntps             563/udp    snntp                  #NNTP over TLS/SSL

whoami            565/tcp

whoami            565/udp

ms-shuttle        568/tcp                           #Microsoft shuttle

ms-shuttle        568/udp                           #Microsoft shuttle

ms-rome           569/tcp                           #Microsoft rome

ms-rome           569/udp                           #Microsoft rome

http-rpc-epmap    593/tcp                           #HTTP RPC Ep Map

http-rpc-epmap    593/udp                           #HTTP RPC Ep Map

hmmp-ind          612/tcp                           #HMMP Indication

hmmp-ind          612/udp                           #HMMP Indication

hmmp-op           613/tcp                           #HMMP Operation

hmmp-op           613/udp                           #HMMP Operation

ldaps             636/tcp    sldap                  #LDAP over TLS/SSL

doom              666/tcp                           #Doom Id Software

doom              666/udp                           #Doom Id Software

msexch-routing    691/tcp                           #MS Exchange Routing

msexch-routing    691/udp                           #MS Exchange Routing

kerberos-adm      749/tcp                           #Kerberos administration

kerberos-adm      749/udp                           #Kerberos administration

kerberos-iv       750/udp                           #Kerberos version IV

mdbs_daemon       800/tcp

mdbs_daemon       800/udp

ftps-data         989/tcp                           #FTP data, over TLS/SSL

ftps              990/tcp                           #FTP control, over TLS/SSL

telnets           992/tcp                           #Telnet protocol over TLS/SSL

imaps             993/tcp                           #IMAP4 protocol over TLS/SSL

ircs              994/tcp                           #IRC protocol over TLS/SSL

pop3s             995/tcp    spop3                  #pop3 protocol over TLS/SSL (was spop3)

pop3s             995/udp    spop3                  #pop3 protocol over TLS/SSL (was spop3)

kpop             1109/tcp                           #Kerberos POP

nfsd-status      1110/tcp                           #Cluster status info

nfsd-keepalive   1110/udp                           #Client status info

nfa              1155/tcp                           #Network File Access

nfa              1155/udp                           #Network File Access

activesync       1034/tcp                           #ActiveSync Notifications

phone            1167/udp                           #Conference calling

opsmgr           1270/tcp                           #Microsoft Operations Manager

opsmgr           1270/udp                           #Microsoft Operations Manager

ms-sql-s         1433/tcp                           #Microsoft-SQL-Server 

ms-sql-s         1433/udp                           #Microsoft-SQL-Server 

ms-sql-m         1434/tcp                           #Microsoft-SQL-Monitor

ms-sql-m         1434/udp                           #Microsoft-SQL-Monitor                

ms-sna-server    1477/tcp

ms-sna-server    1477/udp

ms-sna-base      1478/tcp

ms-sna-base      1478/udp

wins             1512/tcp                           #Microsoft Windows Internet Name Service

wins             1512/udp                           #Microsoft Windows Internet Name Service

ingreslock       1524/tcp    ingres

stt              1607/tcp

stt              1607/udp

l2tp             1701/udp                           #Layer Two Tunneling Protocol

pptconference    1711/tcp

pptconference    1711/udp

pptp             1723/tcp                           #Point-to-point tunnelling protocol

msiccp           1731/tcp

msiccp           1731/udp

remote-winsock   1745/tcp

remote-winsock   1745/udp

ms-streaming     1755/tcp

ms-streaming     1755/udp

msmq             1801/tcp                           #Microsoft Message Queue

msmq             1801/udp                           #Microsoft Message Queue

radius           1812/udp                           #RADIUS authentication protocol

radacct          1813/udp                           #RADIUS accounting protocol

msnp             1863/tcp

msnp             1863/udp

ssdp             1900/tcp

ssdp             1900/udp

close-combat     1944/tcp

close-combat     1944/udp

nfsd             2049/udp    nfs                    #NFS server

knetd            2053/tcp                           #Kerberos de-multiplexor

mzap             2106/tcp                           #Multicast-Scope Zone Announcement Protocol

mzap             2106/udp                           #Multicast-Scope Zone Announcement Protocol

qwave            2177/tcp                           #QWAVE

qwave            2177/udp                           #QWAVE Experiment Port

directplay       2234/tcp                           #DirectPlay

directplay       2234/udp                           #DirectPlay

ms-olap3         2382/tcp                           #Microsoft OLAP 3

ms-olap3         2382/udp                           #Microsoft OLAP 3

ms-olap4         2383/tcp                           #Microsoft OLAP 4

ms-olap4         2383/udp                           #Microsoft OLAP 4

ms-olap1         2393/tcp                           #Microsoft OLAP 1

ms-olap1         2393/udp                           #Microsoft OLAP 1

ms-olap2         2394/tcp                           #Microsoft OLAP 2

ms-olap2         2394/udp                           #Microsoft OLAP 2

ms-theater       2460/tcp

ms-theater       2460/udp

wlbs             2504/tcp                           #Microsoft Windows Load Balancing Server

wlbs             2504/udp                           #Microsoft Windows Load Balancing Server

ms-v-worlds      2525/tcp                           #Microsoft V-Worlds 

ms-v-worlds      2525/udp                           #Microsoft V-Worlds 

sms-rcinfo       2701/tcp                           #SMS RCINFO

sms-rcinfo       2701/udp                           #SMS RCINFO

sms-xfer         2702/tcp                           #SMS XFER

sms-xfer         2702/udp                           #SMS XFER

sms-chat         2703/tcp                           #SMS CHAT

sms-chat         2703/udp                           #SMS CHAT

sms-remctrl      2704/tcp                           #SMS REMCTRL

sms-remctrl      2704/udp                           #SMS REMCTRL

msolap-ptp2      2725/tcp                           #MSOLAP PTP2

msolap-ptp2      2725/udp                           #MSOLAP PTP2

icslap           2869/tcp

icslap           2869/udp

cifs             3020/tcp

cifs             3020/udp

xbox             3074/tcp                           #Microsoft Xbox game port

xbox             3074/udp                           #Microsoft Xbox game port

ms-dotnetster    3126/tcp                           #Microsoft .NET ster port

ms-dotnetster    3126/udp                           #Microsoft .NET ster port

ms-rule-engine   3132/tcp                           #Microsoft Business Rule Engine Update Service

ms-rule-engine   3132/udp                           #Microsoft Business Rule Engine Update Service

msft-gc          3268/tcp                           #Microsoft Global Catalog

msft-gc          3268/udp                           #Microsoft Global Catalog

msft-gc-ssl      3269/tcp                           #Microsoft Global Catalog with LDAP/SSL

msft-gc-ssl      3269/udp                           #Microsoft Global Catalog with LDAP/SSL

ms-cluster-net   3343/tcp                           #Microsoft Cluster Net

ms-cluster-net   3343/udp                           #Microsoft Cluster Net

ms-wbt-server    3389/tcp                           #MS WBT Server

ms-wbt-server    3389/udp                           #MS WBT Server

ms-la            3535/tcp                           #Microsoft Class Server

ms-la            3535/udp                           #Microsoft Class Server

pnrp-port        3540/tcp                           #PNRP User Port

pnrp-port        3540/udp                           #PNRP User Port

teredo           3544/tcp                           #Teredo Port

teredo           3544/udp                           #Teredo Port

p2pgroup         3587/tcp                           #Peer to Peer Grouping

p2pgroup         3587/udp                           #Peer to Peer Grouping

ws-discovery     3702/udp                           #WS-Discovery

ws-discovery     3702/tcp                           #WS-Discovery

dvcprov-port     3776/tcp                           #Device Provisioning Port

dvcprov-port     3776/udp                           #Device Provisioning Port

msfw-control     3847/tcp                           #Microsoft Firewall Control

msdts1           3882/tcp                           #DTS Service Port

sdp-portmapper   3935/tcp                           #SDP Port Mapper Protocol

sdp-portmapper   3935/udp                           #SDP Port Mapper Protocol

net-device       4350/tcp                           #Net Device

net-device       4350/udp                           #Net Device

ipsec-msft       4500/tcp                           #Microsoft IPsec NAT-T

ipsec-msft       4500/udp                           #Microsoft IPsec NAT-T

llmnr            5355/tcp                           #LLMNR 

llmnr            5355/udp                           #LLMNR 

wsd              5357/tcp                           #Web Services on devices 

wsd              5358/tcp                           #Web Services on devices

rrac             5678/tcp                           #Remote Replication Agent Connection

rrac             5678/udp                           #Remote Replication Agent Connection

dccm             5679/tcp                           #Direct Cable Connect Manager

dccm             5679/udp                           #Direct Cable Connect Manager

ms-licensing     5720/tcp                           #Microsoft Licensing

ms-licensing     5720/udp                           #Microsoft Licensing 

directplay8      6073/tcp                           #DirectPlay8

directplay8      6073/udp                           #DirectPlay8

man              9535/tcp                           #Remote Man Server

rasadv           9753/tcp

rasadv           9753/udp

imip-channels   11320/tcp                           #IMIP Channels Port

imip-channels   11320/udp                           #IMIP Channels Port

directplaysrvr  47624/tcp                           #Direct Play Server

directplaysrvr  47624/udp                           #Direct Play Server


gds_db           3050/tcp


출처 : http://shaeod.tistory.com/389

Posted by 당구치는 개발자
|
프로그래밍/It 용어 2016. 9. 23. 10:48


UML: 클래스 다이어그램과 소스코드 매핑

UML: 클래스 다이어그램과 소스코드 매핑

불과 몇 년 되지 않은 학생 시절… 처음으로 UML을 접했고, UML의 기초적인 그리는 법과 사용법을 배웠습니다. 개인적으로 쉽지 않은 수업이었는데 그 중 가장 많이 사용되는 클래스 다이어그램에서 클래스간의 relationship(관계)가 제일 어려웠습니다.Generalization(일반화)과 Realization(실체화)은 명확하기 때문에 이해하는데 어려움이 없었고 Dependency(의존) 부터 조금 어려워 지더니 Association(연관)과 Aggregation(집합), Composition(합성) 3종 세트에 가서는 머리가 복잡해졌습니다. 특히 Aggregation과 Composition이 논리적으로 약하고 강한 집합이라는 차이는 알겠지만 ‘그래서 어떤 명확한 차이점이 발생하는 거지? 저걸 코드로 만들 때는 어떻게 만들어야 하는 거지?’라는 생각과 함께 잘 와 닿지 않았습니다.

그래서 2013년 9월에 진행 됐던 ‘2013 넥스트리 신입사원 인큐베이션 세미나’에서 발표 주제를 UML 클래스 다이어그램으로 정하고 그 동안 배운 것들과 추가로 공부를 더한 것들로 발표를 했고, 많은 도움이 됐던 시간이었습니다. 세미나 발표 후 몇가지 내용에 대한 아쉬움이 있었는데, 이번 기회에 그 아쉬움과 부족했던 부분을 보완하여 글로 정리하게 되었습니다. UML 클래스 다이어그램의 기본적인 요소들과 클래스간의 관계, 그리고 제가 제일 어려웠던 이 관계들을 어떻게 코드로 나타내어야 할지에 대해서 썼으며 언어는 Java 기준으로 하였습니다. ‘2013 신입사원 인큐베이션 세미나’에 대한 글도 Nextree 홈블로그에서 보실 수 있습니다.

 

1. UML

UML이란 Unified Modeling Language의 약자로 1997년 OMG(Object Management Group)에서 표준으로 채택한 통합모델링언어 입니다. 즉, 모델을 만드는 표준언어인 것입니다. 모델이란 것은 어떤 것을 실제로 만들 때 이렇게 만들면 잘 작동할지 미리 검증해 보는 것이며 실제 물건을 만드는 비용보다 비용이 훨씬 적을 경우에 모델을 만들어 설계를 검사합니다.

소프트웨어에서의 모델은 건축, 항공 등의 모델과는 좀 다른 면이 있습니다. 건물을 짓고, 항공기를 만드는 것과 설계를 그리고 만드는 것은 비용의 엄청난 차이가 있습니다. 하지만 UML 다이어그램을 그리며 모델을 만드는 일은 개발보다 비용이 적긴 하지만 훨씬 적게 드는 것이 아니며 때로는 오히려 개발보다 비용이 더 많이 들 수도 있습니다. 그래서 UML은 시험해 볼 구체적인 것이 있고, 그것을 코드로 시험해 보는 것보다 UML로 시험해 보는 쪽이 비용이 덜 들 때 주로 사용합니다. 이러한 목적으로 UML을 사용하는 유형에는 다음 3가지 정도가 있습니다.

  • 다른 사람들과의 의사소통 또는 설계 논의
  • 전체 시스템의 구조 및 클래스의 의존성 파악
  • 유지보수를 위한 설계의 back-end 문서

UML을 그리는데 가장 좋은 도구는 종이와 펜이라는 말이 있듯이 습관적으로 만드는 게 아니라 필요에 의해 만드는 것이 가장 좋은 것 같습니다.

 

2. Class Diagram (클래스 다이어그램)

[그림 1] UML 다이어그램의 종류 출처: www.ask.com/wiki/Unified_Modeling_Language#UML_2.x

[그림 1] UML 다이어그램의 종류
출처: www.ask.com/wiki/Unified_Modeling_Language#UML_2.x

UML은 구조 다이어그램 7개, 행위 다이어그램 7개로 총 14종류의 다이어그램이 있습니다. 구조 다이어그램은 시스템의 개념, 관계 등의 측면에서 요소들을 나타내고 각 요소들의 정적인 면을 보기 위한 것이고 행위 다이어그램은 각 요소들 혹은 요소들간의 변화나 흐름, 주고받는 데이터 등의 동작을 보기 위한 것으로, 클래스 다이어그램은 구조 다이어그램에 해당합니다. 클래스 다이어그램은 클래스 내부의 정적인 내용이나 클래스 사이의 관계를 표기하는 다이어그램으로 시스템의 일부 또는 전체의 구조를 나타낼 수 있습니다. 클래스 다이어그램은 의존 관계를 명확히 보게 해주며, 순환 의존이 발생하는 지점을 찾아내서 어떻게 이 순환 고리를 깨는 것이 가장 좋은지 결정할 수 있게 해줍니다.

[그림 2] 목적 별 클래스 다이어그램

[그림 2] 목적 별 클래스 다이어그램

UML은 목적에 따라 다르게 사용되는데, 크게 3가지로 개념, 명세, 구현의 차원들 입니다.먼저 개념 차원의 UML은 문제 도메인의 구조를 나타내며 사람이 풀고자 하는 문제 도메인 안에 있는 개념과 추상적 개념을 기술하기 위한 것입니다. 이것은 소스코드와 관계가 그렇게 깊지 않으며 오히려 사람의 자연언어와 더 관련이 있습니다. 또한 의미론적(언어의 뜻을 규정하는) 규칙에 그다지 얽매이지 않으며, 따라서 의미하는 바도 모호하거나 해석에 따라 달라질 수 있는 부분이 존재합니다.

반면, 명세와 구현 차원의 UML은 소프트웨어의 설계 혹은 완성된 소프트웨어의 구현 설명 목적 등으로 사용하며 설계를 해서 소스코드로 바꾸거나 구현 된 소스코드를 설명하려고 사용하기 때문에 소스코드와 관계가 깊습니다. 이 두 차원의 클래스 다이어그램은 제약이 많아서 반드시 일정한 규칙과 의미론을 지켜야 합니다. 또한 모호성이 거의 없도록 하고 형식도 최대한 맞춰야 합니다.

앞으로 나올 내용들은 구조 다이어그램 중 하나인 클래스 다이어그램이며 그 중에서도 개념 차원은 배제하고 소스코드와 관계가 깊은 명세, 구현 차원에 해당하는 클래스 다이어그램만으로 한정 지어 소스코드와 어떻게 연관 되는지 이해해 보도록 하겠습니다. 따라서 개념 차원의 클래스 다이어그램과는 조금 다른 부분이 있을 수 있습니다.

 

3. 클래스 다이어그램의 요소(Element)

Class (클래스)

클래스는 보통 3개의 compartment(구획)으로 나누어 클래스의 이름, 속성, 기능을 표기합니다. 속성과 기능은 옵션으로 생략이 가능하지만 이름은 필수로 명시해야 합니다.

[그림 3] 클래스

[그림 3] 클래스

클래스의 세부사항은 필드와 메서드의 Access modifier(접근제한자), 필드명(메서드명), 데이터타입, parameter(매개변수), 리턴 타입 등을 나타낼 수 있습니다. 클래스의 세부사항들을 상세하게 적는 것이 유용할 때도 있지만, UML 다이어그램은 필드나 메서드를 모두 선언하는 곳이 아니기 때문에 다이어그램을 그리는 목적에 필요한 것만 사용하는 것이 좋습니다. 추가로 보통 3개의 구획(compartment)을 사용 하지만 다른 미리 정의되거나 사용자 정의 된 모델 속성(비즈니스 룰, 책임, 처리 이벤트, 발생된 예외 등)을 나타내기 위한 추가 구획도 사용할 수 있다고 합니다.

 

Stereo Type (스테레오 타입)

스테레오 타입이란 UML에서 제공하는 기본 요소 외에 추가적인 확장요소를 나타내는 것으로 쌍 꺾쇠와 비슷하게 생긴 길러멧(guillemet, « ») 사이에 적습니다. 이 길러멧이란 기호는 쌍 꺾쇠와는 좀 다른 것으로 폰트 크기보다 작습니다. 종이나 화이트보드에 그릴 때는 상관없지만 공식적인 문서라면 이 기호를 구분해서 사용하는 것이 좋을 것 같습니다.

[그림 4] 스테레오 타입

[그림 4] 스테레오 타입

위의 다이어그램은 인터페이스와 유틸리티 클래스를 표현하고 있으며 필드, 메소드 밑의 밑줄은 static(정적)필드 또는 메서드를, {readOnly}는 final 키워드를 사용하는 상수를 의미합니다. 스테레오 타입으로 많이 사용되는 것은 «interface», «utility», «abstract», «enumeration» 등이 있습니다.

 

Abstract Class/Method (추상 클래스 / 메서드)

추상클래스란 1개 이상의 메서드가 구현체가 없고 명세만 존재하는 클래스를 말합니다.

[그림 5] 추상클래스

[그림 5] 추상클래스

추상 클래스의 이름과 메서드는 italic체나, {abstract} 프로퍼티를 사용하여 표기합니다. UML 툴에서는 italic체로 표기하는 것이 많지만 종이나 칠판에 그릴 때는 힘들게 italic체로 기울여서 적는 것 보다는 {abstract} 프로퍼티로 표기하는 것이 쉽고 명확할 것 같습니다.
또한 공식적인 것은 아니지만 스테레오타입을 사용하여 추상 클래스를 표기하기도 합니다.

 

4. 클래스간의 관계

클래스 다이어그램의 주 목적은 클래스간의 관계를 한눈에 쉽게 보고 의존 관계를 파악하는 것에 있습니다. 그렇기 때문에 클래스 다이어그램에서 가장 중요한 것이 클래스간의 관계입니다.

[그림 6] 클래스 관계 종류

[그림 6] 클래스 관계 종류

위의 그림은 클래스간의 관계들의 종류와 표기법을 나타낸 것입니다. 이 외에 다른 표기법도 있습니다만 많이 사용된다고 생각하는 것들만 나타냈습니다.

 

Generalization (일반화)

Generalization은 슈퍼(부모)클래스와 서브(자식)클래스간의 Inheritance(상속) 관계를 나타냅니다. 여기서 Generalization이란 서브 클래스가 주체가 되어 서브 클래스를 슈퍼 클래스로 Generalize 하는 것을 말하고 반대의 개념은 슈퍼 클래스를 서브 클래스로 Specialize(구체화) 하는 것입니다. 상속은 슈퍼 클래스의 필드 및 메서드를 사용하며 구체화 하여 필드 및 메서드를 추가 하거나 필요에 따라 메서드를 overriding(오버라이딩) 하여 재정의 합니다. 또는 슈퍼 클래스가 추상 클래스인 경우에는 인터페이스의 메서드 구현과 같이 추상 메서드를 반드시 오버라이딩 하여 구현하여야 합니다.

[그림 7] Generalization

[그림 7] Generalization

위와 같이 표기법은 클래스 사이에 실선을 연결하고 슈퍼 클래스 쪽에 비어 있는 삼각형으로 나타내고 자바에서는 extends 키워드를 사용하여 상속을 구현합니다.

 

Realization (실체화)

Realization은 interface의 spec(명세, 정의)만 있는 메서드를 오버라이딩 하여 실제 기능으로 구현 하는 것을 말합니다.

[그림 8] Realization

[그림 8] Realization

Realization을 나타내는 표기법은 2가지가 있습니다. 첫 번째는 인터페이스를 클래스처럼 표기하고 스테레오 타입 «interface»를 추가합니다. 그리고 인터페이스와 클래스 사이의 Realize 관계는 점선과 인터페이스 쪽의 비어있는 삼각형으로 연결합니다. 두 번째는 인터페이스를 원으로 표기하고 인터페이스의 이름을 명시합니다. 그리고 인터페이스와 클래스 사이의 관계는 실선으로 연결합니다.
자바에서는 위와 같이 implements 키워드를 사용하여 인터페이스를 구현합니다.

 

Dependency (의존)

Dependency는 클래스 다이어그램에서 일반적으로 제일 많이 사용되는 관계로서, 어떤 클래스가 다른 클래스를 참조하는 것을 말합니다.

[그림 9] Dependency

[그림 9] Dependency

위의 그림은 자바에서 참조하는 형태에 대해 코드를 보여주고 있습니다. 참조의 형태는 메서드 내에서 대상 클래스의 객체 생성, 객체 사용, 메서드 호출, 객체 리턴, 매개변수로 해당 객체를 받는 것 등을 말하며 해당 객체의 참조를 계속 유지하지는 않습니다.

[그림 10] Dependency Stereo Type

[그림 10] Dependency Stereo Type

추가로 위와 같이 스테레오 타입으로 어떠한 목적의 Dependency인지 의미를 명확히 명시 할 수도 있는데 Dependency의 목적 또는 형태가 중요할 경우 사용할 수도 있을 것 같습니다.

 

Association (연관), Directed Association(방향성 있는 연관)

클래스 다이어그램에서의 Association은 보통 다른 객체의 참조를 가지는 필드를 의미합니다. 아래 클래스 다이어그램은 두 가지 형태의 Association을 나타내고 있습니다.

[그림 11] Assocication

[그림 11] Assocication

첫 번째 다이어그램은 일반적인 Association으로 단지 실선 하나로 클래스를 연결하여 표기하고 두 번째 다이어그램은 Directed Association으로 클래스를 실선으로 연결 후 실선 끝에 화살표를 추가합니다. Association과 Directed Association의 차이는 화살표가 의미하는 navigability(방향성)인데 이것에 따라 참조 하는 쪽과 참조 당하는 쪽을 구분합니다. 두 번째 다이어그램은 User에서 Address 쪽으로 화살표가 있으므로 User가 Address를 참조하는 것을 의미합니다. Navigability가 없는 Association은 명시되지 않은 것으로 User가 Address를 참조할 수도, Address가 User를 참조할 수도, 또는 둘 다일 수도 있는 것을 의미합니다. 화살표 옆에 있는 –addresses는 roleName(역할명)을 나타내고 Address가 User 클래스에서 참조될 때 어떤 역할을 가지고 있는지를 의미합니다.

*는 Multiplicity(개수)을 나타내는데 대상 클래스의 가질 수 있는 인스턴스 개수 범위를 의미합니다. 0…1 과 같이 점으로 구분하여 앞에 값은 최소값, 뒤에 값은 최대값을 의미하는데 *은 0…*과 같은 의미로 객체가 없을 수도 있고 또는 수가 정해지지 않은 여러 개일 수도 있다는 것을 의미합니다. 이전에는 Multiplicity가 아닌 Cardinality로 불렸는데 “특정 집합 또는 다른 그룹에 있는 요소의 수”라는 Cardinality의 사전적 의미가 실제 인스턴스의 수가 아닌 가질 수 있는 범위를 지정하는 클래스 다이어그램에서의 의미에 적합하지 않다는 이유로 바뀌었습니다.

세 번째의 다이어그램은 두 번째의 다이어그램과 비슷한 의미를 가지고 있지만 다른 형태인 속성 표기법으로 나타낸 것입니다. 여기서 보는 바와 같이 roleName은 보통 클래스의 필드명이 됩니다. 속성 표기법이 두 번째 클래스 다이어그램과 조금 다른 점은 여러 개의 객체에 대한 Container(컨테이너)가 List라는 것까지 알려주고 있습니다.

그럼 두 번째와 세 번째의 다이어그램이 완전히 동일한 의미를 가지게 하려면 어떻게 해야 할까요?

[그림 12] Association Class

[그림 12] Association Class

위와 같이 Association Class(연관클래스)를 사용하여 어떤 종류의 컨테이너 클래스가 사용되는지 까지 나타낼 수 있습니다. 하지만 사실 특이한 클래스도 아니고 자바에서 기본으로 제공되는 List를 저렇게 표기하는건 조금 귀찮은 일일 수 있을 것 같습니다. 그래서 스테레오 타입으로 표기할 수도 있습니다. 이로써 [그림11] 세 번째 다이어그램의 속성 표기법으로 표현된 것과 모든 의미가 같아졌습니다. 보통은 클래스의 속성이 기본 제공 클래스가 아니거나 중요 또는 강조하고 싶을 때 Association 관계로 나타냅니다. Association Class는 조금 다른 의미로도 사용될 수 있습니다. 예를 들어 학생과 수강과목 클래스가 Association 관계를 가지고 있는데 단순 Association 관계가 아니라 각 관계마다 해당 과목의 학점이라는 속성이 필요하다면 어떻게 나타낼 수 있을까요? 이럴 때도 Association Class를 사용하여 나타낼 수 있습니다.

[그림 13] Association Class

[그림 13] Association Class

물론 grade라는 값을 Subject 클래스 자체의 속성으로 할 수도 있지만 Subject의 속성이라기 보다는 Student와 Subject 사이의 관계에 대한 속성이라는 관점에서 위의 다이어그램처럼 Association Class로 나타낼 수 있습니다.

[그림 14] Association Class Vs Association

[그림 14] Association Class Vs Association

또한 [그림13]의 Association Class를 풀어서 위처럼 Association 관계만으로도 나타낼 수 있습니다. [그림13]은 Student와 Subject의 관계를 나타내고 싶은데 그 관계에 대한 속성값으로 Grade가 있는 것이고 [그림14]는 단순 3개 클래스를 Association 관계로 나타낸 것처럼 의미는 조금 다를 수 있으나 구현되는 코드는 같을 것입니다.

[그림 15] Association Class Code

[그림 15] Association Class Code

 
Aggregation (Shared Aggregation, 집합)

Aggregation은 Shared Aggregation이라고도 하며 Composition(Composite Aggregation)과 함께 Association 관계를 조금 더 특수하게 나타낸 것으로 whole(전체)와 part(부분)의 관계를 나타냅니다. Association은 집합이라는 의미를 내포하고 있지 않지만 Aggregation은 집합이라는 의미를 가지고 있습니다.

[그림 16] Aggregation

[그림 16] Aggregation

표기법은 위와 같이 whole과 part를 실선으로 연결 후 whole쪽에 비어있는 다이아몬드를 표기합니다. Part쪽에는 화살표를 명시하여도 되고 명시하지 않아도 됩니다. Aggregation의 다이아몬드가 이미 navigability의 방향을 표현하고 있기 때문입니다. 그런데 코드를 보시면 위에서 보았던 Association의 코드와 똑같습니다. Association과 Aggregation은 집합이라는 개념적인 차이는 있지만 코드에서는 이 차이를 구분하기 힘듭니다.

[그림 17] UML Aggreagtion

[그림 17] UML Aggreagtion
출처: OMG Unified Modeling Language Superstructure 2.4.1

위와 같이 UML은 집합이라는 개념 외에 명확한 Aggregation의 정의를 제공하지 않습니다. 그래서 여러 프로그래머나 분석가, 설계사가 Aggregation 관계에 대해 자기 나름의 정의를 내렸기 때문에 혼란이 생겼고 Aggregation은 사용하지 않는 것이 좋다고 합니다. 저도 이에 동의 하는 바이지만….. 아직도 논란이 되고 있는 부분이고 정확한 답을 내기는 어려울 것 같습니다.그리고 도서 “The Object Primer: Agile Model-Driven Development with UML 2.0(저자 Scott W. Ambler)”과 “UML 실전에서는 이것만 쓴다(저자 Robert C. Martin)”에 UML 2.0에서는 위의 문제 때문에 Aggregation이 제외 되었다는 말이 있습니다. 그래서 근거를 찾기 위해 이곳 저곳 찾아본 결과 처음엔 제외 되었다가 커뮤니티의 강력한 항의로 다시 들어왔다고 합니다. 실제로도 UML 1.x 버전에 비해 2.x 버전에는 Aggregation에 대한 내용이 많이 사라지긴 했지만 몇 군데 남아 있는 걸 확인했습니다.

[그림 18] Aggregation Dropped

[그림 18] Aggregation Dropped
출처: www.coderanch.com/t/154620/java-Architect-SCEA/certification/Association-Aggregation

 
Composition (Composite Aggregation, 합성)

Composition(또는 Composite Aggregation)도 Aggregation과 비슷하게 whole(전체)와 part(부분)의 집합 관계를 나타내지만 개념적으로 Aggregation보다 더 강한 집합을 의미합니다.

[그림 19] Composition

[그림 19] Composition

Composition의 표기법 또한 위와 같이 Aggregation과 비슷하지만 다이아몬드의 내부가 채워져 있다는 점만 다릅니다. 그럼 Composition의 개념과 코드에서는 Aggregation과 어떤 차이가 있는지 보겠습니다. Composition은 Aggregation보다 강한 집합이라고 했습니다. 여기서 강한 집합이란 part가 whole에 종속적이어서 part가 whole의 소유입니다. 반면 Aggregation은 part가 whole에 대해 독립적이어서 whole이 part를 빌려 쓰는 것과 비슷합니다. 이러한 의미 때문에 Aggregation과는 다르게 명확하게 나타나는 점이 있습니다.

  • 첫 번째, part를 가지는 whole 인스턴스가 part 인스턴스의 전체 수명을 책임진다.
  • 두 번째, part에 해당하는 인스턴스는 공유 될 수 없다.

첫 번째의 whole 인스턴스가 part 인스턴스의 전체 수명을 책임진다는 의미는 다음과 같습니다.

  • whole 인스턴스가 part 인스턴스를 생성
  • whole 인스턴스가 소멸되면 part 인스턴스도 함께 소멸
  • whole 인스턴스가 복사되면 part 인스턴스도 함께 복사

두 번째의 part에 해당하는 인스턴스는 공유 될 수 없다는 의미를 먼저 보겠습니다.

[그림 20] Shallow Copy

[그림 20] Shallow Copy

위의 예제는 클래스 다이어그램이 아닌 객체 다이어그램으로 [그림19]를 객체로 표현한 것입니다. 참조변수 userA가 참조하고 있는 user 객체를 clone하여 clonedUser 객체를 만들고 참조변수 userB에서 참조하고 있습니다. user객체는 제대로 복사가 됐지만 user객체 안에서 참조하고 있는 address는 clonedUser 객체도 똑같이 참조하고 있습니다. 이것을 shallow copy(얕은 복사)라고 하며 이 경우에 part에 해당하는 address 객체가 공유 된 것입니다. 또한 첫 번째 조건의 의미 중 whole 인스턴스가 복사되면 part인스턴스도 복사되어야 한다는 조건도 충족시키지 못했습니다.

[그림 21] Deep Copy Object Diagram

[그림 21] Deep Copy Object Diagram

위의 다이어그램에서는 user 객체가 복사되어 clonedUser 객체가 생성될 때 user 객체가 참조하여 가지고 있는 address 객체 또한 같이 복사 되어 clonedUser 객체는 새로운 clonedAddress 객체를 참조하여 가지고 있습니다.

[그림 22] Deep Copy Code

[그림 22] Deep Copy Code

Aggregation 관계와 Composition 관계를 UML 툴에서 그린 후 Code Generation을 하면 똑같은 코드가 생성됩니다. 하지만 Composition에서는 개발자가 구현해야 할 부분이 몇 가지 있습니다. 위에서 본 part에 해당하는 인스턴스가 공유되지 않게 하기 위한 Deep Copy 구현과 part를 가지는 whole 인스턴스가 part 인스턴스의 수명 전체를 책임져야 한다는 것에 따라 whole 클래스의 생성자 또는 기타 메서드 내에서 part 인스턴스를 생성해야 하고 외부에서 part 객체를 생성하지 못하도록 whole 클래스에는 part 인스턴스에 대한 setter가 있으면 안됩니다. 다른 언어에서는 생명주기와 관련된 다른 추가적인 것도 있겠지만 자바에서의 객체 소멸은 Garbage Collector가 수행하므로 part 인스턴스의 소멸은 신경쓰지 않아도 됩니다.

 

5. 마치며

이로써 클래스 다이어그램의 주요 요소들과 관계들이 소스코드와 어떻게 연관되는지를 살펴 봤습니다. 우선 많은 용어들에 대해 영문발음 그대로 한글로 표기하는 것들은 처음에만 영문 표기 후 한글로 표기하였고 영문 용어가 해석에 따라 달라질 수 있는 것들(예: Association->연관)은 최대한 영문 그대로 표기하였습니다.
또한 UML에서 attribute(속성), operation(기능)이라고 부르는 것들이 자바에서는 filed(필드), method(메서드)라 불리우기 때문에 의미는 비슷하지만 사용 관점에 따라 분리하여 사용한 것들도 있으며 초급 개발자로서 UML에 관련된 내용을 쓰려니 혹시 내가 잘못 알고 있는 것은 아닐까 조심스러워서 UML 스펙 문서를 많이 찾아가며 최대한 표준에 맞게 쓰려고 하였습니다.

저는 처음에 클래스 다이어그램을 공부하면서 개념적으로 들었을 때는 이해가 갈듯 말듯 하다가 코드를 보면서 아 이런 거구나 하며 그나마 조금 더 이해가 갔던 기억이 납니다. 설계를 하시는 분들이 아닌 저와 같이 이제 막 개발자의 길로 들어서신 초급 개발자 분들이 설계 다이어그램을 보며 어떤 식으로 이해를 해야 하고 어떻게 코드를 만들어야 할지 조금이라도 도움이 되었으면 합니다.

그리고… 개인적인 내용입니다만 아직 많이 모자라지만 1년동안 많은 도움을 주셨던, 특히나 UML과 설계와 관련된 많은 지식을 전해주신 제 멘토 김현오 선임께 감사하단 말씀을 제대로 못 드린 것 같아 여기서 감사의 말씀을 드리고 싶습니다..^^
감사합니다.

 

예제 자료

 

참조 도서 및 사이트


출처 : http://www.nextree.co.kr/p6753/


Posted by 당구치는 개발자
|
프로그래밍/It 용어 2016. 9. 23. 10:43

작동 중인 가상 머신의 네트워크 연결 설정 변경하기

가상 머신의 네트워크 연결 방식은 가상 머신이 작동 중이더라도 언제든지 변경할 수 있습니다. 이게 가능한 이유가 뭘까요? 아마 전 글인 VMware 의 네트워크 연결과 구성의 이해를 충실히 읽어보신 분들이라면 금새 알아채실 수 있으실 겁니다. VMware 의 네트워크 연결 설정은 오직 가상 머신의 네트워크 어댑터를 어떤 VMnet 스위치에 연결할 것인가를 결정하는게 전부일 뿐 입니다. 실제 상황에 대입하여 생각해 본다면 네트워크 연결 방식을 바꾼다는 것은 그저 스위치에 연결된 랜선을 뽑고 다른 스위치에 바꿔서 연결하는게 전부일 뿐입니다. 그렇기 때문에 가상 머신이 작동 중이어도 언제든지 네트워크 연결 방식을 바꿔줄 수 있는 것 입니다.

메뉴 -> VM -> Settings 로 들어갑니다.
Device 에서 네트워크 어댑터를 선택하고 원하는 연결 방식을 선택한 후 OK 버튼을 클릭합니다.
 
연결 스위치가 바뀌었기 때문에 운영체제의 네트워크 설정을 바꿔주어야 합니다.

윈도우를 기준으로 네트워크를 사용 안 함으로 설정합니다.
다시 사용 함으로 설정하시면 변경된 스위치에 연결된 DHCP 서버에서 자동으로 IP 주소 등을 할당해 줍니다.

※ DHCP 서버가 연결되지 않은 브릿지 연결은 사용자가 직접 설정해 주어야 합니다.










Virtual Network Editor

그럼 이제부터 본격적으로 VMware Workstation 의 가상 네트워크를 설정하는 것에 대해서 알아보도록 하겠습니다. VMware Workstation 의 가상 네트워크 설정으로 들어가는 방법은 다음과 같습니다.

메뉴 -> Edit -> Virtual Network Editor 또는 시작 -> 프로그램 -> VMware -> Virtual Network Editor 로 들어갑니다.

메뉴 -> Edit -> Virtual Network Editor 로 들어갑니다.
Virtual Network Editor 로 들어온 모습입니다.




Virtual Network Editor 로 들어가면 Summary 탭에서 현재 설정된 네트워크들에 대해서 확인할 수 있습니다.




Subnet 설정하기

VMware Workstation 이 설치 될 때 각 가상 네트워크의 주소 대역이 자동으로 정해지는데 이를 사용자가 바꿀 수 있습니다. IP 주소 대역과 서브넷 마스크를 변경하는 경우 NAT 설정도 바꿔주어야 하기 때문에 NAT 네트워크를 기준으로 작업을 하도록 하겠습니다. Host-only 네트워크는 NAT 설정 부분이 필요치 않습니다.

※ Bridged Network 는 작업에서 제외됩니다.

Host Virtual Network Mapping 탭으로 들어간 후 Subnet 의 변경을 원하는 가상 네트워크의 > 버튼을 클릭합니다. (글에선 NAT Network 인 VMnet8 을 변경해 보도록 하겠습니다.)

Subnet 항목을 선택합니다.
원하는 IP 주소 대역과 서브넷 마스크를 설정한 후 OK 버튼을 클릭합니다.
설정을 바꾼 후 필히 적용 버튼을 클릭합니다.

※ Subnet 의 설정을 바꾸게 되면 호스트 컴퓨터의 해당 VMnet 네트워크 어댑터의 IP 셋팅과 DHCP 셋팅이 변경된 Subnet 에 맞춰 자동 변경됩니다.
NAT 설정은 수동으로 변경해 주어야 합니다. > 버튼을 클릭하여 NAT 항목을 선택합니다.
Gateway IP address 를 변경된 IP 주소 대역에 맞게 수정해 준 후 OK 버튼을 클릭합니다.

※ x.x.x.2 는 NAT 라우터의 기본 주소 입니다.
설정을 바꾼 후 필히 적용 버튼을 클릭합니다.
가상 머신을 시작하여 IP 주소를 확인한 모습입니다. IP 대역이 바뀐 것을 확인할 수 있습니다.




이와 같이 NAT 네트워크와 Host-Only 네트워크는 IP 주소 대역을 사용자가 원하는대로 설정해 줄 수 있습니다. 단 Bridged 네트워크는 특성상 서브넷을 설정할 수 없습니다.




DHCP 설정하기

NAT 나 Host-Only 네트워크를 사용할 경우 게스트 컴퓨터의 IP 셋팅이 자동으로 잡히는 것은 모두 VMware 의 DHCP 서버 때문입니다. Virtual Network Editor 에서 DHCP 서버의 설정을 바꿔서 할당되는 IP 영역을 사용자가 원하는대로 바꿔줄 수 있습니다.

DHCP 탭으로 들어간 후 설정을 원하는 가상 네트워크를 선택한 후 Properties 버튼을 클릭합니다.
Start IP address 와 End IP address 를 원하는대로 설정해 줍니다. IP 주소의 임대 시간은 Lease duration for DHCP clients 를 설정해 줍니다.

※ Start IP address 를 설정하실 때 1 과 2 는 각각 호스트의 네트워크 어댑터와 게이트웨이에서 사용하므로 3 이상부터 설정해 줍니다.
설정을 바꾼 후 필히 적용 버튼을 클릭합니다.
DHCP 에서 설정한 IP 주소대로 IP 가 할당된 것을 확인할 수 있습니다.






DHCP 추가, 제거하기

VMware Workstation 에서는 필요에 따라 DHCP 서버를 추가할 수도 제거할 수도 있습니다. 다음은 DHCP 서버를 추가하는 과정입니다.

DHCP 가 설정되지 않은 VMnet2 네트워크에 DHCP 를 추가해 주도록 하겠습니다.
DHCP 탭으로 들어간 후 Add 버튼을 클릭합니다.
VMnet host 에서 DHCP 의 추가를 원하는 가상 네트워크를 선택한 후 OK 버튼을 클릭합니다.
적용 버튼을 클릭합니다.
DHCP 가 설정된 모습입니다. Properties 를 통해 DHCP 의 설정을 원하는대로 해주시면 됩니다.
요약 화면에서도 DHCP 가 활성화된 것을 확인할 수 있습니다.




DHCP 서버가 필요없는 경우에는 설정된 DHCP 서버를 제거할 수도 있습니다. DHCP 탭에서 DHCP 서버를 제거하고자 하는 가상 네트워크를 선택한 후 Remove 버튼을 클릭합니다.






NAT - Port Forwarding

NAT 설정에서는 사용자가 크게 손댈 부분은 없습니다. 다만 NAT 네트워크의 특성상 NAT 네트워크 하에 있는 가상 머신에서 서버를 구동시키는 경우 포트 포워딩을 통해서 호스트와 게스트의 포트를 서로 매핑해 주는 작업을 해주어야 합니다. 글에서는 알FTP 를 통해 NAT 네트워크 하의 가상 머신에 FTP 서버를 구축하고 이를 포트 포워딩해보도록 하겠습니다. (포트는 제가 임의로 설정하였습니다.)

NAT 탭으로 이동하여 Edit 버튼을 클릭합니다.
Port Forwarding 버튼을 클릭합니다.
포트 포워딩을 원하는 프로토콜의 Add 버튼을 클릭합니다.
매핑할 호스트의 포트 번호와 가상 머신의 IP 주소 와 포트 번호 그리고 간략한 설명을 적어준 후 OK 버튼을 클릭합니다.
포트 포워딩 항목이 추가된 것을 확인하고 OK 버튼을 클릭합니다.
적용 버튼을 클릭합니다.
 
가상 머신에서 설정한 포트로 FTP 서버를 열었습니다.
외부에서 호스트 컴퓨터의 IP 주소와 포트 포워딩에서 설정한 포트 번호를 통해 접속하게 되면 NAT 에서 자동으로 매핑된 가상 머신의 IP 주소와 포트로 연결을 해줍니다.






새 네트워크 추가하기

VMware Workstation 은 총 10 개의(윈도우 기준) 가상 네트워크를(스위치) 제공하고 있습니다. 이 중 기본으로 설정된 VMnet0/1/8 을 제외한 나머지 7 개의 가상 네트워크는 비활성화되어 있는데 Custom Networking 을 위해 사용하고자 할 때는 이 네트워크를 활성화 해 주어야 합니다. 그 방법은 다음과 같습니다.

Host Virtual Adapters 탭으로 이동하여 Add 버튼을 클릭합니다.
추가하고자 하는 가상 네트워크 어댑터 번호를 선택한 후 OK 버튼을 클릭합니다.
적용 버튼을 클릭합니다.
새로운 네트워크 어댑터가 생성된 모습입니다. 이에 따라 해당 가상 네트워크가 활성화 되고 DHCP 서버가 자동으로 활성화 됩니다.
요약화면에서도 Host-only 네트워크로 새로운 가상 네트워크가 추가된 것을 확인할 수 있습니다.
 
호스트 컴퓨터에도 새로운 네트워크 어댑터와 연결이 설정된 것을 확인할 수 있습니다.




이상으로 새로운 가상 네트워크를 추가하는 것에 대해서 알아보았습니다. 해당 네트워크를 사용하는 방법은 가상 머신의 장치 설정에서 네트워크 어댑터의 네트워크 연결 방식을 Custom 을 선택하시고 사용하고자 하는 가상 네트워크를 선택하시면 됩니다.




한 번 활성화된 가상 네트워크는 다시 비활성화 할 수는 없습니다. 다만 해당 가상 네트워크를 사용하지 않을 때에는 Host Virtual Adapters 에서 Remove 를 통해 해당 네트워크 어댑터와 DHCP 를 제거하여 리소르를 잡아먹는 것을 방지해 주는 것이 좋습니다.





이상으로 VMware Workstation 의 네트워크를 설정하는 것에 대해서 알아보았습니다. 이 네트워크 설정 부분은 네트워크에 대한 어느 정도의 기반 지식을 필요로 하는 것이 사실입니다. 그래서 중요한 부분만 간략하게 설명을 하였습니다.


출처 : http://shinb.tistory.com/21

Posted by 당구치는 개발자
|
프로그래밍/It 용어 2016. 9. 23. 10:42

※ VMware Workstation 의 네트워크 구성을 이해하는데에 있어 가상과 실제의 경계를 긋지 마시기 바랍니다. 지금 내 컴퓨터엔 네트워크 어댑터가(랜 카드) 하나 뿐인데... 이건 가상인데... 이런거 모두 그냥 잊어버리세요. 내 컴퓨터에 네트워크 어댑터가 세 개가 잡혀있으면 실제 내 컴퓨터에 네트워크 어댑터가 세 개가 달려있다고 생각하세요. 가상 머신도 지금 내 앞에 존재하는 실제의 컴퓨터입니다. 모두 실제하는 장치들이라고 머리 속으로 그림을 그리셔야만 합니다. 그래야만 쉽습니다.


※ 글의 기준이 되는 VMware Workstation 은 윈도우용 버전입니다.


VMware Workstation 네트워크 구성의 이해

네트워크에 연결되지 않는 컴퓨터는 컴퓨터가 아니라는 말까지 나오는 요즘, 네트워크는 어쩌면 컴퓨터를 사용하는 가장 큰 목적이자 이유가 아닐까 생각합니다. 메신저로 친구와 이야기를 나누고 뉴스를 보고 멀리 떨어져 있는 사람들과 함께 게임을 즐기고 윈티티에 들려서 글을 읽는 것 모두가 광대한 네트워크에 연결되어 할 수 있는 일들입니다. 우리가 인지하지 못하는 사이에 이미 네트워크는 우리 생활 깊숙히 파고들어왔습니다. 이제 네트워크는 필요가 아닌 필수가 되어버린지 오래입니다.

가상 머신들도 초기의 단순히 가상으로 컴퓨터를 한 대 생성하는 것에서 발전하여 이제는 네트워크와 연결되어 광대한 네트워크의 한 구성원이 되어 제공자로써 때로는 참여자로써 그 역할을 다하고 있습니다. VMware Workstation 또한 예외가 아닙니다. VMware Workstation 에도 네트워크 기능이 포함되어 있으며 또한 이를 사용자의 목적에 맞게 설정하여 다양하게 구성하는 것이 가능합니다.

사실 네트워크라는게 초보자가 접근하기에는 상당히 난해한 분야임은 분명합니다.(저도 네트워크 분야에선 초보입니다. ^^;;) 그래서 VMware Workstation 에서는 이러한 사용자의 걱정을 덜어주고자 특별히 설정을 하지 않더라도 자동으로 가상 머신의 네트워크를 구성해 주는 친절함을 보여주고 있습니다.

하지만 VMware Workstation 의 가상 머신을 통해 좀 더 고급스러운 작업들을(서버 구동 등) 하고자 할 때는 VMware Workstation 의 네트워크 구성에 대해 어느 정도 이해하고 설정할 수 있어야만 하는 경우가 많습니다. 이게 뭔지도 모르고 대충 사용하는 것 보다는 확실히 어느 정도 기본 원리와 구성에 대해서 이해하고 사용하는 것이 작업을 함에 있어 좀 더 효율적으로 좀 더 쉽게 하는 것이 가능하겠죠? 이번 글에서는 VMware Workstation 의 네트워크에 대한 전반적인 구성의 이해와 어떻게 돌아가는 것인지 알아보는 시간을 가지도록 하겠습니다. (너무 깊이 들어가지는 않겠습니다. 사실 그렇게 깊이 들어갈 실력은 안 됩니다. ^^;)




VMware Workstaion 의 장비 구성

VMware Workstation 은 실제의 장치들을 가상으로 흉내낸 가상 장치들의 집합이라고 할 수 있습니다. VMware Workstation 의 네트워크도 모두 가상의 장치들을 통해 이루어지며 이러한 가상 장치들은 실제 장치와 동일한 기능을 수행하고 있습니다. 그렇기 때문에 이러한 VMware Workstation 의 네트워크를 이해하기 위해선 VMware Workstation 에서 제공하는 장치들을 파악하는게 무엇보다 중요합니다. 시작하기에 앞서 지금부터 설명드리는 장치들을 굳이 가상의 장치라고 생각하지 마시고 실제의 장치라고 생각하시는게 이해하시는데 큰 도움이 됩니다.

VMware Workstation 에서 제공하는 네트워크 장치는 가장 중요한 네 가지가 있습니다. 이 네 가지의 장치에 대해서 알아두기만 하는 것 만으로도 VMware Workstation 의 네트워크의 절반은 이해했다고 해도 과언이 아닙니다.



Network Adapter

VMware Workstation 의 네트워크의 구성 요소 중 첫 째로 흔히 랜 카드라 불리우는 장치입니다. VMware Workstation 의 네트워크 어댑터에는 크게 두 가지가 있는데 하나는 가상 머신에 장착된 네트워크 어댑터이고 다른 하나는 호스트 컴퓨터에 가상으로 장착된 네트워크 어댑터입니다.

가상 머신의 네트워크 어댑터
호스트 컴퓨터의 네트워크 어댑터
 



자~ 그렇다면 제가 한 가지 문제를 드리겠습니다. 가상 머신의 네트워크 어댑터와 호스트 컴퓨터의 네트워크 어댑터는(VMware 의 네트워크 어댑터) 어디에 연결이 되는걸까요? 우리가 집에서 사용하는 컴퓨터의 경우 네트워크 어댑터는 보통 인터넷 서비스 업체에서 제공한 인터넷 모뎀에 연결이 됩니다. 이처럼 가상 머신의 네트워크 어댑터와 호스트 컴퓨터의 가상 네트워크 어댑터들도 분명 어디엔가 연결이 되어 있을텐데 그게 어디일까요?

정답은 둘 모두 VMnet Network Switch 에 연결이 됩니다. 이거 굉장히 중요합니다. 이게 이해가 안 되면 VMware Workstation 의 네트워트에 대해서 절대 이해할 수 없습니다. 절대 잊지 마세요! 가상 머신과 호스트 컴퓨터의 VMware 네트워크 어댑터들은 모두 VMnet Network Switch 에 연결이 됩니다.

가상 머신과 호스트 컴퓨터의 네트워크 어댑터는 필요에 따라 추가하거나 제거할 수 있습니다.

※ Network Adapter, Ethernet Controller, Ethernet Card, NIC, Network Interface Card, Lan Card 는 모두 동일한 장치를 가르키는 입니다.





VMnet Network Switch

VMware Workstation 은 내부적으로 VMnet 이라는 총 10 개의 네트워크 스위치를(이하 스위치) 제공하고 있습니다.(리눅스 버전의 경우 255 개의 네트워크 스위치를 제공합니다.) 스위치가 무엇인지 반드시 알아야 하는데 스위치란 여러 대의 컴퓨터와 네트워크 장치들을 서로 연결하여 통신을 할 수 있게 해주는 장치입니다. 흔히 스위치, 스위치 허브, 스위칭 허브라고 부르기도 합니다. 비슷한 기능을 수행하는 장치로는 허브(Hub) 가 있습니다.

네트워크 스위치의 모습.




이러한 스위치를 설명할 때는 포트의 수나 전송 속도, TCP/IP 의 OSI-7 Layer 가 나오고 L2 스위치 L3 스위치 등 여러 복잡한 설명이 뒤따르는데 지금은 VMware 의 네트워크 구성을 이해하는 글이기도 하거니와 또한 VMware 의 네트워크를 이해하는데에 꼭 필요한 내용도 아니기 때문에 이런 내용은 다루지 않도록 하겠습니다. 괜히 여러분도 머리 아파지고 저도 깊숙히 들어가면 머리 뽀개집니다. 그래서



아무튼 VMware 에서는 VMnet 이라는 스위치를 제공하며 스위치의 역할은 컴퓨터들을 서로 연결해주는 장치라는 것만 아시면 됩니다. 그리고 가상 머신과 호스트 컴퓨터의 VMware 네트워크 어댑터들은 모두 이 VMnet 스위치에 연결이 된다는 것과 말이죠.


자 이제 다시 정상적인 글 진행으로 돌아와 VMware 에서는 총 10 개의 스위치 중 세 개의 스위치를 전용 스위치로 설정해 놓았습니다. VMnet0, VMnet1, VMnet8 이 바로 그 전용 스위치들 입니다.

  • VMnet0 Switch - Bridged 연결을 사용할 때 사용되는 스위치로 호스트의 실제 네트워크 어댑터가 연결이 되어 있습니다.
  • VMnet1 Switch - Host-Only 연결을 사용할 때 사용되는 스위치로 DHCP Server 와 호스트의 VMnet1 네트워크 어댑터가 연결이 되어 있습니다.
  • VMnet8 Switch - NAT 연결을 사용할 때 사용되는 스위치로 DHCP 서버와 NAT Server 그리고 호스트의 VMnet8 네트워크 어댑터가 연결이 되어 있습니다.


그 외에 VMnet2/3/4/5/6/7/9 스위치가 있으며 이들은 Custom 스위치로써 사용자가 직접 설정하여 사용할 수 있는 스위치입니다. Custom 연결을 사용할 때 사용됩니다.


자~ 좀 전에 가상 머신의 네트워크 어댑터는 VMnet 스위치에 연결이 된다고 했었죠. 그리고 가상 머신의 네트워크 어댑터 설정에서는 네트워크 연결의 종류를 설정할 수 있습니다. 이 네트워크 연결 설정이 바로 해당 네트워크 어댑터를 10 개의 스위치 중 어느 스위치에 연결을 할 것인지를 결정하는 것 입니다.

네트워크 연결 설정 어떤 네트워크 스위치에 연결할 것인지를 결정하는 것입니다.



이것도 굉장히 중요합니다. 즉, Bridged, NAT, Host-only 라는 네트워크 연결 설정은 단순히 각각 VMnet0, VMnet1, VMnet8 스위치에 연결하는 것일 뿐입니다. 이해하시겠죠?



DHCP Server

VMware Workstation 은 DHCP Server 를 제공하고 있습니다. DHCP 란 Dynamic Host Configuration Protocol 의 약자로써 동적 호스트 설정 통신 규약을 의미하며 TCP/IP 통신을 실행하기 위해 필요한 설정 정보를 자동적으로 할당, 관리하기 위한 통신 규약입니다.

간단하게 우리가 네트워크에 연결하여 인터넷을 하기 위해선 IP 주소와 서브넷 마스크, 게이트 웨이, DNS 주소 등을 모두 설정해 주어야 합니다. DHCP 란 바로 이러한 것들을 자동으로 할당하고 관리하기 위한 규약입니다. 컴퓨터가(DHCP 클라이언트) DHCP 서버에 이러한 것들을 요청하면 DHCP 서버는 자동으로 해당 컴퓨터에 IP 주소와 서브넷 마스크등을 할당해 주는 것 입니다.

우리가 흔히 집에서 인터넷에 연결할 때 별다른 설정을 하지 않고 윈도우의 네트워크 설정에서 자동으로 IP 주소 받기와 자동으로 DNS 주소 받기를 설정해 놓으면 알아서 IP 주소 등이 모두 설정되어 바로 인터넷을 사용할 수 있는 걸 아실겁니다. 이렇게 자동으로 IP 주소 등이 설정되는 것은 바로 인터넷 서비스 업체의 DHCP 서버에서 여러분의 IP 주소 등을 자동으로 설정해 주기 때문입니다.

이렇게 연결된 클라이언트들의(컴퓨터) 아이피를 자동으로 할당하고 관리해주는 기능을 DHCP 서버라고 합니다. 즉, DHCP 서버가 연결된 네트워크의 컴퓨터들은 복잡하게 네트워크를 설정할 필요없이 그냥 DHCP 서버에 요청하는 것 만으로 네트워크 설정을 간단하게 마칠 수 있는 것 입니다.

VMware Workstation 은 이 DHCP 서버를 자체적으로 운용하여 내부의 가상 머신들이 DHCP 를 요구할 때 자동으로 IP 와 같은 네트워크 설정을 할당해 주게 됩니다.

VMware 의 DHCP 서버



이러한 VMware Workstation 의 DHCP 서버는 기본적으로 VMnet1, VMnet8 스위치에 연결이 되어 있습니다. 이러한 DHCP 서버는 필요에 따라 다른 스위치에 더 추가할 수도 있고 제거할 수도 있습니다.


NAT

NAT 란 Network Address Translation 의 약자로써 네트워크 주소 변환을 의미합니다. 기본적으로 192.168.x.x 와 같은 사설(Private) IP 주소로는 외부와 통신(인터넷 연결 등) 할 수 없습니다. 외부와 통신할 수 있는 IP 주소는 오직 인터넷 IP 주소 관리 기관에서 공식적으로 발급한 공인(Public) IP 주소 뿐 입니다.

하지만 이러한 제약을 뛰어 넘고자 개발된 기술이 바로 NAT 입니다. NAT 는 사설 IP 주소와 공인 IP 주소를 상호 변환해 주는 일종의 변환기입니다. 192.168.0.2 와 같은 사설 IP 주소를 통해 외부로 네트워크 패킷을 보내게 되면 NAT 는 이를 119.200.124.84 와 같은 공인 IP 주소로(현재 연결된 공인 IP 주소) 변환하여 패킷을 내 보냄으로써 외부에선 마치 공인 IP 에서 패킷을 보낸 것처럼 보이게 해주는 것이죠. 반대로 외부에서 내부로 네트워크 패킷이 들어오게 되면 NAT 에선 이를 어떤 사설 IP 에게 들어온 패킷인지 판단하여 해당 사설 IP 로 패킷을 보내주게 됩니다.

즉, 사설 IP 주소로는 원칙적으로 외부와 통신할 수 없기 때문에 이를 공인 IP 주소로 중간에 변환해 주어 외부와 통신(인터넷 연결) 할 수 있게 해주는 것 입니다. 한 가지 NAT 는 장비가 아니라 기능 즉, 프로그램을 의미합니다. 그래서 라우터 등에 NAT 기능이 포함되어 있습니다. 흔히 NAT 기능이 포함된 라우터를 NAT 라우터라고 부릅니다.

우리가 주변에서 흔히 볼 수 있는 NAT 라우터로는 바로 인터넷 공유기가 있습니다. 공유기는 허브/스위치의 역할도 하면서 동시에 NAT 기능을 탑재하여 우리가 하나의 인터넷 회선으로(공인 IP) 다수의 컴퓨터에서(내부 사설 IP) 동시에 인터넷을 사용할 수 있게 해주는 것 입니다. (공유기에는 DHCP 서버 기능도 내장이 되어 있지요.) NAT 를 가장 쉽게 이해하시는 방법은 NAT = 인터넷 공유기 라는 공식을 대입시키시면 됩니다.

VMware Workstation 은 이 NAT 라우터를 자체적으로 내장하여 내부 사설망으로 구성된 가상 머신들이 외부와 통신할 수 있게 해 줍니다.

VMware 의 NAT 라우터



이러한 VMware Workstation 의 NAT 라우터는 VMnet8 스위치에 연결이 되어 있습니다.



이상으로 VMware Workstation 의 네트워크를 구성하는 장치들에 대해서 알아보았습니다. 이곳에서 설명드린 내용을 이해하시면 VMware Workstation 의 네트워크를 설정하시는데에 큰 도움이 되실 겁니다.








VMware Workstation 네트워크 연결의 이해

VMware Workstation 의 네트워크 연결에는 Bridged, NAT, Host-only, Custom 의 총 네 가지 연결이 있습니다. 그럼 각 연결의 구조와 특성에 대해서 알아보도록 하겠습니다. 각 네트워크의 비교는 흔히 집에서 많이 사용하는 인터넷 공유기를 통해 구성된 내부 사설망을 기준으로 살펴보도록 하겠습니다.




Bridged Networking

브릿지 네트워킹이란 호스트의 네트워크와 게스트의 네트워크를 브릿지하여(연결하여) 게스트 컴퓨터가 네트워킹 하는 방식입니다. 즉, 호스트와 게스트를 하나로 연결하여 두 개의 네트워크를 마치 하나의 네트워크처럼 쓰는 것 입니다.

Bridged Networking 연결 모식도




브릿지 네트워킹은 VMnet0 스위치에 게스트 컴퓨터의 네트워크 어댑터와 호스트 컴퓨터의 네트워크 어댑터가 연결되어 서로 브릿지된 상태입니다. 이렇게 게스트와 호스트의 네트워크가 브릿지 됨으로써 호스트 네트워크와 게스트 네트워크가 서로 동등한 수준의 네트워크를 제공받게 됩니다.

호스트와 게스트가 서로 동등한 자격을 가지기 때문에 게스트 컴퓨터에도 호스트 컴퓨터와 같이 공인(Public) IP 를 할당하거나 호스트 컴퓨터가 사설(Private)망에 연결된 경우 호스트와 동일한 IP 대역을 할당할 수 있습니다. 이 때는 반드시 공인이든 사설이든 게스트 컴퓨터에도 할당할 수 있는 여분의 IP 가 존재해야 합니다.

브릿지 네트워킹에서는 보시는 바와 같이 호스트 컴퓨터와 게스트 컴퓨터가 동일한 IP 대역을(192.168.0.x) 사용하는 것을 확인할 수 있습니다. 이렇게 동일한 IP 대역을 할당받기 때문에 외부 네트워크에서는 호스트와 게스트 컴퓨터를 동등하게 바라봅니다.

호스트 컴퓨터의 IP 설정 모습
게스트 컴퓨터의 IP 설정 모습
 




공유기에서는 가상 머신 또한 실제로 존재하는 하나의 컴퓨터로 인식을 하고 있는 모습입니다. 이는 비단 공유기 뿐만 아니라 외부의 네트워크에서도 동일하게 인식을 합니다. 즉, 외부의 입장에서는 어떤게 호스트 컴퓨터이고 어떤게 게스트 컴퓨터인지 구별을 할 수 없다는 말 입니다. 그저 보여지는 그대로 실제로 두 대의 컴퓨터가 돌아가고 있는 것으로 인식을 하게 되는 것입니다.

공유기 관리 모드에서 살펴본 모습.




이러한 브릿지 네트워킹을 그림으로 표현하면 아래와 같습니다.

Bridged Networking 의 네트워크 연결 모식도



이러한 브릿지 네트워킹은 특성상 외부로 노출이 되기 때문에 외부에서 가상 머신으로 직접 접근하는 것이 가능합니다. 네트워크 상에서는 가상 머신도 네트워크에 물려있는 다른 컴퓨터들과 동등한 하나의 컴퓨터라는 것을 인지 하시면 금방 이해가 되실 겁니다. 그렇기 때문에 사설망에서(공유기 환경 등) 컴퓨터끼리 공유 폴더 등으로 접근이 가능하듯이 가상 머신에도 동일하게 접근이 가능하게 됩니다. 또한 가상 머신에도 공인 IP 를 할당 할 수 있는 환경이라면 별다른 제약이나 설정없이 바로 가상 머신을 서버로써 구성하는 것이 가능해 집니다.

그래서 브릿지 네트워킹은 서버를 구성할 때 외부와 1 차로 연결되는 서버에(방화벽 서버 등) 많이 사용됩니다. 공유기를 사용하는 가정 환경이라면 공유 폴더의 접근 등 다른 컴퓨터와 동등하게 사용하고자 할 때 사용됩니다.




NAT Networking

NAT 네트워킹이란 호스트의 네트워크 아래에 사설망을 꾸며 이 사설망에 가상 머신들을 두는 구조를 가지고 있는 방식입니다. 단 이 사설망은 NAT 라우터가 연결되어 있고 이를 통해 사설망 내부의 게스트 컴퓨터들도 외부에(인터넷) 연결하는 것이 가능해집니다.

NAT Networking 연결 모식도



NAT 네트워킹은 VMnet8 스위치에 게스트 컴퓨터의 네트워크 어댑터와 DHCP Server 그리고 NAT 라우터가 연결이 되며 호스트 컴퓨터의 VMnet8 네트워크 어댑터가 이 NAT 라우터에 연결이 되어 있는 상태입니다. NAT 네트워킹은 게스트의 네트워크가 호스트의 하위에 구성되는 방식이기 때문에 호스트의 네트워크와는 다른 IP 대역을 가지고 있습니다.

보시는 바와 같이 호스트 컴퓨터와 게스트 컴퓨터가 서로 다른 IP 대역을(192.168.0.x, 192.168.17.x) 사용하는 것을 확인할 수 있습니다. 이러한 특성상 호스트가 속해있는 네트워크에서는 NAT 네트워크에 속해 있는 가상 머신들에 접근을 할 수 없습니다. 즉, 외부의 네트워크 상에서 NAT 네트워크에 속해 있는 게스트 컴퓨터들은 보이지 않는 것 입니다.

호스트 컴퓨터의 IP 설정 모습
게스트 컴퓨터의 IP 설정 모습
 




공유기에서는 가상 머신을 인식 하지 못하고 있는 모습입니다. 외부의 네트워크에서 NAT 네트워크에 속해 있는 가상 머신에 접속하기 위해선 NAT 의 포트 포워딩을 통해 호스트 컴퓨터를 거쳐야지만 접근을 할 수 있습니다. NAT 네트워크에 속해 있는 가상 머신들끼리는 서로 동일한 네트워크에 구성이 되어 있기 때문에 서로 간의 상호 접근은 가능합니다.

공유기 관리 모드에서 살펴본 모습.




이러한 NAT 네트워킹을 그림으로 표현하면 다음과 같습니다.

NAT Networking 의 네트워크 연결 모식도




이러한 NAT 네트워킹은 특성상 외부로 노출이 되지 않기 때문에 NAT 의 포트 포워딩을 통하지 않고서는 외부에서 가상 머신으로 접근하는 것이 불가능합니다. 그렇기 때문에 외부에서의 접근을 차단해야 할 필요가 있지만 가상 머신에서도 외부로 접근이 가능해야 할 때 사용할 수 있는 연결 방식입니다. 또는 브릿지 네트워킹을 사용할 수 없을 때(추가 IP 를 확보할 수 없을 때) 사용할 수 있는 방식입니다. 단순히 인터넷에 연결하고자 할 때는 상관이 없지만 가상 머신에 서버를 구축하고자 할 때는 NAT 설정에서 포트 포워딩 작업을 통해 외부에서 가상 머신으로 접근이 가능하도록 해주어야 합니다.




Host-only Networking

Host-only 네트워킹이란 호스트의 네트워크 아래에 사설망을 꾸며 이 사설망에 가상 머신들을 두는 구조를 가지고 있는 방식입니다. 단 이 사설망은 NAT 네트워킹과는 달리 NAT 라우터가 연결되어 있지 않기 때문에 게스트 컴퓨터에서는 호스트 컴퓨터를 제외한 외부로의 연결은 불가능합니다.

Host-only Networking 연결 모식도




Host-only 네트워킹은 VMnet1 스위치에 게스트 컴퓨터의 네트워크 어댑터와 DHCP Server 가 연결이 되며 호스트 컴퓨터의 VMnet1 네트워크 어댑터가 연결이 되어 있는 상태입니다. NAT 네트워킹은 게스트의 네트워크가 호스트의 하위에 구성되는 방식이기 때문에 호스트의 네트워크와는 다른 IP 대역을 가지고 있습니다. 또한 NAT 라우터가 없기 때문에 Gateway 는 설정되지 않습니다.

보시는 바와 같이 호스트 컴퓨터와 게스트 컴퓨터가 서로 다른 IP 대역을(192.168.0.x, 192.168.179.x) 사용하는 것과 Gateway 가 설정되지 않은 것을 확인할 수 있습니다.

호스트 컴퓨터의 IP 설정 모습
게스트 컴퓨터의 IP 설정 모습
 




공유기에서 가상 머신을 인식 하지 못하는 모습입니다. 외부의 네트워크에서 Host-only 네트워크에 속해 있는 가상 머신에 접근하는 것이 불가능합니다. Host-only 네트워크에 속해 있는 가상 머신들끼리는 서로 동일한 네트워크에 구성이 되어 있기 때문에 서로 간의 상호 접근은 가능합니다.

공유기 관리 모드에서 살펴본 모습.




이러한 Host-only 네트워킹을 그림으로 표현하면 다음과 같습니다.

Host-only Networking 의 네트워크 연결 모식도




이러한 Host-only 네트워킹은 특성상 호스트를 제외한 외부와 단절된 네트워크가 구성이 됩니다.(호스트와 게스트를 조금 설정해주면 호스트 온리 연결에서도 외부와의 통신은 가능합니다.) 물론 내부의 가상 머신들끼리는 접속이 가능합니다. 그렇기 때문에 외부에서의 접근을 차단해야 할 필요가 있는 가상 머신을(또는 네트워크를) 구성할 때 주로 사용하는 연결 방식입니다. 1 차로 외부와 연결된 서버와(방화벽,웹 서버 등) 연동되는 보안을 요구하는 서버들을(웹 서버, DB 서버 등) 구성하는데 사용할 수 있습니다.




Custom Networking

VMware Workstation 이 기본으로 설정한 세 가지 스위치 VMnet0/1/8 외의 스위치들을 사용하는 네트워킹으로 설정에 따라 Host-only, NAT, Bridged 네트워킹 구성이 가능합니다. 단 VMware 에서는 NAT 나 Bridged 네트워킹은 각각 하나의 스위치에만 설정이 가능하기 때문에 커스텀에서 NAT 나 Bridged 로 설정하는 경우 기본 VMnet0/8 스위치는 Host-only 로 변경이 됩니다. 그렇기 때문에 딱히 NAT 나 Bridged 를 구성하기 위해서가 아닌 Host-only 네트워크를 추가로 구성하고자 할 때 주로 사용됩니다.




네트워크 연결 방식의 선택

사실 어떠한 네트워크 연결 방식이 가장 좋다! 라고 이야기하는 것은 틀린 말입니다. 어떠한 환경에서 어떠한 목적으로 가상 머신을 운용하고자 할 때 어떠한 네트워크 연결 방식을 사용해야 하는가? 가 맞는 말이지요. 연결 여부에 따라 각 네트워크 연결 방식을 정리하자면 다음과 같습니다.

 BridgedNATHost-Only
호스트 -> 게스트 연결가능가능가능
게스트 -> 호스트 연결가능가능가능
게스트 -> 외부 연결가능가능불가능
외부 -> 게스트 연결가능제한적 가능(포트 포워딩)불가능
내부 네트워크 연결가능가능가능
추가 IP 필요(공인,사설)필요불필요불필요



이러한 특성들을 잘 파악하여 자신이 해당 가상 머신을 운용하고자 하는 목적에 맞게 알맞은 네트워크 방식을 선택하시면 되는 겁니다. 다음은 VMware Workstation 의 메뉴얼에 기재된 각 네트워크 연결의 특성을 잘 살려 구성된 VMware 네트워크의 모습입니다.



출처 : http://shinb.tistory.com/20

Posted by 당구치는 개발자
|