우리나라 인터넷 서비스 주요 제공 업체는 SK, LG, KT가 있다.

 

SK 광 인터넷을 설치 하는 경우를 예를 들어 보면, 기사가 와서 아래 것들을 설치해 주고 간다.

1. 모뎀

2. 유무선 공유기

3. Nugu 스마트 스피커

이 중 스마트 스피커는 인터넷을 하는 것과 상관이 없고... 실제로는 모뎀과 공유기가 기능을 담당한다.

 

모뎀

1. 정의

정보 전달(주로 디지털 정보)을 위해 신호를 변조하여 송신하고 수신측에서 원래의 신호로 복구하기 위해 복조하는 장치를 말한다. 주로 컴퓨터 정보통신을 위한 주변기기로 많이 사용한다. 변조를 하는 이유는 전송선에 디지털 신호를 바로 보내면 신호 전달이 잘 되지 않기 때문이다. 데이터가 같은 비트로 연속되면 전송특성상 신호 전달에 문제가 발생하므로 전송선의 특성에 맞추어 변조한다.

모뎀은 아날로그/디지털 변환기의 일종으로 컴퓨터의 디지털 신호를 아날로그 신호로 바꾸어 전송하고, 아날로그 신호를 받아 디지털 신호로 읽어낸다. 좁은 의미에서는 개인용 컴퓨터와 전화선을 이어주는 주변기기이다.

 

2. 실제

SK 광 인터넷이 모뎀으로 연결된다. (가정 또는 사무실 네트워크로 유입되는 인터넷 트래픽의 첫 번째 연락 지점이다.)

모뎀은 동축 케이블 또는 전화 케이블, 또는 광 케이블을 사용하여 인터넷 서비스 제공 업체의 네트워크에 연결한다.

즉 모뎀을 통해 SK 인터넷 망을 이용할 수 있게 된다.

 

공유기

1. 정의

Home Router. 가정용 및 소기업에서 사용하는 소용량 라우터를 말한다. 기기에 따라서는 Wi-Fi 칩셋과 안테나를 더해 AP 기능까지 하기도 한다.

공유기의 가장 기본적인 기능은 ISP(인터넷 회사)에서 할당해 주는 하나의 IP를 이용하여 여러 대의 컴퓨터 인터넷에 접속할 수 있도록 해 주는 것이다. 한편, 여러 대의 컴퓨터에서 인터넷을 사용하려면 ISP에서 공인 IP 주소를 여러 개 할당받는 게 원칙이다. 그런데 ISP에서는 추가 IP마다 돈을 내도록 강요하기 때문에, 'IP를 하나만 사용해서 여러 대 컴퓨터가 인터넷을 할 수 없을까'라는 고민 끝에, 라우터의 NAT 기능과 게이트웨이, 허브 및 네트워크 관리 도구를 통합하여 나온 물건이 인터넷 공유기이다.

 

2. 실제

공유기로 사설 로컬 네트워크(LAN)을 구성하여 여러 컴퓨터에서 인터넷 접속이 가능하도록 해준다.

뎀이 공유기에 연결 되어 있고, 공유기에 컴퓨터가 연결(무선 또는 유선) 되어 인터넷 사용이 가능해진다. 

즉, 집안의 컴퓨터나 휴대폰은 허브 역할을 하는 공유기에 접속해 사설 IP를 할당받아 사용하게 되고, 공유기는 모뎀에 연결되어 모뎀에 부여된 IP로 네트워크에 연결이 된다. (공유기가 LAN과 WAN 사이의 중계역할을 한다.)

컴퓨터 -> 공유기 -> 모뎀 -> 인터넷 망 연결

 

참고

https://ko.wikipedia.org/wiki/%EB%AA%A8%EB%8E%80

https://namu.wiki/w/%EC%9D%B8%ED%84%B0%EB%84%B7%20%EA%B3%B5%EC%9C%A0%EA%B8%B0

https://ithub.tistory.com/260

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

인터넷, 컴퓨터 네트워크, OSI 7계층  (0) 2022.05.12

인터넷이란,

컴퓨터로 연결하여 TCP/IP(Transmission Control Protocol/Internet Protocol)라는 통신 프로토콜을 이용해 정보를 주고받는 컴퓨터 네트워크이다.[1]

 

컴퓨터 네트워크란,

 노드들이 자원을 공유할 수 있게 하는 디지털 전기통신망의 하나이다. 즉, 분산되어 있는 컴퓨터를 통신망으로 연결한 것을 말한다. 컴퓨터 네트워크에서 컴퓨팅 장치들은 노드 간 연결(데이터 링크)을 사용하여 서로에게 데이터를 교환한다. 이 데이터 링크들은 유선, 광케이블과 같은 케이블 매체, 또는 와이파이와 같은 무선 매체를 통해 확립된다.

네트워크 계층은 OSI 모델로 구분될 수 있다.

 

영역별 컴퓨터 네트워크 종류

근거리 통신망(LAN)

근거리 통신망, 로컬 영역 네트워크(영어: local area network, LAN), 구내 정보 통신망은 네트워크 매체를 이용하여 집, 사무실, 학교 등의 건물과 같은 가까운 지역을 한데 묶는 컴퓨터 네트워크이다.[1]

이와 대조적으로, 광역 통신망(WAN)은 더 넓은 지역 범위를 아우를뿐 아니라 일반적으로 전용선 또한 동반하기도 한다.

이더넷 와이파이는 근거리 통신망에 사용하기 위해 흔히 쓰이는 기술 2가지이다.

광역 통신망(WAN)

넓은 지리적 거리/장소를 넘나드는 통신 네트워크 또는 컴퓨터 네트워크이다. 광역 통신망은 종종 전용선과 함께 구성된다.[1]

사업, 교육, 정부 기관들은 광역 통신망을 사용하여 세계의 다양한 지역의 직원, 학생, 고객, 구매자, 공급자에게 데이터를 중계한다. 본질적으로 이러한 방식의 전기통신은 장소에 관계없이 날마다 비즈니스가 효율적으로 수행될 수 있도록 도와준다. 인터넷은 광역 통신망으로 간주될 수 있다.[2]

그 밖의 관련 통신망은 영역에 의해 구분되는데, 개인 통신망(PAN : 방 단위), 근거리 통신망(LAN : 건물 단위), 캠퍼스 통신망(CAN : 캠퍼스 단위), 도시권 통신망(MAN : 도시 단위)이 있다.

 

OSI 7계층 (OSI 모형, Open Systems Interconnection Reference Model)

국제표준화기구(ISO)에서 개발한 모델로, 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 것이다. 일반적으로 OSI 7 계층이라고 한다.

목적

이 모델은 프로토콜을 기능별로 나눈 것이다. 각 계층은 하위 계층의 기능만을 이용하고, 상위 계층에게 기능을 제공한다. '프로토콜 스택' 혹은 '스택'은 이러한 계층들로 구성되는 프로토콜 시스템이 구현된 시스템을 가리키는데, 프로토콜 스택은 하드웨어나 소프트웨어 혹은 둘의 혼합으로 구현될 수 있다. 일반적으로 하위 계층들은 하드웨어로, 상위 계층들은 소프트웨어로 구현된다.

계층 기능

계층 1: 물리 계층

물리 계층(Physical layer)은 네트워크의 기본 네트워크 하드웨어 전송 기술을 이룬다. 네트워크의 높은 수준의 기능의 논리 데이터 구조를 기초로 하는 필수 계층이다. 다양한 특징의 하드웨어 기술이 접목되어 있기에 OSI 아키텍처에서 가장 복잡한 계층으로 간주된다.

 

계층 2: 데이터 링크 계층

데이터 링크 계층(Data[3]link layer)은 포인트 투 포인트(Point to Point) 간 신뢰성있는 전송을 보장하기 위한 계층으로 CRC 기반의 오류 제어와 흐름 제어가 필요하다. 네트워크 위의 개체들 간 데이터를 전달하고, 물리 계층에서 발생할 수 있는 오류를 찾아 내고, 수정하는 데 필요한 기능적, 절차적 수단을 제공한다. 주소 값은 물리적으로 할당 받는데, 이는 네트워크 카드가 만들어질 때부터 맥 주소(MAC address)가 정해져 있다는 뜻이다. 주소 체계는 계층이 없는 단일 구조이다. 데이터 링크 계층의 가장 잘 알려진 예는 이더넷이다. 

  • 프레임에 주소부여(MAC - 물리적주소)
  • 에러검출/재전송/흐름제어

계층 3: 네트워크 계층

네트워크 계층(Network layer)은 여러개의 노드를 거칠때마다 경로를 찾아주는 역할을 하는 계층으로 다양한 길이의 데이터를 네트워크들을 통해 전달하고, 그 과정에서 전송 계층이 요구하는 서비스 품질(QoS)을 제공하기 위한 기능적, 절차적 수단을 제공한다. 네트워크 계층은 라우팅, 흐름 제어, 세그멘테이션(segmentation/desegmentation), 오류 제어, 인터네트워킹(Internetworking) 등을 수행한다. 라우터가 이 계층에서 동작하고 이 계층에서 동작하는 스위치도 있다. 데이터를 연결하는 다른 네트워크를 통해 전달함으로써 인터넷이 가능하게 만드는 계층이다. 논리적인 주소 구조(IP), 곧 네트워크 관리자가 직접 주소를 할당하는 구조를 가지며, 계층적(hierarchical)이다.

  • 주소부여(IP)
  • 경로설정(Route)

계층 4: 전송 계층

전송 계층(Transport layer)은 양 끝단(End to end)의 사용자들이 신뢰성있는 데이터를 주고 받을 수 있도록 해 주어, 상위 계층들이 데이터 전달의 유효성이나 효율성을 생각하지 않도록 해준다. 시퀀스 넘버 기반의 오류 제어 방식을 사용한다. 전송 계층은 특정 연결의 유효성을 제어하고, 일부 프로토콜은 상태 개념이 있고(stateful), 연결 기반(connection oriented)이다. 이는 전송 계층이 패킷들의 전송이 유효한지 확인하고 전송 실패한 패킷들을 다시 전송한다는 것을 뜻한다. 가장 잘 알려진 전송 계층의 예는 TCP이다.

종단간(end-to-end) 통신을 다루는 최하위 계층으로 종단간 신뢰성 있고 효율적인 데이터를 전송하며, 기능은 오류검출 및 복구와 흐름제어, 중복검사 등을 수행한다.

  • 패킷 생성(Assembly/Sequencing/Deassembly/Error detection/Request repeat/Flow control)

계층 5: 세션 계층

세션 계층(Session layer)은 양 끝단의 응용 프로세스가 통신을 관리하기 위한 방법을 제공한다. 동시 송수신 방식(duplex), 반이중 방식(half-duplex), 전이중 방식(Full Duplex)의 통신과 함께, 체크 포인팅과 유휴, 종료, 다시 시작 과정 등을 수행한다. 이 계층은 TCP/IP 세션을 만들고 없애는 책임을 진다.

통신하는 사용자들을 동기화하고 오류복구 명령들을 일괄적으로 다룬다.

  • 통신을 하기 위한 세션을 확립/유지/중단 (운영체제가 해줌)

계층 6: 표현 계층

표현 계층(Presentation layer)은 코드 간의 번역을 담당하여 사용자 시스템에서 데이터의 형식상 차이를 다루는 부담을 응용 계층으로부터 덜어 준다. MIME 인코딩이나 암호화 등의 동작이 이 계층에서 이루어진다. 예를 들면, EBCDIC로 인코딩된 문서 파일 ASCII로 인코딩된 파일로 바꿔 주는 것이 표현 계층의 몫이다.

  • 사용자의 명령어를 완성및 결과 표현.
  • 포장/압축/암호화

계층 7: 응용 계층

응용 계층(Application layer)은 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행한다. 일반적인 응용 서비스는 관련된 응용 프로세스들 사이의 전환을 제공한다. 응용 서비스의 예로, 가상 터미널(예를 들어, 텔넷), FTP 등이 있다.

  • 네트워크 소프트웨어 UI 부분
  • 사용자의 입출력(I/O)부분

 

참고:

https://ko.wikipedia.org/wiki/%EA%B7%BC%EA%B1%B0%EB%A6%AC_%ED%86%B5%EC%8B%A0%EB%A7%9D

https://ko.wikipedia.org/wiki/%EC%9D%B8%ED%84%B0%EB%84%B7
https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%93%A8%ED%84%B0_%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC
https://ko.wikipedia.org/wiki/%EA%B4%91%EC%97%AD_%ED%86%B5%EC%8B%A0%EB%A7%9D
https://ko.wikipedia.org/wiki/OSI_%EB%AA%A8%ED%98%95

대부분의 OS, 프로그램은 로그를 남겨 장애시 원인 분석에 이용하게 된다.

리눅스, 특히 CentOS7 에서는 rsyslog라는 로그 시스템이 다양한 로그를 남긴다.

또한 로그가 계속 쌓이면 파일 사이즈가 비대해져 디스크 공간 부족이 생길 수 있고, 파일을 열어 분석하는 작업도 쉽지 않기에, logrotate라는 프로그램이 쌓인 로그를 파일로 분할하고, 오래된 로그 파일을 삭제하는 등의 작업을 한다.

 

rsyslog

시스템의 다양한 로그를 남긴다

1. 로그 파일 저장 위치 : /var/log/ 디렉토리 하위에 저장

2. 주요 로그파일

로그파일 설명
messages 인증, 메일, cron을 제외한 대부분의 로그가 기록되는 파일
secure 인증, 즉 보안 관련 로그가 저장되는 파일
maillog 메일 관련 모든 로그가 저장되는 파일
cron cron 관련 모든 로그가 저장되는 파일
spooler uucp, news의 심각한 로그가 저장되는 파일
boot.log 부팅 메시지가 저장된 로그 파일

3. rsyslog 운영

rsyslog 시작

# systemctl start rsyslog

rsyslog 재시작

# systemctl restart rsyslog

rsyslog 종료

# systemctl stop rsyslog

rsyslog 상태확인

# systemctl status rsyslog

 

logrotate (로그로테이트)

쌓인 로그를 파일로 분할하고, 오래된 로그 파일을 삭제하는 등의 작업을 하여 로그를 관리한다.

파일을 어떻게 분할할지, 어떤 주기로 로테이트 시킬지 등은 logrotate 설정에서 가능하다.

1. logrotate 설정 : /etc/logrotate.conf

2. logrotate 설정파일 보기/수정하기

아래 명령어로 설정파일을 열어보고, 수정 후 저장하면 된다.

# vi /etc/logrotate.conf

logrotate.conf 내용 예

: 매주 로테이트, 최대 4개의 과거 로그 보관, 로그 파일 사이즈가 10M 이상이 되면 로테이트, 로그파일 압축 보관하는 예이다.

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

size 10M

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
    minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.

3. logrotate 실행

기본 실행

logrotate는 crond 데몬에 의해 매일 실행된다.

실행되는 파일 위치 : /etc/cron.daily/logrotate

 

직접 실행

설정 변경 후 바로 적용시키는 방법이다.

# logrotate -f /etc/logrotate.conf

리눅스에서 메모리 사용량을 보는 명령어들.

1. free

# free

실행 예

[root@xxx ~]# free
              total        used        free      shared  buff/cache   available
Mem:        1014548      727124       63300       29336      224124       37804
Swap:       4194300     4038808      155492

2. top

# top -n1 | grep Mem

실행 예

[root@xxx ~]# top -n1 | grep Mem
KiB Mem :  1014548 total,    89956 free,   727076 used,   197516 buff/cache
KiB Swap:  4194300 total,   154628 free,  4039672 used.    51492 avail Mem

3. meminfo

# cat /proc/meminfo | grep Mem

실행 예

[root@xxx ~]# cat /proc/meminfo | grep Mem
MemTotal:        1014548 kB
MemFree:           78344 kB
MemAvailable:      51884 kB

4. 메모리 사용량 많은 순 프로세스 보기 (상위 10개)

# ps -eo user,pid,ppid,rss,size,vsize,pmem,pcpu,time,comm --sort -rss | head -n 11

실행 예

[root@xxx ~]# ps -eo user,pid,ppid,rss,size,vsize,pmem,pcpu,time,comm --sort -rss | head -n 11
USER       PID  PPID   RSS  SIZE    VSZ %MEM %CPU     TIME COMMAND
mysql    10516 23044 143008 1758848 1846496 14.0 1.7 05:34:29 mysqld
apache    5283 21714 74816 426328 1144364  7.3 0.5 01:09:07 httpd
apache   22804 21714 74288 422436 1140472  7.3 0.3 00:40:52 httpd
apache   13757 21714 72580 285308 899728  7.1 0.7 00:52:34 httpd
apache   29439 21714 72260 152552 870560  7.1 0.3 00:07:30 httpd
apache   31022 21714 71752 254996 973004  7.0 0.7 00:48:15 httpd
apache   20054 21714 70388 386368 1104376  6.9 0.6 01:06:43 httpd
apache   20619 21714 69824 320396 934816  6.8 0.6 00:57:03 httpd
apache   19557 21714 69468 224524 836812  6.8 0.8 00:47:03 httpd
apache    8839 21714 64728 177964 893840  6.3 0.9 00:39:52 httpd

1. 컴파일 에러

컴파일 시, invalid new-expression of abstract class type 에러가 나는 경우가 있다.

 

2. 원인

구현 클래스에서, 추상클래스의 함수를 모두 구현하지 않은 경우 위 에러가 난다.

 

3. 해결

추상클래스에 선언된 함수 중, 구현하지 않은 함수를 찾아 구현해준다.

'개발 > C,C++' 카테고리의 다른 글

vcpkg란  (0) 2025.06.20
[Visual Studio] 단축키  (0) 2023.02.28
.dll과 .lib의 차이  (0) 2023.02.23

git을 사용해서 원격 저장소를 clone 해오면, master 브랜치만 가져와지고 다른 브랜치들은 로컬로 가져와지지 않는다.

다른 브랜치들은 따로 가져와야 한다.

 

원격 저장소 정보 업데이트

git remote를 갱신해서 원격 브랜치들의 정보를 최신으로 업데이트 한다.

(업데이트 안하면, 새로 추가된 원격 브랜치들이 조회가 안된다.)

$ git remote update

 

원격 저장소 branch 확인

1. 원격 저장소의 branch 리스트 보기

$ git branch -r

 

2. 원격, 로컬 모든 저장소의 branch 리스트 보기

$ git branch -a

 

원격 저장소의 branch 가져오기

1. 로컬에 원격 저장소와 동일한 이름의 branch를 생성하며 해당 브랜치로 checkout하기

$ git checkout -t [원격 저장소의 브랜치 이름]

 

원격 저장소의 test라는 브랜치를 가져오고 싶은 경우, 아래처럼 하면 된다.

$ git checkout -t origin/test

 

2. branch 이름을 변경하며 가져오고 싶은 경우

$ git checkout -b [생성할 브랜치 이름] [원격 저장소의 브랜치 이름]

 

test라는 브랜치를 new_test라는 이름으로 가져오고 싶은 경우, 아래처럼 하면 된다.

$ git checkout -b new_test origin/test

 

SQLite는 경량 데이터베이스이다.

따라서 데이터베이스의 한계는 어디까지인지를 파악 해볼 필요성을 느끼게 된다.

테이블 설계 시 고려해야 하기 때문. 그런데 알아 보니 소규모 어플리케이션에서는 제한 모르고 써도 무방하다 싶기도 하다..

 

1. string이나 BLOB의 최대 길이

SQLITE_MAX_LENGTH

  • 기본값 = 1 billion (1,000,000,000)
  • 최대값 = 2147483647

기본값은 설정으로 낮추거나, 높일 수 있다.

(컴파일 시, 커맨드 라인 옵션으로 -DSQLITE_MAX_LENGTH=123456789 주면 변경 가능하다 함)

 

2. 최대 컬럼 개수 

SQLITE_MAX_COLUMN 

  • 기본값 = 2000
  • 최대값 = 32767

컴파일 타임에 SQLITE_MAX_COLUMN 설정을 바꿀 수 있다.

 

3. 최대 SQL Statement 길이

SQLITE_MAX_SQL_LENGTH 

  • 기본값 = 1,000,000,000

4. Join 가능한 최대 테이블 개수

  • 최대값 = 64개 테이블

5. Expression Tree의 최대 깊이(Depth)

SQLITE_MAX_EXPR_DEPTH 

  • 기본값 = 1000

(값이 0이면, 제한 없음)

 

6. 함수의 최대 인자 수

SQLITE_MAX_FUNCTION_ARG 

  • 기본값 = 100
  • 최대값 = 127

7. Compound SELECT Statement에서 최대 Term 수

SQLITE_MAX_COMPOUND_SELECT

Compound SELECT Statement 란, 두개 이상의 SELECT 문이 UNION, UNION ALL, EXCEPT, or INTERSECT로 연결된 것을 말한다.

여기서 각각의 SELECT 문을 Term이라고 부른다(SQLite의 용어).

  • 기본값 = 500

8. LIKE나 GLOB 패턴의 최대 길이

SQLITE_MAX_LIKE_PATTERN_LENGTH

  • 기본값 = 50000

9. 단일 SQL문에서 Host Parameter의 최대 개수

SQLITE_MAX_VARIABLE_NUMBER

Host Parameter란, SQL문에서의 기호 (보통 ? 을 사용한다)를 말한다.

  • 기본값 = 999 (3.32.0 버전, 2020-5-22)
  • 기본값 = 32766 (3.32.0 이후 버전)

10.  Maximum Depth Of Trigger Recursion

  • 기본값 = 1000 (3.7.0 버전 부터, 2009-09-11)

그 이전 버전은 trigger가 재귀적이지 않아 의미 없다 함

 

11. Maximum Number Of Attached Databases

SQLITE_MAX_ATTACHED 

하나의 커넥션에 연결되 수 있는 최대 데이터베이스의 개수

  • 기본값 = 10
  • 최대값 = 125

12. 데이터베이스 파일에서 최대 Page 수

SQLITE_MAX_PAGE_COUNT 

  • 기본값 = 1073741823
  • 최대값 = 4294967294

13. 테이블의 최대 행 수

  • 이론상 최대값 = 2의 64승 (18446744073709551616 or about 1.8e+19)

14. 최대 데이터베이스 사이즈

  • 최대값 = 281 terabytes

(최대 페이지 수가 4294967294 이고, 각 페이지의 최대 크기가 65536 bytes 라고 했을 경우)

 

15. Schema의 최대 테이블 개수

  • 최대값 = 2147483646

 

참고 : https://www.sqlite.org/limits.html

성능 벤치마킹 : https://softint.eu/choosing-sqlite-as-a-database-3-3/

Git은 브랜치별로 소스를 관리하기 편하다.

개발하려는 기능을 새로운 브랜치를 만들어 작업한 후, 작업이 완료되면 master로 통합해주는 방식으로 많이 활용된다.

 

아래는 쉘에서 사용 가능한 브랜치 관련 git 명령어들이다.

 

1. 브랜치 생성

git branch 명령으로, test라는 브랜치를 만든다

$ git branch test

 

2. 브랜치 이동

git checkout 명령으로 test라는 브랜치로 이동한다.

$ git checkout test

 

3. 브랜치 이름 변경

로컬 저장소의 브랜치 이름 변경

$ git branch -m [old_branch] [new_branch]

 

test라는 브랜치의 이름을, new_test로 변경하는 예는 다음과 같다.

(브랜치 명령어는 브랜치만 생성하기 때문에, 작업을 하려면 checkout을 해야 한다.)

$ git branch -m test new_test
$ git checkout new_test

 

원격 저장소의 브랜치 이름 변경

원격 저장소의 old_branch를 삭제하고, new_branch를 push 해주면 된다. 아래의 명령어로 한번에 할 수 있다.

$ git push origin :[old_branch] [new_branch]

 

원격 저장소의 test라는 브랜치를 new_test라는 브랜치명으로 바꾸는 예는 다음과 같다.

$ git push origin :test new_test

 

4. 브랜치 합치기

두 브랜치를 합치는 방법으로는, Merge와 Rebase가 있다.

양자는 최종 결과물은 같고, 커밋 히스토리만 다르다.

Rebase 는 브랜치의 변경사항을 순서대로 다른 브랜치에 적용하면서 합치고,

Merge는 두 브랜치의 최종 결과만을 가지고 합친다.

 

브랜치 Merge

git merge 명령으로, test 브랜치를 master 브랜치에 합친다.

$ git checkout master
$ git merge test

 

브랜치 Rebase

rebase를 통해 test 브랜치를 master에 합치는 예는 다음과 같다.

$ git checkout test
$ git rebase master
$ git checkout master
$ git merge test

Rebase시 주의! 

이미 공개 저장소에 Push한 커밋을 Rebase 해서 다시 push 하지 마라.

Rebase는 기존의 커밋을 그대로 사용하는 것이 아니라 내용은 같지만 다른 커밋을 새로 만든다.

따라서 이미 공개 저장소에 c1이라는 커밋을 push 해서 다른 사람이 그 커밋을 바탕으로 작업을 했는데, 해당 커밋 c1을 rebase로 다시 push 해버리면, 동료는 rebase 내용을 pull 했을 때 본인의 코드와 충돌이 일어나게 된다.

그래서인지, rebase는 로컬작업에서만 사용하라고 권장하는 사람들도 있다.

 

합친 브랜치 master를 원격 저장소에 push하기

$ git push origin master

 

5. 브랜치 삭제

merge 후 필요 없어진 브랜치는 삭제한다.

$ git branch -d [branch_name]

 

아래는 test라는 브랜치를 삭제하는 예이다.

$ git branch -d test

+ Recent posts