[git] 지옥에서 온 GIT – one

지옥에서 온 GIT 이라는 인강은 총 51개의 강의로 구성이 되어있다.
나중에 내가 또 다시 검색을 할 것 같아 강의 내용을 간단히 정리했다.
GIT은 어렵다!!

하지만 강사 이고잉님의 강의 시작전에 말씀하셨다..
GIT을 배우는게 어렵고 복잡하다고 하더라도 우리의 현실은 그것보다 더 복잡하기 때문에 배울만 하다고..ㅜ ㅜ………

GIT : 버전 관리 시스템(Version Control System) 중에 하나이다.
우리가 이전에는 파일을 수정할때마다 파일 이름에 _final, _real_final, … 을 붙여가며 사용하던 것을 이제는 파일 이름을 수정하지 않고도 버전관리를 할 수 있다.

  • git init
    git을 처음 시작할때 사용하는 명령어이다.
    이 명령어를 사용하면 .git이라는 이름으로 버전 정보가 담긴(담기게 될) 파일이 생긴다.

    YEBEEN@YEBEEN MINGW64 ~/Documents/gitfth
    $ git init
    Initialized empty Git repository in C:/Users/YEBEEN/Documents/gitfth/.git/
    
  • git status
    현재 파일의 상태를 확인 할 수 있다.

    YEBEEN@YEBEEN MINGW64 ~/Documents/gitfth (master)
    $ git status
    On branch master
    
    No commits yet
    
    Untracked files:
      (use "git add ..." to include in what will be committed)
    
            f1.txt
    
    nothing added to commit but untracked files present (use "git add" to track)
    
    

    위 샘플 코드에서 Untracked files 를 확인 할 수 있는데
    git은 버전 관리를 하라고 하기 전까지는 새 작업을 무시하기 때문이다. 즉, 파일이 Tracked 상태가 되기 전까지는 Git은 절대 그 파일을 커밋하지 않을 것이라는 이야기이다.

  • git add
    이 명령어는 파일이 추가되거나 내용이 수정되어 버전관리 목록에 추가하기 위해 사용한다.(위에서 언급했던! Tracked 상태가 되기 위해 사용 해야하는 명령어이다.)

    예를 들어! 프로젝트를 진행하다보면 핵심적인 파일이 있고 테스트성으로 임시적인 파일이 있을 텐데 테스트성 파일까지 관리할 필요는 없지 않을까.
    그래서 우리는 어떤 파일들을 추적해야(관리해야)하는지 git에게 알려 줘야 한다.

    YEBEEN@YEBEEN MINGW64 ~/Documents/gitfth (master)
    $ git add f1.txt
    warning: LF will be replaced by CRLF in f1.txt.
    The file will have its original line endings in your working directory
    
  • git commit
    버전들을 기록하기 위해서는 commit을 해야 하는데 하기 위해서 꼭 add를 해야하며 commit 메세지를 입력해야한다. 이 커밋 메세지는 다른 사람들과 업무내용을 공유하거나 스스로 업무내용을 기억하기 위한 것이니 꼼꼼히 작성하는 것이 좋다.

    YEBEEN@YEBEEN MINGW64 ~/Documents/gitfth (master)
    $ git commit
    [master (root-commit) 924be54] 1
     1 file changed, 1 insertion(+)
     create mode 100644 f1.txt
    
  • git config
    git을 설치하고 나서 가장 먼저 해야 하는 것은 사용자 이름과 이메일 주소를 설정하는 것이다. git은 커밋할 때마다 이 정보를 사용하는데 –global 옵션을 사용하여 설정한다면 한 번 커밋한 후에는 정보를 변경할 수 없다.
    만약 프로젝트마다 다른 이름과 이메일 주소를 사용하고 싶으면 –global 옵션을 빼고 명령을 실행한다.

    YEBEEN@YEBEEN MINGW64 ~/Documents/gitfth (master)
    $ git config --global user.name yebeen
    
    YEBEEN@YEBEEN MINGW64 ~/Documents/gitfth (master)
    $ git config --global user.email 안알랴줌@gmail.com
    
  • git log
    지금까지의 커밋 history를 볼 수 있으며 이때 중요한건 커밋 메시지!!

    – git log (commit id)
    그 커밋 id 이후의 로그를 확인 할 수 있다.
    – git log -p
    커밋 history를 각 커밋별로 직전 버전과의 차이점을 확인 할 수 있다.
  • git diff (AcommitId)..(BcommitId)
    A와 B 소스 코드 사이 내용의 차이점을 확인 할 수 있다.
* stage(커밋 대기중인 파일들이 있는 곳)
* repository(커밋 된 파일들이 있는 곳)
reset VS revert

커밋 취소하는 명령어들이다.
하지만 명심하자. GIT에서는 왠만하면 어떠한 정보도 삭제하지 않는다.
커밋을 취소한다는 것 자체가 위험한 명령어들이기 때문에 알아만 두고 되도록이면 사용하지는 말자!
협업(공유)하는데 있어서는 절대 사용 금지!
사용해야만 한다면 그땐 정말, 꼭, 완전 주의해서 사용하자!!
  • git reset
    이 명령어는 커밋을 취소 하여 커밋 내용이 삭제된 것처럼 보여도 우리 눈에만 보이지 않을 뿐 삭제된 것이 아니고 남아있다.
  • git revert
    reset처럼 날려버리는 것이 아니라 새로운 버전을 만든다.
  • 아래는 커밋 내용 중에 335e로 시작하는 커밋 ID를 가진 커밋을 최신으로 두고 싶을 때에 실행한 예제이다.

    YEBEEN@YEBEEN MINGW64 ~/Documents/gitfth (master)
    $ git reset 335e70e43268d58d93bc275425f5b65a466c01f0 --hard
    HEAD is now at 335e70e 3
    

    그 결과 git log를 사용하여 히스토리를 보면 335e로 시작하는 커밋 ID를 가진 내용이 최신 커밋 내용이라는걸 확인 할 수 있다.

    YEBEEN@YEBEEN MINGW64 ~/Documents/gitfth (master)
    $ git log
    commit 335e70e43268d58d93bc275425f5b65a466c01f0 (HEAD -> master)
    Author: yebeen <안알랴줌@gmail.com>
    Date:   Sat Nov 17 20:44:40 2018 +0900
    
        3
    
    commit 0d5351d2b11dfa58a2096f0ea0d7a15b1f4dc7b5
    Author: yebeen <안알랴줌@gmail.com>
    Date:   Sat Nov 17 20:32:35 2018 +0900
    
        2
    
    commit 924be54139c37ff730444e76a675e91db39b7b35
    Author: yebeen <안알랴줌@gmail.com>
    Date:   Sat Nov 17 20:26:51 2018 +0900
    
        1
    
    

Purchases.subscriptions in Google Play Developer API

SubscriptionPurchase은 사용자의 구독결제상태를 가리킨다.

{
  "kind": "androidpublisher#subscriptionPurchase",
  "startTimeMillis": long,
  "expiryTimeMillis": long,
  "autoRenewing": boolean,
  "priceCurrencyCode": string,
  "priceAmountMicros": long,
  "countryCode": string,
  "developerPayload": string,
  "paymentState": integer,
  "cancelReason": integer,
  "userCancellationTimeMillis": long
}
properties name value description
autoRenewing boolean 구독만료일시가 되었을때, 구독여부를 자동으로 갱신할 것인지 여부.
cancelReason integer 구독이 취소된 이유 혹은 자동 갱신이 안 된 이유.
0. 사용자가 구독을 취소.
1. 결제시스템 문제로 구독 취소. (ex. 청구서 문제로 인한.)
countryCode string ISO 3166-1 alpha-2 구독이 승인된 시간의 사용자의 국가/지역 코드.
developerPayload string 개발자가 명시한 내용으로 오더에 대한 추가적인 정보를 포함.
expiryTimeMillis long 구독이 만료되는 시간(단위 : 밀리 초)
kind string This kind represents a subscriptionPurchase object in the androidpublisher service.
paymentState integer 구독료의 지불상태.
0. 결제 대기중.
1. 결제 완료.
2. 무료체험판.
priceAmountMicros long tax가 포함되지 않은 구독료.
가격은 마이크로 단위로 표시되며, 여기서 1,000,000 마이크로 단위는 통화 단위 1 개를 나타냄.
(예를 들어 구독 가격이 1.99 유로 인 경우 price_amount_micros는 1990000)
priceCurrencyCode string ISO 4217 currency code
구독료에 대한 통화코드. (예를 들어 가격이 영국 파운드로 지정된 경우 price_currency_code는 “GBP”)
startTimeMillis long 밀리 초 단위로 구독이 허가 된 시간.
userCancellationTimeMillis long 사용자가 구독을 취소 한 시간 (단위 : 밀리 초). cancelReason이 0 인 경우에만 표시.

참고 : https://developers.google.com/android-publisher/api-ref/purchases/subscriptions

Http 응답 상태 코드 간략 정리

오늘은 HTTP통신 시, 서버에서 보내주는 응답 코드에 대해 간단히 정리해 보려고 해요!

사실 저는 200, 404, 500 이외의 것은 크게 신경쓰지않아서 잘 몰랐었는데, 이번 기회를 통해 확실히 알고가려구요!

상태 코드는 코드의 첫번째 숫자에 의해 크게 다섯 가지로 구분합니다!

1xx : Informational (정보)
요청(request)을 받고, 처리 중에 있음.

2xx : Success (성공)
요청(request)이 정상적으로 처리함.

3xx : Redirection (리디렉션)
요청(request) 완료를 위해 추가 동작이 필요함.

4xx : Client Error (클라이언트 오류)
클라이언트 요청을 처리할 수 없어 오류 발생.

5xx : Server Error (서버 오류)
서버에서 처리를 하지 못하여 오류 발생.

4번과 5번은 에러이기는 한데, 간단히 차이점을 설명하자면 4xx 에러는 클라이언트의 잘못된 요청으로 서버에서 처리하지 못한 것이고, 5xx 에러는 클라이언트의 요청은 문제가 없으나, 서버에서 처리중에 서버 문제로 인해 오류가 발생한 것이라고 생각하시면 될 것 같아요.

아래에는 주요 상태코드입니다!

100 Continue
클라이언트가 서버에게 메시지 바디를 포함한 요청을 보냈을 때 받는 응답 코드다. 서버의 응답에는 클라이어트가 요청한 헤더를 전송 받았고, 클라이언트는 계속해서 서버에게 바디를 보낼 수 있다고 나타낸다. 서버는 클라이언트의 요청이 완료되면 두 번째 응답을 보낸다.

200 OK
클라이언트의 요청이 성공했다는 것을 나타낸다. 서버의 응답 메시지 바디에 클라이언트가 요청한 내용에 대한 결과를 포함한다.

201 Created
클라이언트의 PUT 요청이 성공적이라는 것을 나타낸다.

301 Moved Permanently
브라우저의 요청을 다른 URL로 항시 전달한다는 것을 의미한다. 다른 URL에 대한 정보는 Location 헤더에 나타난다. 따라서 클라이언트는 예전 URL 대신에 새로 바뀐 URL 을 통해 자원을 찾는다.

302 Found
브라우저의 요청을 임시 URL로 바꾸고 Location 헤더에 임시로 변경한 URL에 대한 정보를 적는다. 클라이언트가 다음에 같은 요청을 하면 기존의 URL로 돌아간다.

304 Not Modified
브라우저가 서버에게 요청한 자료에 대해 서버는 클라이언트 내에 복사된 캐시를 사용하게 한다. 서버는 If-Modified-Since 와 If-None-Match 요청 헤더를 사용해 클라이언트가 가장 최근의 자료를 가지고 있는지 여부를 확인한다.

400 Bad Request
클라이언트가 서버에게 잘못된 HTTP 요청을 했다는 것을 나타낸다. 예를 들어 클라이언트가 URL 주소의 중간에 빈 공간을 넣는 등 부적절한 방법으로 서버에게 요청을 한 경우 400 Bad Request 응답코드를 받는다.

401 Unauthorized
서버가 클라이언트의 요청에 대해 HTTP 인증 확인을 요구하는 것을 의미한다. www-authenticate 헤더는 인증과 관련된 내용을 지원하는 다양한 타입에 대한 정보를 담고 있다.

403 Forbidden
클라이언트의 요청에 대해 접근을 차단한다는 것을 나타낸다.

404 Not Found
클라이언트가 서버에게 요청한 자료가 존재하지 않는다는 것을 나타낸다.

405 Method Not Allowed
클라이언트가 요청에 이용한 메소드가 해당 URL에 지원이 불가능하다는 것을 나타낸다. 예를 들어 PUT 방식을 지원하지 않는 곳에서 클라이언트가 PUT 메소드를 통해 서버에게 자원을 요청했다면 405 상태 코드를 보게 된다.

413 Request Entity Too Large
클라이언트가 요청한 바디를 서버에서 처리하기에는 너무 크다는 것을 나타낸다. 예를 들어 버퍼 오버플로우의 취약점을 찾고자 긴 문자열 데이터를 서버에 전송하면 413 상태 코드를 보게 된다.

414 Request URI Too Long
413응답과 비슷하지만 414 메시지는 요청에 사용된 URL이 서버가 감당할 수 없을 만큼 너무 크다는 것을 나타낸다.

500 Internal Server Error
서버가 클라이언트의 요청을 실행할 수 없을 때 500 상태 코드가 발생한다. 보통 서버가 예상하지 못한 요청을 보냈을 때 애플리케이션이 적절히 처리하지 못할 경우 500 상태 코드를 볼 수 있다. 어디서 문제가 생겼는지 알아보려면 서버의 응답 내용을 상세히 살펴봐야 한다.

503 Service Unavailable
웹서버는 클라이언트의 요청에 대해 정상적으로 응답할 수 있으나 서버에서 구동 중인 애플리케이션이 응답을 하지 못할 때 나타난다. 503 상태 코드의 경우 클라이언트가 요청을 잘못해서 발생했는지 아니면 서버에 있는 애플리케이션이 문제가 있는지 잘 확인해야 한다.

참고사이트
https://en.wikipedia.org/wiki/List_of_HTTP_status_codes