생성한 EC2에 WAS를 띄운다거나 하는 등의 각종 작업을 하기 위해서는 내 클라이언트 PC에서 서버인 EC2 인스턴스로의 접속이 필요하다. 

EC2를 생성하는 방법은 아래 포스팅을 참고하면 된다.

 

[혼자 다 해볼거야/Cloud & Architecture] - [AWS] Free Tier EC2 생성

 

 

 

OpenSSH 등을 비롯한 여러가지 방법이 있겠지만, 업무 시 가장 많이 사용해서 제일 익숙해져버린 PuTTY를 이용해서 SSH 접속을 하기로 한다.

 

 

 

PuTTY 설치 및 설정

PuTTY 설치 단계는 다른 곳에서도 충분히 친절하게 설명해주고 있으니 생략하기로 한다.

이왕이면 쌔삥으로 - 최신 버전으로 - 설치해 주는 것이 좋겠다.

 

설치가 완료되었으면, 아래 공식 가이드를 참고하여 PuTTY 설정을 진행하자.

해당 포스팅에서는 주요 단계만 언급하도록 한다.

 

AWS PuTTY 연결 공식 가이드

 

 

나는 최초에 pem이 아닌 ppk로 키 페어를 받아 두었으므로 PuTTYgen을 이용한 변환 단계는 생략하였다.

이하는 상기 공식 가이드에서 발췌한 내용이다.

 

 

 



 

 

공식 가이드에서는 5-1 단계와 같이 호스트를 신뢰하겠다는 설정 이전에 RSA 키 지문 확인 등을 통해 다른 공격이 있는지 확인하라고 하나, 현재는 서비스 단계도 아니고 생성과 학습 단계이므로 생략하기로 한다. (아마존도 선택 사항이라고 적어놓기도 했고)

 

5-2 부분에서의 선택창은 아래 창을 의미한다. 'Accept'를 누르면 신뢰할 수 있는 호스트로 알고 PuTTY의 캐시에 키를 저장하여 계속 접속할 수 있게 해 준다.

 

공용 PC가 아닌 개인 PC라면 'Accept'를 선택하여 편하게 접속하자

 

 

 

아래와 같이 정상적인 커맨드 창이 표시되면 EC2 인스턴스에 성공적으로 접속된 것이다.

 

검은 커맨드 창이 보이면 마음이 편-안해지는 어른이 되었다

 

 

 

끝.

반응형

전체적인 아키텍쳐를 그리기 전에, 12개월 & 월 750 시간으로 기간이 정해져 있는 EC2 Free Tier가 아깝기도 하고, 뭔가 하나라도 실제 웹 상에서 퍼블리싱이 되어 구동되는 모습이 보여야 더욱 흥미가 붙을 것 같아 EC2부터 한 대 생성하기로 한다.

 

AWS 계정을 이용하여 클라우드 콘솔에 접속한다.

(AWS 계정 생성 방법은 이전에 업로드한 글을 참고하시면 됩니다.)

 

[혼자 다 해볼거야/Cloud & Architecture] - AWS Free Tier 계정 생성

 

 

Free Tier 기준

AWS는 GCP와는 다르게 컴퓨팅 서비스에 평생 Free Tier 개념이 없다. 대신에 계정을 생성한 후 12개월동안 750시간/월의 무료 혜택을 제공한다.

 

 

한 달 750시간이란, 1개의 EC2를 생성한 경우에는 일일 24시간 구동을 기준으로 약 31일을 사용할 수 있는 양이므로, 하나만 공짜로 사용하라는 말이다.

두 개 이상의 EC2를 생성할 경우, 하루 종일 두 인스턴스를 구동시킨다면 무료 혜택을 초과하게 되어 비용이 부과되므로 참고하자.

 

다른 서비스들의 Free Tier 기준은 아래 AWS 사이트의 링크를 참고하면 된다.

 

AWS Free Tier 살펴보기

 

 

위 링크에서 여러 서비스들의 프리 티어 기준을 확인할 수 있다.

 

 

생성

AWS Console에서 EC2 메뉴 진입 > 인스턴스 시작 버튼 클릭

 

 

이후 표시되는 메뉴에서 생성될 서버의 OS 등 여러가지 사양을 선택해야 한다. 

OS는 Amazon Linux, 레드햇 계열의 Red Hat Linux, (CentOS는 2021년 서비스 지원 종료로 없어진 듯 하다), 데비안 계열의 Ubuntu등이 제공된다.

Windows Server도 프리 티어 OS로 제공되나 프리 티어 인스턴스 사양으로는 돌리기가 버거울 것 같아 무시한다.

 

 

구글링을 하며 한참을 고민하다 우선은 Ubuntu로 생성하기로 결정했다.

 

반드시 '프리 티어 사용 가능' 문구가 있는 OS로 선택하여야 공짜로 받아먹을 수 있다.

 

 

 

인스턴스 유형은 t2.micro로 선택하였고, 키 페어는 기존에 생성해 둔 것이 없으므로 신규로 생성하였다.

나는 PuTTY를 사용하여 SSH 접속할 예정이므로 ppk 파일 형식으로 생성하였다.

 

신규 키 페어를 생성해야 인스턴스에 안전하게 연결이 가능하다.

 

생성을 클릭하면 ppk 확장자로 된 파일이 자동으로 다운로드되는데, 나중에 PuTTY 접속 설정 시 사용되기도 하고 보안 상 중요한 Key가 되므로 안전한 곳에 꼭꼭 숨겨 보관하도록 하자.

 

 

 

 

다음으로 항상 중요하고도 복잡한 네트워크 설정 단계인데, 다른 것들은 기본값으로 그대로 두었으며 보안 그룹 이름은 내 마음에 드는 이름으로 변경해 주었다.

 

 

인바운드 보안 그룹 규칙은 SSH Port(기본 22)를 활용해 해당 인스턴스에 접속하기 위한 제일 기본적인 Rule을 등록하게 되는데, 그 중 가장 중요한 소스 유형은 '위치 무관'의 경우 어떤 IP로 접속하더라도 접속 가능하도록 허용하는 것이고 '사용자 지정' 또는 '내 IP'로 선택할 경우 특정 IP를 직접 입력하거나 지금 접속하고 있는 IP로 한정하여 EC2에 접속 가능하도록 제한하는 것이다.

 

일반적인 가정용 인터넷 공유기 설정은 유동 IP를 할당받아 사용하도록 되어 있기도 하고, 글을 작성하는 시점에 카페에서 공용 와이파이를 사용하고 있다 보니 '위치 무관'으로 우선 생성하기로 한다.

 

인바운드 보안 그룹 규칙은 신경써서 생성해야 한다.

 

 

 

마지막으로 스토리지 부분인데, 프리 티어의 경우 SSD 타입의 스토리지까지 포함하여 총 30Gb가 무료 용량으로 제공된다. 이번 인스턴스에는 8Gb만 할당하여 쓰기로 한다.

 

gp2가 기본적으로 선택되어 있으나 gp3가 (서비스의 I/O 패턴에 따라 다르기는 하나) 일반적으로 더 낫다고 알고 있어 gp3로 변경하여 생성하기로 한다.

 

gp2와 gp3 비교. 볼륨당 최대 처리량이 더 빠르고 나머지가 동일하면 gp2의 존재 이유는...? 공부,,,해야지,,

 

 

기타 설정은 건드리지 않고 생성을 누르게 되면, 아래와 같이 약간의 시간이 지난 뒤 인스턴스 생성이 완료되었다는 메시지를 볼 수 있다.

 

 

 

 

이후 모든 인스턴스 보기 버튼을 눌러 대시보드로 이동하면, 내가 생성한 인스턴스가 한 줄 표시되고 '인스턴스 상태'가 '실행 중'으로 표시되는 것을 볼 수 있다.

 

 

끝.

반응형

크롤러 개발 중 특정 요소를 불러왔음에도 값들이 인식이 안 되고 아래와 같은 오류 메시지가 표시되는 케이스를 발견했다.

Message: stale element reference: element is not attached to the page document

 

Message: stale element reference: element is not attached to the page document 오류

 

 

 

오류 메시지를 살펴보니 stale element를 참조하고 있다고 하는 것으로 보아, WebElement로 가져온 객체 중 저 element ID를 가진 요소가 없는(없어진?) 것으로 보인다.

 

그런데 이상하다. 현재 화면에서 표시되는 대로라면 리스트가 2개여야 정상인데 사이즈가 6개로 잡히는 게 아닌가.

 

내가 가져오려는 것은 Premier League 하위 2개 a 태그 요소다

 

 

 

 

코드가 잘못된 줄 알고 몇 번의 수정과 시행착오 끝에 밝혀낸 범인은 이것이었다.

 

  1. 화면에서 처음에는 현지 시간대 기준으로 Yesterday Match Info.를 가져온다.
  2. 내 코드는 해당 시점에 요소를 읽어들여 List Size가 6이다.
  3. 내 코드가 객체를 읽은 후, 친절하게도 Fotmob 사이트에서 사용자 시각(GMT+9)을 기준으로 요소를 Refresh 한다.
    (이 때 아마 Element ID도 다 변경되어 버리는 것 같다.)
    (230120 수정) 자동으로 Refresh가 이루어지는 것이 아니었다. 어떤 이벤트로 인지가 되는지는 모르겠으나 창을 최소화 한 후 다시 활성화하는 시점에 경기 리스트가 6개에서 2개로 Refresh 되더라...
  4. 한국 시간대로 어제 치뤄진 경기는 두 경기이므로, 2번 단계에서 읽은 요소로 Loop를 돌면서 Element를 찾으면 다 사라지고 없겠지? 따라서 기쁘게도 에러가 난다.

 

현지 시간대를 기준으로는 총 6경기가 치뤄졌다

 

 

 

따라서 아래와 같이 코드를 수정하였다.

창 최소화와 최대화 사이에 sleep을 걸어주지 않으면 또 제대로 Refresh가 되지 않아서... 부득이하게 추가하였다.

 

        WebDriverWait(driver, 5).until(
            EC.presence_of_element_located((By.XPATH, '//*[@id="__next"]/main/div[2]/div[1]/section/section/div[2]/div[1]'))
        )
        driver.minimize_window()
        time.sleep(2)
        driver.maximize_window()
        time.sleep(2)

 

 

 

다음과 같이 정상적으로 객체 인식 & 값 인식이 되는 것을 확인하였다.

 

이렇게 사이트마다 조금씩 특이한 변수들이 존재할 수 있다. 실전에서 부딪혀보지 않으면 알기 힘들겠다.

 

 

 

Learned - 촌각을 다투는 크롤링이 아니라면 화면 로딩 후 어떤 일이 이루어질지 모르기 때문에 2~3초간의 sleep을 필수로 넣어두어야 할 것 같다. (230120 수정) 사전에 대상 화면을 미리 둘러보고 육안으로 언제, 어떤 부분들이 동적으로 변하는지 잘 살펴봐야겠다.

 

 

 

 

 

끝.

반응형

'다 배울거야 > Crawling with Selenium' 카테고리의 다른 글

XPath로 화면의 요소 찾기  (0) 2023.01.15

크롤러 개발 중에, 기존에 코드에 넣어둔 XPath가 어떤 요소를 가져온 것인지 기억이 잘 나지 않는 경우가 생겼다.

 

이 때, 코드의 XPath를 이용해 그 Path가 화면의 어떤 요소를 지칭하는 것이었는지 확인해 볼 수 있다.

 

  1. 코드의 XPath를 복사한다.
  2. Chrome - F12로 개발자 도구 오픈
  3. Ctrl + F로 검색창 오픈
    검색창 설명을 보면 string, selector, XPath로 검색이 가능하다고 나와 있다.
  4. XPath 붙여넣기
    아래와 같이 붙여넣는 순간 친절하게도 파란색/노란색 하이라이트로 화면 내와 코드 내에 어떤 부분인지 검색 결과를 표시해준다.

 

끝.

반응형

티스토리에 처음 쓰는 글이 되겠다.

 

프로젝트의 기본적인 아이디어는 네이버 블로그에 대강 휘갈겨 써 두었고, 회사 성과급도 어느정도 윤곽이 드러난 듯 하니 이제 정말 내 자만심대로 '내가 한번 해볼거야' 라며 박차고 나갈거라면, 진짜 슬슬 본격적으로 시작해야 되겠다는 생각이 든다.

 

 

 

가장 막연한 부분은 웹과 관련된 기술 스택이다.

개발을 놓은 지 좀 되었지만, 그럼에도 누가 내 주 언어를 묻는다면 나는 여전히 커리어를 처음 시작했을 때 접했던 C#을 댈 것이다. 그만큼 웹과 동떨어져 있다는 이야기가 되겠다.

 

그런 만큼 리서치를 통해 개발 언어와 프레임워크 등을 신중하게 택하려고 고민하는 중이다.

주된 포인트는 아래 정도가 될 것이다.

 

 

 

 


  • 범용성 - 평생 백수로 살 수는 없기에, 이 프로젝트가 포트폴리오로 사용될 것을 감안하여 시장에서 선호하는 범용성 높은 기술들로 선정해야 함
  • 개발 용이성 - 내 곳간의 밑천이 다 드러나기 전에 이 프로젝트로 뭔가 이뤄내야 함. 따라서 쉽고 빠른 기술을 선택해야 하므로 개발 용이성 또한 간과할 수 없음

 

 

범용성의 경우는 아래 B.Iog님의 글을 참고하였고, 클라우드 서비스를 제외하고 나머지 항목들은 두 기업 기술 스택의 교집합을 잘 살펴보고 아래 표와 같이 대강 정리해 보았다.

 

네이버/카카오가 사용하는 기술 스택 (by B.Iog)

 

 

Cloud Service AWS
GCP
Language Java
Javascript
Python
Front-end Framework React
Vue
Back-end Framework Spring
SpringBoot
Node.js
Database MySQL
Redis
ElasticSearch

 


 

 

Cloud Service

AWS는 지난 팀에 있었을 당시 사업팀 인프라 담당자로 있으면서 어깨 너머로 배운 경험이, GCP의 경우 프리 티어를 활용해 기본적인 학습을 했던 경험들이 남아 있어 조금은 수월하게 접근할 수 있을 것 같다.

 

지금 가능한 수준에서 차근차근 시작해보는 중이다.

 

[혼자 다 해볼거야/Cloud & Architecture] - [AWS] Free Tier EC2 생성
[혼자 다 해볼거야/Cloud & Architecture] - [AWS] SSH로 EC2 접속하기 (w/PuTTY)

 

 

 

Language

웹의 근간이 되는 JavaScript, 신입 교육 이후에는 (거의) 본 적도 들은 적도 없어져서 대부분 머릿속에서 날아가 버렸다.

너무 기본적인 내용일 수 있지만, 프레임웤이 아닌 바닐라 JS부터 다시 좀 배워야겠다는 생각이 들었다.

노마드 코더 사이트의 무료 바닐라 JS 강의를 통해 기본적인 내용을 학습하고 있다.

 

바닐라 JS로 크롬 앱 만들기 - 노마드 코더

 

 

 

 

 

이 외에도 정해야 할 것들, 개발해야 할 것들이 산더미이기에 빨리 공부하고 빨리 결정해서 움직여야겠다.

 

끝.

반응형

+ Recent posts