[ 배운 내용 ]
Chapter 1. Web
Chapter 2. Web Server
Chapter 3. Tomcat
Chapter 4. Web Server 구축 실습
Virtual Box를 사용해서 Ubuntu환경의 WAS용 DB용 2가지 서버를 만들어서 실습했다.
전반적으로 소공수업이랑 비슷한 내용이었다. AWS썼던것만 빼면 비슷한듯
리눅스 기본 명령어들을 오랜만에 다시 만져볼 수 있었던 것 같고 파일권한, 사용자생성 같은 개념들도 알아갔다.
DB서버에 MySQL을 설치해서 db와 유저를 만들었고,
WAS 서버에 Apache와 Tomcat을 설치했다.
ssh 원격접속, 포트번호도 다시 배워볼 수 있었다.
gnuboard 오픈소스를 clone해와서 홈페이지 샘플을 서버로 연결해서 외부에서 접속하는 실습도 해봤다.
외부에서 PHP 파일로 접근하는 실습도 해봤다.
Chapter 1. Web
Client와 Server
- 서버와 클라이언트는 컴퓨터 안의 프로세스라고 보면 된다. (=하나의 컴퓨터 안에 여러개가 존재할 수 O)
- 서버와 클라이언트는 상대적이다.
- 클라이언트 ex) 웹브라우저, putty 등
- 서버 ex) Apache2, Nginx 등
- 데이터베이스 ex) MySQL, 오라클DB 등
2 Tier
: 서버와 데이터베이스가 하나의 컴퓨터에 같이 존재하는 형태
- 소규모 네트워크에 적합
- 응답이 빠름
- 구조가 간단
3Tier
: 서버와 데이터베이스가 각각의 컴퓨터에 존재하는 형태
- 오류 발생에 대한 대응 용이
- 부하의 분산
- 웹서버와 DB에 다른 보안 적용 가능
3 Tier에서는 사용자 -> 서버 -> DB 를 거쳐서 요청이 간다.
Chapter 2. Web Server
Virtual Box에 Ubuntu 22.04 LTS 버전의 가상환경을 구성하고 Apache2 웹 서버를 구축하는 실습을 했다.
- 우분투 다운로드
Enterprise Open Source and Linux | Ubuntu
Ubuntu is the modern, open source operating system on Linux for the enterprise server, desktop, cloud, and IoT.
ubuntu.com
웹 서버와 DB서버로 사용할 가상머신 이름은 각각 Ubuntu_WAS와 Ubuntu_DB로 해줬다.
- 리눅스 기초 명령어
# 부팅할때마다 한번씩 업데이트 해줘야 한다.
$ sudo apt update
# vim 편집기 설치 (vim 설치하고 나면 vi입력해도 vim편집기로 실행됨 - vi보다 편하다고 한다.)
$ sudo apt install vim
# 파일 만들기
$ touch 파일명.txt
# 파일 내용 읽기
$ cat 파일명.txt
$ less 파일명.txt # 다른 화면에서 읽어보기 (파일의 내용이 많을 때 좋음)
# 파일명 변경
$ mv 원래파일.txt 바꿀이름.txt
# cp : 파일 복사
# mv : 파일 이동
# rm : 파일 삭제
# mkdir : 디렉토리 생성
# rm -r : 디렉토리는 -r을 붙여서 삭제해야함 (-rf : 강제로 삭제)
- 사용자 생성 및 삭제
사용자 생성이나 Application을 설치할 때는 sudo 명령어로 root권한을 사용해야 한다.
$ sudo adduser 사용자명
# 입력 후에 비밀번호도 설정해준다. (커서이동 안하니 주의)
# 계정만 생성하기 (홈디렉토리는 생성되지 X)
$ sudo useradd 사용자명
# 비밀번호 변경
$ sudo passwd 사용자명
# 계정(사용자) 리스트 확인 (root 비밀번호 물어봄)
$ sudo cat /etc/passwd
# 계정(사용자) 삭제
$ sudo userdel 사용자명
파일 권한
ls 명령어로 현재 디렉토리의 파일과 권한을 확인할 수 있다.
-rwxrwxrwx
각 3자리씩
- Owner(소유자) : 만든 사람
- Group
- Other : 일반 인터넷 접속자들
에 대한 권한을 뜻한다.
- r : read (읽기 권한)
- w : write (쓰기 권한)
- x : executable (실행 권한)
- - : 권한이 없음
가장 앞에 있는 글자의 의미는
- - : 파일
- d : 디렉토리
- rwx 각 권한은 4,2,1의 숫자로 표현되며 rwx의 조합은 0~7로 표현이 가능하다.
ex)
- -rw-r--r-- : 권한 644
- drw-r----- : 권한 640
- -rwxrwxrwx : 권한 777
- 권한 변경
# 파일.txt의 권한을 777로 변경 (777권한의 파일은 초록색으로 보임)
$ sudo chmod 777 파일.txt
- 파일에 내용 쓰기(write)
# 내용 파일에 덮어쓰기
$ echo "내용" > 파일.txt
# 내용 파일에 추가
$ echo "내용" >> 파일.txt
SSH 원격접속
ssh (Secure Shell)
: 원격에서 암호화를 지원하는 접속 서비스
$ sudo apt install ssh // ssh설치
$ sudo service sshd start // sshd 데몬 시작
$ sudo apt install net-tools // 네트워크 관리도구 설치
$ ifconfig // IP주소 확인
다른 기계에서 ssh로 리눅스 원격접속하기 (cmd 창 등에서)
$ ssh [리눅스ip주소] -l [계정명]
$ whoami // 접속한 사용자 확인
$ pwd // 현재 디렉토리 위치
$ exit // 접속 종료
- 데이터베이스 (MySQL) 설치 및 기초 명령어
$ sudo apt install mysql-server // MySQL 설치
$ sudo mysql -u root -p // root계정으로 MySQL접속 (root계정은 초기패스워드 없음. 그냥 엔터)
MySQL> create database aaaa; // 데이터베이스 aaaa 생성
MySQL> show databases; // 데이터베이스 목록
MySQL> use aaaa; // aaaa데이터베이스 사용
# 로컬호스트에서만 접속 가능한 사용자 생성 (외부에서 접속 X)
MySQL> create user 사용자명@localhost identified by '비밀번호';
# aaaa 데이터베이스에 대한 모든 권한 부여하기 (all privileges)
# *은 해당 디비의 모든 테이블을 의미
MySQL> grant all privileges on aaaa.*to 사용자명@localhost;
MySQL> exit // MySQL 종료
MySQL의 보안 강화 설정을 위해 다음 명령어로 꼭 설정을 해준다.
- root계정의 pw생성
- anonymous 유저 삭제
- 원격으로 root계정 접속을 막을지
- 테스트 db 삭제
등의 설정을 해준다.
$ sudo mysql_secure_installation
데이터베이스의 보안 원칙
Least Privilege (최소한의 특권)
- 루트 계정은 일반 업무에 사용할 경우 해킹 시 통제 불능이 되는 위험이 있기 때문에 일반적으로 로컬에서만 사용하도록 하고 일반 업무는 일반 사용자에게 권한을 부여하도록 한다.
- 일반 사용자 계정을 생성하고, 특정 업무 수행을 위해 권한을 최소한으로 부여해준다.
- root 계정을 직접 사용하는 것이 아니라 root권한으로 일반 사용자를 관리하는 권한을 가진 사용자를 생성해서 사용한다.
Chapter 3. Tomcat
Apache
- 1995년에 처음 발표된 www서버용 소프트웨어
- 대부분 운영체제가 호환되며 오픈소스로 자유롭게 사용 가능
- 가장 널리 쓰이는 웹서버(Web Server)
- 현재는 Apache2버전을 일반적으로 사용한다.
Tomcat
- 아파치 소프트웨어 재단에서 개발
- 서블릿 컨테이너만 있는 웹 애플리케이션 서버 (Web Application Server)
- WAS라고 말하는데, 이는 웹 서버 + 웹 컨테이너로 다양한 역할을 수행할 수 있는 서버를 뜻한다.
- 그냥 이미지,텍스트 등만 한번 띄워주는 웹서버와 다르게 WAS는 클라이언트의 요청이 들어오면 내부 실행 결과를 만들어내고 이를 다시 전달해주는 역할을 한다.
아파치와 톰캣의 연동
웹 페이지에는 정적, 동적 리소스가 모두 존재한다. 정적 데이터는 빠르게 응답 가능하지만 동적 데이터는 처리 시간이 오래 걸린다. 웹서버 없이 WAS만 사용하는 경우 WAS의 정적 데이터 처리로 인해 동적 데이터의 처리가 늦어지게 된다.
따라서 HTML이나 이미지 파일과 같은 정적 컨텐츠들은 WAS까지 거치는 것보다 웹 서버를 바로 통하는 것이 더 빠르다.
하나의 웹 서버에 여러개의 톰캣을 연결해서 분산시킬 수 있는 Load Balancing을 구현해서 역할을 분담하도록 하는 것이 좋다.
Ubuntu에 Apache-Tomcat 설치하기
- Apache-Tomcat 9.0.68 다운로드
https://tomcat.apache.org/download-90.cgi
Apache Tomcat® - Apache Tomcat 9 Software Downloads
Welcome to the Apache Tomcat® 9.x software download page. This page provides download links for obtaining the latest version of Tomcat 9.0.x software, as well as links to the archives of older releases. Unsure which version you need? Specification version
tomcat.apache.org
$ java -version // 자바 버전 확인 + 설치되어있는지 확인
$ sudo apt-get install openjdk-11-jdk // Open JDK 설치
$ mv ./Downloads/apache-tomcat-9.0.68.tar.gz .. // 다운받은 아파치톰캣을 홈 디렉토리로 갖고옴
$ tar xvf ./apache-tomcat-9.0.68.tar.gz // Tar 압축 풀기
톰캣의 bin 디렉토리에는 다음과 같은 파일들이 있다.
- catalina.sh : 실행 테스트 (개발 중 로그를 확인하기 위해 사용)
- startup.sh : 서비스 중 톰캣 서버를 실행시키려 할 때 사용
- shutdown.sh : 서비스 중 톰캣 서버를 중지시키려 할 때 사용
- 톰캣 실행
$ ./catalina.sh run
이후 http://localhost:8080으로 들어가면 톰캣이 실행된 것을 확인할 수 있다.
톰캣의 포트번호는 8080이 기본으로 설정되어 있다.
Virtual Box에 NAT 네트워크를 설정해주고 포트포워딩 설정을 해주면 가상머신이 아닌 호스트(노트북)에서도 접근 가능하다.
Apache-Tomcat 접속포트 변경하기
아파치톰캣의 conf 디렉토리로 이동하면 다음과 같은 파일들이 있다.
$ cd ./apache-tomcat-9.0.68/conf/
여기서 .xml파일은 다 톰캣의 설정파일이고, server.xml은 가장 강력한 환경설정 파일이다.
$ sudo vi server.xml
여기서 포트번호(기본 8080)을 9090으로 바꿔주었다.
$ ../bin/startup.sh // 톰캣 시작
톰캣을 시작해준 뒤 localhost:9090으로 접속해보면 접속이 되는 것을 확인할 수 있다. (8080으로는 이제 접속되지 않는다.)
참고로 Virtual Box의 NAT 네트워크 설정에서 9090번 포트를 포트포워딩 해주어야 한다!!
Chapter 4. Web Server 구축 실습 (3 Tier)
- DB서버 설정 (Ubuntu_DB 가상머신에서)
$ sudo apt update
$ sudo apt apt install vim
# Database 설치 (MySQL)
$ sudo apt install mysql-server
$ sudo mysql -u root -p
mysql> create database gnuboard;
mysql> show databases;
mysql> create user board@'%' identified by '비밀번호'; // '%' : ip주소를 가리지 않고 접근 가능한 사용자 (실제론 이렇게 하지 말것 -> Least Privilege)
mysql> grant all privileges on gnuboard.* to board@'%'; // board유저에게 gnuboard에 대한 권한 부여
mysql> exit
DB서버를 외부에서 사용할 수 있도록 설정해주어야 3 Tire로 구현이 가능하다.
Ubuntu_DB에서 vi 편집기로 mysqld.cnf의 bind-address를 주석처리해준다.
:set nu 로 vi편집기에서 줄번호를 볼 수 있다.
$ cd /etc/mysql/mysql.conf.d
$ sudo vi mysqld.cnf
# 설정해준 뒤
$ sudo service mysql restart // mysql 재시작
- 웹 서버 설정 (Ubuntu_WAS 가상머신에서)
$ sudo apt update
$ sudo apt install vim
$ sudo apt install apache2 -y // apache2 웹서버 설치
// 웹서버에서 사용할 언어 설치
$ sudo apt install php php-mysql php-common php-gd php-fpm php-xml php-json php-curl git
이후 gnuboard 소스코드를 clone해와서 php로 된 게시판 소스코드를 받아와보자
그누보드는 간단한 게시판 홈페이지가 구현되어있는 소스코드다.
https://github.com/gnuboard/gnuboard5
GitHub - gnuboard/gnuboard5: 그누보드5 (영카트 포함) 공개형 Git
그누보드5 (영카트 포함) 공개형 Git. Contribute to gnuboard/gnuboard5 development by creating an account on GitHub.
github.com
- 게시판 소스 다운로드
$ cd /var/www/html
$ sudo git clone https://github.com.gnuboard/gnuboard5
$ cd gnuboards5
$ sudo mkdir data // 사용자들이 업로드할 데이터 디렉토리 생성
$ sudo chmod 707 data // 누구나 읽고 쓰기 가능하도록 설정 (other에도 rwx권한을 줌)
$ sudo apt install net-tools
$ ifconfig // ip주소 확인
$ sudo service apache2 restart
브라우저에서 확인한 주소로의 IP/gnuboard5 로 이동해서 확인해보면 그누보드 설정 페이지가 나온다.
설정과 필요한 정보를 입력해주면
아래와 같이 웹서버에 구성된 그누보드 게시판을 사용할 수 있게 된다.
'KT AIVLE School' 카테고리의 다른 글
(16주차 - 22.11.03~22.11.04) 가상화 클라우드2 - 쿠버네티스(k8s) (0) | 2022.11.03 |
---|---|
(16주차 - 22.11.02~22.11.03) 가상화 클라우드1 - AWS (0) | 2022.11.03 |
(12주차 - 22.10.05) 언어지능딥러닝3 - CNN 기반 자연어처리 (0) | 2022.10.09 |
(12주차 - 22.10.04) 언어지능딥러닝2 - 텍스트 마이닝, 워드 임베딩 (0) | 2022.10.05 |
(12주차 - 22.09.30) 언어지능딥러닝1 - 자연어처리 기술, 기계학습 기반 자연어처리 (0) | 2022.10.01 |