출처: https://jhproject.tistory.com/109


다른사람들이 작성한 python 코드를 보다보면

*args, **kwargs 를 심심치 않게 본다.

그냥 막연하게 "어떤 파라미터를 몇개를 받을지 모르는 경우 사용한다" 라고 알고 있었지만

자세히 설명한 예 가 있어서 소개한다.



*args

- 파라미터를 몇개를 받을지 모르는 경우 사용한다. args 는 튜플 형태로 전달된다.

예)

def print_param(*args):
    print args
    for p in args:
        print p

print_param('a', 'b', 'c', 'd')
#('a', 'b', 'c', 'd')
#a
#b
#c
#d


**kwargs

- 파라미터 명을 같이 보낼 수 있다. kwargs는 딕셔너리 형태로 전달된다.

def print_param2(**kwargs):
    print kwargs
    print kwargs.keys()
    print kwargs.values()

    for name, value in kwargs.items():
        print "%s : %s" % (name, value)

print_param2(first = 'a', second = 'b', third = 'c', fourth = 'd')

#{'second': 'b', 'fourth': 'd', 'third': 'c', 'first': 'a'}
#['second', 'fourth', 'third', 'first']
#['b', 'd', 'c', 'a']
#second : b
#fourth : d
#third : c
#first : a



그러면 두개를 같이 쓰는 경우는??

def print_param3(*args, **kwargs):
    print args
    print kwargs

print_param3('a', 'b')
#('a', 'b')
#{}

print_param3(third = 'c', fourth = 'd')
#()
#{'fourth': 'd', 'third': 'c'}

print_param3('a', 'b', third = 'c', fourth = 'd')
#('a', 'b')
#{'fourth': 'd', 'third': 'c'}



응용 해 보자

def print_param4(a, b, c):
    print a, b, c

p = ['a', 'b', 'c']
print_param4(*p)
#a b c

p2 = {'c' : '1', 'a' : '2', 'b' : '3'}
print_param4(**p2)
#2 3 1



* 일반 EBS(ELASTIC BLOCK STORE)를 사용중일 경우 서버를 중지하지 않고도 볼륨을 확장할 수 있습니다.

* 서버를 중지하지 않고 확장 진행 가능 : t2, m3, m4, c3, c4, r3, r4등 현제 세대 인스턴스

* 서버를 중지해야만 확장 진행 가능 : m1, m2, c1, c2, t1 등 이전 세대 인스턴스


[진행 방법]]

* 스크린샷은 제가 이미 디스크 용량을 10 -> 20 기가로 확장 한 후 찍어서 조금 다르게 나옵니다.


1. AWS 콘솔에 접속 후 EC2 대시보드로 이동


2. EBS(ELASTIC BLOCK STORE) - 볼륨 메뉴로 이동 후 확장하려는 인스턴스의 볼륨 선택



------------------------------------------------------------------------------------------------------------------------------------------------------------------------


3. 해당 볼륨을 오른쪽 클릭(또는 상단 작업버튼)을 통해 '볼륨 수정(Modify Volume)' 기능 성택


------------------------------------------------------------------------------------------------------------------------------------------------------------------------


4. 확장하려는 만큼의 디스크 용량 입력 후 수정



------------------------------------------------------------------------------------------------------------------------------------------------------------------------


5. 선택한 볼륨의 상태(state) 값이 'in-uses-optimizing' 으로 변하면 다음 작업 진행 (새로고침을 눌러 확인)



------------------------------------------------------------------------------------------------------------------------------------------------------------------------


6. EC2 인스턴스 쉘(SSH) 접속

7. lsblk 명령어를 통해 현재 디스크 상태 확인

8. sudo growpart /dev/xvda 1   (/dev/xvda 과 1 사이의 띄어쓰기 주의)

9. sudo resize2fs /dev/xvda1

10. 확장된 디스크 용량 확인 및 대시보드의 상태값 확인 (in-use - completed)











'Programming > ETC' 카테고리의 다른 글

웹훅(Webhook)이란?  (1) 2019.02.11
[Yona] 설치형 이슈 트래커 Yona 설치  (0) 2019.01.03
[VirtualBox] CentOS 7 가상환경 생성 및 셋팅  (0) 2018.11.09
[VirtualBox] 네트워크 설정  (0) 2018.11.08
이슈 트래커 종류  (1) 2018.09.19

두 숫자 더하기 문제

내용

  • 주어진 정수배열 안에서 두 숫자를 더해 target 이 되는 숫자의 index 로 이루어진 배열을 반환하라

조건 및 제약사항

  • 주어진 배열에는 정확히 하나의 해답만 존재한다.
  • 각 숫자는 한번만 사용 가능하다.

예제

  • nums = [2, 7, 11, 15], target = 9
    • result = [0, 1]

코드

import java.util.HashMap;
import java.util.OptionalInt;
import java.util.stream.IntStream;

public class LeetCode1 {
    /**
     * 1. Two Sum
     * https://leetcode.com/problems/two-sum/
     *
     * Example:
     * Given nums = [2, 7, 11, 15], target = 9,
     * Because nums[0] + nums[1] = 2 + 7 = 9,
     * return [0, 1].
     * */

    public static void main(String[] args) {
        Solution solution = new Solution();
        int[] result = solution.twoSum2(new int[]{2, 7, 11, 15}, 9);
        System.out.println(result[0] + " / " + result[1]);
    }

    static class Solution {
        // 스트림 사용. 그러나 2중 반복문으로 시간복잡도 조금 더 높음
        public int[] twoSum(int[] nums, int target) {
            for (int i = 0; i < nums.length; i++) {
                int temp = i;
                OptionalInt a = IntStream.range(i+1, nums.length)
                        .filter(j -> nums[temp] + nums[j] == target)
                        .findFirst();

                if (a.isPresent()) {
                    return new int[]{i, a.getAsInt()};
                }
            }

            return nums;
        }

        // Hashmap 사용. 정석 방법.
        public int[] twoSum2(int[] nums, int target) {
            HashMap<Integer, Integer> map = new HashMap<>();
            for (int i = 0; i < nums.length; i++) {
                map.put(target - nums[i], i);
            }
            for (int i = 0; i < nums.length; i++) {
                if (map.containsKey(nums[i])) {
                    return new int[]{i, map.get(nums[i])};
                }
            }
            return nums;
        }
    }
}

* mongo-c-driver 1.6.3 버전 사용

* $ : 일반 사용자 계정 , # : 루트 계정


[mongo-c-driver Github]

https://github.com/mongodb/mongo-c-driver



[설치]

(원하시는 위치에서 진행해 주세요.)

$ wget https://github.com/mongodb/mongo-c-driver/releases/download/1.6.3/mongo-c-driver-1.6.3.tar.gz

$ tar xzf mongo-c-driver-1.6.3.tar.gz

$ cd mongo-c-driver-1.6.3

$ ./configure --disable-automatic-init-and-cleanup

$ make

$ sudo make install



[확인]


1) /usr/local/include/libmongoc-1.0


2) /usr/local/include/libbson-1.0




[참조방법 예시]


1) gcc -o mongo-c-test mongo-c-test.c -I/usr/local/include/libmongoc-1.0 -I/usr/local/include/libbson-1.0 -L/usr/local/lib/ -L/usr/lib64 -lmongoc-1.0 -lbson-1.0


2) makefile

--------------------------------

INCMONGO = -I/usr/local/include/libmongoc-1.0 -I/usr/local/include/libbson-1.0

LIBMONGO = -L/usr/local/lib/ -L/usr/lib64

LIBS    = -lmongoc-1.0 -lbson-1.0

CFLAGS  = $(INCMONGO) $(LIBMONGO) $(LIBS)

TARGET  = mongo-c-test


all: $(TARGET)


$(TARGET):

        $(CC) -o $@ $@.c $(CFLAGS) 


clean:

        rm -f $(TARGET)

--------------------------------

(예시일뿐 필요한 내용으로 수정하셔야 합니다.)



[예제 소스]

* DB 풀 사용법이 포함된 소스입니다.



#include <bcon.h>
#include <mongoc.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define SERVER "mongodb://url"
#define DATABASE "MONGO_TEST"

int main(int argc, char *argv[])
{
mongoc_client_t *client;
mongoc_collection_t *collection;
//mongoc_index_opt_t opt;
bson_t *doc;
bson_error_t error;

mongoc_client_pool_t *pool;
mongoc_uri_t *uri; // 몽고DB 서버주소

mongoc_init();

uri = mongoc_uri_new(SERVER);
pool = mongoc_client_pool_new(uri);

mongoc_client_pool_set_error_api(pool, 2);
mongoc_client_pool_max_size(pool, 2); // DB풀에 DB클라이언트 2개

client = mongoc_client_pool_pop(pool);
collection = mongoc_client_get_collection(client, DATABASE, "TEST");

int temp = 0;
while (true)
{

if (temp < 100)
{
temp++;
printf("%d\n", temp);

doc = bson_new();
BSON_APPEND_UTF8 (doc, "user", "user2");
BSON_APPEND_INT32(doc, "temp_idx", temp);
if (!mongoc_collection_insert(collection, MONGOC_INSERT_NONE, doc, NULL, &error))
{
fprintf(stderr, "%s\n", error.message);
}
char *str;
str = bson_as_json(doc, NULL);
printf("doc : %s\n", str);
bson_free(str);
bson_destroy(doc);

}
else
{
break;
}
usleep(100);
}
mongoc_client_pool_push(pool, client);
mongoc_client_pool_destroy(pool);
mongoc_uri_destroy(uri);
mongoc_cleanup();

return 0;
}


- 결과

1) 콘솔


2) robomongo




---


<CentOS 7 가상환경 생성 및 셋팅>


1. 새 가상환경 만들기


1.1) 새로 만들기 클릭



1.2) 메모리 설정




1.3) 디스크 용량 설정



1.4) 가상 이미지 생성 완료



2. 가상환경 네트워크 준비하기


2.1) VirtualBox 전체 환경설정

* 각 가상환경 설정 버튼과 혼동하지 말자



2.2) 네트워크 탭에서 NAT 네트워크에 사용할 새로운 세팅 생성



2.3) 네트워크 CIDR 은 가상OS에 분배될 내부 네트워크 IP 주소대역임

ex) 평소 사용하는 공유기들이 192.168.0.xxx IP 를 분배해 주는것과 같음

* 위에 써있는 10.0.2.0/24 를 192.168.0.0/24 로 변경해도 됨



2.4) 현재 사용중인 호스트 컴퓨터와 가상OS 를 포트포워딩 설정할 수 있음

아직 가상OS 설치를 하지 않았으므로 비운상태로 넘어가고 가상OS 설치를 끝낸 후 다시 설정함



3. 가상 OS 설치


3.1) 가상환경을 클릭하고 위 설정 버튼을 눌러 설정화면으로 이동

또는 가상환경을 오른쪽 클릭해서 나오는 메뉴에서 설정을 클릭해도 됨

* VirtualBox 전체 설정과 혼동하지 말 것.



3.2) 저장소 메뉴에서 '컨트롤러 : IDE' 항목의 광학 드라이브 항목



3.3) 받아놓은 CentOS 7 이미지 파일을 선택



3.4) '컨트롤러 : IDE' 항목 아래에 이미지가 추가된거 확인 후 '네트워크' 메뉴로 이동




3.5) 네트워크 어댑터를 'NAT 네트워크' 그리고 이름 항목을 2.3 에서 새로 만든 NAT네트워크 이름으로 지정



3.6) 기본적인 셋팅 완료. 가상 OS 설치 전 스냅샷 찍기

***** 스냅샷을 잘 만들어 두면 문제가 생겼을 경우 쉽게 복구할 수 있다. *****



3.7) 스냅샷 생성



3.8) 가상OS 설치 준비 완료


4. 가상 OS 설치


4.1) CentOS 7 설치 시작




4.2) 설치중 표시할 언어 - 한국어로 해도 상관없음



4.3) 기본적으로 네트워크가 꺼져있음. 클릭해서 설정을 변경하도록 하자.



4.4) 네트워크를 켜준다. 기본 설정이 자동으로 셋팅된다.

* 여기 나오는 IP 주소가 2.3, 2.4 에서 만든 NAT 네트워크 셋팅의 CIDR 네트워크 대역중 하나로 설정된다.

* 추후 이 IP로 포트포워딩을 설정한다.




4.5) 디스크 메뉴를 확인해야 한다.



4.6) 디스크 메뉴 안에서는 따로 건드릴건 없고 확인만 되면 완료 버튼을 눌러 되돌아가면 된다.



4.7) 두 항목 설정이 끝나면 설치시작 버튼이 활성화 되므로 설치시작 버튼을 눌러 다음 화면으로 넘어간다.



4.8) root 계정과 사용자 계정 둘다 설정해준다.



4.9) root 계정 비밀번호 설정



4.10) 사용자계정 설정

* 이 사용자를 관리자로 합니다. 체크하기



4.11) 설치가 끝날 때 까지 기다린다.



4.12) 설치가 끝나면 재부팅


*** 설치 끝나고 나서 스냅샷을 하나 더 찍어놓는 것도 좋다. ***

* 그러면 가상OS 를 사용하다가 문제가 발생했을 경우 지금 만든 스냅샷으로 복원하면

OS 를 새로 설치 하지 않고도 처음 OS 설치를 끝낸 순간으로 쉽게 돌아올 수 있다.


* 스냅샷 상태


5. CentOS 7 실행 및 네트워크 설정



5.1) 설치한 CentOS 7 을 실행한다.



5.2) 설치할 때 생성한 사용자 계정으로 로그인 후 ip addr 명령어를 통해 IP 를 확인한다.

OS 설치할 때 확인한 네트워크 IP 와 동일하게 표시될 것이고 이제 다시 2.3, 2.4 항목으로 돌아가 포트포워딩 설정을 해준다.



5.3) 가상OS CLI 화면에서 작업하기는 불편하므로 (해상도 변경의 까다로움, 클립보드 공유 설정 까다로움)

위처럼 SSH 포트를 포트포워딩 해주고 putty 또는 secureCRT 등등의 터미널 프로그램으로 작업할 수 있게 한다.



5.4) 터미널 프로그램으로 접속한다.

Host IP 는 현재 사용중인 컴퓨터 이므로 127.0.0.1 로 설정한다.

포트는 5.3 화면과 같이 가상OS 의 22번 포트와 매핑시킨 포트번호를 입력한다 (이 포스트에서는 10122)

접속 계정도 입력한다.



5.5) 접속해본다.



5.6) 위처럼 VirtualBox 화면을 사용하지 않고 터미널 프로그램으로 잘 연결되었다. 쉽게 작업하도록 하자.


*** 만약 웹서버를 올린다던가 DB 를 설치해서 테스트해보려 한다면

5.3 화면에서 가상OS 로 접근하려는 포트를 모두 추가해줘야 한다.

1) 웹서버라면 80 포트

2) DB 라면 각 DB에 맞는 포트 (ex : mysql - 3306)

그 외 필요한 포트를 모두 추가해 준다.

그 후에 웹서버나 DB를 실행하고 접근할 때는 Host 컴퓨터에서 127.0.0.1:10180 등과 같이 접속하면 된다.



***** 스냅샷은 자주 만들도록 하자. 매우 편하다. *****



-------------------------------------------------------


'Programming > ETC' 카테고리의 다른 글

웹훅(Webhook)이란?  (1) 2019.02.11
[Yona] 설치형 이슈 트래커 Yona 설치  (0) 2019.01.03
[AWS] EC2 인스턴스 디스크 볼륨 확장  (0) 2018.12.07
[VirtualBox] 네트워크 설정  (0) 2018.11.08
이슈 트래커 종류  (1) 2018.09.19

<네트워크 설정 종류별 특징>


출처: https://technote.kr/213


- NAT

- NAT 네트워크

- 브리지 어댑터

- 내부 네트워크

- 호스트 전용 어댑터

- 일반 드라이버



1. NAT (Network Address Translation)

- 가상머신 내부 네트워크 -> Host PC 외부 네트워크 단방향 통신 가능

- Host PC 내의 가상 머신 간의 통신 불가능



--------------------------------------------------------------------------------------------------------------


2. NAT Network

- 가상머신 내부 네트워크 -> Host PC 외부 네트워크 단방향 통신 가능

- Host PC 내의 가상 머신 간의 통신 가능



--------------------------------------------------------------------------------------------------------------


3. 브리지 어댑터 (Bridged Adapter)

- Host PC와 동등한 수준의 네트워크 구성

- 추가의 IP 할당이 필요함



--------------------------------------------------------------------------------------------------------------


4. 내부 네트워크 (Internal Network)

- Host PC와 독립적인 내부 네트워크

- 같은 Host PC 내의 가상 머신 간 연결이 가능



--------------------------------------------------------------------------------------------------------------


5. 호스트 전용 어댑터 (Host-only Adapter)

- Host PC를 포함한 내부 네트워크 (외부 네트워크와는 단절)

- 같은 Host PC 내의 가상 머신 간 연결이 가능



--------------------------------------------------------------------------------------------------------------


6. 일반 드라이버 (Generic Driver)

- 거의 사용되지 않는 모드

- UDP Tunnel networking과 VDE(Virtual Distributed Ethernet) 지원











[CentOS 7]

- 도커 유용할 것 같은 내용 정리 중


# 컨테이너 로그 필터링

# docker logs 컨테이너 이름 2>&1 | grep "필터링 할 내용"


# 컨테이너 사용량 모니터링

# docker stats --format "table {{.Name}}\t{{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"

* 과거 안드로이드 개발 중 경험했던 일입니다.

* 당시 답변해 주신 LG전자 연구원분께 감사드립니다.


- 앱에 추가한 기능 (백그라운드에서 통신하는 기능) 이 정상적으로 실행되지 않음

- AsyncTask 가 실행이 안된것도 아니고, 실패 한것도 아님.

- 첫 생성 부분은 정상 호출 되었으니 실행부가 진행되지 않음

- AsyncTask 가 대기 상태로 기다리는 것으로 보임

- 테스트해보니 기존 실행되고 있던 AsyncTask 작업이 끝나니까 이후 대기중이던 AsyncTask 가 정상 실행되는 것을 확인함



* AsyncTask Thread의 제한은 단말의 CPU 개수와 관련이 있습니다.


- AsyncTask Thread 가 정상적으로 싱행되지 않은 기종은 4개의 CPU 가 있는 기종으로,

해당 N-OS (Android 7.0) 기종들은 아래 Android 소스에 의해서 CORE_POOL_SIZE 가 3 이 됩니다.

해당 pool size의 제한으로 앱에서 여러 개 운용중인 AsyncTask 의 동시 사용이 불가했을 것으로 보입니다.

다른 기종으로 시험을 해보니, 6개의 CPU를 가진 기기의 N-OS 에서는 현상이 발생하지 않았습니다.


<M-OS, AysncTask.java>

int CPU_COUNT = Runtime.getRuntime().availableProcessors();

int CORE_POOL_SIZE = CPU_COUNT + 1;

int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;


<N-OS, AysncTask.java>

int CPU_COUNT = Runtime.getRuntime().availableProcessors();

int CORE_POOL_SIZE = Math.max(2, Math.min(CPU_COUNT - 1, 4));

int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;



[결론]

- AsyncTask 는 동시 실행 개수에 제한이 있으므로 소켓통신 등의 시간이 오래걸리는 작업은 기본 Runnable Thread 로 구현을 하고

  자체적으로 금방 끝나는 백그라운드 작업들만 AsyncTask 로 구현해야 하는것으로 보임

* 터미널, 콘솔창, 깃 Bash 등 Command Line 으로 사용할 경우 입니다.


[기본 개념 및 용어]

1. Git은 파일을 Commited, Modified, Staged 세가지 상태로 관리한다. 

 - modified : 수정한 파일을 아직 로컬 저장소에 commit하지 않은 것을 의미함

 - staged : 현재 수정한 파일을 곧 Commit할 것이라고 표시한 상태를 의미함.

 - commited : 데이터가 로컬 저장소에 안전하게 저장됐다는 것을 의미함

2. Git은 Git Directory, Working Directory, Staging Area 세가지 영역으로 분리된다. 

 - Git Directory : Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳을 말한다.  (.git)

 - Working Directory : 수정할 파일들이 있는 디렉토리

 - Staging Area : Git Directory에 있으며, 단순한 파일이고 곧 commit할 파일에 대한 정보를 저장한다. 

 (* Repository : commit 된 파일들이 실제 반영되는 저장소)


3. Working Directory의 모든 파일은 Tracked와 Untracked로 나뉜다. 

 - Tracked 파일은 이미 Snapshot에 포함돼 있던 파일이며, Unmodified, Modified, Staged 상태중 하나의 상태를 갖는다. 

 - Tracked 파일이 아닌 모든 파일은 Untracked 파일이다.

 


[명령어]

1. 새로운 Git 저장소 생성 (로컬)

git init


2. 현재 git 상태 보기

git status


2-1. 서버 Repository 에서 로컬 Repository 로 복제 (현재 위치에)

git clone 아이디:비밀번호@서버URL:경로


2-2. 로컬 Repository 를 로컬 Repository 에 복제 (현재 위치에)

git clone 원본 로컬 저장소 경로

ex) git clone /home/git/project/sample1


3. 로컬 Working Directory -> 로컬 Staging Area 에 추가

git add 파일명        // 파일 단위로 올리는 방법

git add .                // 변경된 전체 파일을 올리는 방법


4-1. 로컬 Staging Area -> 로컬 Repository 에 반영 (commit 시 message 가 꼭 필요하다.)

git commit -m "메모"

(* 현재 branch 의 Staging Area 에 있는 모든 파일들이 commit 된다.)


4-2. 로컬 Working Directory -> 로컬 Repository 에 반영 (Staring 단계 건너뜀.)

git commit -a -m "메모"

(* 현재 branch 의 Working Directory 에 있는 모든 수정된 파일들이 바로 commit 된다.)




------------------------------------------------------------


git add [Directory|파일 경로] //Untracked 파일을 Tracked 파일로 변경하거나, Tracked&수정된 파일을 staging 한다.

git status  //현재 상태 보기 



git commit -m "commit message"  //로컬 저장소에 commit(저장)

git commit -a -m "commit message"  // staging area 생략 commit (git add 과정 생략)

git commit --amend //수정한 내용이 없으면 커밋 메세지만 변경하고 수정한 내용이 있으면 이전 커밋으로 수정내용을 포함하여 새로운 커밋으로 덮어쓴다.


git rebase -i HEAD~2 // HEAD으로 부터 2개의(HEAD 포함) commit을 합친다.


git rm <filename>  // 파일을 삭제한 후 staged 상태로 만든다. (work directory의 파일도 삭제됨)

git rm --cached <filename> // 해당 파일을 untracked 상태로 변경한다. (work directory의 파일은 그대로 있는다. ignore를 빼먹은 경우 사용)


git mv <origin_file> <target_file> // 히스토리를 유지한 상태로 파일이름을 변경하고, 해당 변경사항이 staged 상태가 된다. 

     ==> "mv <origin_file> <target_file>; git rm <origin_file>; git add <target_file>" 과 동일하다.


git log [-p] -5  [--pretty=online|short|full|fuller]  //commit 로그를 확인한다.(최근 5개의 로그 확인) (-p 옵션은 각 커밋의 diff 결과를 보여준다.)

git log --pretty=format:"%h %s" --graph // 브랜치/머지 히스토리를 아스키 그래프로 보여준다.

git log --stat // 히스토리 통계를 보여준다.


git checkout <commit_id> // 특정 커밋시점으로 되돌린다. 

git checkout <branch명>  //지정된 브랜치가 가리키는 커밋을 HEAD가 가리키게 한다. (작업 디렉토리의 파일은 그대로 유지됨)

git checkout -b <branch명> //새로운 브랜치를 만들고  해당 브랜치를 checkout 한다.

git checkout -b <new branch name> <server branch name> // 서버에서 생성되어 있는 브랜치 가져오기

git checkout  <commit_id> -- <file> // 특정 커밋시점의 특정 파일만 되돌린다.

git checkout -- <file>  // work directory의 변경된 unstaged 파일을 최신 커밋된 내용으로 덮어쓴다. (작업중이던 내용이 있으면 날라가며, 복구 불가!!!)

git checkout -f // 현재 HEAD가 가리키는 커밋으로 작업 디렉토리의 파일을 되돌려 놓는다. (작업중이던 내용이 있으면 날라가며, 복구 불가!!!)

git checkout -f <branch>//  branch가 가리키는 커밋으로 작업 디렉토리의 파일을 되돌려 놓는다. (작업중이던 내용이 있으면 날라가며, 복구 불가!!!)


git reset HEAD <staged_file> // staged file을 unstaged로 변경한다.

git reset HEAD^    // 최종 커밋을 취소. 워킹트리는 보존됨. (커밋은 했으나 push하지 않은 경우 유용)

git reset HEAD~2     //마지막 2개의 커밋을 취소. 워킹트리는 보존됨.

git reset --hard HEAD~2    // 마지막 2개의 커밋을 취소. index 및 워킹트리 모두 원복됨.

git reset --hard ORIG_HEAD    // 머지한 것을 이미 커밋했을 때,  그 커밋을 취소. (잘못된 머지를 이미 커밋한 경우 유용)


git revert HEAD    // HEAD에서 변경한 내역을 취소하는 새로운 커밋 발행(undo commit). (커밋을 이미 push 해버린 경우 유용)


git diff  // work directory와 staged 영역 비교

git diff --cached // staged 영역과 & 저장소 commit 간의 비교 ("git diff --staged" 명령과 동일)


git branch <branch명> //새로운 branch를 만든다. 

git branch [-a]  //branch 목록을 조회한다.

git branch -m [old_branch] [new_branch]

git branch -d <branch명> //브랜치 삭제


git tag [-l] [v.1.4.*]   //Tag 목록조회 [v1.4 버전들의 목록만 조회]

git tag -a <tag명> -m '[tag message]'  //주석 태그 추가   ex>git tag -a v1.0 -m 'add first release tag'

git tag -s <tag명> -m '[tag message]' //서명된주석 태그 추가

git tag <tag명>  //경량 버전 태그 추가 

git tag -a <tag명> [commit hash]  // 특정 commit의 태그 추가

git show <tag명>  // 태그정보와 해당 태그의 commit 정보를 확인한다. 


git remote [-v] // 원격 저장소 정보 확인

git remote show <remote명> //리모트 저장소 살펴보기 

git remote add <remote명> <원격저장소URL> //원격 저장소를 추가한다.


git remote rename <old_name> <new_name> //remote repository 이름 변경

git remote rm <remote-name>  //remote repository 삭제 

git fetch [remote명]  //Remote Repository의 최신 변경사항을 Local Respository로 가져옮


git pull [remote명] [branch명]   //remote 저장소 브랜치에서 데이터를 가져와 자동으로 로컬 브랜치와 머지함

git push [remote명] [branch명] //local branch의 내용을 remote 저장소에 push 한다. 

git push [remote명] [tag명]  //local에 생성한 tag를 remote 에 추가한다.

git push [remote명] --tags  //local에 존재하는 tag중에 remote에 존재하지 않는 모든 태그들을 push 한다.  

git push <remote명> <local branch>:<remote branch> // 내가 최초로 서버에 브랜치 만들기

git push [remote명] :[branch명]  // remote에 있는 branch 를 삭제한다. (git push [remote명] --delete [branch명])


git merge <from_branch> <to_branch> // from branch를 to branch와 머지한다.


git mergetool // merge할 툴을 실행시켜 준다.


git submodule add <Git Repository URL> <Directory Path>  // Git Submodule 추가

git submodule init  // Git Submodule 초기화 [init -> update]

git submodule update // Git Submodule 소스 코드 받아오기 [init -> update]


git hash-object -w <filename> // 파일을 Git에 저장하고 해쉬코드를 출력한다.


git cat-file -p <hashcode> // 해쉬코드에 해당하는 개체의 내용을 출력한다.

git cat-file -t <hashcode> // 해쉬코드에 해당하는 개체의 타입을 출력한다.

git cat-file -p master^{tree} // master 브랜치가 가리키는 Tree 개체의 내용을 출력한다.


'Programming > GIT' 카테고리의 다른 글

[GitLab] SourceTree 연결 (win 10)  (0) 2018.05.07

<MariaDB 10.1 기준>


* DB 데이터 백업

# mysqldump -u계정명 -p비밀번호 DB이름 > db.sql


* 특정 테이블만 백업

# mysqldump -u계정명 -p비밀번호 DB이름 테이블명1 테이블명2 테이블명3 > tables.sql

 

* 함수, 프로시저, 트리거 를 함께 백업해야 할 경우

mysqldump --routines --trigger -u계정명 -p비밀번호 DB이름 db.sql


함수, 프로시저, 트리거 만 백업해야 할 경우 (테이블 제외)

mysqldump --routines --no-create-info --no-data --no-create-db --skip-opt DB이름> db_no_tables.sql


* 백업 데이터 복원

mysql -u계정명 -p비밀번호 DB이름 < db.sql


 

[참고사항]

- 복원 시

ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, 
or READS SQL DATA in its declaration and binary logging is enabled 
(you *might* want to use the less safe log_bin_trust_function_creators 
variable) 

위와 같은 오류가 발생 할 경우

1. mysql 서버를 시작할 때 다음 옵션을 추가 한다.

--log-bin-trust-function-creators=1

2. 계정에 접속해서 다음을 실행한다. (또는 접속툴을 이용해서)

mysql>SET GLOBAL log_bin_trust_function_creators = 1; 

(권한이 없어 실패할 경우 권한 있는 계정 또는 root 로 실행)



+ Recent posts