728x90
반응형

1. 크롤링(Crawling) ?


크롤링이란 사전적으로 기어다니는 것을 뜻하는데, 웹(Web) 상을 돌아다니면서 정보를 수집하는 행위를 뜻합니다.

크롤링의 대상은 웹 상의 자원들이며, 이것들은 정적인 문서가 될 수 있고, API와 같은 서비스가 될 수가 있습니다. 어떤 것이라도 다수의 데이터를 수집하고, 수집된 데이터를 토대로 필요한 정보만 추출하는 것을 크롤링이라고 부릅니다.



2. 크롤링 라이브러리


크롤링을 위한 다양한 라이브러리들이 존재하는데, 자신에게 맞는 라이브러리를 찾아 적용하면 됩니다. 대표적으로 데이터를 수집할 수 있는 라이브러리에는 Beautiful Soup, 자바 버전인 Jsoup가 있고, 브라우저를 이용한 Selenium 등이 있으며, 이번 포스팅에서는 Jsoup를 사용해서 크롤링 하는 방법에 대해서 포스팅 했습니다.



3. 크롤링 매커니즘


크롤링 매커니즘은 대략적으로 아래의 단계를 통해서 진행됩니다.


1) 대상 선정 -> 2) 데이터 로드 -> 3) 데이터 분석 -> 4) 데이터 수집



4. Jsoup 사용


Jsoup를 사용하기 위해서는 https://jsoup.org/download 에 접속해서 아래와 같이 jar파일을 받아서 프로젝트에 jar파일을 추가해줍니다.

혹시 모르시는 분들을 위해서 ( 해당 프로젝트 우클릭 > Properties > Java Build Path > Add External JARs에서 다운받은 jar파일을 추가해주면 됩니다. )

이제 Jsoup를 사용할 준비는 완료 되었으니, 간단한 예제를 통해서 가져온 데이터를 가공해서 콘솔에 출력하는 것을 확인 해보겠습니다.



package test;
 
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
 
public class JsoupParser {
 
    /*
     *  Document 클래스 : 연결해서 얻어온 HTML 전체 문서
     *  Element 클래스  : Documnet의 HTML 요소
     *  Elements 클래스 : Element가 모인 자료형
     */
     
    public static void main(String[] args) {
        // Jsoup를 이용해서 네이버 스포츠 크롤링
        Document doc = null;
         
        try {
            doc = Jsoup.connect(url).get();
        } catch (IOException e) {
            e.printStackTrace();
        }
         
        // 주요 뉴스로 나오는 태그를 찾아서 가져오도록 한다.
        Elements element = doc.select("div.home_news");
         
        // 1. 헤더 부분의 제목을 가져온다.
        String title = element.select("h2").text().substring(0, 4);
 
        System.out.println("============================================================");
        System.out.println(title);
        System.out.println("============================================================");
         
        for(Element el : element.select("li")) {    // 하위 뉴스 기사들을 for문 돌면서 출력
            System.out.println(el.text());
        }
         
        System.out.println("============================================================");
    }
 
}


위의 코드를 살펴 보면 url을 통해서 파싱할 웹 페이지를 선정하고, connection을 통해서 데이터를 가져옵니다. 그리고 나서 각각의 select문을 사용해서 필요한 데이터를 추출해서 출력하는 예제입니다. 그 결과는 아래와 같습니다.


selector를 사용해서 가져올 때 각각의 애트리뷰트 및 id 또는 class를 지정해서 가져올 수 있는데 아래와 같이 사용하면 됩니다.


ex) select(tag.className) >> 클래스 명을 지정해서 해당하는 데이터를 가져옵니다.

     select(tag#id) >> id를 지정해서 해당하는 데이터를 가져옵니다.

     select(tag[attribute]) >> 애트리뷰트를 지정해서 해당하는 데이터를 가져옵니다.

     select(parent Tag > child Tag) >> 부모 태그의 하위 자식태그를 지정해서 해당하는 데이터를 가져옵니다.


그 외, 지원되는 다양한 기능에 대해서 알고 싶으면 다음의 참조 링크를 확인하시면 됩니다.


노드 : https://jsoup.org/apidocs/org/jsoup/nodes/Node.html

엘리먼트 : https://jsoup.org/apidocs/org/jsoup/nodes/Element.html



출처: http://toma0912.tistory.com/74?category=195708 [토마's 개발노트]

728x90
반응형

'Web Programming > java-jsp' 카테고리의 다른 글

JSTL에서 LIST Size  (0) 2018.09.04
For input string: ""  (0) 2018.09.04
java 경력 기술 면접 질문 리스트  (0) 2018.08.29
java 기술 면접 질문 리스트  (1) 2018.08.29
신입 자바 개발자 면접 질문  (0) 2018.08.29
728x90
반응형

스프링 프레임워크 (Spring Framework)란?


스프링 프레임워크란?
스프링 프레임워크는 Pivotal Software에서 아파치 라이센스(무료 라이센스) 형태로 제공하는 오픈 소스 프로젝트로 자바 어플리케이션 (Standalone 과 웹 어플리케이션 모두 포함)개발에 필요한 여러 가지 서비스를 제공하는 프레임워크입니다. 현재 미국에서 자바로 어플리케이션을 개발하는 많은 회사들이 스프링 프레임워크를 사용 중이며 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술로도 쓰이고 있습니다.

왜 사용하나요?
1. 오픈소스 프로젝트: 다른 블로그에서도 여러 번 강조했지만 많은 회사들이 오픈 소스를 자사의 개발에 포함하는 이유는 라이센스 비용이 따로 들지 않기 때문입니다.
2. 다양한 기능 지원: 프로그램을 개발할 때 프레임워크를 사용하는 가장 큰 이유 중에 하나는 불필요한 반복을 없애고 업무의 양을 최소화하기 때문이 아닐까 싶습니다. 스프링 프레임워크는 엔터프라이즈용 프로그램을 개발하는데 관련해서 대부분의 기능을 제공하고 있으며 이 프레임워크를 사용하면 개발자들은 자사의 제품에 특화된 비지니스 로직만 추가하면 되기 때문에 많은 시간 및 개발비의 절약을 할 수 있습니다.
또한 많은 부분을 간단한 XML 설정이나 어노테이션으로 대신 할 수 있기 때문에 실제 코딩하는 소스코드의 양을 획기적으로 줄일 수 있습니다.  
3. 다양한 방식 지원: 스프링 프레임워크는 한 가지 컴포넌트에 대한 지원도 다양한 방식으로 하고 있습니다. 예를 들어서 DB 연결 같은 경우에도 Hibernate과 같은 모듈과 연동해서 여러 종류의 JDBC를 약간의 설정만 하면 사용할 수 있게 지원하고 있습니다. 이 점은 하나의 소스코드로 다양한 DB를 사용할 수 있게 해주기 때문에 큰 장점이 됩니다.
4. Dependency Injection: 스프링은 기본적으로 Dependency Injection을 지원하기 때문에 모듈들이 타이트하게 연결되어 있지 않으며 그래서 테스트가 용이한 프로그램을 만들 수 있습니다. (특히 유닛 테스트)

5. ETC: 그 외에도 스프링은 메세징, MVC, 테스팅, AOP 등 다양한 서비스를 기본적으로 제공합니다. 

사용시 어려운 점 또는 단점
1. 스프링은 지원하는 기술의 양이 방대하고 같은 기술도 여러 가지 다른 방식으로 지원하기 때문에 처음 접하는 엔지니어들에게는 사용하기 힘든 프레임워크입니다. 
2. 스프링은 비교적 무거운 프레임워크이기 때문에 이 프레임워크의 추가 만으로 어플리케이션을 상당히 무겁게 만들 수 있습니다.  

참고로 구글이나 애플 같은 큰 소프트웨어팀을 보유하고 있는 회사 같은 경우에는 자사에서 자체 개발한 프레임워크를 사용하고 있으며 보통 스프링 프레임워크와 비슷하거나 더 많은 기능을 제공하고 있다고 합니다. 그렇지만 사용 방식이나 개념에는 큰 차이는 없다고 합니다. 

출처
1. 위키피디아: http://en.wikipedia.org/wiki/Spring_Framework
2. 스프링 프레임워크 메인 페이지: http://projects.spring.io/spring-framework/


728x90
반응형

'Web Programming > spring' 카테고리의 다른 글

No mapping found for HTTP request with URI  (0) 2018.09.04
BeanCreationException  (0) 2018.09.04
Dependency Injection (의존성 주입)이란?  (0) 2018.08.29
Spring MVC 프로세스  (0) 2018.08.29
Spring AOP with Annotation  (0) 2018.08.29
728x90
반응형

Framework vs Library: 프레임워크와 라이브러리의 차이

많은 사람들이 프레임워크와 라이브러리의 차이를 단순히 사이즈의 차이 (프레임워크가 라이브러리에 비해 훨씬 크다 또는 여러 개의 라이브러리의 묶음이 프레임워크이다)라고 생각하는 경향이 있는데 이는 사실이 아닙니다. (물론 대부분의 경우 프레임워크가 라이브러리보다 사이즈가 더 크고 프레임워크가 여러 개의 라이브러리를 포함하고 있지만 그렇다고 라이브러리의 묶음이 프레임워크다라고 단순히 규정하기는 힘듭니다. 자세한 이유는 아래에 서술하였습니다.) 그 대신 기능적으로 무엇을 제공하는지와 사용할 때 어떤 방식으로 어떻게 사용할 지의 차이가 프레임워크와 라이브러리를 구별할 수 있는 더 중요한 요소가 아닐까 생각합니다.

우선 라이브러리는 보통 큰 개념으로 볼 때 하나의 기능을 제공하며 그 기능을 구현하기 위한 (또는 그 기능과 관련된) 부수적인 여러 개의 작은 기능들을 제공합니다. 예를 들어 GSON 라이브러리 (구글에서 제공하는 JSON 데이터 변환 라이브러리) 같은 경우에 큰 개념적으로 보면 JSON 형식의 데이터를 다른 형식으로 변환하는 기능을 제공하고 있으며 세부적인 기능들로는 JSON 형식의 데이터를 Java Object  형식으로 변환하는 기능을 제공하고 반대로 Java Object에 저장된 데이터를 JSON 형식의 데이터로 변환해주는 기능을 제공하고 있습니다. 

반면에 프레임워크는 하나의 특정 기능을 제공하기 보다는 어플리케이션을 만드는데 있어서 뼈대가 될 수 있는 기능들을 제공하고 있습니다.
예를 들어 Spring Framework를 이용해서 MVC 모델의 웹어플리케이션을 만든다고 했을 때 스프링은 웹어플리케이션을 만들기 위한 기본적인 기능들만을 제공하며 (UI와 서버 쪽의 연동이나 데이터의 교환 또는 공유) 웹어플리케이션 구동을 위한 추가적인 기능들 (예를 들어 Front-end 쪽 디자인 관련 기능들이라던지 또는 서버의 효율성을 증진시킬 수 있는 기능들) 에 대한 지원을 기본적으로 하고 있지 않습니다. 

위의 차이점 때문에 라이브러리와 프레임워크는 사용 방식 (또는 어플리케이션과의 연동방식)에서도 차이가 발생합니다. 우선 라이브러리는 보통 어플리케이션에 포함이 되어서 사용되고 있으며 개발자의 입장에서 봤을 때 라이브러리에서 제공하는 API 호출을 어플리케이션에서 어떻게 해서 사용할 지를 고민하게 됩니다. 그 반면에 프레임워크는 어플리케이션의 뼈대가 되기 때문에 어플리케이션의 메인 코드가 프레임워크의 여러 부분에 접합되어서 사용되어지며 (프레임워크가 사용자가 작성한 코드를 호출합니다.) 개발자의 입장에서 봤을 때 본인의 코드가 프레임워크와 얼마나 연동이 잘 되어서 사용되어지는 지 (또는 잘못 사용되어서 문제를 일으키지 않는지)를 고민하게 됩니다. 

마지막으로 만약 로봇을 만든다고 가정을 했을 때 프레임워크를 사용하게 되면 로봇에 대한 기본적인 골격을 프레임워크가 제공하는 것이며 (아주 초보적인 걸음 정도를 할 수 있는) 개발자는 거기에 사람처럼 보일 수 있게 실리콘 피부를 입힌다거나 달리기를 잘 할 수 있는 로봇, 또는 시력과 청력이 아주 좋은 로봇을 만드는 일 (관련 기능들을 로봇에 추가해서)을 한다고 생각하시면 됩니다. 반면에 라이브러리를 사용해서 로봇을 만든다면 기본적인 골격은 직접 만들지만 특정 기능 (시력을 높이는 기능 또는 빨리 뛰게 할 수 있는 기능) 또는 특정 부위 (손, 발) 등은 라이브러리를 이용해서 구현한다고 생각하시면 됩니다.


728x90
반응형

'Web Programming' 카테고리의 다른 글

슬랙(Slack)의 장점과 한계점  (0) 2018.09.04
tracert와 traceroute의 차이점  (0) 2018.08.30
캐시와 쿠키의 차이  (0) 2018.08.29
WebSocket이란?  (0) 2018.08.29
SonarQube란?  (0) 2018.08.29
728x90
반응형

ACID란?




데이터베이스 영역에서 ACID란 Atomicity(원자성), Consistency(일관성), Isolation(고립성) 그리고 Durabiliy(지속성)의 약어로 데이터베이스 트랜젝션의 가장 중요한 특성들을 나타내는 말로 데이터베이스 시스템에서 기본적으로 제공해야할 가장 중요한 특성들입니다.
각각의 특성들에 대한 설명은 아래와 같습니다. 
  • Atomicity (원자성): 하나의 데이터베이스 트랜젝션에 여러 개의 데이터를 변환 (수정/삭제/입력 등과 같은)하는 도중에 문제가 발생했을 때 문제가 발생한 시점과 상관없이 그 트랜젝션에 포함된 모든 데이터의 변환이 이루어지지 않도록 보장하는 것이 원자성의 중요한 특징입니다. 쉽게 이야기하면 데이터를 변환할 때 문제가 발생하면 트랜젝션에 포함된 내용의 어떠한 데이터의 변환이 이루어지지 않으며 많약 아무 문제가 없을 때는 트랜젝션에 포함된 내용의 모든 데이터의 변환이 이루어 지는 것을 의미합니다. (All or nothing)
  • Consistency (일관성): 일관성은 어떠한 트랜젝션 전후에도 데이터베이스가 valid 상태를 유지함을 보장하는 특성으로 쉽게 이야기해서 트랜젝션 동안 데이트베이스에서 지정된 Rule에 부합된 데이터들만 데이터베이스에 유지가 되어서 트렌젝션이 끝난 후에도 데이터베이스가 사용가능한 상태를 유지할 수 있도록 보장하는 특성입니다.
  • Isolation (독립성): 독립성이란 만약 한 데이터베이스 시스템에 여러 개의 트랜젝션이 발생했을 때 각각의 트랜젝션이 서로 독립적으로 (또는 서로 영향을 끼치지 않게) 데이터를 변환할 수 있게 보장하는 특성을 이야기합니다. 만약 독립성이 지원 않는 데이터베이스에서 동시에 두 개의 트랜잭션에서 같은 데이터를 변환한다면 그 값이 어떻게 변환될 지 (어떤 트랜젝션이 먼저 실행되는지에 따라) 예측 불가능하기 때문에 많은 문제들을 발생 시킬 수 있습니다.
  • Durability (지속성): 한 번 데이터베이스에 저장된 데이터는 그 데이터의 변환에 대한 다른 트랜젝션 요청이 없을 때까지 항상 같은 값을 유지함을 보장하는 특성을 데이터베이스에서의 지속성이라고하며 갑작스럽게 전원이 꺼졌을 때나 시스템 오류 같은 문제가 발생했을 때 자동으로 데이터베이스에 저장된 데이터의 복구도 이 특성에 포함됩니다.

References
  • https://en.wikipedia.org/wiki/ACID
  • http://terms.naver.com/entry.nhn?docId=860356&cid=42346&categoryId=42346
  • http://www.service-architecture.com/articles/database/acid_properties.html
  • http://searchsqlserver.techtarget.com/definition/ACID
  • https://vladmihalcea.com/2014/01/05/a-beginners-guide-to-acid-and-database-transactions/


728x90
반응형

'Web Programming > database' 카테고리의 다른 글

ORA-ROWSCN  (0) 2018.09.13
오라클 GRANT SYNONYM 권한주기  (0) 2018.09.06
org.apache.ibatis.exceptions.PersistenceException  (0) 2018.09.04
mybatis if else choose  (0) 2018.08.30
queryForObject 와 queryForList  (0) 2014.04.15
728x90
반응형

Cache vs Cookies: 웹브라우저 캐시와 쿠키의 차이 점

Cache와 Cookies는 특정 웹사이트의 접속 속도 개선을 위해 클라이언트의 컴퓨터에 임시로 저장되어 있는 데이터란 개념은 같지만 아래와 같은 다른 점들이 있습니다.

Cookies란?
Cookies란 넷스케이프의 Netscape Navigator란 자사의 웹브라이저를 통해 소개된 기술로 특정 웹페이지에 대한 유저의 행동 패턴을 주로 저장하는 작은 사이즈의 텍스트 파일입니다. 주로 저장되는 정보로는 특정 웹사이트나 웹페이지에 얼마나 자주 또는 몇 번 방문했는지 그리고 특정 배너를 클릭을 했는지 했으면 얼마나 자주 했는지 검색 시 어떤 키워드를 사용했는지 등의 정보들입니다. 또한 웹서버 쪽에서 유저를 식별하기 위한 Session Tracking의 방법으로 사용되기도 합니다. Cookies 정보는 오직 그 Cookies를 작성한 웹서버만이 Access 가능하며 대부분의 Cookies는 Expiration Date (사용기한)이 정해져 있어서 기한이 만료되면 자동으로 삭제됩니다. 

Cache란?

Cache란 웹페이지 Resource 파일들 (오디오, 비디오, 이미지 등)의 임시 저장소로 다음에 같은 웹페이지 (또는 웹사이트) 접속 시 페이지 로딩 속도를 개선해주는 역할을 합니다. 

차이점
1. 유저의 컴퓨터에 임시로 저장되어 있는 점은 같지만 사용 목적은 위에 이야기한 것 처럼 다릅니다.
2. Cache는 오직 웹페이지 로딩 속도 개선을 위해서만 사용되지만 Cookies는 유저 관련된 여러가지 다른 목적으로 사용 가능합니다.
3. Cache는 오디오, 비디오, 이미지 등의 Resource 파일등을 주로 저장하는 반면에 Cookies는 User preference (유저가 웹사이트 접속 시 하는 행동 패턴 또는 관련 정보) 위주의 정보를 저장합니다.
4. 보통 Cache는 유저가 삭제할 때까지 유저의 컴퓨터에 저장되지만 Cookies는 서버 쪽에서 설정한 기간이 지나면 자동으로 삭제됩니다.
5. Cookies는 웹서버의 Access가  가능한 반면에 Cache는 Access가 불가능합니다. (사실 Access를 해야할 이유도 없지만요)

References
1. http://www.differencebetween.com/difference-between-cache-and-vs-cookies/
2. http://www.techcuriosity.com/resources/difference_between/difference_between_cache_and_cookies.php
3. http://www.guidingtech.com/8925/what-are-browser-cache-cookies-does-clearing-them-help/
4. https://answers.yahoo.com/question/index?qid=20081201160300AAa1kh8
5. http://www.ehow.com/info_8304895_difference-between-cookie-cache.html


728x90
반응형

'Web Programming' 카테고리의 다른 글

tracert와 traceroute의 차이점  (0) 2018.08.30
프레임워크와 라이브러리의 차이  (0) 2018.08.29
WebSocket이란?  (0) 2018.08.29
SonarQube란?  (0) 2018.08.29
Jenkins 서버란?  (0) 2018.08.29

+ Recent posts