백엔드
크롤링 서버 EC2를 통해 접속하기
IT_LEE
2024. 11. 25. 23:23
학과 모바일 프로그래밍 코틀린 개발을 하며 크롤링을 통해 정보를 가져오는 로직을 구현하였다.
교수님께서 조금 더 좋은 점수를 얻길 바라면 외부 서버를 통해 크롤링을 구현하는게 좋겠다고 피드백 해주셨고, 피드백을 받아들여 스프링부트를 통해 크롤링 서버를 구현하였고 이를 안드로이드 스튜디오에서 받을 수 있도록 EC2에 올렸다.
먼저 스프링 코드는 다음과 같다.
package com.example.crawling_api.controller;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@RestController
public class CrawlingController {
@GetMapping("/crawl")
public List<String> crawlSmallTalk() {
List<String> results = new ArrayList<>();
try {
String url = "https://www.ringleplus.com/ko/student/landing/blog/ringle-smalltalk";
Document document = Jsoup.connect(url).get();
Elements elements = document.select("h3 + ol li");
elements.stream().limit(9).forEach(e -> results.add(e.text()));
} catch (Exception e) {
results.add("크롤링 실패: " + e.getMessage());
}
return results;
}
}
내가 원하는 정보들만 selector를 통해 가져왔고
로컬에서 잘 돌아가는 것 확인.
이제 EC2에 올리는 작업을 진행하였다.
EC2 생성으로 들어가자.
실제 배포 목적이 아니니 프리티어 선택해주고, 기존의 SSH, custom tcp 8080 인바운드를 허용하는 보안그룹을 선택. 퍼블릭 IP 활성화 후 EC2를 생성하였다
이제 로컬 터미널에서
ssh -i pem경로 ubuntu@EC2 public ip
입력해서 ec2 인스턴스에 접속한다
접속된 모습이다.
이제 스프링부트 프로젝트에서
./gradlew build
gradle build를 시작한다.
완료가 되었으면
ls build/libs/
명령어를 통해 jar 파일이 생성 되었는지 확인한다.
생성이 완료되었으면 해당 파일을 EC2로 전송한다
scp -i pem경로 build/libs/crawling-api-0.0.1-SNAPSHOT.jar ubuntu@IP주소:/home/ubuntu/
EC2에 잘 전송된 모습을 볼 수 있다.
이제
java -jar /home/ubuntu/crawling-api-0.0.1-SNAPSHOT.jar
명령어를 통해 실행하면 되는데 이때
sudo apt update
sudo apt install openjdk-17-jdk -y
java -version
sudo apt install gradle -y
gradle -version
명령어를 통해 java와 gradle을 설치해둠으로써 스프링 부트 서버가 작동할 수 있도록 해야한다
크롤링한 정보가 잘 받아지는 것을 볼 수 있다.