백엔드

크롤링 서버 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을 설치해둠으로써 스프링 부트 서버가 작동할 수 있도록 해야한다

 

 

 

 

크롤링한 정보가 잘 받아지는 것을 볼 수 있다.