본문으로 건너뛰기

Full Stack JavaScript Developer | Half-time Open Sourcerer.

View All Authors

Temporary failure in name resolution, 일시적인 실패

· 약 1분

모듈 설치시 domain을 사용하거나, telnet 도메인 포트를 호출해봤는데 name resolution에서 일시적인실패 또는 Temporary failure 문구의 에러가 보이는 경우가 있다.

원인

nameserver를 찾지 못해서 발생한다.

해결

Root 계정으로 접속 후 nameserver 설정을 추가한다.

$ vi /etc/resolv.conf

## 아래 내용을 추가
nameserver 58.227.193.227
nameserver 221.143.20.131

저장하면 서비스 재시작이 필요없이 바로 적용된다.

여담

  • 통신사별 DNS 정보 페이지를 첨부한다.
  • 아마존 DNS 오류로 이 페이지의 조회수가 급증했다.

selinux 설정시 ftp 접근이 안될 때

· 약 1분

selinux 를 끄는건 보안상 취약하다. 하지만 켜놓으면 ftp 가 접근이 안되거나, 접근이 되어도 패시브모드가 접근이 안 되는 경우가 있다.

해결

아래 세가지 명령어를 실행해서 selinux 의 설정을 바꿔준다.

setsebool -P httpd_enable_homedirs 1
setsebool -P httpd_can_network_connect 1
setsebool -P allow_ftpd_full_acccess 1

여담

옵션명이 곧 설명을 대신한다고 믿는다.

lynx 리눅스 브라우저 사용법

· 약 1분

lynx(링스) 브라우저를 설치하고 사용해보자

설치

## 설치 확인
$ yum list installed | grep lynx

## lynx 설치
$ yum install -y lynx

예제

## lynx로 브라우저 호출
$ lynx https://gracefullight.github.io

## 브라우저 호출'만' 하고 싶을 때 (결과를 표시하지 않음)
$ lynx -dump https://gracefullight.github.io

여담

crontab과 병행해서 서버의 API를 주기적으로 동작시킬 수 있다.

CentOS Tomcat 및 Java(JDK) 설치

· 약 3분

rpm이 설치되어있지 않은 환경에서의 compile 설치 방법을 다룬다.

운영체제 확인

$ cat /etc/issue
## bit 확인
$ getconf LONG_BIT

JDK 설치

다운로드

여기에서 다운로드하면 된다. image from hexo

업로드 및 압축 해제

tar -zxvf jdk.tar.gz

경로 설정

$ vi .profile

## 추가 내용
export JAVA_HOME=/유저경로/java
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH=/bin:/usr/bin:/usr/local/bin:$JAVA_HOME/bin

## 저장
$ :wq!

bin 폴더 PATH들은 명령어를 위해 필요하고 $PATH < 기존 PATH를 추가하지 않는 이유는 TOMCAT 실행시 기본 설치 PATH를 먼저 읽어오기 때문이다.

경로 갱신

source .profile

설치 확인

javac -version

Tomcat 설치

다운로드

여기에서 다운로드하면 된다.

업로드 및 압축 해제

apache-tomcat-...의 이름이 길어 tomcat으로 변경 후 업로드하시면 편합니다.

tar -zxvf tomcat.tar.gz

경로 설정

$ vi .profile

## PATH 뒤에 tomcat/bin 경로를 추가
export PATH=/bin:/usr/bin:/usr/local/bin:$JAVA_HOME/bin:/home/myuser/tomcat/bin

경로 확인

$ $PATH

/bin:/usr/bin:/usr/local/bin:$JAVA_HOME/bin:/home/myuser/tomcat/bin
## 위에 설정한 PATH의 값이 보이면 정상

Tomcat 설정 추가

tomcat\bin\catalina.sh를 열고 Tomcat과 Java의 경로를 추가해준다.

CATALINA_HOME="/where/to/tomcat"
CATALINA_BASE="/where/to/tomcat"

JAVA_HOME="/where/to/java"

주의

catalina.sh의 주석 표시된 내용을 읽으면 변수를 추가하지 말고 setenv.sh를 만들어서 커스터마이징 옵션을 분리하라고 나온다.

setenv.sh를 수정하고 싶으면 파일을 열고 아래와 같이 추가해준다.

export CATALINA_HOME="/where/to/tomcat"
export CATALINA_BASE="/where/to/tomcat"

export JAVA_HOME="/where/to/java"

서버 실행

tomcat\webapps에 war파일을 옮긴 후 서버를 실행한다.

$ startup.sh

Tomcat started.

org.apache.ibatis.exceptions.PersistenceException

· 약 1분

원인

서버 Mysql이 예전 커넥션을 그대로 가지고 있어서 발생한다.

해결

Mybatis Config에 아래처럼 커넥션과 관련된 옵션을 추가한다.

<!-- @author http://linuxism.tistory.com/580 -->
<environments default="default">
<environment id="default">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>

<!-- 동시 커넥션 수 -->
<property name="poolMaximumActiveConnections" value="20"/>
<!-- 유휴상태의 커넥션 수 -->
<property name="poolMaximumIdleConnections" value="20"/>
<!-- 커넥션 요청 후 획득까지 기다리는 시간 -->
<property name="poolMaximumCheckoutTime" value="20000"/>
<!-- 커넥션 ping 테스트 -->
<property name="poolPingEnabled" value="true"/>
<!-- 커넥션 확인 쿼리 -->
<property name="poolPingQuery" value="select 1"/>
<!-- 커넥션이 얼마동안 사용하지 않으면 닫히는지 시간 설정 -->
<property name="poolPingConnectionsNotUsedFor" value="43200"/>
<!-- 사용불가능한 커넥션을 기다리는 시간 설정 -->
<property name="poolTimeToWait" value="30000"/>
<!-- 인코딩 -->
<property name="driver.encoding" value="UTF-8"/>
</dataSource>
</environment>
</environments>

java localhost HTTPS Connection

· 약 1분

localhost 에서 Https 페이지로 httpcon 을 열면 오류가 발생한다. 인증을 받아야하기 때문인데 함수하나만 호출하면 연결이 가능해진다.

소스

private void setTrustAllCerts() throws Exception{
TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted( java.security.cert.X509Certificate[] certs, String authType ) {}
public void checkServerTrusted( java.security.cert.X509Certificate[] certs, String authType ) {}
}
};

// Install the all-trusting trust manager
try {
SSLContext sc = SSLContext.getInstance( "SSL" );
sc.init( null, trustAllCerts, new java.security.SecureRandom() );
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(
new HostnameVerifier() {
public boolean verify(String urlHostName, SSLSession session) {
return true;
}
});
}
catch (Exception e) {
//We can not recover from this exception.
e.printStackTrace();
}
}

원본에서 가져왔다.

예제

HTTPCON 전에 호출하면 인증서 없이 HTTPS 연결이 가능하다.

Google Cloud Instance 무료 사용

· 약 3분

구글 클라우드 인스턴스를 생성해 무료 서버를 만들어보자.

프로젝트 생성

구글 클라우드 플랫폼에 로그인해 프로젝트 만들기 버튼을 클릭해 프로젝트를 생성한다. image from hexo

클라우드 서버 생성

좌측 메뉴 > Compute Engine > VM 인스턴스 메뉴에서 인스턴스 만들기 버튼을 클릭해 인스턴스를 생성한다. image from hexo

인스턴스 생성

이름은 하고싶은 이름으로 영역은 한국이니 아시아 데이터센터로 설정하고 머신 유형은 테스트용이니 초소형 공유 CPU를 사용하면 된다.

US 데이터 센터, 공유 CPU, HDD 30GB↓를 선택한다면 평생 무료로 바뀌었다. Free Tier 페이지에서 정책을 확인할 수 있다.

이미지에 원하는 OS 를 선택하면 되는데, CentOS 가 막강하니 선택해주자. 액세스 범위 영역에서 모든 Cloud API 액세스 허용을 해줘야 구글 내부 API 를 사용할 수 있다. image from hexo

돈이 나간다고 하는데 이미 무료 $300 이 있고, 6 개월간은 무료다. 기본 상품을 업그레이드 하지 않으면 과금이 발생하지 않는다.

SSH KEY 생성

직접 생성

ssh 접근을 위해 Git-bash 창을 열어 구글 계정으로 키를 생성한다.

ssh-keygen -t rsa -C "your google [email protected]"

Putty 로 생성

PuTTY Key Generator여기서 다운로드 받고 키를 생성한다. image from hexo Key Comment에 구글 계정을 넣어주고 Generate한 뒤 Key 를 추출하자

SSH Public KEY 등록

키 복사

유저 디렉토리의 .ssh 폴더로 이동해 공개 키 파일(.pub) 데이터를 복사하고 등록한다.

등록

메타데이터 메뉴에서 등록할 수 있다. image from hexo

SSH Private KEY 등록

각자 사용하는 쉘 프로그램에 Private Key 를 저장하는 기능이 있을 것이다. image from hexo Token2Shell 을 이용해 등록 후 접속한 화면

서버 세팅

yum 등의 root 명령어를 사용할 때는 sudo 를 붙혀주고 명령어를 입력하면 된다. yum update 를 먼저 실행해보자

sudo yum update

.NET에서 MySQL 사용자 변수 사용

· 약 1분

@value, @reg 같은 사용자 변수가 들어간 쿼리에서 오류가 발생한다.

해결

Connection을 맺을 때 Allow User Variables=True 옵션을 추가해줘야한다.

string conf = "Server=$Server;Port=$port;Database=$DataBase;Uid=$User;Pwd=$Password;Allow User Variables=True";