[swift] SwiftGen과 함께 사용하는 웹 크롤링

이번 글에서는 SwiftGen과 함께 사용하여 웹 크롤링을 하는 방법에 대해 알아보겠습니다. 웹 크롤링은 웹 사이트에서 데이터를 수집하고 가공하는 작업을 의미합니다. SwiftGen은 Swift 코드를 자동 생성해주는 툴로, 자주 사용하는 리소스 파일들을 효율적으로 관리할 수 있게 도와줍니다.

1. SwiftGen 설치하기

먼저 SwiftGen을 사용하기 위해서는 필요한 패키지들을 설치해야 합니다. 프로젝트의 Podfile에 다음과 같이 SwiftGen과 관련 패키지들을 추가합니다.

target 'MyApp' do
  # CocoaPods 이외의 다른 패키지들을 추가하는 내용
  # ...

  # SwiftGen 관련 패키지들 추가
  pod 'SwiftGen'
  pod 'SwiftGen-CLI'
end

그리고 터미널을 열어 pod install 명령어를 실행하면 관련 패키지들이 설치됩니다.

2. 웹 크롤링 예제

이제 실제로 SwiftGen과 함께 웹 크롤링을 해보겠습니다. 예시로 ‘https://example.com’ 사이트에서 제목을 크롤링하는 작업을 수행해보겠습니다.

import SwiftGen
import Alamofire
import Kanna

func crawlWebpage() {
    let url = "https://example.com"
    
    // Alamofire를 사용하여 웹 페이지 내용을 가져옴
    AF.request(url).responseString { response in
        guard let html = response.value else {
            print("Failed to load webpage")
            return
        }
        
        // Kanna를 사용하여 HTML 파싱
        if let doc = try? HTML(html: html, encoding: .utf8) {
            if let titleNode = doc.css("title").first {
                let title = titleNode.text
                print("Webpage title: \(title)")
            }
        }
    }
}

crawlWebpage()

위 예제 코드는 SwiftGen을 사용하지 않은 웹 크롤링 예제입니다. Alamofire를 사용하여 웹 페이지의 내용을 가져오고, Kanna를 사용하여 파싱한 후 페이지의 제목을 출력합니다.

3. SwiftGen을 사용한 웹 크롤링

이제 SwiftGen을 사용해보겠습니다. 우선 프로젝트의 Root 디렉토리에 .swiftgen.yml 파일을 생성하고 다음과 같이 작성합니다.

# .swiftgen.yml

inputs:
  templates:
    - paths: templates/
      templateName: structured-swift5
      outputPath: Generated/

targets:
  my_target_name:
    sources:
      - paths: Generated/
        templateName: swift5

위 설정 파일은 SwiftGen이 사용할 템플릿과 출력 경로를 설정한 것입니다. 그리고 프로젝트 내에 templates 디렉토리를 생성하고, structured-swift5 템플릿 파일을 생성합니다.

그리고 예시 코드를 다음과 같이 수정합니다.

import SwiftGen
import Alamofire
import Kanna

func crawlWebpage() {
    let url = "https://example.com"
    
    // Alamofire를 사용하여 웹 페이지 내용을 가져옴
    AF.request(url).responseString { response in
        guard let html = response.value else {
            print("Failed to load webpage")
            return
        }
        
        // Kanna를 사용하여 HTML 파싱
        if let doc = try? HTML(html: html, encoding: .utf8) {
            if let titleNode = doc.css("title").first {
                let title = titleNode.text
                print("Webpage title: \(title)")
                
                // SwiftGen을 사용하여 자동 생성한 코드
                Localization.alert(title)
            }
        }
    }
}

crawlWebpage()

위 코드에서는 Localization이라는 자동 생성된 코드를 사용하여 웹 페이지의 제목을 알림창으로 보여주는 예제입니다. 이렇게 SwiftGen을 사용하면 자주 사용하는 리소스를 효율적으로 관리할 수 있고, 코드의 가독성과 유지보수성을 향상시킬 수 있습니다.

결론

이번 글에서는 SwiftGen과 함께 웹 크롤링을 하는 방법에 대해 알아보았습니다. SwiftGen을 사용하면 리소스 파일들을 효율적으로 관리하고, 코드의 가독성과 유지보수성을 높일 수 있습니다.