hosts

hosts 파일은 운영 체제가 호스트 이름을 IP 주소에 매핑할 때 사용하는 컴퓨터 파일입니다.

즉, hosts 파일에 등록해둔 IP와 호스트 이름이 있다면 해당 호스트 이름으로 접근을 할 때 매핑 해둔 IP 주소로 접근을 하게 됩니다.

브라우저가 도메인에 해당하는 IP를 찾는 순서

  1. local cache를 검색한다.

  2. hosts 파일을 검색한다.

  3. 도메인 네임서버을 검색한다.


리눅스의 경우 아래와 같이 접근 가능합니다.

sudo vi /etc/hosts

hosts_before

보시는 바와 같이 자주 사용하는 localhost 또한 등록이 되어 있습니다.

일단 확인 차원에서 8.8.8.8test1이라는 이름으로 등록을 해봅니다.

hosts_test

test1로 등록해 둔 IP로 접근을 하는 걸 볼 수 있습니다.


자, 그럼 이를 활용하여 할 수 있는 다른 작업을 해 봅시다.

Elastic IP로 고정 아이피로 설정해뒀지만 자신의 EC2에 접근할 때 매번 IP를 이용한다는 게 번거로운 게 사실입니다.

이 번거로운 작업을 hosts 파일에 Elastic IP와 호스트 이름을 매핑 함으로 해결할 수 있습니다.
(ec2에 Elastic IP 부여 하는 법)

hosts_after

아주 간단하게도

위의 xxx.xxx.xxx.xxx에 자신의 Elastic IP를 등록해 두면

hosts_end

자신이 정한 호스트 이름으로 이렇게 쉽게 접근이 가능합니다.

저야 하나의 ec2 인스턴스를 가지고 있어서 myec2라는 이름을 등록해뒀지만

여러 개의 ec2를 가지고 있다면 각각의 ec2에 해당하는 이름을 부여하면 됩니다.


참고 자료

위키백과

생활코딩의 hosts 파일

zetawiki

12일 한일

- 기초적인 개념들 정리중

12일 느낀점

  • 개념들을 정리하면서 인터넷 자료들을 보다 보면 포스팅을 잘한 블로그들이 보이는데 차후 블로그를 통해 어떻게 포스팅을 할지 도움이 많이 되는 것 같다. 지속적인 개발 공부도 공부지만 하고 싶은 것들이 많아지는 것 같다. 그중 제한시간을 둔 목표가 올해 안에 국내 오픈소스 프로젝트인 스카우터 혹은 올챙이에 작게는 오타 수정, 가능하다면 일정 부분 리팩토링으로 컨트리뷰터가 되는 거다. 아무래도 현재 및 한동안은 내가 책임져야 할 일들이 있을 테니 하반기 안에는 꼭 이뤄보자.

13일 한일

- 기초적인 개념들 정리중

13일 느낀점

  • 구정 때 무슨 공부를 할까 생각 좀 해봤는데 학습한 내용들 정리 혹은 자바스크립트를 공부하는 것 둘 중 하나를 중점적으로 해야겠다.

14일 한일

- 면접

- 오랜만에 친구들 보러 가기

14일 느낀점

  • 하고 싶은 말들은 다 한 것 같은데 너무 한 것 같기도 하고.. 뭐 아무 말 못하고 나오는 것보다는 속이 후련하니 미련은 없다. 근데 백엔드를 공부하고 해당 직무로는 첫 면접이다 보니 아직 내가 학습 한 것들을 말로 풀어 설명하는 건 잘 안된 느낌인데, 사실 말로 설명을 못 한다는 게 아직은 부족하다는 말이 있는데 조금은 분하지만 그게 일정 부분 사실이니 겸허히 받아들여야지…

    덤으로 생각해보면 vim에 대해서는 익숙지 않는 분들에 비해서는 진짜 기초적인 부분에 대해서는 사용 가능하니 자만을 하고 있었던 것 같은데… 구정 때 간단한 책이지만 “손에 잡히는 vim”이라는 책 좀 봐야겠다. 너무 건방지게 자만했던 것 같아서 겸손하게 학습을 해봐야겠다.


15일 한일

- TravisCI & AWS CodeDeploy로 배포 자동화 구축하기

  • 창천향로님의 여기를 참조하여 진행 해봄

15일 느낀점

  • 몇 가지 이유 때문에 안 좋은 줄 알지만 master 브랜치에서 배포를 안 하고 다른 브랜치에서 배포를 하게 구축하고 있었는데 그 점 때문에 몇 가지가 꼬여서 꽤나 시간을 허비 한 것 같다. 대신이긴 하지만 그렇게 꼬이고 해결하는 시간 덕분에 유의해야 할 부분들을 조금은 더 알게 되는 장점 아닌 장점이 있긴 했다. 실습한 과정을 포스팅할까 싶었지만 창천 향로님의 글이 너무 잘 되어 있어서 일부 요약되기만 할 것 같아 패스해야겠다. 덤으로 소액이긴 해도 한두 번 과금 된 경험이 있다 보니 왠지 실습할 때 쫄리긴 한다…

  • 사실 귀찮다는 이유 롤 root 계정으로 aws를 사용하고 있었는데(그나마 otp를 이용한 로그인은 하고 있었다) 이번에 배포 관련 계정을 추가하면서 든 생각이 역시 ec2 인스턴스만 관리하는 계정을 추가해야겠다는 점이었다. 아무리 생각해도 ec2 인스턴스를 사용하려고 root 계정으로 로그인하는 건 좀 아니었던 것 같다….


16일 한일

- 스프링부트로 웹 서비스 출시하기 - 7. Nginx를 활용한 무중단 배포 구축하기

  • 창천향로님의 을 참조하여 진행 해봄

- hosts 파일에 대한 간단한 포스팅

16일 느낀점

  • 어제 TravisCI도 그랬지만 오늘 Nginx도 사용해 보는 건 생각보다는 어렵진 않았다. 이전엔 왜 막연히 겁을 먹었나 모르겠다. 당연히 적용하면서 좀 고생은 했지만…

    사실 가능하면 무중단 배포까지 해 보려고 했는데 과금의 요소와 Nginx를 적용 한 부분에 대해서 간단하지만 포스팅을 해보려고 글을 작성하다 보니 진행은 못해봤는데 주말에 진행을 해보거나 이번 연휴가 끝나고 시간적 여유가 어떻게 되나 파악 좀 한 다음 보류를 해야 할 수도 있을 것 같다.(만약 실습을 진행 못 한다면 아쉽긴 하겠지만 이론 상으로는 무엇을 한다는 것인진 알겠으니까…)


17일 한일

- 손에 잡히는 Vim 보는 중

- 인터넷 하면서 휴식

17일 느낀점

  • 책을 좀 보긴 했지만 오늘은 왠지 잘 안 읽히는 느낌이라 오랜만에 좀 쉬는 느낌으로 인터넷 서핑을 한 것 같다. OKKY도 존재는 알고 있었고 어쩌다 링크 타고 한두 번 보긴 했는데 이런저런 글을 많이 본 것 같다. 그러면서 여러 생각들도 하고ㅎㅎ

  • 2월 들어서 자소서랑 면접 등 취업과 관련된 활동만 하다가 구정 땐 쉬는 느낌으로 취업 생각은 잠시 미루고 해보고 싶었던 CI와 Nginx 환경을 구축해봤는데 생각보다 쉽게 돼서(따라 해 볼만한 좋은 글이 있었기 때문이지만) 오랜만에 고민 없이 즐기면서 작업을 한 것 같다.

    맹신하면 안 되지만 역시 자동화가 된다는 건 정말 편하다. CI 굳굳. 거기다 Nginx를 해보고 싶던 이유 중 하나가 물리적으로 떨어진 웹 서버 - WAS- DB 환경을 구축해 보고 싶었던 건데 목표에 한 걸음 더 다가간 것 같다. (일단 라즈베리 파이, 노트북, EC2 요렇게 세 개가 준비되어 있다. EC2를 세 개 쓰는 건 과금이 발생하니…) 더 공부해야 할 내용들이 보이지만 일단 다른 부분들도 신경 써야 하니 보류 중이다.

  • 오늘 쉬게 된 김에 Vim 책이 아니라 사두고 안 보고 있던 소설을 보다가 자야겠다.


18일 한일

- 휴식 및 코드스쿼드 수료생인 트램 만남

18일 느낀점

  • 명절 때 안 쉬고 명절 때 좀 쉰 것 같다. Vim 책이나 이것저것 좀 더 할까 싶긴 했는데 쉴 땐 좀 셔야겠다는 생각이 들어서 어제오늘은 학습 느낌보다는 쉬는 느낌으로 가볍게 책을 보고 인터넷을 통해 읽을거리들을 봤다. 그리고 서점 좀 들렸다가 카페를 가는 길에 잠시 주말에 회사를 나온 트램한테 연락이 와서 저녁 식사랑 얘기를 좀 나눴다. 이런저런 얘기를 하면서 요즘 하던 고민도 덜어진 것 같고 트램도 잘(?) 지내는 것 같아 다행이었는데 오랜만에 반가운 사람도 만나고 덕분에 잘 쉰 것 같다. 연휴 중 이틀 잘 쉬었으니 쉰 보람(?)도 느끼게 내일부터 다시 공부를 해야겠다.(손에 잡히는 Vim을 읽다 잘지 어제 읽던 소설을 마저 볼지 고민 중이다)
Dynamic Programming(6)

인프런의 영리한 프로그래밍을 위한 알고리즘 강좌를 보고 작성한 문서입니다.


Knapsack Problem

  • n개의 아이템과 배낭

  • 각각의 아이템은 무게 Wi와 가격 Vi를 가짐

  • 배낭의 용량 W

  • 목적: 배낭의 용량을 초과하지 않으면서 가격이 최대가 되는 부분집합

  • 예 :

    Knapsack 예

    • {1, 2, 5}는 가격의 합이 35

    • {3, 4}는 가격의 합이 40

    • {3, 5}는 46이지만 배낭의 용량을 초과함


Greedy

Knapsack 예

가격이 높은 것 부터 선택

무게가 가벼운 것부터 선택

단위 무게당 가격이 높은것 부터 선택

순환식

  • OPT(i) : 아이템 1, 2, …, i로 얻을 수 있는 최대 이득

  • 경우 1: 아이테[ㅁ i를 선택하지 않는 경우
    • OPT(i) = OPT( i - 1 )
  • 경우 2: 아이템 i를 선택하는 경우
    • OPT(i) = ?
  • OPT( i, W) : 배난 용량이 W일 때 아이템 1, 2, …, i로 얻을 수 있는 최대 이득

  • 경우 1: 아이템 i를 선택하지 않는 경우
    • OPT( i, w ) OPT( i - 1, w )
  • 경우 2: 아이템 i를 선택하는 경우
    • OPT(i) = OPT( i - 1, w - wi )

knapsack_순환식
Knapsack Bottom Up
Knapsack 예2

시간복잡도 O(nW)

Dynamic Programming(5)

인프런의 영리한 프로그래밍을 위한 알고리즘 강좌를 보고 작성한 문서입니다.


Longest Common Subsequence(LCS)

  • <bcdb>는 문자열 <abcbdab>의 subsequence이다.

  • <bca>는 문자열 <abcbdab>와 <bdcaba>의 commonsubsequence이다.

  • Longest common subsequence(LCS)

    • common subsequence들 중 가장 긴 것

    • <bcba>는 <abcbdab>와 <bdcaba>의 LCS이다


Optimal_Substructure

Optimal Substructure

순환식

Optimal_Substructure_순환식
Optimal_Substructure_순환식2

Optimal_Substructure_예

int lcs( int m, int n ){
  for ( int i = 0; i <= m; i++ )
    c[i][0] = 0;
  for ( int j = 0; j <= n; j++ )
    c[0][j] = 0;
  for ( int i = 0; i <= m; i++) {
    for ( int j = 0; j <= n; j++ ) {
      if ( x[i] == y[j] )
        c[i][j] = c[i-1][j-1] + 1;
      else
        c[i][j] = Math.max( c[i - 1][j], c[i][ j - 1]);
    }
  }
  return c[m][n];
}

시간복잡도 : θ(mn)

Dynamic Programming(4)

인프런의 영리한 프로그래밍을 위한 알고리즘 강좌를 보고 작성한 문서입니다.


Matrix-Chain Multiplication


행렬의 곱셈

  • pxq 행렬 A와 qxr 행렬 B 곱하기

    void product( int A[][], int B[][], int C[][] ) {
      for ( int i = 0; i < p; i++ ) {
        for (int j = 0; j < r; j++ ) {
          C[i][j] = 0;
          for ( int k = 0; k < q; k++)
            C[i][j] += A[i][k] * B[k][j];
        }
      }
    }
    

    곱셈연산의 횟수 = pqr

Matrix-Chain 곱하기

  • 행렬 A는 10x100, B는 100x5, C는 5x50

  • 세 행렬의 곱 ABC는 두 가지 방법으로 계산가능 (결합법칙이 성립)
    • (AB)C : 7,500번의 곱셈이 필요 ( 10x100x5 + 10x5x50 )
    • A(BC) : 75,000번의 곱셈이 필요 ( 100x5x50 + 10x100x50 )
  • 즉 곱하는 순서에 따라서 연산량이 다름

  • n개의 행렬의 곱 A1A2A3…An을 계산하는 최적의 순서는?

  • 여기서 Ai는 Pk-1 x Pk 행렬이다.

동적계획법

동적계획법_순환식

계산순서

동적계산법_계산순서

int matrixChain( int n ){
  for ( int i = 1; i <= n; i++ )
    m[i][i] = 0;

  for ( int r = 1; r <= n - 1; r++ ) {
    for ( int i = 1; i <= n -r; i++ ) {
      int j = i +r;
      m[i][j] = m[i+1][j] + p[i-1] * p[i] * p[j];
      for( int k = i + 1; k <= j - 1; k++ ) {
        if ( m[i][j] > m[i][k] + m[k+1][j] + p[i-1] * p[k] * p[j])
        m[i][j] = m[i][k] + m[k+1][j] + p[i-1] * p[k] * p[j];
      }
    }
  }
}

시간 복잡도 : θ^3