서블릿(Servlet)이란?

Server + Applet의 합성어로 서버에서 실행되는 것, Applet이란 자바를 이용하여 웹에서 실행되는 프로그램을 작성하는 기술을 말한다.

 

서블릿은 자바 클래스 형태의 웹 애플리케이션, 브라우저를 통해 자바 클래스가 실행되도록 하기 위해서는 javax.servlet.http 패키지에서 제공하는 httpServlet 클래스를 상속받아 구현해야 한다.

 

JDK에는 웹 애플리케이션을 제작할 수 있는 클래스가 제공되지 않고 톰캣을 설치하고 나면 웹 애플리케이션을 제작할 수 있는 클래스가 제공되는데, 그 그 클래스가 바로 HttpServlet입니다.

 

HttpServlet은 웹 서비스가 가능한 웹 애플리케이션을 제작할 수 있도록 자바를 확장해 놓은 클래스로 톰캣을 설치하면 제공되는데 HttpServlet을 상속받은 클래스를 서블릿이라고 합니다.

즉, 개발자가 편리하게 HttpServlet을 활용하여 새로운 기능의 웹 프로그램을 만들 수 있는 것입니다.

 

 

웹에서는 클라이언트가 어떻게 서버에 요청하는지를 알아야 합니다.

웹에서는 get방식과 post방식이 있습니다.

 

get방식은 주소 창을 넘어가기 때문에 서버로 보내는 데이터를 사용자가 그대로 볼 수 있습니다. 보안에 취약하지만 255자 이하의 적은 양의 데이터를 전송합니다.

 

post방식은 html header를 타고 넘어가기 때문에 보안에 강합니다. 255자 이상의 대용량 데이터를 전송합니다.

 

서블릿 클래스에는 doGet(), doPost()가 있습니다.

get방식으로 요청하면 doGet()이 호출되고 post방식으로 요청하면 doPost()가 호출됩니다.

 

둘의 방식은 HTML으로 설명드리겠습니다.

<form action = "CallServlet">
	<input type = "submit" value= "전송">
</form>

위의 html은 <form> 태그로 서버 측에 존재하는 많은 서블릿 중 하나를 정해서 요청하고 있습니다.

action이라는 속성값에 요청할 서블릿 이름을 기술해야 하며 전송 버튼이 눌리는 순간에 action 속성값에 지정된 서블릿이 요청됩니다.

 

근데 폼 태그 안에 서블릿 이름을 넣어 놓으면 서버에서는 어떻게 해당 서블릿을 찾을 수 있을까요?

-> WAS(톰캣 엔진)가 운영체제오 같은 시스템 프로그램이므로 확장자가 .class인 파일을 톰캣이 가지고 있다가 요청이 들어오면 해당 서블릿 클래스들을 찾아서 실행하는 원리입니다.

 

제가 post 방식으로 쓰고 싶다면 <form> 형태 안에 method="post"방식을 넣어주면 됩니다. 즉 아래같이 넣어주면 됩니다.

<form method="post" action = "CallServlet">
	<input type="submit" value="전송">
</form>

 

다음 장에서는 doGet()과 doPost() 중 둘 중에 무엇을 써야 되는지 말씀드리겠습니다.

 

이상 포스터를 마치겠습니다.

'운영체제' 카테고리의 다른 글

네트워크 OSI 7계층의 역할  (0) 2020.06.12
보안의 3대 요소 및 유닉스(리눅스)의 계정 관리  (0) 2020.06.12
HTTP 인증  (0) 2020.05.28
JSP - doGet() 과 doPost()의 차이  (0) 2020.04.25
유니코드(Unicode)란?  (0) 2020.04.03

안녕하세요 오늘은 네이버 길찾기사이트로 들어가 자동으로 입력하고 자동으로 길찾기 버튼을 눌르면서 몇시간 걸리는 지에 대해 알아보겠습니다. 

 

1. webdrive와 selenium을 설치하셔야 됩니다.

 

네이버 길찾기 페이지를 들어갑니다.

https://map.naver.com/v5/directions/-/-/-/?c=14139078.9231079,4509745.6215210,15,0,0,0,dh

 

CTRL + ALT + I 을 눌러 페이지의 소스를 봐야됩니다.

그런다음 차례대로 1번을 실행합니다. 3번째의 XPATH를 복사해서 메모장 OR 파이썬에 저장합니다. XPATH는 다음과 같습니다. 

//*[@id="intro_popup_close"]/span

 

그리고 이제 출발지 안에 값을 입력해야 됩니다. 

출발지 값은 다음과 같습니다.

id값 : directionStart

이제 잠실역이라는 값을 받았으면

잠실역 2호선을 클릭해야 합니다. 만약 클릭을 안 하게되면 빈값이 들어가게 됩니다.

xpath의 값은 다음과 같습니다.

 

//*[@id="container"]/div[1]/shrinkable-layout/directions-layout/directions-result/directions-search-list/search-list/search-list-contents/perfect-scrollbar/div/div[1]/div/div/div/search-item-place/div 

 

이제 잠실역 2호선, 신사역2호선을 입력 받았습니다. 받게 되면 이제 '길찾기'라는 버튼을 클릭해야 됩니다.

 

다음과 같습니다.

btn btn direction.active

하지만, 위의 있는 값을 소스코드에서 값을 넣을 때 띄어쓰기를 하면 안됩니다.

밑에 보시면 충분히 이해하실거라 믿습니다.

 

전체 소스코드를 보여드리겠습니다. 

 

from selenium import webdriver
from selenium.webdriver.common.keys import Keys


driver = webdriver.Chrome('chromedriver')
driver.get('https://map.naver.com/v5/directions/-/-/-/?c=14139078.9231079,4509745.6215210,15,0,0,0,dh')
#네이버 길찾기 주소

driver.find_element_by_xpath('//*[@id="intro_popup_close"]/span').click()

delay = 3
driver.implicitly_wait(delay) # 3초 기달림 


driver.find_element_by_id('directionStart').send_keys('잠실역')
driver.find_element_by_id("directionStart").send_keys(Keys.RETURN) # 엔터 

driver.find_element_by_xpath('//*[@id="container"]/div[1]/shrinkable-layout/directions-layout/directions-result/directions-search-list/search-list/search-list-contents/perfect-scrollbar/div/div[1]/div/div/div/search-item-place/div').click()


driver.find_element_by_id('directionGoal').send_keys('신사역')
driver.find_element_by_id('directionGoal').send_keys(Keys.RETURN)

try :
    #driver.find_element_by_xpath('//*[@id="container"]/div[1]/shrinkable-layout/directions-layout/directions-result/div/directions-search/div[2]/button[2]').click()
    driver.find_element_by_class_name('btn.btn_direction.active').click()
except:
    print('1')


 

 

만약 안 될 시에는 다음과 같은 소스코드로 해보시길 바랍니다.

 

from selenium import webdriver
from selenium.webdriver.common.keys import Keys


driver = webdriver.Chrome('chromedriver')
driver.get('https://map.naver.com/v5/directions/-/-/-/?c=14139078.9231079,4509745.6215210,15,0,0,0,dh')
#네이버 길찾기 주소

driver.find_element_by_xpath('//*[@id="intro_popup_close"]/span').click()

delay = 3
driver.implicitly_wait(delay) # 3초 기달림 


driver.find_element_by_id('directionStart').send_keys('잠실역')
driver.find_element_by_id("directionStart").send_keys(Keys.RETURN) # 엔터 
try :
    driver.find_element_by_xpath('//*[@id="container"]/div[1]/shrinkable-layout/directions-layout/directions-result/directions-search-list/search-list/search-list-contents/perfect-scrollbar/div/div[1]/div/div/div/search-item-place/div').click()

except :
    driver.find_element_by_id('directionGoal').send_keys('신사역')
    driver.find_element_by_id('directionGoal').send_keys(Keys.RETURN)

try :
 	driver.find_element_by_class_name('btn.btn_direction.active').click()
except:
    print('1')

 

try 문과 except만 넣었습니다.

음, 뭐가 문제인지는 추후에 넣어보겠습니다. 댓글로 말씀해주시면 감사합니다.

 

결과는 다음과 같습니다.

 

 

이상 포스터를 마치겠습니다. 

바로 소스코드를 보겠습니다.

import simplejson as json
from tinydb.storages import MemoryStorage
from tinydb import TinyDB, Query

#파일 DB 생성
db = TinyDB('C:\\Users\\admin\\databases\\database.db', default_table='users')

#메모리 DB 생성
#db = TinyDB(storage=MemoryStorage, default_table = 'users')

#테이블 선택
users = db.table("users")
todos = db.table("todos")

#users 테이블 출력
for item in users:
    #pass
    print(item['username'], ' : ', item['phone'])

#todos 테이블 출력
for item in todos:
    #pass
    print(item['title'], ' : ', item['complete'])

#연결 관계 출력(조건문)
for item in users:
    print('[', item['usersname'],']')
    for todo in todos:
        if todo['userId'] == item[id]:
            print(todo['title'])
            #pass

 

이제 쿼리 객체 사용조회 , ROW 수정, ROW 삭제하는 것을 알아보도록 하겠습니다.

import simplejson as json
from tinydb.storages import MemoryStorage
from tinydb import TinyDB, Query

#파일 DB 생성
db = TinyDB('C:\\Users\\admin\\databases\\database.db', default_table='users')

#메모리 DB 생성
#db = TinyDB(storage=MemoryStorage, default_table = 'users')

#테이블 선택
users = db.table("users")
todos = db.table("todos")

#users 테이블 출력
for item in users:
    pass
    #print(item['username'], ' : ', item['phone'])

#todos 테이블 출력
for item in todos:
    pass
    #print(item['title'], ' : ', item['complete'])

#연결 관계 출력(조건문)
for item in users:
    #print('[', item['usersname'],']')
    for todo in todos:
        if todo['userId'] == item[id]:
            #print(todo['title'])
            pass
#쿼리 객체 사용 조회 (제일 중요)
#SQL = Query()
Users = Query()
Todos = Query()

#Row 수정
users.update({'usersname' : 'kim'}, Users.id==3)


users_3 = Users.Search(Users.id == 3) # >, <, >=, <= 사용 가능
print(users.search(Users.id == 3))
print(users_3)


#Row 삭제
users.remove(Users.id == 3)
print(users.serarch(Users.id == 3))
users.update({'usersname' : 'kim'}, Users.id==3)

 

3탄에서는 TinyDB 고급에 대해서 알아보도록 하겠습니다. 

 

오늘은 파이썬과 데이터베이스 연동 및 기초에 대해서 알아보도록 하겠습니다. 


RDBMS : ACID


다수의 정합성 안정성 ,데이터 중복 방지
고비용
비즈니스 은행, 증권, 보안(계좌)

 

NoSQL(K, V -D, Column, Graph)


SNS, 블로그 텍스트, 게임 로그성,
분산처리(스케일업, 아웃)

엘락스틱서치 

유연성, 효율성 
RDBMS 보안관계

 

저는 파이참으로 실행해봤는데요 일단 tinydb와 simplejson을 다운 받아야합니다.

cmd창에서

 

pip install tinydb

pip install simplejson

 

그리고 실습을 원활하게 하기 위해 밑에 두 개의 파일을 받아주세요! 

 

todos.json
0.02MB
users.json
0.01MB

import simplejson as json
from tinydb.storages import MemoryStorage
from tinydb import TinyDB

#파일 DB 생성
db = TinyDB('C:\\Users\\admin\\databases\\database.db', default_table='users')

#메모리 DB 생성
#db = TinyDB(storage=MemoryStorage, default_table = 'users')

#테이블 선택
users = db.table("users")
todos = db.table("todos")

#테이블 데이터 삽입
users.insert({'name' : 'kim', 'email':'test@google.ocm'})
users.insert({'name' : 'homework', 'complete': False})

#테이블 데이터 전체 삽입1
with open('C:\\Users\\admin\\databases\\users.json', 'r' ) as infile :
    r = json.loads(infile.read())
    for u in r:
         users.insert(u)

#테이블 데이터 전체 삽입
with open('C:\\Users\\admin\\databases\\todos.json', 'r' ) as infile :
    r = json.loads(infile.read())
    for t in r:
         todos.insert(t)

#전체 데이터 출력
print(users.all())
print(todos.all())

#테이블 목록 조회
print(db.tables())

#전체 데이터 삭제
#users.purge()  # == db.purge_table('users')
#todos.purge() # == db.purge_table('purge')

# 테이블 삭제
db.purge_tables()

db.close()

 

주석처리 보시면 어느정도 이해가실 거라고 생각합니다. 만약 이해가 안 가신다면 댓글 남겨주세요!

이상 포스터를 마치겠습니다.

안녕하세요 오늘은 맥에서 톰캣을 설치해보겠습니다.

 

일단 밑에 사이트를 들어갑니다.

 

http://tomcat.apache.org/

 

Apache Tomcat® - Welcome!

The Apache Tomcat® software is an open source implementation of the Java Servlet, JavaServer Pages, Java Expression Language and Java WebSocket technologies. The Java Servlet, JavaServer Pages, Java Expression Language and Java WebSocket specifications are

tomcat.apache.org

 

그리고 Download에서 받고 싶은 톰캣을 설치해줍니다. 저는 Tomcat 7을 설치하겠습니다.

 

 

다운을 받고 나서 터미널에 들어가서 다음과 같은 명령어를 입력하시길 바랍니다.

 

sudo mkdir -p /usr/local

sudo mv ~/Desktop/<압축해제한 폴더명> /usr/local

sudo rm -f ~/Library/Tomcat

sudo ln -s /usr/local/<압축해제한 폴더명> /Library/Tomcat

sudo chown -R <맥의 id> /Library/Tomcat  // 맥의 id 을 아실려면 pwd을 입력하면 제 맥id을 알 수 있습니다.

sudo chmod +x /Library/Tomcat/bin/*.sh  // 안 해도 상관은 없는 것 같습니다.

 

마지막으로 이 명령어를 치시면 됩니다.

sudo /Library/Tomcat/bin/startup.sh

 

이제 구글이나 사파리, 파이어폭스에 들어가 밑에 주소를 입력해 아래 화면이 나오면 제대로 설치되었습니다.

 

http://localhost:8080

 

 

이상 포스터를 마치겠습니다.

안녕하세요 오늘은 자바 jdk- 14 버전을 설치하도록 하겠습니다. 매우 쉽습니다.

 

eclipse을 사용하기 위해서는 jdk나 jdk의 용도는 매우 많습니다. 그렇기 때문에 jdk는 필수입니다.

 

매우 간단합니다.

 

https://www.oracle.com/java/technologies/javase-downloads.html

 

Java SE - Downloads | Oracle Technology Network | Oracle

Java API Documentation Updater Tool 1.3 Java API Documentation Updater Tool repairs-in-place Java API Documentation created with javadoc versions included with JDK 5u45, 6u45, 7u21 and earlier.  See the 7u25 release notes for more information.

www.oracle.com

 

밑에서 JDK Download을 클릭해줍니다.

그런 다음에 Mac OS Installer -> jdk-14.0.1 ~~ .dmg을 다운 받아줍니다.

 

다운 받으면 계속 계속 클릭하시면 됩니다~~

 

이제 터미널로 들어가줍니다. 터미널로 들어가서 자바가 어디에 깔렸는지 확인을 해줍니다. 

그리고 jdk가 깔린 부분이 어디있는지 확인한 다음 복사를 해줍니다. 명령어는 다음과 같습니다.

 

/usr/libexec/java_home

을 치면 jdk가 다운로드 받았던 곳을 알려줍니다. /Librayr~ /Home까지 이걸 미리 복사해 놓습니다.

그리고 명령어는 다음과 같습니다.

pwd

ls -al

.bash_profile 확인

 

 

 

그리고 밑에 vi .bash_profile을 칩니다.

 

 

 

'i'을 눌러 vi편집기에

export JAVA_HOME = /Library/Java/JavaVirtualMachines/jdk-14.0.1.jdk/Contents/Home

라고 넣어줍니다.

 

그러면

java --version 명령어를 치면 환경변수가 되는 것을 보실 수 있습니다.

 

이상 포스터를 마치겠습니다.

안녕하세요 이번 포스트는 네이버 API 이용하기에 대해서 알아보도록 하겠습니다.

 

일단 네이버 -> 네이버 개발자센터를 클릭해줍니다. (로그인 하셔야 됩니다.)

 

들어가서 Application -> 애플리케이션 등록을 눌러줍니다.

들어간 다음 핸드폰 인증하고 애플리케이션 등록을 해줍니다. 빨간색 차례대로 해주시면 됩니다. 다음과 같습니다.

 

다 적었으면 맨 밑에 등록하기를 눌러줍니다. 등록하기를 눌르게 되면 다음과 같이 뜨는데요

여기서 Client ID와 Client Secret은 노출되어서는 안됩니다.

 

 

이상 포스터를 마치겠습니다.

2탄에서는 API 주소 알아보는 것을 하도록 하겠습니다.

 

 

 

안녕하세요 오늘의 컨텐츠는 맥의 자체에서는 2.7 버전으로 다운받아져 있을 겁니다. 그래서 맥 2.7버전을 3.x버전으로 바꿔보도록 하겠습니다. 윈도우도 비슷하다고 생각합니다.

터미널에서 python을 치게 되면 2.7버전이 설치되어 있는 걸 보실 수 있습니다.

 

이제 파이썬 홈페이지를 들어가보도록 하겠습니다.

사이트는 다음과 같습니다.

 

https://www.python.org/downloads/mac-osx/

 

Python Releases for Mac OS X

The official home of the Python Programming Language

www.python.org

홈페이지 들어가서 Stable Releases에 있는 거 아무거나 다운 받으세요! Stable Releases는 버그 같은 것들 검토한 릴리즈라고 생각하시며 ㄴ됩니다.

 

 

만약 설치 하는 과정에서 열 수 없다는 말이 나오면 '시스템 환경 설정' -> 보안 및 개인 정보 보호 -> app store 및 확인된 개발자을 눌르시면 됩니다.

파이썬을 계속 설치해줍니다.

 

만약 됐으면 python을 설치해줍니다 쭉쭉~~ 계속~~ 눌러줍니다. 만약 PATH관련해서 나오면 체크해주시길 바랍니다.

지금은 파이썬 3.8버전이 설치됐습니다.

 

이제 2.7 버전을 3.8버전으로 바꿔보도록 하겠습니다.

 

이제 터미널에 들어가서

>> cd ~
>> echo alias python="python3" > ~/.bash_profile
>> source ~/.bash_profile

이 명령어 친 다음

 

python을 치면 2.7 버전이 3.8 버전으로 변경된 것을 보실 수 있습니다.

 

이상 포스터를 마치겠습니다.

+ Recent posts