하면 된다!!!

Go Lang 공부를 시작하다

프로그래밍/Go Lang

옮겨온 회사에서 Go Lang을 주요 백엔드 개발 언어로 사용하고 있다.

이 나이에 언어를 다시 공부하는 것이 참 쉽지는 않다. 바로 얼마 전에 Python을 혼자 공부하면서 느끼기도 하였지만 새로운 것을 배운다는 것이 어떤 성취에 대한 희열로 다가와야 기쁨이 더하고 의욕이 넘칠 건데 말이다. ㅎㅎ


지난 4일 연휴로 쉬면서 고랭이를 영접하였다.

공부 자료는... 


http://golang.site/Go/Basics


내가 본 사이트 중에 가장 잘 정리된 사이트다. 당 사이트 쥔장님께 진심 감사를 드립니다. 꾸뻑~


2일 정도 사이트를 훑고 직접 코딩도 해보면서 기본 문법을 숙지하였다.

초기에 접근하는데 아주 좋은 사이트라 생각된다. 강추를 드린다.


고랭 관련해서 공부하면서 좋은 내용이 있으면 공유해보고자 한다.


젊을 때 공부 마이 해둬야 한다... ㅠㅠ


root 유저로 ssh 접근 제어 해야할 때

프로그래밍/기타

ssh를 이용해서 외부 접근을 하는 경우에 root 유저로 붙을 수 있게 되면 아무래도 보안상 위험하겠지요.

원격으로 해킹 시도가 상당히 발생할 수 있습니다.


이에 따라서 root 유저는 통상적으로 ssh 접근을 못하도록 하고, 일반 유저로 접근해서 su 또는 sudo를 이용해서 접근하도록 제어합니다.


$ sudo vi /etc/ssh/sshd_config

PermitRootLogin yes    << yes : 접근, no : 접근 안됨


$ sudo systemctl restart sshd  << sshd 서비스 재기동 (centos의 경우)


접속을 시도해보시면... 로그인이 안되도록 변경됩니다.



CentOS - SVN 설치시 에러

프로그래밍/기타

CentOS에 svnserve를 설치하다가...


이 사이트 참고 했음 : http://b1ix.net/290


설명이 매우 잘 되어있어서 따라하면 땡...


다만 중간 부분에 나와있는 이 부분!!!


[root@localhost checkout1]# svn checkout svn://localhost/svn_repos svn: E000013: Unable to connect to a repository at URL 'svn://localhost/svn_repos' svn: E000013: file '/home/svn/svn_repos/format' 를 열 수 없습니다: 허가 거부


이에 대한 해결책이 필요했다.

위의 에러는 selinux가 보안상 막고 있어서 발생하는 것이 맞다.


이를 해결 하기 위해서는... repository 타깃이 되는 폴더명을 뒤에 써준다.


$ chcon -R -t svnserve_content_t /home/svn/svn_repos


이렇게 해주면 된다.

selinux를 그냥 disabled 시켜 버리면 보안에 구멍이~!!!


Linux 프로세스 관리 쉘

프로그래밍/기타

###################################


1. 특정 프로세스를 찾아서 죽이기


#!/bin/bash

ps -ef | grep -v grep | grep 프로세스명 | awk '{print $2}' | xargs --no-run-if-empty kill -9 $1



###################################


2. 특정 프로세스가 살아있는지 체크해서 죽어있으면 살리는 쉘


$ vi /var/test/run.sh


#!/bin/bash

PROCESS_CNT=`ps -ef | grep 프로세스명 | grep -v grep | awk '{print $2}' | wc -l`

if [ "$PROCESS_CNT" == 0 ];

then

    echo "[`/bin/date +\%Y\%m\%d_\%H\%M\%S`] Process : Dead!!"

    실행시킬_프로세스명

else

    echo "[`/bin/date +\%Y\%m\%d_\%H\%M\%S`] Process : Alive!!"

    exit 0

fi


위와 같은 쉘을 하나 만들어두고 crontab 에 1분에 한번씩 돌게 해주면 1분에 1회씩 프로세스가 살아있는지 체크하고 죽어있으면 실행 시키도록 할 수 있다.


$ crontab -e

* * * * * /var/test/run.sh >> /var/test/proc_mon.log


$ tail -f /var/test/proc_mon.log

1분에 1회씩 로그가 쌓이는 것을 확인할 수 있습니다.



SSH 접속 세션 시간 조정

프로그래밍/기타

SSH 접속이 자주 끊겨서 고생하는 경우들이 있는데... 그에 대한 해결책을 간단히 노트해둔다.

  1. SSH 클라이언트 접속 시간 조정
    • sudo vi /etc/ssh/ssh_config
    • # otehr configs 부분에 아래 내용을 주석 해제하고 숫자값을 정해준다.
      ServerAliveInterval 100

  2.  SSHD 서버에서의 접속 시간 조정
    • sudo vi /etc/ssh/sshd_config
    • 아래와 같이 주석 해제하고 값을 지정해주시면 됩니다.
      ClientAliveInterval 600
      TCPKeepAlive yes
      ClientAliveCountMax 10
    • SSHD 서버 재기동이 필요합니다.
      $ sudo service ssh restart


Jenkins 포스트 쉘 스크립트 권한 관련 문제

프로그래밍/Java

리눅스 장비에 jenkins 를 설치하고나서 배포를 하다가 포스트 쉘 스크립트를 넣었다가 권한 문제로 에러를 여러차례 겪었는데...


jenkins는 jenkins 유저를 사용하고 있기 때문에 사용하려는 쉘에 접근하기 위해서는 권한이 필요했다.


이를 해결하기 위해서 jenkins 유저에 sudo 권한을 주고 포스트 쉘 쪽에는 sudo /path/to/abcd.sh 이렇게 처리를 해보는 것으로...


우선 sudoers에 유저와 권한을 넣어줘야 한다.


$ vi /etc/sudoers

# User_Alias ADMINS = jsmith, mikem << 요런 라인이 있는데 이 라인 아래에다가...


jenkins ALL=(ALL) NOPASSWD: ALL


이렇게 추가해준다.

NOPASSWD 라고 해주면 sudo 명령을 내리더라도 비번을 별도로 묻지 않게 됩니다.


물론 이렇게 셋팅을 하게 되면 sudo 커맨드를 이용해서 루트 권한으로 모든 커맨드를 실행할 수 있으니 문제가 있을 수 있다.

권한을 축소하려면 특정 경로나 파일을 지정해서 열어주는 것도 방법이다.


맨 뒤에 있는 ALL 을 대신해서 경로나 파일을 지정해주면 된다.


jenkins ALL=(ALL) NOPASSWD: /root/deployshell/


이런 식으로 해두게 되면 /root/deployshell/ 디렉토리 하단에 대한 권한을 지정해줄 수도 있다.


나이먹고 이런 삽질은 참 쉽지 않다. ㅠㅠ 어릴때 공부해뒀어야 하는데... 하는 생각뿐이다.


Jenkins 설치 및 설정

프로그래밍/Java

Jenkins 설치 및 설정 정보들을 모아 놓자.


애플자라님의 블로그를 참조해서 진행했다.


maven-tomcat 플러그인은 사용하지 않았습니다. war 파일을 만든 후에 톰캣 webapps 하단에 카피해 놓도록 설정하고, 톰캣에서 war 파일 자동으로 로딩 되도록 해두었습니다.


설치 환경 : Windows10 + JDK1.8 + Apache-tomcat-8.5 + Apache-maven-3.5.3 + Jenkins-2.121.1


- Apache Maven download : https://maven.apache.org/download.cgi
- Jenkins download : https://jenkins.io/download/

젠킨스 설정은 애플자라님의 블로그를 참고해서 설치하면 끝이고...

특별한 부분은
Post Step에다가 아래의 내용을 각 시스템에 맞춰서 넣는다.
Copy 결과물.war 톰캣webapps

Path 지정할때 중간에 스페이스가 있는 경우에는 " "로 패쓰 전체를 넣어줘야 에러가 나지 않는다.

project 의 pom.xml 파일 설정중... 

1. 한글 깨짐 관련, 플러그인 지정

<properties>

<java-version>1.8</java-version>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

</properties>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<version>3.7.0</version>

<configuration>

<source>1.8</source>

<target>1.8</target>

<encoding>UTF-8</encoding>

<compilerArgument>-Xlint:all</compilerArgument>

<showWarnings>true</showWarnings>

<showDeprecation>true</showDeprecation>

</configuration>

</plugin>

<plugin>

<groupId>org.codehaus.mojo</groupId>

<artifactId>exec-maven-plugin</artifactId>

<version>1.2.1</version>

<configuration>

<mainClass>org.test.int1.Main</mainClass>

</configuration>

</plugin>


<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-war-plugin</artifactId>

<version>3.2.2</version>

<configuration>

<warSourceDirectory>src/main/webapp</warSourceDirectory>

<webXml>src/main/webapp/WEB-INF/web.xml</webXml>

</configuration>

</plugin>

</plugins>


참고로 Maven 플러그인을 알아 볼 수 있는 페이지 링크 하나

https://maven.apache.org/plugins/index.html




NginX 최적화를 위한 설정 외부 링크 공유

프로그래밍/기타

How to Configure nginx for Optimized Performance


https://www.linode.com/docs/web-servers/nginx/configure-nginx-for-optimized-performance


참고하세요~

NGINX - Module ngx_stream_geoip_module

프로그래밍/기타

NGinX 서버에 GeoIP 를 이용해서... 즉 사용자의 아이피를 체크해서 해당 아이피에 지역을 파악하고 해당 지역의 언어나 내용으로 서비스를 구성할 수 있도록 할 수 있는 모듈이 탑재되었군요.

1.11.3 (2016년 7월 26일 출시) 버전부터 지원한다고 합니다.


내용을 보면 MaxMind 데이터베이스를 선컴파일 해서 사용한다고 되어있고, 디폴트로 들어가지 않고 파라메터 설정에서 --with-stream_geoip_module 을 enabled 시켜야 한다고 합니다.


http://nginx.org/en/docs/stream/ngx_stream_geoip_module.html


원문 내용 보기


샘플설정보기


윈도우 파일 소유권 / 사용 권한 관리

프로그래밍/기타

얼떨결에 PC에 윈도우 10을 설치하고 나서...

맥북에서 카피한 파일들이 파일 권한 등이 꼬이는 경우들을 자주 겪고 있어서 알아보았습니다.


우선 윈도우상에서 간단하게 파일의 소유권과 사용권에 대한 관리를 할 방법이 없는지 검색을 하다가 다음과 같은 방법을 발견하여 공유합니다.


1. 윈도우의 명령 프롬프트 창 열기 - 관리자 권한으로 여셔야 합니다.
    명령 프롬프트 메뉴에서 우클릭 하셔야 우측에 메뉴가 뜹니다.




2. takeown 명령어를 이용하여 파일의 소유권 가져오기

명령 프롬프트에서 작업을 원하는 폴더로 이동하시구요... 이동하지 않고 풀 경로를 입력하셔도 무방합니다.

>> takeown /F "파일명 또는 적용할 경로" /R /D Y

/R : 리커시브 입니다. 해당 경로 하위의 모든 파일 이나 폴더에 함께 적용시켜줍니다.

/D Y : 적용시 적용할꺼냐고 묻는 프롬프트가 뜨게 되는데 이걸 자동으로 Y로 대답해줘서 따로 Y 를 누르지 않아도 일괄 반영해줍니다.


3. icacls 명령어를 이용하여 파일의 사용권한 가져오기

명령 프롬프트에서

>> icacls "파일명 또는 적용할 경로" /GRANT 유저명:F /T /Q

/GRANT : 권한

유저명 : 윈도우 유저명으로... Everyone 으로 하면 누구나로 지정됨

:F : 모든 권한

/T : 리커시브 입니다. 해당 경로 하위의 모든 파일 이나 폴더에 함께 적용시켜줍니다.

/Q : 성공 메시지를 화면에 표시하지 않도록 지정합니다.


이렇게 하면 끝~~~ 입니다.


파일이 권한이 없다는 둥하면서 나오는 메시지는 안뇽~


더 자세한 옵션을 알고 싶으시면... /? 옵션을 이용하시면 모든 옵션에 대해서 설명이 나옵니다.


>> takeown /?

>> icacls /?