개요

 

서버 API를 구현하다 보면 GET과 POST를 볼 수 있다.

필자는 이 둘의 차이가 Parameter가 URL에 표시되는지 정도 차이인 줄 알았다.

이 둘의 정확한 차이점과 사용이유를 알아보자.

 

GET과 POST의 차이점

 

흔히들 DB로부터 데이터 리스트를 불러올 때는 GET

생성, 수정, 삭제 등 데이터 변경 시 POST를 사용한다고 알고 있다. 왜 그럴까?

GET과 POST의 특징

GET POST
GET 요청은 실패 시 될 때까지 반복한다. POST 요청은 실패 시 반복하지 않는다.
캐시 가능하다. 캐시 불가능하다.
히트토리에 남는다. 히스토리에 남지 않는다.
북마크 될 수 있다. 북마크 될 수 없다.
파라미터가 노출된다. 파라미터가 노출되지 않는다.

 

필자가 알았던 건 맨 밑 사항이고

제일 중요한 사항은 맨 위 사항이다.

GET 요청은 실패 시 요청이 성공할 때까지 반복하여 요청한다.

인터넷 비연결 시 웹 페이지를 로드하면 웹 페이지가 뜨지 않다가

인터넷이 연결됐을 때 웹 페이지가 새로고침 되면서

화면에 나타나는 경우를 보았을 것이다. 이는 GET의 특성 때문이다.

 

하지만 POST가 같은 동작을 한다면 실패 시 요청이 계속 들어가고

혹여나 데이터 변형이 중복으로 적용될 수 있다. 이는 오류 발생으로 직결된다.

따라서 POST는 설계 상 실패 시 반복 요청하지 않게 설계돼있다.

이러한 차이가 있어서 리스트와 업데이트에 GET과 POST를 쓰는 것이다.  

 

반응형

개요

 

1. https ssh 인증서 발급 이유 (추후 올릴 예정)

2.  Let's Encrypt  SSL 인증서 발급 방법

  • webroot
    • 사이트 디렉토리 내에 인증서 유효성을 확인할 수 있는 파일을 업로드하여 인증서를 발급하는 방법
    • 실제 작동하고 있는 웹서버의 특정 데렉토리의 특정 파일 쓰기 작업을 통해서 인증
    • 장점 : nginx를 중단시킬 필요 X
    • 단점 : 인증 명령에 하나의 도메인 인증서만 발급 가능
  • 웹서버
    • Nginx나 아파치와 같은 웹서버에서 직접 SSL 인증을 실시하고 웹서버에 맞는 SSL세팅값을 부여
    • 발급이나 갱신을 위해 웹서버를 중단시킬 필요가 없음
    • 인증서 갱신 시 상황에 맞게 세팅을 자동으로 업데이트
    • 사용자가 세팅을 변경할 수 있지만 자동 업데이트 시 반영되지는 않음
  • Standalone
    • 사이트 작동을 멈추고 이 사이트의 네크워킹을 이용해 사이트 유효성을 확인해 Let’s Encrypt SSL 인증서를 발급하는 방식
    • 80 포트로 가상 staandalone 웹서버를 띄워 인증서를 발급
    • 장점 : 동시에 여러 도메인을 발급받을 수 있음
    • 단점 : 발급 전에 Nginx를 중단하고 발급 완료 후 다시 Nginx를 시작해야 함
  • DNS
    • 도메인을 쿼리해 확인되는 TXT 레코드로 사이트 유효성을 확인하는 방법
    • 와일드카드 방식으로 인증서를 발급 가능
    • 서버 관리자가 도메인 DNS를 관리/수정할 수 있어야 함
    • 인증서 갱신 시마다 DNS에서 TXT값을 변경해야 함
    • 외부에서 TXT 레코드를 입력할 수 있도록 DNS가 API를 제공하는 경우만 갱신 과정을 자동으로 처리

 

방법

 

1. Let's Encrypt 설치하기

  • 깃 사용을 위한 설치 (있으면 패스)
$sudo apt-get update
$sudo apt-get install git bc

 

  • 깃에서 Let's Encrypt 다운로드
$sudo git clone https://github.com/letsencrypt/letsencrypt [설치할 디렉토리]

 

뒤에 한칸 띄고 설치할 디렉토리 경로를 적어준다. ex) /opt/letsencrypt

 

2. 인증서 가져오기

 

Let's Encrypt 의 인증 방식인 Standalone plugin 은 서버 인증을 위해서 80 포트를 이용한다.

따라서 nginx, apache 와 같이 80 포트를 이용하는 서비스가 있다면 서버를 일시적으로 정지시켜줘야 한다.

정지하지 않으면 아래와 같은 오류가 발행한다.

  • 서버 정지
$sudo service nginx stop

 

서버가 정지됐는지 확인도 해본다.

$netstat -na | grep '80.*LISTEN'

 

  • cd를 통해 letsencrypt 설치한 디렉토리로 이동 (1번에서 지정한 디렉토리)
  • Standalone plugin 활용하여 인증서 발급
$sudo letsencrypt certonly -a standalone -d [발급받을 도메인]

발급받을 도메인이 여러 개라면

$sudo letsencrypt certonly -a standalone -d [발급받을 도메인1] -d [발급받을 도메인2] -d [발급받을 도메인3]

이처럼 여러 개도 지정 가능하다.

위 명령어를 실행한 이후 이메일을 작성하라 한다.

긴급 통보 혹은 키 복구를 위해 사용되니 실제 메일 받을 이메일을 적으면 된다.

이후 이용약관에 동의하라는 < Agree > 버튼이 나오면 선택한다.

위 사항을 완료하면 /etc/letsencrypt/live/도메인/ 디렉토리에 pem 파일이 생긴다.

live 디렉토리

도메인은 위에 -d 뒤에 작성한 도메인이다.

pem 파일

  • cert.pem : 도메인 인증서
  • chain.pem : Let's Encrypt chain 인증서
  • fullchain.pem : cert.pem 과 chain 인증서 합본
  • privkey.pem : 개인키

 

3. jks 생성하기

ssl 인증서 저장소인 jks를 생성한다.

java 기반 서버 코드 연동 시 해당 키 스토어의 키가 필요하다.

앞서 만든 pem으로 만들면 된다.

$sudo openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out cert_and_key.p12 -CAfile chain.pem -caname [유저아이디]

 

위 구문을 실행하면 아래와 같이 도메인 폴더에 p12파일이 생긴다.

 

p12파일은 PKCS#12 파일로써 공개키 기반 구조 (PKI, Public Key Infrastructure)에서

인터넷을 이용해 안전하게 정보를 교환하기 위한 제조사간 비공식 표준 프로토콜이다.

$sudo keytool -importkeystore -destkeystore keyStore.jks -srckeystore cert_and_key.p12 -srcstoretype PKCS12

 

그다음 위 구문을 실행하면 키를 비대칭 암호화 시스템 기반으로 jks를 만들어준다.

암호를 입력하라는 구문이 나오면 사용할 암호를 입력하면 된다.

해당 암호는 이후 java keystore password로 쓰인다.

아래와 같이 도메인 폴더에 jks 파일이 생성된다.

 

4. NginX에 SSL 설정하기

/etc/nginx/sites-available/ 폴더에 가면 도메인 이름의 파일이 있을 것이다.

nano로 해당 파일을 연 다음

server {
		# 사용할 포트 적어주면 된다.
        listen 7000 ssl;
        listen [::]:7000 ssl;

	[도메인 ,로 여러개 써도됨];

        root frontend 파일 위치;
        index index.html;

	ssl_certificate /etc/letsencrypt/live/도메인/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/도메인/privkey.pem;	

    location ~* \.(?:manifest|appcache|html?|xml|json)$ {
      expires -1;
      # access_log logs/static.log; # I don't usually include a static log
    }

    location ~* \.(?:css|js)$ {
      try_files $uri =404;
      expires 1y;
      access_log off;
      add_header Cache-Control "public";
    }

    # Any route containing a file extension (e.g. /devicesfile.js)
    location ~ ^.+\..+$ {
      try_files $uri =404;
    }

    # Any route that doesn't have a file extension (e.g. /devices)
    location / {
        try_files $uri $uri/ /index.html;
    }
}

 

해당 구문을 작성한다.

포트는 자유로이 설정하고 도메인은 위에 넣었던 도메인을 넣어주면 된다.

이후 nginx를 restart 하면 적용된다!

반응형

 

개요

 

리눅스 운영체제에는 데비안 계열, 레드햇 계열, 슬렉웨어 계열이 있다.

각 계열마다 설치 방법이 다르기 때문에 나의 OS를 확인한 후에 알맞게 설치해야한다.

필자는 데비안 10을 이용 중인데 레드햇 계열인 cent OS로 했기 때문에 재설치해야 했다.

여기서는 데비안 계열에서의 MySQL설치를 다룬다.

 

방법

 

1. MySQL 매니징 소프트웨어 추가하기

MySQL 다운로드와 설정을 도와주는 매니저를 레포지토리에 추가한다.

$ cd /tmp
$ wget https://dev.mysql.com/get/mysql-apt-config_0.8.13-1_all.deb
$ sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb

 

위 코드의 3번째 row까지 수행하면 아래 화면이 나온다.

OK를 누르면 알아서 최신 stable 버전으로 다운로드해준다.

다른 버전을 다운로드하고 싶다면 맨 위 항목에서 지정 가능하다.

최신 stable 버전으로 받는 것을 추천한다.

 

 

2. MySQL 설치하기

MySQL APT 패키지 캐시를 업데이트한 후 MySQL 서버 패키지를 설치한다.

$ sudo apt update
$ sudo apt install mysql-server

 

설치 도중 아래와 같이 비밀번호 입력 화면이 나온다.

MySQL의 root 계정 세팅으로 사용할 root 계정의 비밀번호를 입력해주면 된다.

 

 

그다음 아래와 같은 화면이 나오면 아래 방향키 누른 후 OK위에 커서 올라가면 엔터 누르면 된다.

 

그다음 나오는 화면은 추가 옵션 선택란이다. 뭐든 추천해주는 게 좋다. 추천하는 거 (위에꺼) 엔터 친다.

 

3. 설치 확인

$ sudo systemctl status mysql

 

위 구문을 입력했을 때 아래와 같은 화면이 뜬다면 잘 설치되고 돌아간다는 뜻이다.

 

$ sudo systemctl start mysql 
$ sudo systemctl restart mysql 
$ sudo systemctl stop mysql 
$ sudo systemctl reload mysql

 

위와 같이 4개의 커맨드로 끄고 키고 재시작할 수 있다.

끄면 아래와 같이 나타난다.

 

 

반응형

 

개요

 

원격으로 root 계정 직접 접속이 가능하면 해커에게 아무 방어선 없이 일차로 뚫릴 수 있는 여지를 준다.

타계정으로 로그인하고, 계정 전환(su)을 통해 root로 로그인하거나 권한 사용(sudo)으로 접근할 수 있도록

설정하여 방어선을 두는게 좋다.

 

방법

 

필자는 debian 10 환경에서 SSH 원격 접속 차단을 활용했다.

# vi /etc/ssh/sshd_config

를 통해 접속하면 Port 변경때 봤던 설정 소스가 나타난다.

Port 변경 참고

2021.07.06 - [Linux] - [Linux] 리눅스 ssh port 변경

 

[Linux] 리눅스 ssh port 변경

root 권한일 때를 예로 들겠습니다. 일반 유저일 때는 모든 구문 앞에 sudo를 붙이면 됩니다. 1. 현재 포트 확인 # cat /etc/ssh/sshd_config | egrep ^\#?Port 이와 같이 현재 포트 번호를 확인할 수 있다. 2...

gomgomkim.tistory.com

 

해당 소스코드에서 위와같이 PermitRootLogin 항목을 no로 주면 원겹접속이 차단된다.

 

반응형

+ Recent posts