본문 바로가기

Programming/Spring

(5)
[Selenium + Headless Chromium] Java로 인스타그램 대용량 크롤링하기 2 - 배치 프로그램 이번 포스팅에서는 제가 Spring framework 5에서 Java selenium 라이브러리를 사용했던 방법을 1편에 이어 소개해드리겠습니다. 제 개발 환경이나 프로젝트에 관한 정보는 1편에 공개되어있으며, 이번에는 배치프로그램 내에서 수행한다는 특성을 많이 살려보도록 하겠습니다. 이번에는 전반적인 DB 구성과 크롤링 코드를 수행할 배치 프로그램 소스코드도 간단히 소개하면서 포스팅을 진행해보겠습니다. 제가 구현한 배치프로그램에 관심이 생기신다면, 'Spring' 카테고리 내에 더 많은 글이 있으니 방문해주셨음 합니다 ㅎㅎ Instagram : 장소태그 크롤링하기 2편의 첫 주제인 만큼 기본적인 내용을 조금 다뤄보려 합니다. 경험상, selenium에서 크롤링을 위해 가장 많이 쓰게 되는 요소는 xpa..
[Selenium + Headless Chromium] Java로 인스타그램 대용량 크롤링하기 1 3개월 간 빡세게 진행했던 프로젝트에서 Selenium 크롤링을 거의 메인으로 사용했었습니다. 프로젝트를 하면서 크롤링 덕에 고생을 너무 많이 해서 내가 이것만 끝나면 블로그에 흔적이라도 남길 거라고 이를 갈았는데 막상 끝내고 포스팅 할 때가 되니 미화가 돼 버렸습니다..ㅎ 사실 구글링해서 나오는 블로그들에서 이미 selenium 라이브러리를 사용하여 크롤링 코드를 구현한 예제들을 많이 소개하고 있습니다. 하지만 이 포스팅에서 소개하는 크롤링 소스코드는 다음과 같은 점에서 차별점이 있음을 고려하며 읽어주셨으면 합니다. 1. 크롤링이 배치 프로그램 내에서 돌아감 2. 약 10000개 이상의 글을 연속적으로 크롤링 3. 크롤링을 stop 하는 기준점이 존재 4. System의 Interruption과 대용량..
[Spring-batch] ItemWriter 클래스 구현기 (오류 해결) 사실 이 글을 포스팅 하기 전에, Spring batch를 공부한 내용들과 spring batch + quartz 를 연동하기 위한 설정들 등등, 좀 더 기초적인 내용들을 먼저 다루고 싶었다. 하지만 일단 프로젝트의 완성도를 위해 개발부터 진행하고 있던 와중, 나를 너무 힘들게 했던 내용이 있어 먼저 끌고 와보았다. 분명 써놓고 보면 별 것 아닌 것 처럼 보이겠지만... 이 오류를 잡기위해 며칠을 고생한 걸 생각하며,,, 이걸 글로라도 남겨야 시간이 좀 덜 아까울 것 같은,, 그런 보상심리에 포스팅을 시작한다. ㅎㅎ ItemWriter write() 를 execute 할 때 발생할 수 있는 오류 나는 JdbcBatchItemWriter 를 사용하였으며, JDBC의 Batch 기능을 사용하여 모아둔 쿼리문..
[Spring-boot] Facebook Timeline 프로젝트 : MySQL, JPA 개발 환경 구성하기 1. Spring boot 2.1.6/ Gradle project에서 프로젝트의 디렉토리 구조 디렉토리 내의 패키지, 파일 명은 개발 방향에 따라 많이 바뀌게 되겠지만, 전반적인 프로젝트의 구조는 다음과 같이 구성할 예정이다. 설정 값을 넣어줄 때에 있어서 application.properties 보다 application.yml이 확장성을 고려하면 더 편리하다는 의견이 많았기 때문에 이 파일도 변경해주었다. 비스니스 로직은 service 패키지에 들어갈 예정이며 컨트롤러는 web 패키지에 들어갈 것이다. 이번 프로젝트를 하며 스프링 부트의 구조를 좀 더 확실히 알고자하는 취지도 있었기 때문에 패키지를 역할별로 엄격히 나눌 예정이다. 2. MySQL, JPA 연동하기 /build.gradle plugin..
[스프링] 오브젝트 설계와 제어의 역전 스프링은 자바를 기반으로 한 기술이자, 자바 엔터프라이즈 어플리케이션 개발에 사용되는 프레임워크이다. 어플리케이션 프레임워크는 어플리케이션 개발을 빠르고 효율적으로 할 수 있도록 어플리케이션의 바탕이 되는 틀과 공통 프로그래밍 모델, API 등을 지원해준다.스프링이 자바에서 가장 중요하게 가치 두는 것은 객체지향 프로그래밍이 가능한 언어라는 점이다. 특히, 그 중에서도 오브젝트에 가장 많이 관심을 둔다.어플리케이션에서 오브젝트가 생성되고, 다른 오브젝트와 관계를 가지는지 등은 스프링에서의 객체 지향에서 가장 중점적인 내용이다. 스프링은 다음 세 가지 핵심 프로그래밍 모델을 지원한다.IOC/ DI : 오브젝트의 생명 주기와 의존관계에 대한 프로그래밍 모델서비스 추상화 : 환경이나 서버, 특정 기술에 종속되..