오늘은.


요즘 아주 핫한 아마존 웹 서비스(AWS)에 대한 간단한 소개를 하고...


EC2를 만들다가 내가 겪었던 짜증나는 AWS 자동 전화인증 문제와, 해결하기 위해 거쳐야 했던 귀찮은 과정을 설명하겠다.



지금당장 전화인증 문제 해결을 위해 이 글을 읽고있는 당신, 빠르게 아래로 스크롤 ㄱㄱ.




자. 아마존 웹 서비스를 쓸거라고 하면서도 이게 정확히 뭔지 모르는 사람들이 많다.


대관절 EC2 인스턴스를 만든다는게 뭔 말인지 모르고 이 글을 읽고 있을지도 모르는 안타까운 영혼들(사실 그게 나였음)을 위해 짧게나마 설명하겠다.



아마존 웹 서비스(AWS)란?

AWS 는 Amazon Web Services 의 약자다. 이거슨 아마존이 제공하는 웹 서비스로, 각종 원격 컴퓨팅 서비스를 제공한다.

AWS 사이트에 가보면.. 엄청나게 많은 서비스들이 있다.



이 중에 '컴퓨팅'에 속하는 서비스들이 클라우드 컴퓨팅 서비스들이고, 

아래처럼 개발할 응용프로그램의 용도에 맞게 여러 버전으로 서비스가 제공되고 있다.




저것들 중, 위에서 두 번째 'Amazon EC2'를 우리는 사용할건데

EC2가 뭔지 알려면 먼저 클라우드 컴퓨팅에 대한 사전지식이 필요하다. 궈궈.



클라우드 컴퓨팅(Cloud Computing) 이란?

이건 인터넷 기반 컴퓨터의 일종으로, 공유하는 데이터나 컴퓨터 처리 자원들을 다른 장치에다가 두고, 필요할 때 요청해서 가져오는 그런 방식이다.

우리의 아마존은 컴퓨팅 파워, 데이터베이스 스토리지, 기타 IT 리소스들을 우리에게 제공해주는거다.


거기에 서버를 구축해 두든, 데이터들을 쌓아두든 내맘이고, 

우리는 인터넷이라는 친구를 통해 소켓 통신을 하든, HTTP 웹 통신을 하든.. 상관없다.



클라우드 컴퓨팅이 뭐였는지 알았다면, 이제 본격적으로 EC2가 뭔지 알아보자.


EC2(Elastic Compute Cloud) 란?

이 친구는 안전하고 크기 조정이 가능한 컴퓨팅 파워를 클라우드에서 제공하는 웹 서비스이다.

여기서 중요한 대목은 '크기 조정이 가능하다'는 부분이다. 
그니까 얘는 클라우드 컴퓨팅 서비스인데, 특이한 점은 '크기 조정이 가능하다'는 점이다.

우리가 보통 컴퓨터를 살 때를 생각해보자.

메모리는 어느정도로 할지, CPU는 뭘로 할지 등 컴퓨터 처리 자원들의 스펙들을 정해서 그에 맞는 컴퓨터를 구매한다.

처음엔 게임 롤 정도만 돌아가면 되겠지... 하고 그에 맞춰서 샀는데, 오버워치를 돌리면서 컴퓨터가 힘들어하더니

배틀그라운드 돌리니까, 비행기 뜨는 소리가 들리더니 못버티고 녹아버리는 상황을 상상해보자. ㅎㅎㅎㅎ...


처음부터 넉넉하게 배틀그라운드 돌릴 정도로 사양 맞춰서 샀으면 좋았을텐데.

그때는 그럴 줄 몰랐고, 그럴 돈도 없었다는게 문제다.


EC2의 '탄력적'이라는, 즉 '크기 조정이 가능하다'는 특징은 바로 이런 상황을 극복할 수 있도록 해주는 강력한 친구라고 할 수 있겠다.


서버를 구축해두었는데, 갑자기 내가 만든 서비스가 대박나면서 사용자가 급증했다고 하자.

그러면 당연히 트래픽이 엄청나질테고, 못버티는 수준이 돼버리면 서버가 녹아버리고 말거다..

그치만 EC2에 서버를 구축해두면, 알아서 버틸 수 있는만큼의 컴퓨팅 파워를 갖춰주는 대신에 우리에게 요금을 청구한다.

우리의 서버가 요구하는 수준에 맞게 용량을 확장하거나 축소할 수 있는 큰 장점이 있다.

그래서 이놈이 핫한거다. ㅇㅈ?




후.

서론이 길었다.


 자 그러면 지금부터는

 EC2 인스턴스를 생성, 즉 클라우드 컴퓨팅을 하기 위해 아마존에다가 내 컴퓨터를 하나 파고 거기에 연결하는 방법을

앞으로의 포스팅에 쭉 작성할까 한다.


이번 포스트에서는 간단하게 가입하는 것부터.



AWS 가입하기

여기로 가서 회원가입을 한다.

참고로 가입을 할 때, 해외 결제가 가능한 신용카드를 등록해야 하니 참고할 것.



↑ 여기에 알아서 내용을 채워 넣고 [계속] 버튼을 누르고



↑ 또 요기에 내용을 입력해야 한다.
참고로, 모든 내용은 '영어'로 입력해야 한다는 사실.
친절한듯 불친절한 이웃 네이버에게 물어보면 알려주니까 걱정말자.



다음으로 ↑ 이렇게 결제정보 입력 창이 뜬다.




↑ 이제 이렇게 전화번호를 입력해주면 전화가 온다.



↑ 이걸 전화오면 키패드에 입력해주면 된다.


문제는, 가끔가다 이게 정확히 입력했는데 틀린다고 하거나 아예 전화가 안오는 경우가 왕왕 있다. 내가 그랬다. ㅡ ㅡ


나는 잘못한게 없는데, 전화가 안걸려와서 여러번 시도하게되면 12시간동안 인증을 할 수 없게된다...




그렇다. 난 여기서 막혔다.


아니... EC2 생성하기까지 가장 어려운 부분은 어이없게 AWS 전화 인증을 받는 부분이다.



위와 같은 '전화 거는 중...' 만 뜨고 전화는 안오는 상황이 계속되어서 난감했었는데. 


고객센터가 생각보다 나쁘지 않아서 잘 해결되었다.





AWS 계정 전화 인증 문제 해결하기



나와 같은 문제로 열받고 있다면 
https://console.aws.amazon.com/support/home
이리로 가보자.


요기서 My support cases > Create case 버튼을 누르면 새로운 QnA 케이스를 만드는 아래와 같은 화면이 뜬다.



Subject 와 Description 을 제외한 부분은 위와 같이 선택하면 된다.


Subject 와 Description 은 물론 영어로 작성해주어야 하는데, 어려우면 구글 번역기 돌리자.



나는 아래와 같이 작성해서 올렸다.



< 나 → AWS >


I can not validate my account because of no calling from aws.
You give me the pin number, but there's no call to my phone. 

So I can not input the pin number u gave. and I tried it three times, and then I can't try it anymore during 12 hours. 

What is the problem? 

Only AWS has this problem with my phone. 

Please check it ASAP. 




그랬더니 메일로 이런 답신이 왔다.


< AWS → 나 >


Hello, I am very sorry for the frustrations that have been experienced while activating this account with our automated phone verification system.
To help get you up and running as quickly as possible, we can manually verify the phone number on your account with a direct call from someone here at AWS.
 To request a manual call back, click on this case in the Support Center, and then click "Reply".
Please provide the date, a contact phone number (including country/region/area code) and a time frame with your local time zone in which you would prefer to be reached.

...



이 말이 뭐냐면.


너가 이런 어처구니 없는 일을 겪어 당황했을텐데 넘나 미안해. 내가 도와주기 위해 직접 너한테 전화할게. 밑에 URL 눌러서 relply 버튼 누르고 거기다가 니네 나라가 어딘지, 지역은 어딘지, 그 지역 코드는 뭔지, 니네 로컬 타임존이 뭔지, 그리고 넌 언제 전화를 받고싶은지 알려줘. 안뇽.


이거다.


그래서 나는 알려주었고, 내가 말한 시간에 전화가 걸려왔다.


영어로 전화하면서 해결하면 되는데,


저쪽에서 말하면 0.5초씩 늦게 들려서 대화하기가 좀 어렵고,  발음이 많이 부정확해서 알아듣는 데에 좀 애를 먹었다.






여튼 이런 삽질을 거치면, EC2 생성을 할 준비가 정말로 완전히 끝난다.


아, 참고로 이게 일반전화로 하면 실패하는 확률이 적다고 하니 참고하자.



사실 .. EC2 인스턴스 생성은 워낙에 여기저기 설명이 잘 되어 있는게 많아서.. 다른거는 어려움이 없다.






'Programming > ETC' 카테고리의 다른 글

AWS :: AWS EC2 & AWS 전화 인증 안될 때  (2) 2017.12.06
  1. 양탕구리 2018.05.29 20:22

    프로그래밍 공부 시작 6개월차 취준생입니다.

    핸드폰으로 자바관련 검색하다가
    좋은 블로그인것 같아서 컴터에 북마크 하려고 했습니다.

    왠걸! 이미 제 북마크에는 이 블로그가 있었습니다.
    쫄깃쫄깃한 글만 쓰는 Wanzergen이란 사람은 대체...

    시간날때마다 블로그 모든 글 정주행 가겠습니다.

    항상 좋은 글 써주셔서 정말정말 감사합니다.

  2. 양탕구리2 2018.05.30 14:06

    전화인증 냠냠 하게됬습니다 고맙습니다

아놔. 요즘 배그에 빠져서는 블로그는 나몰라라 하고 있다 ㅠㅠ

매번 쓸때마다 오랜만이긴 한데.

역시나 오랜만이니까 기초지식 다뤄보겠다.



이번에는 자바의 클래스 패스와 그것을 시스템 환경변수에 설정하는 목적에 대해 포스팅 해보겠다.


클래스 패스(Class Path)란?

자바 가상머신이 프로그램을 실행할 때, 클래스 파일을 찾는 데에 기준이 되는 파일 경로라고 할 수 있다.
즉, 자바 가상머신이 클래스 파일을 찾는 경로다.

물론, 이 클래스 패스는 개발자인 너, 나, 우리가 지정해준다.
지정해주지 않으면 자바 가상머신은 현재 디렉토리에서 필요한 클래스들을 가져와서 쓴다.

현재 디렉토리는 현재 명령 프롬프트가 가리키고 있는, 위치하고 있는 그 경로를 말한다.

>> java 파일명.class
이러한 명령어를 명령 프롬프트 창에다가 입력해서 실행시킬텐데, 이 상황에서의 디렉토리를 말한다.

다시 돌아와서.

A 클래스에서 B 클래스를 사용하고 있다고 하자. 
그리고 A, B 클래스가 같은 폴더에 있다고 하자.

이럴 땐 그냥 두 클래스가 있는 디렉토리로 가서

 >> java A.class

이렇게 해주면 아주 잘 돌아간다.

그치만 만약, B 클래스가 'bbb'라는 폴더 안에 있다면 약간의 문제가 발생한다.
위와 같이 실행하면, 중간에 오류를 뱉어낸다.
A 클래스에서 B 클래스를 사용하고 있는데, 해당 디렉토리에는 B 클래스가 없기 때문에 그러하다.

그래서 우리는 다른 디렉토리에 있는 B 클래스를 사용하기 위해, 
자바 가상머신이 클래스를 탐색하는 경로에 B클래스가 들어 있는 경로를 지정해주면 된다.




클래스 패스 지정하기

클래스 패스는 우리가 직접 지정해줄 수가 있다. 

>> set classpath=경로

이렇게 지정해주면 된다. 참 쉽다.

경로는 전체 경로가 싹 다 들어가는데, 예를 들면 'C:\workspace\bbb' 이런게 들어갈 수 있겠다.
C드라이브 밑에, workspace폴더 밑에, bbb라는 디렉토리를  클래스 패스로 지정하겠단 뜻이다.

근데 방금 말했듯이, 저렇게 명령어를 넣게 되면, 
저렇게 클래스 패스를 지정하게 되고, 그러면 자바 가상머신은 실행할 때, 저 경로만 탐색하게 된다.
즉, 클래스 패스를 추가하는게 아니라, 말 그대로 다시 설정해주는 명령어다.

A클래스가 있는 workspace 디렉토리와, B클래스가 있는 workspace/bbb 디렉토리를 둘 다 지정해주려면,  
경로 부분에 두 개의 경로를 모두 지정해주면 된다.
두 경로를 구분해주는 것은 세미콜론(;) 되시겠다.

>> set classpath=경로1;경로2
Ex)
>> set classpath=C:\workspace;C:\workspace\bbb

근데, 디렉토리 세계에서 마침표(.)는 현재 디렉토리를 의미한다.
그래서 내가 지금 명령 프롬프트 상에서 위치한 디렉토리를 클래스 패스로 지정하고싶다 하면

>> set classpath=.

일케 입력해주면 된다.


이렇게 입력해주는 클래스 패스는 언제 어디서나, 평생펑생 유효할까?

그렇지 않다.

이것을 지정해준 명령 프롬프트 창 내에서만 유효하다.
그래서 새로운 명령 프롬프트 창을 띄우면, 또 지정해줘야 한다.


이거 너무 불편하니까, 미리 클래스패스를 고정해놓곤 하는데
우리 윈도우 유저분들. 징그럽게 많이 해서 이제는 눈 감고도 하는 바로 그거.

환경변수 셋팅. 두둥-.

바로 여기에서 클래스 패스를 지정해놓으면, 알아서 자바 가상머신은 그 경로에서 클래스 파일을 탐색하게 된다.
새로운 명령 프롬프트를 띄우더라도.



클래스 패스 고정하기


나의 컴은 맥북이라 이걸 캡쳐할 수 없는 안타까움이 있지만. 대충 말로 떼워보자면
윈도우에서 '새 사용자 변수' 창을 띄워서 환경 변수를 등록하는게 있는데
여기서 변수 이름에 'classpath'를 넣고, 변수 값에 경로를 주면 된다.

자바 처음 배울 때
아무것도 모르는데 일단 JDK를 설치하고, 환경변수를 설정하라고 하는데...
하라는대로 하긴 하겠는데... 
이랬었던 기억이 난다. 새록새록.


경로 집어 넣을 때, 

C:\Program Files\java\jdk0.0.0\bin;

이렇게 집어 넣었었는데, 꼭 마지막에 세미콜론(;) 빼먹거나, 'bin' 빼먹고서는 안된다고 하는 애들 있었다.

'bin'은 자바 소스(.java 파일)가 컴파일 되어 새롭게 생성되는 .class 파일이 모여있는 곳이다.
실제로 자바 가상머신이 실행할 수 있는 형태의 파일은 .java 파일이 아니라, .class 파일이고,
그것들이 모여있는 위치가 'bin'폴더이기 때문에 꼭 여기까지 써주어야 한다는 사실을 기억하자.





-----


사실 패키지에 대한 것까지 오늘 쓸라그랬는데..
넘나 졸린 것 ㅠㅠ 
낼 출근 똥망. 


  1. ㅁㄴㅇㄹ 2018.12.18 09:53

    감사합니다 이해잘되는거같아요 잘봣습니다

  2. 초보개발자 2020.12.29 12:40

    감사합니다~ Programming/Java 관련 글을 다봤습니다! 매일 코딩은 하지만정확히 어떻게 구동되는지 기본적인 지식이 없었는데 간단하게 설명해주셔서 잘 보고갑니다!

이번 포스트에서는 프로세스와 스레드의 차이가 뭣인지 설명하도록 하겠다.



1. 프로세스(process)란?

프로세스는 짧게 말해, 실행 중인 프로그램이라고 할 수 있다.

이 대목에서 또 프로그램은 뭐고, 프로세스는 뭔지 헷갈릴 거신데. 뭣이냐면.

프로그램은 하드디스크 등에 저장되어 있는 '실행코드'를 의미한다. 
그니까, 맘만 먹으면 실행할 수 있는거긴 한데 정적인 상태의 어떤 파일(?)을 프로그램이라 한다.

프로세스는 그 프로그램을 구동했을 때, 그 프로그램 자체 + 메모리 상에서 실행되고 있는 작업 단위를 말한다.
쉽게 말해, 프로그램을 실행한게 프로세스인데, 이 프로그램을 여러번 구동시키면 여러 개의 프로세스가 생기는거다.

정적인 프로그램과, 동적인 프로세스가 뭔지 대충 이해가 됐길 바란다.


자. 그럼 스레드는 뭐하는 놈일까.

2. 스레드(thread)란?

어떤 프로그램 안에서, 특히 프로세스 안에서 실행되는 흐름의 단위 라고 우리의 위키는 얘기하고 있다.

그니까, 어떤 프로그램을 실행시킨게 바로 프로세스이지 않음?
그 프로세스는 운영체제로부터 프로그램을 돌리기 위해 얼마만큼의 메모리를 포함해서 이것 저것 필요한 자원을 할당받는다.
그리고 스레드는 프로세스에 할당된 자원을 마구 써재끼는, 실제로 실행되는 그런 흐름으로써, 한 놈일수도 있고, 두 놈일 수도 있고, 더 많을 수도 있다.

즉, 프로세스의 업무를 여러개로 나누면 스레드가 되는건데, 얘네들은 서로 프로세스에 할당된 자원을 함께 공유하면서 열심히 작업을 처리하는 애들이다.

스레드가 나오게된 이유는, 한 개의 프로세스에 처리해야 할 작업이 많을 때, 다수 개의 스레드를 통해 동시에 처리하기 위함인데,
이게 바로 멀티스레딩이다.



멀티스레딩(multithreading)은 뭘까?

이건 한 프로세스를 다수의 실행 단위, 즉 다수의 스레드로 구분해서, 여러 스레드가 독립적으로 작업을 병렬로 처리할 수 있는 방법이다.

예를 들어, 수강신청을 100명이 동시에 하러 들어왔다고 해보자.
근데 A학생이 수강신청을 하러 먼저 들어와서, 나중에 들어온 B학생은 A학생이 수강신청을 모두 할 때까지 기다려야 한다면?
옳지 못하다!
수강신청 하루 온종일 해야할지도... 

그래서 스레드가 있는건데, 100명의 수강생을 각각 처리해줄 우리의 스레드가 있으면 A학생도 동시에 수강신청을 진행하(는것 처럼 느껴지)게 되는 거시다.
스레드가 100개까지 생성될 수 있다 했을 때, 101번째 사람부터는 100개의 스레드 중 하나가 비어서 일을 처리할 수 있는 상태가 될 때까지 기다리면 된다.

수강신청할 때 분명 꿀교양수업을 신청했는데, 완료버튼을 누르고 났더니 이미 차버려서 못했다고 뜨는 어처구니없는 상황은..
바로 이렇게 스레드 여러개가 남의 수강신청을 다 처리해주고 있기 때무닌 거시다.ㅠ_ㅠ

이렇게 독립된 작업을 동시에 처리할 수 있는게 바로 멀티스레드다.

근데 사실, 이게.. 동시라고 볼 수는 없다.
여러 스레드가 독립적으로 작업을 처리할 뿐이지, 동시에 처리하는 건 아니다.

1번 스레드가 처리하다가, 2번 스레드가 처리하다가. 이거를 번갈아가면서 하는거다.
하지만 느껴지기엔 마치 동시에 하는 것 처럼 느껴진다. 워-낙에 빠르니까.









'Programming > OS' 카테고리의 다른 글

OS :: 프로세스(process)와 스레드(thread)의 차이  (1) 2017.10.16
  1. korea HEN 2017.10.17 01:56

    쓰레드를 보려고 목놓아 기다렸는데 드디어 나왔네요 ^^

+ Recent posts