2019년 9월 30일 월요일

[Selenium] 1. Java와 Firefox를 이용하여 Google검색 자동화 하기

개요

Selenium은 브라우저를 자동화 할 수 있는 도구이며
일반적으로 이를 이용하여 자동화 테스트를 수행하거나 웹 크롤링 등을 수행할 수 있습니다.

해당 가이드에서는 Java와 Selenium, Firefox Driver를 사용하여
구글에 접속 후 검색어를 입력하고 검색하는 테스트 코드를 작성합니다.

해당 가이드는 다음과 같은 준비물이 필요합니다.
  • Java JDK
  • Eclipse IDE
  • Firefox Web Browser (다른 브라우저도 사용 가능하지만 해당 가이드에서는 Firefox를 이용한 방법을 다룹니다. Firefox외의 브라우저는 https://www.seleniumhq.org/download/에서 해당 브라우저에 맞는 Web Driver를 찾으시길 바랍니다.)

프로젝트 생성

예제 작성을 위한 프로젝트를 생성합니다.
메뉴의 File - New - Project...를 클릭한 뒤 Maven Project를 선택합니다.
Eclipse New Project Window
아래와 같이 프로젝트 정보를 입력한 후 프로젝트를 생성합니다.
Eclipse New Maven Project Window

Web Driver 다운로드

https://github.com/mozilla/geckodriver/releases에 접속하여 자신의 OS에 맞는 Firefox 드라이버를 다운로드 받습니다.
geckodriver releases Assets Download Page

다운받은 압축파일을 해제한 뒤 geckodriver 파일을 프로젝트의 resources 폴더로 이동시킵니다.
geckodriver on resources folder picture
geckodriver는 Linux 계열, geckodriver.exe는 Windows 계열 OS에서 사용 가능한 파일입니다. 필요한 Driver만 다운로드하여 추가하면 됩니다.

Selenium 의존성 추가

pom.xml 파일의 dependencies 태그 내에 다음 내용을 추가하여 Selenium을 사용하기 위한 Maven 의존성을 추가합니다.

<dependency>
 <groupId>org.seleniumhq.selenium</groupId>
 <artifactId>selenium-java</artifactId>
 <version>${selenium.version}</version>
</dependency>

Selenium은 문서 작성 기준 3.141.59버전을 사용했습니다.

자동화 테스트 작성

의존성 추가 후 Selenium을 테스트하는 간단한 예제를 작성해봅니다.

다음은 Firefox Driver를 생성하고
Google에 접속한 뒤 "Selenium WebDriver"검색하여 나온 결과를
로그에 소스 코드로 출력하는 예제입니다.

코드를 실행하기 전 GECKO_DRIVER_PATH를 resources 폴더에 추가한 geckodriver 파일명에 맞도록 수정해야 합니다.

package com.jeent.alcohol;

import java.nio.file.FileSystems;
import java.nio.file.Path;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

public class SeleniumTests {
 

public static final String DRIVER_PROPERTY = 
   "webdriver.gecko.driver";

 // TODO: resources 폴더 내의 geckodriver파일명에 맞춰 수정해줍니다.
public static final String GECKO_DRIVER_PATH = "src/main/resources/geckodriver.exe"; public static void main(String[] args) { Path path = FileSystems.getDefault().getPath(GECKO_DRIVER_PATH); System.setProperty(DRIVER_PROPERTY, path.toString()); WebDriver driver = new FirefoxDriver(); driver.get("https://www.google.com"); driver.findElement(By.name("q")).sendKeys("Selenium WebDriver"); driver.findElement(By.name("f")).submit(); new WebDriverWait(driver, 20).until( ExpectedConditions.visibilityOfElementLocated(By.id("resultStats"))); String source = driver.getPageSource(); System.out.println(source); } }

main 메서드를 실행하면 Firefox 브라우저가 실행되면서 예제 코드에서 작성한 동작이 수행되는 것을 확인할 수 있습니다.

Selenium을 활용하면 브라우저를 제어 할 수 있는 것 뿐만 아니라, 브라우저에 출력되는 내용을 읽어서 데이터화하는 크롤링 작업도 가능합니다.

다음 가이드에서는 예제에서 사용된 WebDriverWait 클래스의 용도를 자세히 알아보고 이어서 유튜브 재생목록을 크롤링하는 예제를 작성해 보도록 하겠습니다.

2019년 9월 29일 일요일

CentOS 8 에 MariaDB 및 phpMyAdmin 설치하기

해당 문서는 MySQL과 호환되는 데이터베이스인 MariaDB와 
PHP로 개발되어 웹 환경에서 DB를 관리할 수 있는 도구인 phpMyAdmin을 
CentOS 8버전에 설치하는 방법을 설명합니다.

학습 및 실습 중 작성된 문서이므로 문서에 오류가 존재할 수 있습니다. 잘못된 점에 대한 지적은 언제나 환영합니다.

MariaDB

시스템 업데이트

MariaDB를 설치하기 전 다음 명령어로 CentOS 시스템을 업데이트 합니다.

sudo dnf -y update

MariaDB 서버 설치

아래의 명령어로 Repository에 MariaDB가 존재하는지, 어느 버전인지 확인합니다.

dnf info mariadb

확인 시점 기준 최신버전은  10.3.11버전이며, AppStream Repository에 포함되어 있습니다.

다음 명령어로 MariaDB를 설치합니다.

sudo dnf module install mariadb

설치 확인

설치가 완료되면 다음 명령어로 MariaDB 설치 여부와 설치 버전 등의 정보를 확인할 수 있습니다.

rpm -qi mariadb-server

MariaDB 실행하기

설치된 MariaDB를 실행하고 서버가 시작될 때 같이 실행될 수 있도록 시작프로그램에 등록합니다.
다음의 명령어를 이용하여 시작프로그램에 등록합니다.

sudo systemctl enable --now mariadb

다음 명령어로 시작프로그램에 등록되었는지, 서비스가 실행중인지 확인할 수 있습니다.

systemctl status mariadb

기본 보안 설정

서버가 정상적으로 등록되고 실행되었다면 아래의 명령어를 이용해서 기본 보안설정을 실시합니다.

mysql_secure_installation

명령어를 실행 후 출력되는 스크립트에 따라 보안 설정을 합니다.

Enter current password for root (enter for none):
OK, successfully used password, moving on...
Secure Installation을 수행하기 위해 root 비밀번호를 입력합니다.
초기 root비밀번호는 없기 때문에 공백 상태로 Enter를 누릅니다.

Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!
새로운 root비밀번호와 비밀번호 확인을 입력합니다.

Remove anonymous users? [Y/n] y
 ... Success!
보안을 위해 익명 사용자를 제거합니다.

Disallow root login remotely? [Y/n] y
 ... Success!
원격에서 root계정으로 접속할 수 없도록 합니다.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
test데이터베이스를 삭제합니다.

Reload privilege tables now? [Y/n] y
 ... Success!
권한 테이블을 리로드 합니다.

MariaDB서버에 접속하기

테스트를 위해 root계정으로 데이터베이스 서버에 접속해봅니다.
아래의 명령어를 이용하여 접속합니다.

mysql -u root -p

접속을 성공하면 환영메세지와 함게 MariaDB 콘솔을 확인할 수 있습니다.
여기까지 성공하였다면 MariaDB 설치와 설정은 끝났습니다.

phpMyAdmin

phpMyAdmin은 PHP로 작성 되어있기 때문에 PHP와 Apache를 설치한 뒤 phpMyAdmin을 설치하는 방법을 설명합니다.

PHP 설치하기

다음 명령어로 설치 가능한 PHP모듈을 확인합니다.

dnf module list | grep php

PHP 7.2 버전이 제공되는 것을 확인할 수 있습니다.
아래의 명령어로 PHP를 설치합니다.

sudo dnf module install php

설치 후 php -v 명령어로 설치된 PHP버전을 확인할 수 있습니다.

다음의 명령어로 php-mysqlnd 확장기능을 설치합니다.

sudo dnf install php-mysqlnd

설치 후 다음의 명령어로 mysqlnd가 설치되어있는지 확인할 수 있습니다.

php -m | grep mysqlnd

Apache Web Server 설치

Apache 웹 서버 패키지인 httpd를 설치합니다.
아래의 명령어로 Apache 서버 패키지인 httpd를 설치 가능한지 확인합니다.
dnf module list | grep httpd

아래의 명령어로 httpd 모듈의 상세정보를 확인할 수 있습니다.
dnf module info httpd

아래의 명령어로 httpd를 설치합니다.
sudo dnf module install httpd

설치가 완료되면 httpd를 실행시키고 시작프로그램에 등록하기 위해 아래의 명령어로 실행합니다.

sudo systemctl enable --now httpd

phpMyAdmin 설치

다운로드

phpMyAdmin 다운로드 페이지에 접속하여 최신버전의 phpMyAdmin tar.gz 압축 파일의 다운로드 URL을 복사합니다.

복사한 URL을 wget명령어로 다운받습니다.

cd ~
wget https://www.phpmyadmin.net/downloads/

압축 해제

phpMyAdmin 폴더를 생성한 뒤 다운받은 압축파일을 압축해제합니다.

sudo mkdir /usr/share/phpmyadmin
sudo tar xvf phpMyAdmin-4.9.1-all-languages.tar.gz -C /usr/share/phpmyadmin/ --strip-components=1

임시파일 디렉토리 생성

임시파일이 저장될 디렉토리를 생성하고 권한을 설정합니다.

sudo mkdir -p /var/lib/phpmyadmin/tmp
sudo chown -R apache:apache /var/lib/phpmyadmin

config.inc.php 파일 생성

샘플 파일을 복사하여 설정파일을 생성합니다.

sudo cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php

생성한 config 파일을 수정합니다.

sudo vim /usr/share/phpmyadmin/config.inc.php

$cfg['blowfish_secret'] = ''
부분에 문자열로 된 비멀번호를 추가합니다.

설정파일 하단에
$cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';
내용을 추가하여 임시파일 경로를 설정합니다.

Apache Web Server 설정

httpd 설정파일에 phpmyadmin 내용을 추가하여 접속이 가능하도록 설정합니다.

sudo vim /etc/httpd/conf.d/phpmyadmin.conf

phpmyadmin.conf 내에 다음 내용을 추가한 뒤 저장합니다.
# Apache configuration for phpMyAdmin
Alias /phpMyAdmin /usr/share/phpmyadmin/
Alias /phpmyadmin /usr/share/phpmyadmin/
 
<Directory /usr/share/phpmyadmin/>
   AddDefaultCharset UTF-8
 
   <IfModule mod_authz_core.c>
     # Apache 2.4
     Require all granted
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>

httpd를 재시작 해줍니다.

sudo systemctl restart httpd

방화벽 설정

다음 명령어로 방화벽 예외에 http 서비스를 추가해줍니다.

sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload

phpMyAdmin 접속

웹 브라우저에서 http://{서버IP}/phpMyAdmin 으로 접속하면 아래와같은 phpMyAdmin 로그인 페이지를 확인할 수 있습니다.
 MariaDB 계정과 비밀번호로 로그인하면 접속이 가능하며, phpMyAdmin 기능을 이용할 수 있습니다.

여기까지 완료 되었다면 이제 phpMyAdmin을 이용할 수 있습니다.

테스트용으로 사용한다면 지금 상태로도 충분히 사용 가능하지만
민감한 정보를 다루거나 실 사용을 위한 DB로 활용하려면 
꼭 환경에 맞게 추가적인 보안 작업을 진행 한 후 사용하시길 바랍니다.

2019년 9월 28일 토요일

CentOS8 에서 Cockpit 사용하기

Cockpit은 리눅스 서버를 브라우저에서 모니터링 및 관리/제어 할 수 있도록 해주는 도구입니다.

CentOS8 에서는 Cockpit이 기본 탑재되어 별도의 설치 없이 사용이 가능합니다.

해당 문서는 학습 및 실습 과정에서 작성되고있는 문서이기 때문에 오류가 존재할 수 있으며 오류에 대한 지적은 언제나 환영합니다.

설치하기

다음의 명령어로 자신의 CentOS서버에 Cockpit이 설치되어있는지 확인할 수 있습니다.
sudo yum list installed | grep cockpit
Cockpit이 설치되어있을 경우 위와같이 확인할 수 있습니다.
설치되어있지 않다면 다음 명령어를 입력하여 설치합니다.
sudo yum install cockpit

실행 및 시작프로그램 등록

다음 명령어로 Cockpit을 실행합니다.
sudo systemctl start cockpit

아래 명령어로 Cockpit을 시작프로그램으로 등록 할 수 있습니다.
sudo systemctl enable cockpit.socke

Cockpit 접속하기

웹브라우저에 아래의 주소를 입력하면 Cockpit 로그인 페이지를 확인할 수 있습니다.
http://{서버의IP주소}:9090/

CentOS의 계정과 비밀번호로 접속하면 모니터링 및 관리 작업을 수행할 수 있습니다.

접속이 안되는 경우

접속이 불가능 한 경우 아래의 명령어로 9090포트가 열려있는지 Cockpit서비스가 방화벽 예외 처리가 되어있는지 확인합니다.

열려있는 포트 확인
sudo firewall-cmd --list-posrts
9090포트가 열려있지 않습니다.
방화벽 예외 서비스 확인
sudo firewall-cmd --list-service
cockpit이 방화벽 예외 서비스에 등록되어있습니다.
9090포트 혹은 cockpit 서비스가 예외처리 되어있지 않는경우 아래의 명령어로 방화벽 예외처리를 해줍니다.

sudo firewall-cmd --permanent --zone=public --add-service=cockpit
혹은
sudo firewall-cmd --permanent --zone=public --add-port=9090/tcp

두 명령어 중 하나만 수행한 후 아래의 명령어로 리로드 해줍니다.
sudo firewall-cmd --reload


2019년 9월 26일 목요일

[CentOS8] Apache Tomcat 8 설치하기


해당 문서는 https://www.vultr.com/docs/how-to-install-apache-tomcat-8-on-centos-7 문서를 참고하여 작성되었습니다.





준비사항





  • Cent OS 7 또는 8 버전의 서버 또는 PC
  • sudo 권한을 갖는 계정




CentOS 시스템 업데이트





다음 명령어로 업데이트 및 재부팅을 실시합니다.





$ sudo yum install epel-release
$ sudo yum update -y && sudo reboot




재부팅이 완료되면 다음 단계로 진행합니다.





Java 설치하기





Apache Tomcat을 구동하기 위하여 Java SE 7.0 또는 이후 버전이 필요합니다. yum을 이용하여 OpenJDK를 설치합니다.





$ sudo yum install java-1.8.0-openjdk.x86_64




설치가 완료되면 아래의 명령어로 Java가 정상적으로 설치가 되었는지 확인할 수 있습니다.





$ java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)




Apache Tomcat 사용자 생성





보안상의 이유로 tomcat을 위한 non-root 사용자와 그룹을 생성해서 사용합니다.





$ sudo groupadd tomcat
$ sudo useradd -s /bin/nologin -g tomcat -d /opt/tomcat tomcat




해당 방법으로 시스템에 로그인할 수 없는 'tomcat' 그룹에 속한 'tomcat' 사용자를 작성합니다.
계정의 홈 경로는 /opt/tomcat이며 Apache Tomcat이 위치하게 될 경로입니다.





Apache Tomcat 다운로드 및 설치





https://tomcat.apache.org/download-80.cgi 링크로 이동하여 Tomcat 8의 안정된 최신 버전을 다운받을 수 있습니다.





Apache Tomcat 8 다운로드 페이지의 "Binary Distributions"의 "tar.gz"다운로드 링크를 복사한 후
아래처럼 wget 명령어를 이용하여 다운로드받습니다.





$ cd ~
$ wget http://mirror.navercorp.com/apache/tomcat/tomcat-8/v8.5.46/bin/apache-tomcat-8.5.46.tar.gz




다운받은 tar.gz파일을 tar 명령어를 이용하여 “tomcat" 사용자의 홈 경로에 압축을 해제합니다.





$ sudo tar -zxvf apache-tomcat-8.5.46.tar.gz -C /opt/tomcat --strip-components=1




권한 설정하기





Apache Tomcat을 실행하기 전 알맞은 권한 설정이 필요합니다.





$ cd /opt/tomcat
$ sudo chgrp -R tomcat conf
$ sudo chmod g+rwx conf
$ sudo chmod g+r conf/*
$ sudo chown -R tomcat logs/ temp/ webapps/ work/
$ sudo chgrp -R tomcat bin/ lib/
$ sudo chmod g+rwx bin
$ sudo chmod g+r bin/*




Systemd에 Tomcat Service 작성





시스템에 등록하여 톰캣을 시작 프로그램에 등록하고 명령어로 시작/정지/재시작을 할 수 있도록 설정합니다.





$ sudo vi /etc/systemd/system/tomcat.service




아래의 내용을 tomcat.service에 입력 후 저장합니다.
(일부 설정들은 환경에 맞게 수정해야 할 수 있습니다.)





[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target
[Service]
Type=forking
Environment=JAVA_HOME=/usr/lib/jvm/jre
Environment=CATALINA_PID=/opt/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat
Environment=CATALINA_BASE=/opt/tomcat
Environment='CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID
User=tomcat
Group=tomcat
[Install]
WantedBy=multi-user.target




haveged 설치하기(선택)





톰캣 시작 시 부팅 속도가 너무 느린 이슈를 해결하기 위해 haveged를 설치합니다.
자세한 내용은 tomcat, haveged 관한 다른 문서를 확인해주세요.





$ sudo yum install haveged
$ sudo systemctl start haveged.service
$ sudo systemctl enable haveged.service




Apache Tomcat 실행 및 테스트





Apache Tomcat을 실행한 뒤 시작 프로그램에 등록합니다.





$ sudo systemctl start tomcat.service
$ sudo systemctl enable tomcat.service




firewall-cmd를 이용하여 8080 포트를 열어 서버에 접근할 수 있도록 합니다.





$ sudo firewall-cmd --zone=public --permanent --add-port=8080/tcp
$ sudo firewall-cmd --reload




이후 8080 포트로 접속하면 Tomcat Welcome 페이지를 확인할 수 있습니다.
(로컬에서 테스트 중인 경우 localhost로 접속이 가능합니다.)





 예) http://localhost:8080 http://123.123.123.123:8080 (서버의 주소가 123.123.123.123일경우) 




설정이 전부 정상적으로 되었다면 웹 브라우저에 Tomcat Welcome 페이지가 정상적으로 출력됩니다.