2020년 9월 6일 일요일

맥북 프로 2017 13인치 배터리 자가 교체기

배터리 이슈 확인하기 까지


 언젠가부터 맥북의 트랙패드에서 진동 피드백이 약해지기 시작했습니다.

처음엔 OS 이슈로 생각하고 맥북을 재부팅하기 몇 번, 더이상의 시도는 의미없다 생각하고 그대로 사용하기로 했습니다.

최초 증상 발견시에는 진동이 아예 없는 건 아니고 약하게 있어서 OS업데이트 후에 진동 피드백 강도가 수정되었나 생각하고 적응을 했죠.

적응을 하며 몇 달을 사용하는데 가면 갈수록 맥북 온도도 높아지고 -특히 트랙패드 양옆 배터리 부분- 진동 피드백은 작은 소리만 들리기 시작했습니다.

이후 문제 심각성을 인지 후 외국 사이트를 뒤지다 배터리가 부풀면 트랙패드 진동 피드백이 약해질 수 있다는 글을 발견했고 잠시 후 하판을 뜯어 확인했습니다.

역시나 배터리가 살짝 부풀어 있더라구요.


배터리 구입하기


네이버에서 '맥북 프로 2017 13인치 배터리'를 검색하였으나 검색되는 건 2014~2015 배터리만 나와서 맥북 프로 2017 13인치 모델명은 'A1708 배터리'로 검색하니 바로 나오네요.

다행히 별 드라이버, 헤라 포함이라 다른 도구 사는 수고는 덜었습니다.

구입한 가격은 약 8.4만원에 배송은 목요일 오후에 결재하여 토요일에 받았습니다.


배터리 교체하기


맥북은 일반인이 매뉴얼 없이 부품 해체하기가 어려워서 유튜브에서 동영상을 찾아봤습니다.

검색어는 'macbook pro 2017 13inch replacement battery'로 검색을 했고 제일 위에 나오는 동영상을 참고했습니다.

동영상 링크: 맥북 프로 2017 13인치 배터리 교체 유튜브 영상

작업 시간은 약 1시간 정도 걸린 것 같아요.

배터리에 붙어있는 스티커 때문에 잘 떨어지지가 않으니 헤라로 힘을 주어서 여러번 긁어야 하더라구요.

이후 배터리를 뗀 후에도 헤라로 스티커 자국을 잘 제거해야 합니다.

스티커 자국을 다 뗀 후에는 새로 산 배터리를 맥북의 배터리 틀에 맞춰서 잘 끼우고 붙여주고 케이블을 원래대로 연결하면 끝입니다.


배터리 교체 후 확인


배터리 교체 후 새로운 배터리 용량, 사이클, 가용률을 확인했습니다.

다행히 새상품이고 양품인 것 같네요.

기존 애플 정품보다는 배터리 용량이 살짝 큰지 완충시 설계 용량대비 103%라고 하네요.

처음 충전시에는 100%로 나오네요.

이건 배터리 사이클 높이면서 좀 더 확인이 필요할 것 같아요.



마치며


맥북 프로 2017 13인치 배터리를 교체해봤는데 어려운 작업은 아니었습니다.

사설 수리 업체도 20정도는 하는 걸로 알고 있고 애플 서비스 센터는 더 비싼 걸로 알고 있는데 배터리 교체는 자가수리 난이도가 그렇게 높진 않은 편이니 저렴하게 직접 교체해보는 것도 좋을 것 같아요.

싸게 잘 교체했습니다.

2020년 8월 21일 금요일

Linux 각 프로필 별 용도

리눅스에는 프로필이라는 게 있습니다.

환경변수 등이 들어가는 파일인데요.

각 프로필 마다 용도가 다르니 필요에 따라 맞게 설정을 하여 사용해야 합니다.


/etc/profile : 모든 user에게 적용되는 환경설정 파일

~/.bash_profile : 개인 사용자용 환경 설정 파일로 일반 환경 설정을 확장하거나 무시 가능

~/.bash_login : ~/.bash_profle 파일이 없을 때 bash가 읽는 파일

~/.profile : ~/.bash_profile 와 ~/.bash_login 파일 모두 없을 경우 읽는 파일

2020년 8월 16일 일요일

맥북 프로 2017 13인치 논터치바 사용기

맥북 프로 2017 13인치 논터치바 실제 사용후기


2020년 1월 중고로 맥북프로 2017 13인치를 중고 거래로 가져왔습니다.

용도는 Swift, Python, Android 등 개발 및 빌드 용도로 구매했습니다.

실제로 사용한 용도는 Swift 개발이 약 30%, 유튜브 시청 및 웹서핑이 약 40%, Python 개발 약 15% Android 및 기타 업무용도 약 15% 정도인 것 같아요.


실제 사용한 경험을 바탕으로 맥북 프로 2017 13인치의 장점과 단점만 간략하게 5가지씩 적어볼게요.

혹시 맥북 프로 중고로 구매하실 분들이 있으면 참고만 해주시면 좋을 것 같아요.

사용 환경에 따라 개인차가 있을 수 있으니 그냥 아마추어 리뷰로 봐주시면 좋을 것 같습니다.


맥북 프로 2017 13인치 단점


1. 무게

일단 무게가 너무 무거워서 핸드 캐리하는 가방으로는 대중교통 이용해서 장거리 들고 다니기가 힘듭니다.

맥북+충전기+허브 무게가 약 2Kg 미만 되는 것 같은데 실제로는 손잡이 부분이 끊어질 듯한 느낌이 들 정도입니다.

그래서 대중교통 이용시에는 슬링백에 넣어서 이동했는데 걷다보면 이것도 무게감이 느껴지는 건 어쩔 수가 없습니다.


2. 발열(개인 차 있을 수 있음)

주 사용 용도인 Swift 개발 및 유튜브(웹서핑) 기준으로만 적어보겠습니다.

Swift 사용시 빌드하는 중에는 팬 돌아가거나 발열이 심하게 느껴진 적은 많이 없었습니다.

시뮬레이터 구동시에는 발열 및  팬 돌아가는 속도는 빌드시 보다는 잦았구요.

문제는 유튜브 및 웹서핑인데요.

유튜브 시청시 1080p 시청시 평균 온도는 80~90도를 유지하며 팬이 90% 확률로 돌아가는 듯했습니다.

유튜브 시청시 온도는 CPU 가까운 쪽 센서는 88도, 조금 먼 쪽 센서는 69도고 팬은 풀 스피드로 돌아가네요.


웹서핑 시에도 80도 넘어가는 경우가 많았으며 키보드가 뜨거워지는 경우도 있었습니다.

블로그 글 작성시에는 약 60도 정도를 유지하고 있네요.


발열에 신경 쓰시는 분들은 Macs Fan Controller를 이용하셔서 팬 속도로 발열을 잡는 방법도 있습니다.


3. 가성비

맥북 프로 사용 전에는 맥북 프로하면 성능이 뛰어난 제품이라고 생각을 했습니다.

신제품 기준으로 약 150만원 정도하니 성능도 감성만큼 뛰어날 것이라는 기대를 했는데 실제로는 기준에 못 미치는 수준이었습니다.

귀찮아서 벤치마크 까지 돌릴 생각은 안 해보고 업무용으로 쓰는 2013~14년 구매한 삼성 노트북과 체감 비교를 했는데 성능면에서 월등히 뛰어나다는 생각은 못했습니다.

USB-C 타입이 두 포트 밖에 없어 HDMI, LAN, USB-A 등등이 포함된 허브 구매는 필수인데 이 모든 것을 정품으로 구매한다면 추가로 몇 십은 지출이 필요하니 가성비는 뛰어난 제품은 아닌 것 같습니다.


4. 유지보수

맥북 프로 구입 후 발열 때문에 CPU 써멀 구리스 재도포를 위해 하판을 뜯은 적이 있습니다.

먼저 초보자가 하판 뜯는 난이도도 상당했고 하판을 뜯은 후에는 더 경악할 수 밖에 없었습니다.

부품들이 굉장히 유기적으로 맞물려 있어 부품 하나를 떼어내려면 먼저 떼어내야할 부품이 있고 그 부품을 분리하는 난이도도 높아서 배터리 케이블만 분리하고 고민하다 다시 닫았습니다.

셀프 배터리 교체를 염두에 두고 있었지만 하판 분리 후 고민이 깊어졌습니다.(이것도 비용)


5. 키보드

나비식 키보드의 키감은 개인적으로 만족하는 편입니다.

기계식 키보드를 타이핑하는 듯한 소리와 적당한 반발력은 괜찮다고 생각합니다.

다만 내구도 및 방향키 배열은 조금 문제가 있어 보이는데요.

중고로 구매한 탓인지 위쪽 방향키가 중앙을 누르지 않으면 움직이지 않는 경우가 있습니다.

좌우 방향키는 위/아래 방향키보다 커서 방향키를 많이 누르는 작업에는 항상 잘못 누르곤 합니다.

처음엔 별 거 아니라고 생각했는데 생각보다 불편하긴 합니다.


맥북 프로 2017 13인치 장점


1. 디자인

2015를 마지막으로 애플 로고에 LED가 빠져 애플 감성은 줄어들었지만 디자인만큼은 타 노트북들에 비해서 압도적인 것 같습니다.

매년 애플 기기들의 디자인이 큰 폭의 변화가 없는 것도 있긴하지만 몇 년 전의 제품(맥북 프로 2017)이라도 절대 촌스럽거나 뒤쳐지지 않는 디자인을 갖고 있어서 성능 이슈만 없다면 망가질 때 까지 사용하고 싶고 그래도 될 것 같습니다.

2. 애플 기기 연동

이 장점은 타 기기에서는 보기 힘든 절대적인 장점인 것 같습니다.

Swift 개발에서 많이 사용했던 기능인 sidecar 기능은 메인 화면에 스위프트 실행시키고 아이패드에서 구글링하면서 애플리케이션 전환 없이 사용으로 편리성을 제공 받았습니다.

애플워치로 기기 잠금 해제 기능은 소소하지만 매번 비번 입력 없이 로그인하는 수고를 덜었다는 장점이 있었고 아이폰과의 연동(전화, 메시지, 브라우저 등)은 맥북으로도 아이폰의 기능을 할 수 있어 정말 편리했습니다.

3. 단축키 및 매직패드

윈도우 환경의 PC나 노트북을 쓰면서도 단축키를 많이 활용하긴 했지만 맥북을 사용하면서 단축키와 매직패드의 편리성을 정말 많이 느꼈습니다.

OS가 달라 사용자 환경의 지향하는 것이 다르기 때문이라고 생각을 하는데 윈도우(특히 노트북) 보다는 훨씬 편리한 사용이 가능한 것 같습니다.

매직패드의 제스처를 이용한 앱 전환 및 단축키를 통한 제어는 앞으로도 맥북을 더 활용하게 할 수 있는 장점인 것 같습니다.

4. 스피커

윈도우 PC를 메인으로 사용하면서 맥북으로 유튜브 음악을 재생을 많이 했는데 작은 사이즈(13인치)에서 나오는 소리가 맞나 싶을 정도로 풍부한 베이스와 또렷한 음질이 인상 깊었습니다.

야외에서도 블루투스 스피커를 이용해 듣는 것 만큼의 음량과 음질을 경험할 수 있어 야외에서 영화를 보거나 음악을 들을 때 블루투스 스피커를 따로 챙겨야 하는 불편함이 없어져 사용하면서 느낀 좋은 장점이라고 생각합니다.

5. 디스플레이

13인치 노트북 중 해상도가 높다고 하는 제품들의 해상도는 1080P(1920*1080)인데 비해 맥북 프로 2017 13인치는 1600P(2560*1600)로 QHD급의 해상도입니다.

FHD에 비해서 약 2배 정도 해상도가 높은 편인데 실제로 사용하다보면 확실히 차이를 느끼긴 합니다.

당연한 이야기지만 첫 째는 글씨 가독성이 뛰어나고 둘 째는 화면에 띄어지는 정보량이 많다는 점입니다.

개인적으로 한 화면에 띄어지는 정보량이 많은 것을 선호합니다.

업무상 원격 작업 및 구글링을 할 때 위 두 가지 차이점이 굉장한 장점으로 다가옵니다.

원격 작업시 FHD의 13인치 노트북은 스크롤바를 내려야 하는 단점이 있다면 이건 그 보다는 훨씬 수월하여 디스플레이도 굉장히 만족하고 있습니다.

다만 2017은 트루톤을 지원하지 않아서 이건 조금 아쉽습니다.


총평


맥북 프로 2017 13인치는 가성비는 뛰어나지 않고 개인이 유지보수하기 힘들다는 단점도 있긴하지만 타 13인치 급 노트북에서 느끼기 힘든 디스플레이 및 사운드라는 장점, 애플 기기 연동으로 연속 작업의 편리함이 있어 한 번쯤은 사봐도 되고 한 번 사면 다음에도 또 사고 싶은 노트북이라고 할 수 있습니다.

다만, 신규 모델에서 발열 조절 및 포트 추가는 꼭 해줬으면 좋겠네요.

Windows에서 net accounts 로 최대 암호 사용 기간 변경하기

Windows에서 net accounts 명령어로 최대 암호 사용 기간 변경하기

CMD 창에서 net accounts 명령어로 '로컬 보안 정책' 수정이 가능합니다.


> net accounts /maxpwage:999 ## 뒤 숫자 부분을 원하는 값으로 변경


위 명령어를 입력하면 최대 암호 사용 기간을 명령어로 간단하게 변경이 가능합니다.

2020년 8월 11일 화요일

Docker 기본 명령어(생성/삭제/시작/종료)

Docker 기본 명령어(생성/삭제/시작/종료)

가장 간단한 명령어만 정리했습니다.


조회(Container 조회)


Docker ps


Docker ps -a


중지


Docker stop <컨테이너 이름 or 아이디>


시작


Docker start <컨테이너 이름 or 아이디>


재시작


Docker restart <컨테이너 이름 or 아이디> 


삭제(Container 삭제)


Docker rm <컨테이너 이름 or 아이디>

 

이미지삭제


Docker rmi <이미지 ID>

2020년 8월 4일 화요일

CentOS7에 Gitlab 설치하기(Docker 활용)

Centos7에 Gitlab을 설치하는 방법


작업 전 필수조건

1. Centos 버전
2. Docker 설치
3. 인터넷 연결 필요

작업

1. Centos7에서 Gitlab 이미지 다운로드

1
Docker pull gitlab/gitlab-ce:latest
cs

2. Gitlab 설치


1
2
3
4
5
6
7
8
9
10
docker run --detach \
  --hostname &lt;docker host 서버 IP or domain&gt; \
  --env GITLAB_OMNIBUS_CONFIG="external_url '&lt;docker&gt;"&gt;http://&lt;docker host 서버 IP or Domain&gt;/'; gitlab_rails['lfs_enabled'] = true;" \
  --publish 443:443 --publish 80:80 --publish 22:22 \  ## 포트포워딩포트:
  --name ito-gitlab \
  --restart always \
  --volume /srv/gitlab/config:/etc/gitlab \
  --volume /srv/gitlab/logs:/var/log/gitlab \
  --volume /srv/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest
cs

3. 브라우저에서 Giltlab 접속
- 초기 계정은 root를 넣고 비번 설정 후 사용

docker 는 콘솔(호스트)로 접속을 하면 root 로 로그인이 가능!

2015년 3월 27일 금요일

java SE development Kit 8 설치하기(JDK8 설치하기)

java SE development Kit 8 설치하기(JDK8 설치하기)

JAVA 8을 설치하는 방법입니다.

1. 자신의 자바 버전을 확인하기

# java -version
java version "1.7.0_75"
OpenJDK Runtime Environment (rhel-2.5.4.0.el6_6-x86_64 u75-b13)
OpenJDK 64-Bit Server VM (build 24.75-b04, mixed mode)

2. java 다운로드 하기

- 64bit 다운 받기

# cd /usr/local/src
# wget --no-cookies --no-check-certificate --header \
"Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; \
oraclelicense=accept-securebackup-cookie" \
"http://download.oracle.com/otn-pub/java/jdk/8u40-b25/jdk-8u40-linux-x64.tar.gz"
# tar xzf jdk-8u40-linux-x64.tar.gz

- 32bit 다운 받기

# cd /usr/local/src
# wget --no-cookies --no-check-certificate --header \
"Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; \
oraclelicense=accept-securebackup-cookie" \
"http://download.oracle.com/otn-pub/java/jdk/8u40-b25/jdk-8u40-linux-i586.tar.gz"
# tar xzf jdk-8u40-linux-i586.tar.gz

3. java 설치하기

# alternatives --install /usr/bin/java java /usr/local/src/jdk1.8.0_40/bin/java 2
# alternatives --config java
There are 3 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
   2           /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java
   3           /usr/local/src/jdk1.8.0_40/bin/java

Enter to keep the current selection[+], or type selection number: 3


alternatives 명령어로 기존에 설치되었던 java를 교체합니다.

java가 완벽하게 설치가 되었다면 이번에는 밑에 있는 명령어로 javac와 jar의 경로를 변경해줘야 합니다.

# alternatives --install /usr/bin/jar jar /usr/local/src/jdk1.8.0_40/bin/jar 2
# alternatives --install /usr/bin/javac javac /usr/local/src/jdk1.8.0_40/bin/javac 2
# alternatives --set jar /usr/local/src/jdk1.8.0_40/bin/jar
# alternatives --set javac /usr/local/src/jdk1.8.0_40/bin/javac 

4. java 버전 체크하기

# java -version
java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b25)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)

확인해보면 1.8.0_40 버전으로 업데이트된 것을 확인할 수 있습니다.

5. java 경로 설정하기

java를 기본으로 한 어플리케이션들은 거의 대부분 동작하기 위해 환경변수를 참조합니다. 
밑의 명령어로 환경변수를 설정해줍시다.

# export JAVA_HOME=/usr/local/src/jdk1.8.0_40
# export JRE_HOME=/usr/local/src/jdk1.8.0_40/jre
# export PATH=$PATH:/usr/local/src/jdk1.8.0_40/bin:/usr/local/src/jdk1.8.0_40/jre/bin


이렇게 java 최신버전으로 교체하기 끝~

이상~!

2015년 3월 22일 일요일

'작업 스케줄러'를 이용하여 예약된 작업 실행하기

'작업 스케줄러'를 이용하여 예약된 작업 실행하기


윈도우에도 리눅스의 crontab처럼 예약 작업을 하는 기능이 있습니다.
한글 버전에서는 '작업 스케줄러', 영어 버전에서는 'task scheduler'입니다.

1. 시작하기 


윈도우 키를 누른 후 '작업' 또는 'task'를 치면 아마 작업 스케줄러가 제일 위에 나올거에요.


작업 스케줄러 라이브러리 탭을 클릭하면 현재 예약된 작업들이 나옵니다.

2. 생성하기


오른쪽 빈 칸에서 마우스 우클릭 후 '기본 작업 만들기'를 누릅니다.


적당한 이름을 입력하고 다음을 누릅니다.


작업이 어느 주기로 진행될지 선택합니다.


이거는 매일을 선택했을 경우 나오는 창입니다.


이건 매주를 선택했을 경우이고


이건 매월을 선택했을 경우 나오는 메시지입니다.


알맞은 주기를 선택하고 다음을 누르면 다음과 같이 어떤 동작을 수행하겠냐고 물어봅니다. 여기서는 프로그램 시작을 선택!


그러면 무슨 프로그램 또는 스크립트를 실행시킬지 찾아보라고 하는데요.


여기서 지난 번에 'forfiles' 포스팅 때 만들어 놓은 bat 파일을 적용시키겠습니다.


마침을 눌러서 생성을 합니다.


생성이 되면 작업 스케줄 목록에 추가가 된 것을 볼 수 있습니다.

3. 설정하기

생성을 하면 사용자의 환경에 맞게 설정을 해주어야 합니다.


만들어준 스케줄 우클릭 하고 속성으로 들어갑니다.


관리자로 실행할 필요가 있는 스크립트 및 프로그램이라면 '가장 높은 수준의 권한으로 실행'을 선택합니다. 그리고 로그온 또는 비로그온시에도  실행할지를 상황에 따라 설정합니다.


간혹 작업이 제 시간에 시작이 안 될 경우를 대비해서 '작업이 실패하는 경우 다시 시작 간격'을 설정해주는 것도 좋습니다.

이제 기다리다가 설정한 시간에 잘 실행되는지 확인하면 됩니다.

이상~!

2015년 3월 20일 금요일

오래된 파일 지우는 윈도우 명령어 "forfiles"

오래된 파일 지우는 윈도우 명령어 "forfiles"


사실 forfiles 명령어는 오래된 파일을 지우는 명령어는 아니지만 옵션값을 잘 지정해주고 스케줄에 등록하면 편리하게 오래된 파일을 지울 수 있다는 점 때문에 많은 분들이 삭제 용도로 사용하시는 것 같습니다.
이 명령어는 옵션값을 많이 입력해야 하므로 쓰기 까다로운 점이 있지만 잘 쓰면 편하게 오래된 불필요한 파일들을 손쉽게 제거뿐만 아니라 다양한 용도로 사용할 수 있으니 잘 알아두시면 좋을 것 같습니다~!

1. 사용 방법

FORFILES [/P pathname] [/M searchmask] [/S]
         [/C command] [/D [+ | -] {yyyy-MM-dd | dd}]

2. 옵션 목록

    /P    pathname  검색을 시작할 경로를 지정합니다.
                          현재 작업 디렉터리(.)가 기본 폴더입니다.

    /M    searchmask  검색 마스크에 따라 파일을 검색합니다.
                             '*'이 기본 검색 마스크입니다.

    /S                  하위 폴더를 포함하도록 지정합니다. 예, "DIR /S"

    /C    command       각 파일에 실행할 명령을 지정합니다.
                        명령 문자열을 큰따옴표로 묶어야 합니다.

                        "cmd /c echo @file"이 기본 명령입니다.

                        명령 문자열에 다음 변수를 사용할 수 있습니다.
                        @file    - 파일 이름을 반환합니다.
                        @fname   - 확장명 없이 파일 이름을 반환합니다.
                        @ext     - 파일의 확장명만 반환합니다.
                        @path    - 파일의 전체 경로를 반환합니다.
                        @relpath - 파일의 상대 경로를
                                   반환합니다.
                        @isdir   - 파일 형식이 디렉터리인 경우 "TRUE"를
                                   반환하고 파일인 경우 "FALSE"를 반환합니다.
                        @fsize   - 파일의 크기(바이트)를
                                   반환합니다.
                        @fdate   - 파일을 마지막으로 수정한 날짜를
                                   반환합니다.
                        @ftime   - 파일을 마지막으로 수정한 시간을
                                   반환합니다.

                        명령줄에 특수 문자를 포함하려면 0xHH 형식의 16진수 코드(예, 탭은                             0x09)를 사용하십시오. 내부 CMD.exe 명령 앞에는 "cmd /c"를 사용해야                         합니다.

    /D    date       지정한 날짜와 마지막 수정한 날짜가 늦거나 같은(+) 또는 빠르거나                               같은(-) 파일을 찾습니다.
                        날짜 포맷은 "yyyy-MM-dd"입니다.
                        또한 마지막 수정한 날짜가 현재 날짜에 "dd"일을 더한 날짜보다 늦거나                         같은(+) 또는 현재 날짜에서 "dd"일을 뺀 날짜보다 작거나 같은(-) 파일                           을 찾습니다.
                        유효한 "dd" 범위는 0에서 32768까지입니다.
                        부호를 지정하지 않으면 "+"가 기본값입니다.

    /?                  이 도움말 메시지를 표시합니다.

3. 윈도우에서 직접 알려주는 사용예시

  FORFILES /P C:\WINDOWS /S /M DNS*.*
  - C:\WINDOWS 하위 디렉토리 중 DNS를     포함하는 모든 파일 삭제
  FORFILES /S /M *.txt /C "cmd /c type @file | more"
  - 현재위치의 모든 텍스트 파일의 내용을 보여줍니다.
  FORFILES /P C:\ /S /M *.bat
  - C:\ 하위 디렉토리 포함 모든 bat 파일을 삭제합니다.
  FORFILES /D -30 /M *.exe /C "cmd /c echo @path 0x09 was changed 30 days ago"
  - 현재 디렉토리에 있는 모든 실행 파일들중 30일 이전의 파일들을 "경로\1.exe was           changed 30 days ago" 형식으로 표시
  FORFILES /D 2001-01-01 /C "cmd /c echo @fname is new since Jan 1st 2001" 
  - 2001-01-01에 만들어진 파일을 확장자명 없이 출력
  FORFILES /D +2015-3-21 /C "cmd /c echo @fname is new today"
  - 2015-03-21 이후에 만들어진 파일을 @fname 뒤의 문장을 포함하여 출력
  FORFILES /M *.exe /D +1
  FORFILES /S /M *.doc /C "cmd /c echo @fsize"
  FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"

4. .bat 파일을 만들어서 실행


메모장을 열어서 스크립트를 입력합니다.


입력 후 다른 이름으로 저장을 누릅니다.


파일형식은 '모든 파일' 파일이름은 test.bat라고 적어서 bat 파일을 만들어주세요.
이제 만든 bat 파일을 실행시키면 입력해주었던 스크립트가 차례대로 실행됩니다.

이상~!


2015년 3월 19일 목요일

리눅스 가동시간을 간단하게 알아보는 방법

리눅스 가동시간을 간단하게 알아보는 방법


리눅스에서는 간단하게 서버의 가동시간과 로그인한 사용자 수 그리고 1분, 5분, 15분 동안의 시스템 평균 부하율을 표현해주는 명령어가 있습니다. 옵션도 없이 그냥 uptime만 쓰면 됩니다.

지금부터 uptime을 사용하여 나온 값을 보여드리겠습니다.

[root@jun ~]# uptime
 20:43:33 up  8:57,  1 user,  load average: 0.00, 0.00, 0.00

앞에서부터 지금 시간, 서버가 켜진 뒤 지난 시간(가동시간), 현재 접속자 수, 시간 별 평균 부하율(1분, 3분, 15분)

이 명령어는 서버관리자가 가장 간단하게 서버를 알아 볼 수 있는 방법이므로 항상 숙지하여야 합니다.
모 회사 면접에서 첫 질문이 'uptime이 뭐에요?'였습니다.

이상~!

윈도우 서버 가동시간 확인하는 방법

윈도우 서버 가동시간 확인하는 방법


이전에는 리눅스에서 간단하게 서버 가동시간을 알아보는 방법을 포스팅했습니다.

리눅스에서 간단하게 서버 가동시간을 알아보는 방법!

이번에는 윈도우 서버에서 간단하게 알아보는 방법을 포스팅하겠습니다.

윈도우는 여러가지 방법이 있는데 그 중에서 가장 간단한 방법입니다.

1. net stats srv

net stats srv는 많이 이용되고 빠르게 확인할 수 있는 방법입니다.

윈도우 키 + R을 눌러 cmd창을 실행시킵니다.

다음 net stats srv를 입력해주세요.



제일 윗 부분에 서버가 언제부터 가동되었는지 나옵니다. 제일 윗 줄 확인!

2. systeminfo

systeminfo는 위의 방법보다 시간은 더 걸리나 정말 세세하게 윈도우 서버를 볼 수 있는 명령어 입니다.

마찬가지로 cmd창을 실행시킵니다.

다음 systeminfo를 입력합니다.



systeminfo를 치고 약 10~15초 정도 기다리면 위의 그림과 같이 장황한 설명이 나옵니다.
제일 위에 있는 줄이 서버가 언제 켜졌는지에 대한 정보이고 밑으로는 서버의 모델 및 하드웨어 스펙이 나오고 그 밑으로는 설치된 hotfix가 줄줄이 나옵니다. 마지막으로는 네트워크 정보가 나오구요.

정말 간단한 명령어로 윈도우 서버의 현재 상태를 알아보았습니다. 서버의 상태를 빨리빨리 파악하여 장애를 예방하고 조치하면 좋겠죠?

이상~!

2015년 3월 15일 일요일

윈도우에서 리눅스 ftp 서버로 파일 전송시 425 에러 해결방법

윈도우에서 리눅스 ftp 서버로 파일 전송시 425 에러 해결방법


윈도우에서 리눅스 ftp 서버로 파일을 전송하는데 뜬금없는 에러가 발생했습니다.

에러의 내용은 다음과 같았습니다.


200 PORT command successful. Consider using PASV.
425 Failed to establish connection.


이 에러로 한참을 고생했는데 해결방법은 역시 간단했습니다.

◈ 현재 저의 상황
   - 리눅스 서버의 ftp는 모두 제대로 구성이 되어있음
   - 리눅스 서버의 방화벽은 20번, 21번이 열려있음
   - 윈도우에서 ftp.exe를 이용하여 파일전송(cmd창에서 ftp 실행)
   - 윈도우 2012 R2 서버에서 ftp 파일 전송 시도

1. 윈도우에서 '고급 보안이 포함된 windows 방화벽' 실행

윈도우키를 누르고 '고급'만 쳐도 바로 윗부분에 나오는 '고급 보안이 포함된 windows 방화벽'을 선택합니다.



2. 인바운드 규칙에서 마우스 우클릭 후 새규칙을 누릅니다.



3. 새 인바운드 규칙 마법사에서 제일 위에 프로그램을 선택하고 다음을 누릅니다.



4. 다음 프로그램 경로를 선택합니다.

경로: C:\Windows\System32\ftp.exe



5. 연결 허용 선택 후 다음으로 이동합니다.



6. 자신의 환경에 맞게 적용 시기를 선택하고 다음을 누릅니다.



7. 규칙의 이름을 임의로 정하고 마침을 눌러주세요.

저는 '파일 전송 프로그램(ftp)'라는 규칙명을 사용하기로 했습니다.



8. 새로 만들어준 규칙이 잘 등록되었는지 확인해주세요.



9. ftp를 실행하여 다시 파일을 전송하고 차이점을 확인합니다.



위와 같이 226 Transfer complete라는 문구가 뜬다면 이번 미션은 complete!

이상~! 

2015년 3월 11일 수요일

sysctl.conf 설정시 bridge 모듈을 못 읽어들이는 문제

sysctl.conf 설정시 bridge 모듈을 못 읽어들이는 문제


sysctl.conf 커널 매개변수 파일을 설정하고 제대로 설정이 되었는지 확인을 해보니까 밑의 문제가 생겼습니다.

[root@netty ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296

위에 프린트된 내용처럼 bridge관련된 키를 찾을 수 없다는 명령어인데요.

error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key

이 문제의 원인은 bridge 모듈이 커널에 입력되지 않아서 생기는 문제입니다.

간단한 방법으로 문제를 해결할 수가 있습니다.

[root@netty ~]# lsmod |grep bridge
bridge                 83177  0
stp                     2218  1 bridge
llc                     5546  2 bridge,stp

바로 bridge를 커널에 입력만 시켜주면 해결됩니다.

[root@netty ~]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-arptables = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296

커널 매개변수를 확인하면 위와 같이 잘 등록이 된 것을 확인할 수 있습니다. 커널에 bridge를 등록하고 다시 한 번 sysctl -p로 커널 매개변수를 확인하면 잘 등록된 것을 볼 수 있습니다.

이상~!

2015년 3월 3일 화요일

openstack 인스턴스 생성과 연결 논리도

openstack 인스턴스 생성과 연결 논리도


이번에 openstack을 설치하면서 openstack이 생소한 분들을 위해서 알아보기 쉽게 여러가지 논리도를 만들었는데요. 서비스를 하기 위해서 controller, compute, network node가 어떻게 작동하여 인스턴스가 생성되는지와 사용자가 어떻게 인스턴스와 연결이 되는지 두 가지를 그림으로 표현을 해보았습니다.



▶ 인스턴스 생성 논리도


openstack을 구축했다면 제일 먼저 해보고 싶은 것이 인스턴스를 생성하는 것일텐데요. 이 인스턴스 하나가 생성이 되려면 지금까지 만들어 놓았던 각각의 node들이 모두 유기적으로 동작합니다. 다음의 그림을 먼저 봐주세요.



1. 사용자들이 공인 네트워크를 타고 openstack으로 접속을 합니다. 도메인이 있다면 도메인으로 접속하고 도메인이 없다면 http://123.45.67.89/dashboard 이렇게 openstack으로 접속을 할 것입니다.

2. openstack 대시보드에서 계정을 입력하는 단계를 거칩니다. 계정을 입력하게 되면 keystone에 계정이 등록이 되어 있는지 비밀번호는 맞는지 그리고 role은 무엇이고 어떤 tenant에 들어 있는지 비교를 하게되고 계정과 비밀번호가 일치한다면 비로소 openstack으로 들어가게 되는거죠!

3. 인스턴스를 생성하는 단계입니다. 일단은 controller에 설치된 nova의 도움을 받아서 이미지를 마운트하게 되는데요. 여기서 자신이 원하는 이미지와 사양을 선택할 수 있습니다. 예를 들면 centos6.5 64bit와 vcpu1개, ram1g를 이용하는 20gb 하드웨어가 되겠습니다. 만약 키페어를 만들었다면 여기서 키페어도 가지고 compute로 넘어갑니다.

4. 저장소를 선택하는 단계입니다. openstack은 기본으로 설치되는 일반 저장소와 추가적으로 설치할 수 있는 cinder와 swift를 저장소로 이용합니다. 만약 일반 저장소를 이용한다면 여기서 추가적인 선택을 하지 않고 넘어가도 되고 cinder 또는 swift를 이용한다면 임의로 용량을 선택할 수 있습니다.

5. 인스턴스가 생성되기 바로 전 단계입니다. 이미지와 저장소, 하드웨어 정보를 controller의 nova가 compute의 nova에게 전달해줍니다. 그러면 compute의 nova는 network node의 neutron에게 자신이 생성하게 될 인스턴스의 IP 주소를 요청하고 IP 주소를 받습니다.

6. 인스턴스 생성단계입니다. 전 단계를 모두 성공했다면 약간의 인내심 테스트를 거치고 우리가 원했던 centos6.5 64bit 이미지가 생성됩니다.

▶ 인스턴스 - 사용자 연결 논리도


인스턴스가 생성이 되었다면 리눅스면 putty나 기타 ssh 프로그램을 통해서 접속하고 윈도우는 원격 데스크탑을 통해서 접속을 해야하죠. 사용자가 인스턴스에 접속을 시도하려면 network node를 통과해야 합니다. 그림을 먼저 봐주세요.



1. 위와 마찬가지로 사용자는 openstack 상부에 있는 물리 라우터를 거쳐서 접속을 합니다.

2. network node를 설치하면서 따로 지정해준 외부 연결 인터페이스로 들어갑니다. 위의 예는 eth0으로 했지만 각자 설정한 것에 따라서 eth2, eth3과 같이 달라질 수 있습니다.

3. 외부 연결 인터페이스로 접속을 했다면 network node에 있는 가상 라우터를 마주치게 됩니다. 가상 라우터를 맞게 찾아 왔다면 인스턴스가 속한 가상 네트워크까지 올바르게 찾아왔다는 말이죠?

4. compute node에 있는 인스턴스를 찾아가기 위해서 가상 라우터 주소, 가상 네트워크, 인스턴스 주소 등을 network node와 compute node를 직접 연결하고 있는 터널 인터페이스의 도움을 받아 모두 가지고 인스턴스가 있는 compute node로 갑니다.

5. compute node에 설치된 여러 인스턴스 중 우리가 원하는 정보와 일치하는 인스턴스를 찾아서 연결해주는 단계입니다.

이렇게 사용자는 조금은 복잡한 방법으로 생성한 인스턴스를 찾아갑니다. 마치 연어와 같지 않나요?

이상~!

2015년 2월 21일 토요일

독립적으로 인스턴스를 관리할 수 있게 openstack 사용자 계정 생성하기

독립적으로 인스턴스를 관리할 수 있게 openstack 사용자 계정 생성하기

openstack을 구축했다면 관리자가 아닌 사용자 개념에서 인스턴스를 관리할 수 있도록 계정을 만들어줘야 합니다.
openstack을 매뉴얼대로 설치했다면 

# keystone role-list를 입력했을 때 _member_ 와 admin 두 역할이 출력됩니다.

admin은 흔히 알고 있는 관리자의 개념이고 _member_는 일반 사용자의 개념입니다.
관리 차원이 아닌 openstack을 이용하는 일반 사용자에게 계정을 생성해 주려면 admin이 아닌 _member_ 역할을 부여해야 합니다.

간단히 알고 가는 openstack 계정 상하관계



최상위 그룹은 role입니다. 어떤 role에 속하냐에 따라서 사용자의 계급이 정해지죠. 일반 사용자는 아무리 노력해도 관리자 권한을 얻지 못해요.

이제 사용자의 role이 정해지면 다음은 tenant별로 나뉘게 됩니다. 같은 tenant에 속한 사용자들은 가족이 되는거죠. 가족이 되면 보통 집안에 있는 모든 것을 공유하잖아요. 그래서 다른 사용자의 인스턴스를 관리할 수가 있게 됩니다. 

마지막으로 tenant에는 사용자 계정이 입주하게 됩니다. 일반 사용자는 자신의 계정을 통해 인스턴스를 생성하고 삭제하며 마음대로 자신의 방식대로 방을 꾸밀 수 가 있게 되는거지요.

인스턴스를 개별적으로 관리하기 위한 계정 생성 예

yankees라는 tenant에 입주할 사용자계정 jeter를 만듭니다.

# keystone user-create --name=jeter --pass=jeter_PASS --email=<이메일>
# keystone tenant-create --name=yankees --description="service"
# keystone user-role-add --user=jeter --role=_member_ --tenant=yankees

redsox라는 tenant에 입주할 사용자계정 ortiz를 만듭니다.

# keystone user-create --name=ortiz --pass=ortiz_PASS --email=<이메일>
# keystone tenant-create --name=redsox --description="service"
# keystone user-role-add --user=ortiz --role=_member_ --tenant=redsox

이렇게 계정을 만들면 _member_라는 같은 role을 가진 두 개의 각기 다른 tenant와 user를 만들 수 있습니다. 물론 tenant가 다르니 jeter와 ortiz는 서로 무슨 인스턴스를 가지고 있는지 모르게 됩니다. 하지만 admin role을 가진 관리자는 이 둘의 인스턴스를 모두 들여다 볼 수 있습니다. 

조금씩 틀린 내용이 있을 수 있으니 지적 환영합니다.

이상~!

2015년 2월 17일 화요일

vsftpd를 이용한 ftp 서버에 filezilla로 파일 업로드하기

vsftpd를 이용한 ftp 서버에 filezilla로 파일 업로드하기



리눅스에 vsftpd를 이용해서 ftp 서버를 구축했다면 파일 업로드까지 해봐야 마무리를 지은거라고 할 수 있죠. 그래서 이번에는 ftp 서버에 파일을 업로드하는 방법을 적어보겠습니다.


준비물

◎ vsftpd로 구축한 frp 서버(centos 6.6 기준입니다.)
◎ 클라이언트에 설치된 filezilla
◎ 업로드용 파일

1. cmd 창에서 업로드 해보기

윈도우 시작 키 + r  -> cmd 입력

cmd 창에서 밑에 처럼 입력하여 자신의 ftp 서버에 접속해주세요.



다음 테스트로 아무 파일이나 업로드해주세요.
밑에 처럼 파일이 정상적으로 올라간다면 일단은 테스트 환경이 구축된 것입니다.





2. filezilla로 업로드해보기

vsftpd를 기본적인 설정으로 설치했다면 filezilla로 ftp 서버에 접속한다면 이런 메시지를 보시게 될 것입니다.

filezilla는 기본적으로 패시브모드를 지원하기 때문에 ftp 서버에서 패시브 모드 설정을 해주어야 합니다.

여기서 패시브와 액티브의 차이를 간략하게 설명하자면, 서버와 클라이언트는 각자 지정된 ftp 전송 포트를 가지고 있습니다. 
각자 command와 data용 포트를 가지고 있는데 서버는 cmd 21번, data20번이고 클라이언트는 1024번 포트 부터 마지막번 포트 중 사용하지 않는 임의의 포트를 cmd용 data용으로 지정하여 사용합니다.

액티브 모드 전송 방식


액티브 모드로 filezilla를 통해 서버에 접속한 클라이언트는 서버에 원하는 포트를 열어달라고 요청을 합니다. 하지만 ftp는 20번 포트만 데이타 전송 전용 포트로 열고 있어 대부분의 유저들은 방화벽에 막히게 되어 filezilla 유저들은 파일 전송에 실패합니다. (아마도 윈도우 자체 ftp 서비스는 20번 포트만 열어달라고 요청을 하기 때문에 액티브 모드에서도 전송이 잘 되는 것 같습니다.)

정리하자면, 액티브 모드는 클라이언트가 갑이 되어 자신이 접속하고자 하는 포트만 찾게 되고 자신이 원하는 포트가 막혀있으면 전송자체가 되지 않는 시스템입니다. 중요한건 클라이언트가 갑! 서버가 을! 

패시브 모드 전송 방식




패시브 모드는 클라이언트의 갑의 횡포를 길들이기 위해 탄생했습니다. 액티브 모드에서 클라이언트가 갑이었다면 패시브 모드에서는 역으로 서버가 갑이 되어 20번 포트만 원하는 클라이언트에 맞서기 위해 임의의 포트를 열고 기다리고 있습니다. 

여기서 서버가 열고 있는 포트는 1024 ~ 65535 포트 중 동시에 받고자 하는 클라이언트의 수에 맞춰집니다. 이렇게 포트를 열고 있으면 클라이언트는 20번 포트를 거치지 않고 패시브모드용 포트를 통해 자료를 주고받고 할 수 있게 됩니다.
패시브 모드에서 중요한 건 서버가 갑! 클라이언트가 을!


3. ftp 서버 vsftpd 설정 변경하기

# vi /etc/vsftpd/vsftpd.conf

밑의 내용을 추가해주세요.

pasv_enable=YES
pasv_min_port=50001
pasv_max_port=50010  // 임의로 50001 ~ 50010 포트를 열고 대기하도록 지정했습니다.

# vi /etc/sysconfig/iptables

iptables에 50001:50010 포트를 등록해줍니다.

# /etc/init.d/vsftpd restart
# /etc/init.d/iptables restart

4. filezilla로 접속하기

아까랑 같은 방법으로 filezilla를 통해 ftp 서버에 접속시도합니다.

이번에는 마지막 줄에 succesful이라는 문구나 나오는 것을 볼 수 있습니다~!
이제 마음대로 파일을 업로드하고 다운로드 할 수 있습니다.

이상~!