1. 라즈베리 OS 설치

공식 홈페이지에서 제공하는 설명대로 진행하면 설치는 쉽게 된다.

설치된 SD카드를 연결하고, 마우스, 키보드, HDMI등을 연결한다.

충전기를 마지막으로 연결 시켜야 고장이 적다고한다.

일반 라즈베리 파이에 휴대폰 충전기를 사용하면 안켜지거나, 중간에 멈춰 먹통이 되버린다. 2A 이상의 충전기를 사용하면 되는데, 나는 Mac Mini에 연결해서 사용하고 있다.

Raspberry Pi OS – Raspberry Pi


라즈베리 한글 깨짐

참고: https://fortruth.tistory.com/9

처음 라즈베리 OS를 키면 날짜, 키보드언어, 와이파이 등 기본적인 세팅을 하게 되는데, south korea로 언어를 설정하면 한글이 깨지게된다.

참고 주소에서는 ibus가 여러 문제가 있어 fcitx로 설정한다고 한다.

아래 명령어를 실행 후에 재부팅을 한다.

sudo apt-get install fcitx
sudo apt-get install fcitx-hangul
sudo apt install fonts-nanum fonts-nanum-extra

라즈베리 파이 안전하게 종료하기

라즈베리 파이를 종료 할 때는 아래 종료 명령어를 실행 후에 전원을 끄거나, SD카드를 분리하는 것이 좋다.

종료

sudo shutdown -h now

재시작

sudo shutdown -r now

2. 기본 환경 설정

sudo raspi-config 명령을 통해 라즈베리파이 설정 도구(Raspberry Pi Software Configuration Tool)를 실행한다.

명령어를 실행하면 아래와 같은 설정 도구가 실행된다.

라즈베리 OS
라즈베리 OS

2.1 비밀번호 변경

(주의) 키보드 설정을 하기 전에는 !@#$^& 등의 문자를 사용하지 않는 비밀번호를 사용한다.

기본 비밀번호

아직 아무런 설정도 하지 않았기 때문에 기본 비밀번호를 가지고 있다.

추후 보안 상 문제로 수정해야하긴한다.

userID: pi

password: raspberry

2.2 Locale 변경

에러 발생 시 한글이 어렵다면 아래대로 설정한다.

  1. 5. Localisation Options -> I1 Change Locale 클릭
  2. 쭉 내려가서 [*] en_US.UTF-8 UTF-8 선택 (스페이스바 사용) 후 OK
    • ko_KR.UTF-8 UTF-8을 사용하면 에러 메세지로 구글링하기가 더 어려워서 미국으로 선택했다.
  3. Default locale for the system environment 를 묻는 화면에서 en.US.UTF-8 선택 후 OK

2**.3. Keyboard Layout 설정**

  1. 5. Localisation Options -> I3 Change Keyboard Layout 클릭
  2. 자세히 설명된 글을 참고하여 키보드를 설정한다.
  3. 설정하지 않으면 !@#$%^&*() 등의 Shift+숫자키로 사용하는 키를 사용할 수 없다고 한다.
  4. 해피해킹도 선택지에 있어서 기뻤다.

2.4. Wi-fi 설정 (raspi-config 사용)

2.5. Wi-fi 설정 (wpa_passphrase 사용)

와이파이가 잘 연결되서 따로 설정파일을 건드리지 않았다.

2.6 SSH 허용 및 접속

원격으로 접속해서 사용하기 위해서 SSH와 VNC를 활성화 해줘야한다.

라즈베리 기본설정→ Raspberry Pi Configuration 에서 Interfaces 에서 Enable로 변경해준다.

라즈베리 설정화면
라즈베리 설정화면

SSH 접속

mac의 경우 ssh가 기본적으로 깔려 있기에 아래 명령어가 가능하다. 윈도우의 경우 putty를 사용해서 접속 할 수 있다. SSH를 이용하는 경우는 서버를 올리거나 내릴 경우 사용 할 것 같다.

  • (내부망) 주로 사용하는 PC/랩탑에서 $ssh pi@{내부 IP 주소} (192.168.0.2)
  • (외부망) 포트포워드 설정 후 $ssh -p {외부포트} pi@{외부 IP주소 혹은 도메인명}로 접속

느린 SSH 로그인 문제 해결

  • 가끔 ssh 로그인 시도를 하면 엄청 느리게 응답이 오는 현상이 있는데, DNS 조회 설정 변경으로 이를 해결할 수 있다.
  • $ sudo vi /etc/ssh/sshd_config 명령으로 설정파일에 접근.
  • 파일 하단 쯤에 주석처리 되어있는 #UseDNS no의 주석(#)을 해제.
  • $ sudo service ssh restart 명령으로 sshd 재시작.

원격접속

Mac의 경우: Microsoft Remote Desktop을 App store에서 다운해서 사용한다.

Window의 경우: 기본적으로 깔려 있는 원격접속을 이용한다.

3. 네트워크 설정

3.1 내부IP 고정

기기를 wi-fi 설정한 순서에 따라 임의로 내부IP(사설IP)를 할당한다.

현재 라즈베리 파이는 192.168.0.2로 설정이 되어있는데, 공유기에 전원이 차단되어 공유기가 재부팅되는 경우 내부 IP 설정이 초기화 될 수 있다.

이런 상황을 대비해서 내부 IP를 공유기 내에서 고정시키는 것이 좋다.

  1. ipTIME 접속 (192.168.0.1)
  2. 고급설정 – 네트워크 관리 – DHCP 서버 설정
  3. 하단에 [사용중인 IP 주소 정보] 중 라즈베리파이의 체크박스를 클릭하고 위에 등록 버튼을 클릭
ip 설정화면
ip 설정화면

3.2 DDNS 설정

ISP 사업자(KT, SKT 등)는 DHCP(동적호스트를 제공하는 프로토콜)을 통해 가정집에 유동 IP를 할당해준다.

유동IP라도 IP가 자주 바뀌지는 않는다.

하지만 ISP 사업자가 DHCP 서버를 리셋하는 등의 수작을 부리면 우리집에 할당되었던 IP가 변경된다.

이 경우 DNS에 등록한 A 레코드(IP주소)가 변경된 것이기 때문에, A 레코드를 새로운 IP로 변경하여 도메인이 새 IP를 바라보게 해야한다.

그런데 DDNS 서비스를 사용하면 A레코드의 변경을 감지해서 자동으로 업데이트 해주기 때문에,IP 변경에 신경 쓸 필요없이 고정IP 처럼 사용할 수 있다.

편리하게도 ipTIME에서 자체 DDNS 서비스를 제공한다.구입한 도메인의 CNAME(혹은 ANAME, 혹은 Alias)으로 ipTIME DDNS를 등록해서 고정IP 처럼 사용할 예정이다.

  1. ipTIME 접속 (192.168.0.1)
  2. 고급설정 – 특수기능 – DDNS 설정
  3. 호스트이름과 사용자 ID 입력 후 생성
    • 이제 외부IP 대신 도메인(hoon.iptime.org)으로 라즈베리파이에 접근할 수 있다.
DDNS 설정화면
DDNS 설정화면

3.3 포트포워딩 설정

외부에서 라즈베리파이 IP로 접근 할 때 특정 외부포트에 따라 내부포트로 연결시켜주는 작업을 해야한다.

  1. ipTIME 접속 (192.168.0.1)
  2. 고급설정 – NAT/라우터 관리 – 포트포워드 설정
  3. 새 규칙 추가
    • 규칙이름: 사용자 정의
    • 내부 IP주소: 3.7에서 확인한 라즈베리파이의 IP주소 입력
    • 프로토콜: TCP
    • 외부 포트: 예시- 9000(ssh), 443(https), 80(http), 9001(vnc)
    • 내부 포트: 22(ssh), 443(https), 80(http), 5900(vnc) 등
포트포워드 설정화면
포트포워드 설정화면

3.4 iPTIME 원격접속 허용

  1. ipTIME 접속 (192.168.0.1)
  2. 고급설정 – 보안기능 – 공유기 접속/보안관리
  3. 원격 관리 포트 사용 체크 및 원하는 포트번호 설정
  4. 설정해둔 ipTIME의 DDNS 도메인 + 포트번호로 원격에서 ipTIME 접근 가능

딱히 외부에서 ipTIME을 접속 할 일이 없을 거 같아 따로 설정하지는 않았다.

웹 서버와 웹 컨테이너

다른 사람들은 Nginx, PHP를 많이 사용하는 것 같다. 자바를 사용하는 Rest API Server만을 세팅을하고 정적페이지는 사용하지 않을 예정이기 때문에 웹 서버인 Apache나 Nginx 같은 것들이 필요 한가 라는 생각도 든다. 자바의 서블릿이 실행 할 수 있게 톰캣을 설정해야하는데, 톰캣의 경우 웹 서버와 연동하여 실행 할 수 있는 자바환경을 제공하는 웹 컨테이너이기에 아파치, 톰캣 모두 설정을 하기로 했다.

기본적인 웹서버 설정하기 : https://www.tomshardware.com/news/raspberry-pi-web-server,40174.html

아파치, 톰캣 연동하기 : https://ryans-log.tistory.com/entry/install-apache-tomcat-and-modejk

스프링 부트로 RestAPI 서버 구축하기 : https://binit.tistory.com/13

→ war 파일로 전달해서

중단!

  1. 공인 ip
  2. 내 외부 IP

집에서 고정 공인 ip를 사용하면 통신사에게 월 2~3만원의 비용을 지불해야하며 보안상의 문제도 있다. 집에서 나 혼자 개발서버로 사용함에는 부족함이 없으나, sd카드가 빨리 죽어버리는 문제도 있고 다른 사람들과 협업하면서 작업을 한다면 AWS로 하는게 프로젝트 안정성을 위해 맞는 것 같다.

결론

  1. 우리집은 고정 IP도 공인 IP도 아니여서 서버로 사용 할 수 없다.
  2. SD카드가 자주 죽기때문에 안정성이 떨어진다.
  3. 집을 고정 ip 서버로 만들면서, 보안의 문제가 있다.

IpTIME에서 3.2 DDNS 설정 을 제공하기 때문에 이를 이용해서 웹 서버를 만들 수는 있어보이나 rest api server을 구축 하기에는 어려워 보인다.

집에서 혼자 사용하는 로컬 개발 서버로 적합하다고 판단이 되었다.

실제 서버로 운용하기에는 불편한 점이 너무 많고, 현재상황에서 추가적인 금액없이 사용하려면 → 내 컴퓨터로 원격 접속 → 라즈베리파이로 이동 해야하는데 의미가 없다고 본다.

다만 추후 AWS나 firebase를 진행하면서, 고정적인 공인IP를 사용 할 수 있고 SD카드가 죽어도 상관없게 db 백업, java 소스 백업 관리가 잘 될 수 있다면 다시 한번 사용 해 볼 용의가 있다.