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


출처: 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 로 실행)



- 기존 서버에서 푸시를 잘 보내고 있었는데 물리적 서버 이전 작업 후(IP 변경됨) 푸시가 안감

- 아래와 같은 오류 발생


java.net.UnknownHostException: fcm.googleapis.com

        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:178)

        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)

        at java.net.Socket.connect(Socket.java:579)

       ...


- URL 은 제대로 적었는데...??

- 서버 이전 후 본딩 적용 하면서 네트워크 설정이 변경됨

- '/etc/sysconfig/network-scripts/ifcfg-네트워크이름' 해당 파일에서 DNS 로 구글 추가해주면 해결



# vi /etc/sysconfig/network-scripts/ifcfg-네트워크이름

...

...

...

DNS1=8.8.8.8




출처: http://liveupdate.tistory.com/235 [Live Update]


파일위치

/etc/systemd  기본설정

/usr/lib/systemd : 바이너리

/usr/lib/systemd/system : 타겟유닛

 

부팅 시간 표시

# systemd-analyze

 

서비스별 초기화 시간

# systemd-analyze blame

 

서비스 목록 확인

# systemctl

 

전체 서비스

# systemctl list-unit-files

 

서비스 정보보기

# systemctl show sshd

 

서비스 제어

부팅시 활성화 여부

# systemctl disable 서비스명

# systemctl enable 서비스명

 

시작 중지

# systemctl start 서비스명

# systemctl stop 서비스명

# systemctl restart 서비스명

# systemctl reload 서비스명

# systemctl kill 서비스명

 

서비스 설정반영

# systemctl daemon-reload

 

의존성 파악

# systemctl list-dependencides 서비스명

 

systemd 서비스 추가

# vi /usr/lib/systemd/system/my.service

[Unit]

Description=서비스설명

After=svslog.target

After=network.target

 

[Service]

Type=forking

User=MyUser

Group=MyGroup

Restart=always

ExecStart=실행할 바이너리,스크립트

ExecStop=중지할 바이너리,스크립트

 

[Install]

WantedBy=multi-user.target

 

위처럼 작성  해당 서비스를 enable 시켜준다.

 



서비스 시작 중지시 권한문제 발생하는 경우가 있는데 루트 획득후 데몬을 재시작.

# systemctl daemon-reexec


하지만 이래도 안되는 경우가 발생. 

# setenforce 0


서비스 처리 후에 

# setenforce 1





서비스를 disable 했는데도 계속 보이면, 아예 리셋

# systemctl reset-failed



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

[CentOS 7] iptables 로그 남기기  (0) 2018.12.14
[FCM] 서버측 UnknownHostException  (0) 2018.10.01
크롤링 robots.txt 주의점  (0) 2018.09.19
[Linux] lsof  (0) 2018.09.17
리눅스 터미널 명령어 종류  (0) 2018.09.17

* 이슈 트래커 - 이슈 트래킹 시스템 (ITS = ISSUE TRACKING SYSTEM)

* 다른 단어로 버그 트래킹 시스템 이라고도 함


- 협업 규모가 커질수록 이슈 트래커의 필요성이 커짐.

- 있으면 좋다 (근데 익숙해지기 전까지는 불편할 수도)


[고려사항]

- 이슈 관리 시스템은 개발팀외에 다른 팀과 협업시에도 사용하게 되므로 편리하고 쉬운 사용을 제공하는 것이 매우 중요하다.

  사용법이 너무 복잡하거나 UI 가 미려하지 않거나 잘 사용하기 위해서는 마크업 언어를 배워햐 하는등의 진입 장벽이 있을 경우 참여를 꺼리게 되며 개발팀 전용 도구로 인식되거나 버그 관리 전문 시스템 등으로 용도가 한정될 수 있다.

- 타 제품으로의 변경이 어려우므로 수정 및 확장성이 좋아야 한다.

- 외부 API 또는 시스템과의 연계를 많이 지원해줄 수록 좋다.

  특히 버전관리 (SVN, Git) 등 과는 거의 필수로 연동되야하므로 꼭 확인해보자.

- 검색 및 리포팅 시스템이 좋은지 확인.

- 사용하는 인원에 대해 메뉴얼 또는 교육이 필요함.

- 만들어 놨는데... 안쓰면...? 어느정도 강제해서 문화로 만들 필요가 있음.


* 참고 문서

https://en.wikipedia.org/wiki/Comparison_of_issue-tracking_systems

https://blog.gaerae.com/2014/05/issue-tracking-system-bug-tracking-system.html

https://blog.gaerae.com/2015/03/comparison-of-revision-control-software.html

https://www.lesstif.com/pages/viewpage.action?pageId=18219528



1) Asana
- https://asana.com
- 간결하고 유연한 프레임워크를 특징으로 하는 부분 유료 이슈 트래커.

2) Bugzilla
- https://www.bugzilla.org/
- Mozilla public license
- 모질라 재단에서 만든 이슈 트래커.

3) Phabricator
- https://www.phacility.com/
- 예전 나무위키:이슈 트래커가 이것을 사용했었다. 페이스북에서 내부용으로 사용하던 툴을 공개한 것.

4) Redmine
- http://www.redmine.org/
- 오픈소스 GNU v2 (무료)
- 언어 : Ruby
- Ruby 기반의 무료 이슈 트래커. 나무위키가 이전에 사용했던 이슈 트래커가 여기에 해당된다.
화면이 단순하고 필요한 기능만 있으며 svn/git 등의 형상관리 연계도 가능하다.
생활코딩에 관련 강의가 나와있어서 참고해도 좋다.

5) JIRA
- https://ko.atlassian.com/software/jira
- 언어 : Java
- Atlassian에서 개발한 유료 이슈 트래커.
같은 회사에서 만든 프로젝트 위키 사이트인 Confluence와 함께 사용하면 시너지 효과가 있다.

6) YouTrack
- https://www.jetbrains.com/youtrack/
- IntelliJ IDEA를 만든 JetBrains에서 개발한 유료 이슈 트래커.

7) Visual Studio Team Services
- https://visualstudio.microsoft.com/ko/team-services/
- 마이크로소프트에서 개발한 유료 이슈 트래커.
- VSTS를 클라이언트 기반으로 옮긴 Team Foundation Server도 있는데,
기업이 직접 서버를 호스팅하고자 할 때 사용된다.
VSTS는 이슈 트래커뿐만 아니라 비공개 Git 레포지토리, 지속적 통합,
그리고 Atlassian의 Confluence와 유사한 프로젝트 위키를 통합 제공하는 일종의 턴키 솔루션이다.

8) Trello
- https://trello.com/
- 간결하고 개성 있는 UI가 특징인 부분유료 이슈 트래커.

9) Mantis
- https://www.mantisbt.org/
- 오픈소스 GNU v2 (무료)
- 언어 : PHP
- 나무위키:이슈 트래커가 사용하고 있었다. 사마귀 캐릭터가 그려진 로고가 특징이다.
설치는 비교적 간단하지만, 그만큼 기능이 많이 부족하다.
버그 트래킹 중심으로 개발되어 이슈 관리가 어렵다.

10) Yona
- https://yona.io/
- 오픈소스(무료)
- 언어 : Java
- 네이버 개발자들이 만든 이슈 트래커. 네이버에서 내부용으로 사용하던 버전을 수정 공개한 것이다.
네이버 개발자들이 만들었기에 한글 처리가 매끈하다.
오픈소스 수익 구조 등의 문제로 요비(Yobi) 프로젝트가 포크되어 요나(Yona)로 이어졌다.


11) GitHub
- https://github.com/
- 기본적으로는 Git 호스팅 사이트이지만, 이슈 트래커 기능도 제공한다.

12) GitLab
- https://gitlab.com/
- GitHub와 유사한 사이트로, 이슈 트래커 기능을 제공한다.

13) Trac
- http://trac.edgewall.org
- 오픈소스 BSD (무료)
- 언어 : Python
- 기본 기능에 충실하며 미니멀리즘을 따르지만, 설치가 복잡하다.
TOW 등을 이용하면 설치는 비교적 간단하다.


* 요나 써보고 싶음.

* https://github.com/yona-projects/yona/wiki

출처 : https://kimdoky.github.io/python/2017/06/14/python-robots.html



크롤러를 만들기 전에 알아야 할 사항

웹페이지의 내용을 가져 오는 것을 크롤링(Crawling) 또는 스크래핑(Scraping)이라고 합니다.
가져와야 할 페이지들이 많은 경우, 구글이나 네이버, 다음과 같은 검색 엔진 사이트들은 검색 속도를 높이기 위해 robot 이라는 프로그램을 만들어서 자동으로 웹 페이지들을 크롤링하는 방법을 사용합니다.

그런데 개인 정보가 들어있는 사이트들은 크롤링이 안 되도록 막고 싶을 수 있습니다. 그래서 무분별한 크롤링을 막고 제어하기 위해 1994년 6월에 로봇 배제 규약이 만들어졌습니다. 말 그대로 로봇이 수집을 못하게 막을 목적으로 만들어졌는데 로봇의 접근 관련 내용(크롤링 허가/불허의 여부)을 robots.txt라는 파일에 적어두는 방법입니다.

만약 크롤링하는 로봇 프로그램이 http://www.example.com의 웹 사이트를 방문할 경우 가장 먼저 http://www.example.com/robots.txt 파일을 찾게 됩니다.
그리고 robots.txt 파일이 있을 경우 파일을 읽어 그 내용을 분석해서 수집해도 되는 콘텐츠만 수집하고 허락이 안 된 내용은 수집하지 않습니다.
이 규약의 의도는 좋지만 강제 안이 아닌 권고 안이라서 접근 방지 설정을 하였다고 해도, 다른 사람들이 그 파일에 접근할 수 있습니다.

robots.txt 엔 아래와 같은 내용이 들어 있습니다.

User-agent: *  # 모든 로봇(robot)들에 적용합니다
Disallow: /  # 모든 페이지들의 색인(indexing)을 금지합니다

Uuser-agent : 접근을 허용하지 않을 로봇 이름을 설정합니다
Disallow : 허용하지 않을 항목에 대해 설정합니다
# 단 "Disallow"를 빈 값으로 설정할 경우, 모든 하위 경로에 대한 접근이 가능합니다
# 그리고 robots.txt 파일에는 최소한 한 개의 "Disallow" 필드(field)가 존재해야만 합니다
# 아래의 형식으로 사용됩니다
Disallow: /help   # /help.html 과 /help/index.html 둘 다 허용 안됩니다
Disallow: /help/  # /help/index.html는 허용 안하나, /help.html 은 허용됩니다

만약 특정 파일 확장자를 차단하는 방법은 robots.txt 파일에 아래의 내용을 추가하면 됩니다.

Disallow: /*.xml$  # 루트 하위에 있는 확장자가 xml인 모든 파일의 색인을 거부합니다
Disallow: /test.html?  # 루트 하위에 test.html과 ?가 포함된 파일의 색인을 거부합니다

위의 내용은 robots.txt 파일을 사용할 경우이지만 파일을 사용하지 않고 HTML 소스 코드안에 메타 태그를 사용하여 설정할 수도 있습니다.

<meta name="ROBOTS" content="속성"/>

content 항목의 속성 값으로는 다음의 6가지가 올 수 있습니다.

  • index : 해당 페이지 정보를 검색해서 등록하는 것을 허락합니다.
  • noindex : 해당 페이지 정보를 검색해서 등록하는 것을 허락하지 않습니다.
  • follow : 해당 페이지에 있는 링크를 추적하는 것을 허락합니다.
  • nofollow : 해당 페이지에 있는 링크를 추적하는 것을 허락하지 않습니다.
  • all : 해당 페이지의 정보를 검색해서 등록하고 해당 페이지에 있는 링크를 추적하는 것을 허락합니다.
  • none : 해당 페이지의 정보를 검색해서 등록하거나 해당 페이지에 있는 링크를 추적하는 것을 허락하지 않습니다.

만얃 여러 속성값을 동시에 지정하고자 할 때는 content=”noindex,nofollow”와 같이 쉼표로 구분하여 작성하면 되고 기본값은 “index,follow”입니다.

주의해야 할 점은 크롤링 해도 된다라고 해서 저작권 문제까지 자유로운 것은 아니라는 것입니다. 특히 신문기사나 책, 논문, 사진 등의 자료들은 저작권에 특별히 주의해야 합니다.

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

[FCM] 서버측 UnknownHostException  (0) 2018.10.01
[CentOS 7] systemd 기본 설정  (0) 2018.09.30
[Linux] lsof  (0) 2018.09.17
리눅스 터미널 명령어 종류  (0) 2018.09.17
[Linux] 포트 확인  (0) 2018.09.17

# repository

sudo yum -y update

sudo yum -y install epel-release


# curl, git, wget, python2.7

#sudo yum -y install curl git

sudo yum -y install wget


# docker

sudo yum -y install yum-utils device-mapper-persistent-data lvm2

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

sudo yum makecache fast

sudo yum -y install docker-ce


# docker-compose

sudo yum -y install python-pip

sudo pip install docker-compose

 

# docker-compose

#curl -L https://github.com/docker/compose/releases/download/1.14.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

#chmod +x /usr/local/bin/docker-compose


# docker

systemctl start docker

systemctl enable docker

+ Recent posts