git tracking list에서 파일 제거하기

git tracking list에서 파일 제거하기

찾아놓고 보니 별것도 아닌데, 그간 이것 때문에 상당히 고생했다 -_-;;

.gitignore를 늦게 만들면, 이미 tracking 하고 있는 파일들은 무시되지 않는다. 즉, tracking list에 남아있다. 이걸 정리하기 위한 방법은 크게 두가지가 있는데, 첫째는 git repository 자체를 날렸다가 새로 파면 .gitignore가 처음부터 적용된다. 근데 이건 너무 무식하니까, 파일을 지정해서 tracking list에서 제거하는 방법이 있다:

$ git rm --cached <file>

이러면 트래킹 리스트에서 파일이 사라진다!

참고로 트래킹 파일 리스트는 이렇게 볼 수 있다:

$ git ls-files

github의 Ignoring files 참고.

'그 외/Tech' 카테고리의 다른 글

git tracking list에서 파일 제거하기  (0) 2015.07.08
LLVM on AOSABOOK  (0) 2015.04.26
github: ssh key 등록  (0) 2014.10.07
Git!  (0) 2014.10.03
cURL!  (0) 2014.09.22
검색엔진 (2) - 라이브러리: Lucene, Solr, Elasticsearch  (1) 2014.08.26

LLVM on AOSABOOK

컴파일러 수업 과제로 아티클을 읽으라고 해서, 이참에 번역이나 해 볼까 하고 신나게 번역하고 있었는데 이미 누가 해 놨더라 -_-

해서 기록해 둔다. 꽤나 잘 번역되어 있는 것 같다.

원문: http://www.aosabook.org/en/llvm.html

번역문: http://wiki.tuestudy.org/aosabook/materials/llvm


'그 외/Tech' 카테고리의 다른 글

git tracking list에서 파일 제거하기  (0) 2015.07.08
LLVM on AOSABOOK  (0) 2015.04.26
github: ssh key 등록  (0) 2014.10.07
Git!  (0) 2014.10.03
cURL!  (0) 2014.09.22
검색엔진 (2) - 라이브러리: Lucene, Solr, Elasticsearch  (1) 2014.08.26

github: ssh key 등록

github: ssh key 등록

어떤 컴퓨터에서 github에 접근하려면 미리 컴퓨터를 등록해야 한다. 자세한 과정은 GitHub: Generating SSH keys를 참고하자.

만약 이러한 등록을 미리 진행하지 않고 github에 접근하려고 하면

Permission denied (publickey).

라는 메시지와 함께 접근을 거부당하게 된다.

ssh -T git@github.com 라는 명령어를 통해 인증이 되었는지 아닌지를 확인할 수 있다.

$ ssh -T git@github.com
Hi khanrc! You've successfully authenticated, but GitHub does not provide shell access.

인증이 되면 이렇게 반갑게 맞아준다.

참고로 ssh -vT git@github.com 를 사용하면 인증 과정도 볼 수 있는 것 같다.

참고

GitHub: Generating SSH keys
GitHub: SSH
ssh키 사용에 대한 상세한 안내가 되어 있다. 영어 문서라 가슴아프지만 가능하면 읽어보도록 하자.

'그 외/Tech' 카테고리의 다른 글

git tracking list에서 파일 제거하기  (0) 2015.07.08
LLVM on AOSABOOK  (0) 2015.04.26
github: ssh key 등록  (0) 2014.10.07
Git!  (0) 2014.10.03
cURL!  (0) 2014.09.22
검색엔진 (2) - 라이브러리: Lucene, Solr, Elasticsearch  (1) 2014.08.26

Git!

Git!

깃에 대해 오래전부터 알고는 있었고, 몇 번 써보려고도 했지만 잘 안 됐다. 최근에 좀 쓰면서 공부하고 정리하려고 했는데 깃은 워낙에 잘 되어 있는 문서들이 많아서 굳이 내가 정리 할 필요도 없고 정리해봐야 퀄리티가 떨어져서 의미가 없을 것 같아 포기했다. 대신, 그런 좋은 문서들을 모아 정리하기로 한다.

git이 뭔가요?

[슬라이드] 버전관리를 들어본 적 없는 사람들을 위한 DVCS-Git
제목 그대로 버전관리라는 것을 처음 접하는 사람들을 위한 슬라이드.

git을 해보고 싶어요

git - 간편 안내서
심플하고 예쁘게 깃을 소개한다. 깃에 입문하는 사람이라면 꼭 보도록 하자.

git에 대해 더 알고 싶어요

CodeSchool: tryGit
github가 스폰하고 codeschool이 만든 깃 학습 사이트. 한글이 아니라는 점이 아쉽지만 영어가 길지 않고 따라하면서 배우는 시스템이기 때문에 큰 무리가 없다.

Git 브랜치 배우기
git의 꽃이라고 하는 브랜치에 대해 시각적으로, 능동적으로 학습할 수 있도록 도와주는 페이지다. 아래 페이지와 함께 직접 코드를 쳐 가며 학습할 수 있다는 것이 큰 장점.

A Visual Git Reference
꽤나 알록달록한 그림을 동원하여 설명한다. 그럼에도 불구하고 한눈에 들어오지는 않지만, 충분히 잘 정리되어 있는 페이지다. 깃에 대해 더 공부하고 싶은데, 잠시 시간을 투자하여 읽을만한 페이지를 찾는다면 안성맞춤일 것이다.

git 튜토리얼 메뉴얼 페이지
위 페이지가 깃의 각 명령어에 대해 이미지와 함께 개념을 설명해 준다면, 이 페이지는 실제로 깃을 사용할 때 어떤식으로 사용하는지에 대해 잘 보여준다. 깃을 바로 사용하고 싶다면 한번 쭉 훑어보면 좋다.

Git 명령어 정리
깃의 각 명령어에 대해 잘 정리되어 있다. 깃을 공부할 때 명령어들이 정확히 어떤 역할인 지 궁금할때가 있곤 한데 그럴때마다 찾아보기에 적합하다.

I want more!

book

pro Git
깃은, 심지어 책도 있다. 프로깃이라고 유명한 책인데, 이 책을 다 보면 좋겠지만 그러지 않더라도 틈날 때 찾아보면서 참고하기에 유용하다.

extension

git-flow는 특별한 브랜칭 모델을 위한 깃의 확장이다. Vincent Driessen이라는 사람의 브랜칭 모델인데, “feature – develop – release – hotfixes – master” 단계로 branch를 나눠서 코드를 관리하는 전략이다. 이러한 브랜치 모델에 동의하고, 필요성을 느낀다면 이 확장을 고려해봄직 하다.

git-flow cheatsheet
[Review] gitflow, 쉬운 git branch 관리

GUI Tool

SourceTree
이외에도 몇몇 앱이 있지만 거의 소스트리가 천하통일 했다고 봐도 무방하지 않나 싶다.

'그 외/Tech' 카테고리의 다른 글

LLVM on AOSABOOK  (0) 2015.04.26
github: ssh key 등록  (0) 2014.10.07
Git!  (0) 2014.10.03
cURL!  (0) 2014.09.22
검색엔진 (2) - 라이브러리: Lucene, Solr, Elasticsearch  (1) 2014.08.26
검색엔진 (1) - 검색엔진의 이해  (2) 2014.08.26

cURL!

cURL!

예전에 학교 프로젝트로 졸업조건 체크 프로젝트를 진행 할 때였다. 지금은 좀 발전했지만 당시만 해도 우리 학교는 자동화된 졸업조건 체크 서비스가 없었고 다들 수기로 진행했었다. 그래서 자신이 들은 수업들을 입력하면 자동으로 졸업조건을 체크해주는 프로젝트를 했었는데, 이걸 일일이 입력하려니 귀찮은게 매한가지라 학교 포탈의 아이디와 비밀번호를 입력하면 자동으로 성적표를 긁어와서 넣어주는 프로세스를 넣기로 했다. 이게 문제였는데 학교 홈페이지가 iframe으로 감싸져 있어서 이 과정이 쉽지가 않았던 것. 이 때 아는 형에게 도움! 을 요청했더니 코드 몇줄로 뚝딱 해결해 주었는데 그 당시에 이 형이 사용했던 것이 바로 php-libcurl이었다. 그 당시의 나에겐 정말 신세계 같았고, 사실 지금도 신기하다. 어떻게 한거지.

아무튼 그때부터 curl에 대한 환상이 생겨, 공부해야 겠다는 생각을 계속 해 왔다. 이번에 백엔드 프로젝트를 진행하게 되었고 api테스트를 위해 curl이 필요한 바, 이 기회에 공부하기로 한다.

근데 정작 쓰려니 별 공부 필요 없는 것 같다.

cURL이란?

다양한 프로토콜로 데이터 전송을 지원하는 CLI1 및 라이브러리다. REST API 테스트를 위해 많이 사용한다.

사용법

GET

curl http://www.joinc.co.kr
curl http://www.joinc.co.kr?action=del&id=12345
curl -i http://www.joinc.co.kr
  • method 명시 없이 그냥 쓰면 GET이다.
  • -i : 헤더 + 바디 가져오기
  • -I : 헤더만 가져오기

-I는 좀 느리다. 왜지?

POST

curl -X POST \
  -H "X-Parse-Application-Id: parse-app-id" \
  -H "X-Parse-REST-API-Key: parse-api-key" \
  -H "Content-Type: application/json" \
  -d '{"score":1337,"playerName":"Sean Plott","cheatMode":false}' \
  https://api.parse.com/1/classes/GameScore
  • -X : method
  • -H : http header
  • -d : http POST data. 이 옵션을 주면 method가 자동으로 POST로 지정된다.

JSON

curl -X POST \
  -H "X-Parse-Application-Id: parse-app-id" \
  -H "X-Parse-REST-API-Key: parse-api-key" \
  -H "Content-Type: application/json" \
  -d '{
        "requests": [
          {
            "method": "POST",
            "path": "/1/classes/GameScore",
            "body": {
              "score": 1337,
              "playerName": "Sean Plott"
            }
          },
          {
            "method": "POST",
            "path": "/1/classes/GameScore",
            "body": {
              "score": 1338,
              "playerName": "ZeroCool"
            }
          }
        ]
      }' \
  https://api.parse.com/1/batch

이렇게 JSON도 보낼 수 있다. 생각해보면 당연히 String이니까 보낼수 있음.

File Upload

curl -F upload=@dump.tar.gz \
     -F "username=yundream" http://www.joinc.co.kr/curltest.php

@는 파일을 의미한다.

User-Agent

반응형 웹 페이지라던가, 크롤러를 만들 경우 user-agent 설정을 통한 테스트가 필요하다. —user-agent 옵션을 이용해서 user agent 값을 변경할 수 있다.

curl --user-agent "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" http://www.joinc.co.kr

-A = --user-agent

옵션이 너무 많아서 다 정리할 수는 없고, 그때그때 찾아보도록 하자. 실질적으로 REST API를 테스트하는 데에는 그리 많은 옵션이 필요하진 않을 것이다.

참고

cURL 공식 튜토리얼 : 당연히 영문
CURL 사용법
joinc CURL
curl 설치 및 사용법 - HTTP GET/POST, REST API 연계등 : 추천
Parse.com REST API Document


  1. Command Line Interface.

'그 외/Tech' 카테고리의 다른 글

github: ssh key 등록  (0) 2014.10.07
Git!  (0) 2014.10.03
cURL!  (0) 2014.09.22
검색엔진 (2) - 라이브러리: Lucene, Solr, Elasticsearch  (1) 2014.08.26
검색엔진 (1) - 검색엔진의 이해  (2) 2014.08.26
인터프리터와 바이트코드  (0) 2014.08.19

검색엔진 (2) - 라이브러리: Lucene, Solr, Elasticsearch

검색엔진 라이브러리

검색엔진 라이브러리에 대해 알아본다. lucene, solr, elasticsearch.

Lucene

검색이야기 with Lucene, solr

검색 프로세스는 기본적으로

  1. 데이터 수집(웹 스파이더링) - 50%
  2. 데이터 인덱싱 - 40%
  3. 데이터 검색 - 10%

로 나뉘어진다.

루씬은 이 과정에서 인덱싱과 검색의 API를 제공하는 코어 엔진이다. 원래 Java로 개발되었으며 현재는 Perl, Python, C++, php 등 다양한 언어로 포팅되어 있다.

참고

한국어

최근 lucene-Korean-Analyzer 프로젝트의 근황
루씬기반인 한국어 형태소분석기를 제공하는 다봇
역시 오픈소스 라이브러리를 이용하여 프로젝트를 하려면 항상 한국어가 걸림돌이다. 위 링크를 참고하자.

스핑크스(Sphinx)

검색엔진 루씬(Lucene)과 스핑크스(Sphinx) 소개
검색엔진 스핑크스 Sphinx 도입
Sphinx 사소한 팁 몇가지
스핑크스. 루씬보다 빠르고, 적용이 간단하다고 한다.

Solr

Joinc: Solr로 로컬 검색서비스 만들기
루씬을 한번 더 래핑한 오픈소스. 인덱싱과 검색은 루씬엔진을 사용하고, http 통신 및 관리툴을 제공한다.

참고
[SOLR 강좌] SOLR 소개
Ubuntu install SOLR KOR(SOLR 설치하기 한글 형태소분석기)

Elasticsearch

elasticsearch로 로그 검색 시스템 만들기
솔라와 마찬가지로 루씬 기반의 검색엔진. 멘토님의 말씀도 그렇고 전반적으로 솔라가 더 평가가 좋은 듯 싶다.

Solr vs Elasticsearch

Solr vs ElasticSearch : 무려 6개의 포스팅으로 구성된 장문의 글.
Solr vs. ElasticSearch : 스택오버플로. 당연히 영어!
System Properties Comparison Elasticsearch vs. Solr vs. Sphinx

'그 외/Tech' 카테고리의 다른 글

Git!  (0) 2014.10.03
cURL!  (0) 2014.09.22
검색엔진 (2) - 라이브러리: Lucene, Solr, Elasticsearch  (1) 2014.08.26
검색엔진 (1) - 검색엔진의 이해  (2) 2014.08.26
인터프리터와 바이트코드  (0) 2014.08.19
공인 IP와 사설 IP 그리고 고정/유동 IP  (0) 2014.08.13

검색엔진 (1) - 검색엔진의 이해

검색엔진의 이해

소프트웨어 마에스트로 오우택 멘토님 수업
디테일한 내용들은 따로 검색하도록 하자.

용어

  • 쿼리 Q(“”)
  • Document : 하나의 (웹)페이지.
  • Collection : 도큐먼트의 집합
  • IR : Information Retrieval, 정보 검색.
  • Terms : 단어
  • Index
  • Log : 수학의 로그. 로그의 특성을 검색엔진에서 활용한다 (노멀라이징)
  • Measure
  • Word Count : 검색엔진에서 가장 많이 하는 작업. 가장 쉬운 문서 계량화 방법.

일반적인 검색 과정

  • Web Spidering : 웹 스파이더를 돌려서 컬랙션을 만든다
  • Indexing : 검색을 위한 인덱싱
  • Searching : 쿼리가 들어오면 쿼리 엔진을 돌려서 결과를 리턴.

Web Spidering

웹 크롤러

크롤링 - 파싱 - 저장
큐 / 스케줄러

크롤러의 고민들

  • 최신성 유지, Deadlink 검출
  • 복잡한 html 문서에서 컨텐츠 찾기 : 휴리스틱 + 머신 러닝
    • 해당 사이트에서 보일러플레이트1가 아닌 계속 바뀌는 부분을 학습 -> 컨텐츠!
      컨텐츠 내에서 타이틀/본문 등의 구분은 길이로 한다.
      방법중 하나!
  • 우선순위 정하기
  • 트래픽 관리 - 중복 URL 피하기. 네트워크 이용이 곧 돈이므로 줄여야 한다!
  • Robots.txt2 규약 지키기
  • 효율적 분산 저장
  • 문서 형식 변환 : 크롤링 하는 웹 문서들의 형식이 다양하다. pdf, 워드, 한글 등등…

Text Extraction

  • 문서 구조 분석
  • 문장 부호 및 공백 등 불필요한 문자 제거
  • 문장 및 형태소 분석 : 문장의 조사, 품사 등을 분석한다. 컬랙션에 따라 형태소 분석도 조금씩 달라짐.
  • stopword 제거 : stopword란 전치사, 관사, 조사 등 주제색인어로서 의미가 없는 단어들이다. 즉 검색할 때 무시함.
  • stemming : 어간3 추출
    • 보다, 보니 보고 -> 보-
    • 먹다 먹니 먹고 -> 먹-
    • stemmer, stemming, stemmed -> stem
    • fishing, fished, fisher -> fish
    • argue, argued, arguing, argus -> argu(단어의 원형과 일치하지 않는 경우)
  • 동의어 처리 : 오토 + 수작업. 사전 구축을 해야한다. 램프, 렘프, lamp 뭐 이런것들.
  • 색인 생성

Indexing

Inverted Index

TF-IDF. 텀 프리퀀시와 도큐먼트 프리퀀시.

인덱싱 과정의 어려움

  • 컬렉션이 너무 큼
    • 클라우드 컴퓨팅 -> 참조하는 값들이 여기저기 퍼져있다
    • 스케줄링
    • etc…
  • 형태소 분석기 : 신조어가 자꾸 나온다
  • 인덱스 업데이트는 얼마나 자주 해야 하는가?

Searching

Matching Process

Q(“blue sky”) : 인버티드 인덱스를 활용, 각 워드가 어느 도큐먼트에서 나왔는지 찾는다.
-> 그럼으로써 쿼리-도큐먼트간 연관성을 계산할 수 있다.
매칭!

Retrieval Model

매칭과 비슷하지만 이건 연관도가 높은 걸 찾는 작업

  • Boolean Model
  • Vector Space Model
  • Vector Model
  • Probability Model
  • Language Model

Ranking

Relevance Score로 정렬.

  • Relevance Score = {Similarity, Quality, Recency …}
  • Recency : 시간에 따라 점수가 낮아져야 한다. 감쇄 곡선 사용. 서비스, 컬렉션에 따라 감쇄 곡선이 달라진다.
  • Champion List : 명확한 답을 제시하는 term.

Result Display

검색엔진을 써 보면 타이틀도 뽑아서 보여주고, 검색한 키워드도 하이라이팅 해서 보여주고, 관련된 부분도 보여준다. 이러한 작업.

  • Passage 추출
  • Keyword Highlighting
  • Collection Ranking : 네이버에서 검색해 보면 검색어에 따라 노출되는 컬랙션이 다름.
  • Preview & Thumbnails : UX. 유저의 불필요한 클릭을 줄여준다.

Query

모든 유저가 훌륭한 쿼리를 날리는 것은 아니다. 훌륭하지 않은 쿼리에 대해서도 훌륭한 검색결과를 제공해야 한다.

  • 자동완성
  • 연관검색어
  • 실시간 인기검색어
  • 오탈자 교정
  • 질의 확장 : 한글검색 -> 영어 등 입력하지 않은 결과도 찾아준다
  • Query Reformulation

User Feedback

검색엔진을 개선하기 위해서 하는 작업들

  • Champion List 구축
  • User Behavior & Action
  • Clickstream Mining

=> 사용자들이 어떤 페이지를 선택하고, 어떤 페이지를 오래 보고. 또는 어떤건 잘 안누르고. 이런걸 분석한다.

Ranking

랭킹에 대해 좀 더 자세히 살펴보자.

PageRank

구글을 처음 만들 때 링크로 페이지의 점수를 계산했다. 지금은 링크가 많지 않지만 예전에는 검색엔진이 없어서 페이지끼리 전부 링크가 되어 있어서 매우 많았다.

P : 나를 링크하는 페이지 수
R : 나를 링크하는 페이지의 점수
L : 나를 링크하는 페이지의 외부링크 수
내 점수 = PR/L

즉 나를 링크하는 페이지가 많을수록, 그 페이지의 점수가 높을수록 점수가 올라가고 반대로 그 페이지의 외부링크가 많을수록 점수가 떨어진다.

Ranking Features

컨텐츠 퀄리티를 계산.

  • 소셜에서는 외부에서 링크한 사람들이 얼마나 영향력이 있는가
  • 이 페이지가 얼마나 오래 운영되었는가

등등을 참조.

SEO

Search Engine Optimization : 좋게 말하면 검색엔진 최적화.
정확하게는 검색 순위를 올려주고 돈을 받는 회사들. 즉, 어떻게 하면 검색엔진 상위에 랭크되는가를 분석한다.
랭킹 알고리즘의 품질이란 올바른 내용이 올바른 순위에 나오도록 하는 일. 즉 SEO는 랭킹 알고리즘의 품질에 반하는 일이다. 랭킹 알고리즘은 끝없는 품질과의 싸움.

Edge Rank

이러한 랭킹 알고리즘들은 검색 밖에서도 ‘평가’를 위해 사용한다. 그중에서도 대표적인게 페이스북에서 사용하는 Edge Rank다.

  • User Action
    • Share, Comment, Likes, Clicks
  • Edge Rank
    • Affinity : 관계 점수. 교류가 없는 친구는 점점 안보인다.
    • Weight : 글의 종류나 유저 액션. 즉 내가 평소에 이미지만 보는가. 어떤 종류의 글을 좋아하는가.
    • Time : Decay Function (감쇄곡선)
  • Story Bumping
    • 사용자가 미처 확인하지 못한 친구글 Boost UP!
  • Last Actor
    • 최근 친구글 중 인기글 Boost UP!

Evaluation

그럼 검색결과를 어떻게 평가할까? 정답이 없는 문제.

Measure
  • Recall & Precision
    • Recall : 나와야 할 문서가 얼마나 나왔는가.
    • Precision : 나온 문서들 중 정확한 문서는 얼마나인가.
      둘다 높은 게 이상적이지만, 현실적으론 Recall이 올라갈수록 Precision이 떨어진다.
  • F Measure
TREC

Text REtrieval Conference. 정부 문서 따위의 공식 문서들을 활용한 정답 셋이다. 이걸 활용해서 Measure한다. 문제는 한국어 자료는 없어서 직접 만들어야 한다.

내부 아키텍쳐는?

  • B+트리 등을 사용해서 최선의 인덱싱을 한다.
  • 서버와 프로그램을 거의 일치시킨다. 즉 하이퍼바이저-OS-프로그램 등의 이런 레이어를 최대한 제거.

  1. boilerplate. 재사용 가능한 부분을 의미. 일종의 템플릿이라고 생각할 수 있다.

  2. 사이트 제작자가 사이트 내에서 어떤 URL은 접근해도 되고 어떤 URL은 접근하면 안 되는지 적어 놓은 문서. 강제성은 없지만 지키는게 매너.

  3. 동사, 형용사, 서술격 주사 등에서 변하지 않는 줄기 부분


'그 외/Tech' 카테고리의 다른 글

Git!  (0) 2014.10.03
cURL!  (0) 2014.09.22
검색엔진 (2) - 라이브러리: Lucene, Solr, Elasticsearch  (1) 2014.08.26
검색엔진 (1) - 검색엔진의 이해  (2) 2014.08.26
인터프리터와 바이트코드  (0) 2014.08.19
공인 IP와 사설 IP 그리고 고정/유동 IP  (0) 2014.08.13

인터프리터와 바이트코드

인터프리터와 바이트코드

컴파일 과정
C 언어 컴파일 과정
C나 C++은 컴파일 언어다. 즉, 코딩을 하고 실행을 하면 컴파일러가 소스코드를 컴파일해서 어셈블리로 변환하고 어셈블러가 이걸 기계어로 변환한다. 자세히는 위 링크를 참조.

반면 스크립트 언어, 즉 인터프리터 언어1는 변수의 타입 등이 동적으로 결정되기 때문에 한줄한줄 실행한다. 따라서 컴파일 언어에 비해 속도가 느리다.

여기까지가 기본적인 상식일텐데, 여기서 애매하게 중간에 들어있는게 있으니 바로 바이트코드다. 자바를 다루는 사람이라면 익숙한 개념일 테고, 요즘엔 자바가 C를 넘어서 국민 랭귀지에 가까우니 다들 잘 알겠지만 나는 자바를 잘 몰라서 이참에 정리해 보기로 했다.

바이트코드

어셈블리는 하드웨어 종속적이다. CPU마다 기계어가 다르고, 따라서 기계어에 대응하는 어셈블리도 CPU마다 달라진다. 즉, 컴파일러를 만든다는 것은 CPU 종류별로 대응해야 한다는 것을 의미한다2. 당연히 이건 매우 귀찮고 오랜 시간이 필요한 일이다. 그래서 등장한 것이 어셈블리와 소스코드의 중간 코드인 바이트코드다.

자바 바이트코드의 이해
바이트코드는 인터프리터 언어다. 그리고 소스코드에서 바이트코드로 변환하는 과정은 컴파일이다. 자바를 말할 때 컴파일 언어다 인터프리터 언어다 왔다갔다 하는 것은 이 때문이다. 바이트코드로 한번 변환하기 때문에 인터프리터 언어보다 퍼포먼스가 우수하면서도 인터프리터 언어의 특징을 그대로 가져갈 수 있다.

여기에 퍼포먼스 향상을 위해 한 발짝 더 나아간 개념이 JIT 컴파일러다. Just-In-Time의 줄임말로 인터프리터의 실행 과정에서 반복적으로 실행되는 부분을 컴파일하여 퍼포먼스를 향상시킨다.

이러한 일련의 과정들을 통해 최근 비약적으로 향상되어 C보다 빠르다는 소리도 나오는 자바 퍼포먼스의 형태를 어렴풋이 알 수 있겠다.

파이썬과 루비

파이썬도 바이트코드를 생성한다. pyc파일이 바로 파이썬 바이트코드 파일이다. 맥 파일 종류에도 Python Bytecode Document라고 되어 있다.

루비도 마찬가지. 루비 1.9.0버전에 YARV(Yet Another Ruby VM)이 포함되어 있다. 기존 루비의 퍼포먼스 개선을 위해 만들어진 바이트코드 인터프리터.


  1. 컴파일 언어와 스크립트 언어, 인터프리터 언어라는 명칭은 좀 애매하다. 컴파일러 언어라고 하지 않고 컴파일 언어라고 하는데 인터프리트 언어라고 하지 않고 인터프리터 언어라고 한다. 스크립트와 컴파일도 대비되는 개념이 아니며 스크립트와 인터프리터도 상등하는 개념이 아니다. 하지만 우리나라에서는 대부분 컴파일 언어 / 스크립트 언어, 인터프리터 언어로 구분하는 듯 하며 이 포스팅에서도 그렇게 사용하기로 한다.

  2. 사실 잘 모른다 -_-. 아마 그럴 거다. gcc를 다운받을 때 cpu마다 종류가 다르다고 한다.

'그 외/Tech' 카테고리의 다른 글

Git!  (0) 2014.10.03
cURL!  (0) 2014.09.22
검색엔진 (2) - 라이브러리: Lucene, Solr, Elasticsearch  (1) 2014.08.26
검색엔진 (1) - 검색엔진의 이해  (2) 2014.08.26
인터프리터와 바이트코드  (0) 2014.08.19
공인 IP와 사설 IP 그리고 고정/유동 IP  (0) 2014.08.13

공인 IP와 사설 IP 그리고 고정/유동 IP

공인 IP와 사설 IP 그리고 고정/유동 IP

공인 IP 주소

진짜 IP 주소라고 할 수 있다.

ICANN이라는 기관이 세계적으로 국가별 IP 주소를 관리하고, 우리나라는 인터넷 진흥원(KISA)에서 국내 IP 주소들을 관리한다.

사설 IP 주소

전체 IP 주소 대역 중에서 특수한 목적을 위해 몇 개의 대역을 제외하고 공인 IP 주소로 할당하고 있다. 그 몇 개의 대역을 사설 IP로 사용할 수 있다.

  • A 클래스 : 10.0.0.0 ~ 10.255.255.255
  • B 클래스 : 172.16.0.0 ~ 172.31.255.255
  • C 클래스 : 192.168.0.0 ~ 192.168.255.255

이 3개의 대역이 사설 IP로, 사용자가 임의로 부여할 수 있지만 인터넷 상에서 서로 연결되지 않는다.

아래 그림과 같이 일반적으로 공유기를 사용할 때 이 사설 IP가 이용된다.

공인IP와 사설IP

고정 IP와 유동 IP

IP 주소가 부족하기 때문에 유동 IP를 활용한다. 컴퓨터가 20대고 갖고 있는 IP 주소가 10개라면 고정 IP로 할당하면 10대만 인터넷을 할 수 있지만 유동 아이피를 사용하면 20대 전부 인터넷이 가능하다. 물론, 동시에 인터넷을 하려면 10대가 최대.

결론

우리가 보통 공유기를 통해서 인터넷을 할 때는 기본적으로 유동 IP와 사설 IP라 할 수 있다. 반면 인터넷에 홈페이지를 개설한다던가 서버를 만든다던가 하려면 고정 IP와 공인 IP가 필요하다.



참조
공인 IP, 사설 IP, 고정 IP, 유동 IP

'그 외/Tech' 카테고리의 다른 글

Git!  (0) 2014.10.03
cURL!  (0) 2014.09.22
검색엔진 (2) - 라이브러리: Lucene, Solr, Elasticsearch  (1) 2014.08.26
검색엔진 (1) - 검색엔진의 이해  (2) 2014.08.26
인터프리터와 바이트코드  (0) 2014.08.19
공인 IP와 사설 IP 그리고 고정/유동 IP  (0) 2014.08.13