이번 글에서는 Amazon Web Service(AWS) 에서 DynamoDB를 사용하는 방법을 Python을 이용해서 다루도록 하겠습니다.

처음에 AWS Python 카테고리에서 DynamoDB를 다루고자 했던 것은 아니였지만, 이번 회사에서 기술보고서를 작성하는 과정에 있어서 주제를 DynamoDB를 하다 보니까 블로그에도 같이 다루는 것이 좋을 것 같아서 올려봅니다.


2018/06/03 - [Onik Lab./AWS Python] - AWS DynamoDB in Python (Boto3) - #1. 소개

2018/06/03 - [Onik Lab./AWS Python] - AWS DynamoDB in Python (Boto3) - #2. 테이블 관리

2018/06/03 - [Onik Lab./AWS Python] - AWS DynamoDB in Python (Boto3) - #3. 항목 관리


이번 글은 지난 글에 이어서 AWS SDK for Python인 Boto3 를 사용한 DynamoDB의 항목(Items) 호출을 위한 Query & Scan에 대해서 다루어보도록 하겠습니다.

모든 내용은 AWS의 Boto3 Documentation에 있는 내용이며, 번역자료가 없기 때문에 제가 직접 실습하면서 나타내도록 하겠습니다.


원본 문서: http://boto3.readthedocs.io/en/latest/guide/


영어 문서이므로 참고하시기 바랍니다.


1. Query & Scan 

두 가지 모두 DynamoDB의 항목 호출을 위한 기능이지만, 사용 용도는 약간 차이가 있습니다.

Query는 특정 값을 검색했을 때 나타나는 결과를 조회할 때 사용됩니다. 예제에서는 하나의 항목만 반환하지만, get_items() 함수와 기능은 비슷하지만, get_items()가 단순히 키를 지정했을 때의 값을 가져오는 것이지만, Query는 더욱 자세한 조건을 통해서 값을 가져오는 것이 가능합니다.

Scan은 Query와는 다르게 특정 값을 지정해서 불러올 수도 있지만, 주 용도는 호출하고자 하는 값의 범위를 검색 조건으로 할 때 사용됩니다. 내부 속성으로는 FilterExpression을 사용하며, 이는 즉 필터링을 위한 용도로 보는 것이 맞을 것입니다.

Query & Scan을 사용하기 위해서는 boto3를 import하는 것 외에도 추가 클래스를 호출해야 합니다.

추가 클래스는 boto3.dynamodb.conditions.Key와 boto3.dynamodb.conditions.Attr 클래스로, 호출 방법은 아래와 같습니다.

from boto3.dynamodb.conditions import Key, Attr

import boto3 바로 밑에 작성하면 아무 문제 없이 클래스 import가 가능합니다.


아래 Query & Scan을 위한 기본 예제 테이블은 users 테이블로 할 것이며, 해당 테이블의 항목은 아래와 같습니다.

항목의 Address가 내재된 속성(Nested Attributes)들을 포함하고 있으므로, 각 항목 별 값을 나타내면 다음과 같습니다.


 


이 점을 참고하시고 아래 예제를 실행한 결과를 보시면 더욱 이해가 될 수 있을 것입니다.


2. Query

Query 예제는 아래와 같으며, username 파티션 키 값이 'johndoe'의 값을 가진 항목(Equal: EQ)을 조회하는 내용입니다.

당연히 import 에서 클래스 로드까지 모두 마친 상태입니다.

response = table.query(

    KeyConditionExpression=Key('username').eq('johndoe')

)

items = response['Items']

print(items)

결과는 johndoe의 항목이 호출됩니다.


3. Scan

Scan 첫번째 예제입니다. age 속성의 값이 27보다 작을 때 (Lower Than: LT) 의 내용입니다.

response = table.scan(

    FilterExpression=Attr('age').lt(27)

)

items = response['Items']

print(items)

 

결과는 johndoe와 bobsmith의 항목이 호출됩니다.



Scan 두번째 예제입니다. 조건이 조금은 더 복잡해졌습니다.

first_name의 값이 'J'로 시작(Begins_with)하고, account_type이 'super_user'와 동일할 때의 내용입니다.

response = table.scan(

    FilterExpression=Attr('first_name').begins_with('J') & Attr('account_type').eq('super_user')

)

items = response['Items']

print(items)

 

결과는 janedoering의 항목이 호출됩니다.



Scan 세번째 예제입니다. 위 예제와는 달리, 속성 내에 내재된 속성, 즉 속성 안에 속성 값을 검색할 때 쓰는 조건입니다.

Nested Attributes에 대한 검색 관리도 아래와 같이 할 수 있으며, addresss 속성의 state 속성의 값이 'CA'일 때 나타내는 내용입니다.

response = table.scan(

    FilterExpression=Attr('address.state').eq('CA')

)

items = response['Items']

print(items)

결과는 johndoe와 alicedoe의 항목이 호출됩니다.



Python SDK인 Boto3를 활용하여 DynamoDB를 관리하는 방법에 관한 글은 여기까지입니다.

이 모든 내용은 AWS Boto3 Documentation에 있는 내용이지만, 번역이 되어 있지 않았고,

앞으로도 DynamoDB를 사용할 일이 생길 때 Python으로 어떻게 해야 할 지를 나타내고자 할 때에는 이러한 기본 예제를 들어 활용하면 될 것입니다.


하지만 고급 프로그래밍을 하게 되면 이것보다는 훨씬 복잡한 명령어를 작성해야 할 것입니다.

그렇기 때문에 AWS에서는 이를 위한 예제를 별도로 제공하고 있습니다.

Tic-tac-toe라는 Python Application에서 DynamoDB를 사용한 예제를 AWS에서 제공하고 있으니, 향후 DynamoDB 프로그래밍이 필요할 때에는 위에서 다룬 내용을 바탕으로 하고, 예제 문서를 참고하여 프로그램을 개발하면 될 것으로 생각됩니다.


Tic-tac-toe Python Link: https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/TicTacToe.html


이상 글 마치겠습니다.


 



WRITTEN BY
鬼風
생각이 깨어있지 않다면 살아갈 이유도 없다

트랙백  0 , 댓글  0개가 달렸습니다.
secret

이번 글에서는 Amazon Web Service(AWS) 에서 DynamoDB를 사용하는 방법을 Python을 이용해서 다루도록 하겠습니다.

처음에 AWS Python 카테고리에서 DynamoDB를 다루고자 했던 것은 아니였지만, 이번 회사에서 기술보고서를 작성하는 과정에 있어서 주제를 DynamoDB를 하다 보니까 블로그에도 같이 다루는 것이 좋을 것 같아서 올려봅니다.


2018/06/03 - [Onik Lab./AWS Python] - AWS DynamoDB in Python (Boto3) - #1. 소개

2018/06/03 - [Onik Lab./AWS Python] - AWS DynamoDB in Python (Boto3) - #2. 테이블 관리


이번 글은 지난 글에 이어서 AWS SDK for Python인 Boto3 를 사용한 DynamoDB의 항목(Items) 관리에 대해서 다루어보도록 하겠습니다.

모든 내용은 AWS의 Boto3 Documentation에 있는 내용이며, 번역자료가 없기 때문에 제가 직접 실습하면서 나타내도록 하겠습니다.


원본 문서: http://boto3.readthedocs.io/en/latest/guide/


영어 문서이므로 참고하시기 바랍니다.


먼저 항목(Items)이 무엇인지에 대해서 간단히 언급하겠습니다.

항목이란 쉽게 말해서, 데이터 값입니다.

RDBMS에서는 레코드(Record) 또는 행(Row)이라고도 하는데, DynamoDB는 NoSQL의 특성에 맞게 항목(Items)으로 나타납니다.

이 점을 참고하시면 될 것으로 생각됩니다.


이 게시물에 있는 모든 예제는 users Table에서 이루어집니다.

users Table의 기본 키(Primary Key)는 username(Partition Key)과 last_name(Sort Key)로 구성되어 있으니 이 점 반드시 참고 바랍니다.


1. 기본 데이터 처리 - CRUD

DB를 하시는 분은 CRUD가 무엇인지 정도는 다 알 것입니다. 

RDBMS에서는 SQL에서 Insert / Select / Update / Delete의 기능으로도 볼 수 있겠고요.


DynamoDB의 항목 생성/호출/갱신/삭제 또한 마찬가지입니다.


1) 생성

table.put_item(

   Item={

        'username': 'janedoe',

        'first_name': 'Jane',

        'last_name': 'Doe',

        'age': 25,

        'account_type': 'standard_user',

    }

)


생성은 put_item 을 사용하여 입력이 이루어집니다.

위에 언급했다 시피, username과 last_name 속성은 기본 키이므로, first_name, age, account_type은 추가 속성으로 자유롭게 입력된 것을 확인할 수 있습니다.

결과는 다음과 같습니다.


2) 호출

일반적으로 호출이라 함은 SQL에서 select에 해당되는 부분으로 볼 수 있습니다.

하지만 실제 자세한 호출은 아래에서 상세히 다룰 예정이며, 지금 예제는 하나의 값을 단순히 불러오는 예제로 보시면 되겠습니다.

response = table.get_item(

    Key={

        'username': 'janedoe',

        'last_name': 'Doe'

    }

)

item = response['Item']

print(item)

 

위 예제와 같이, 기본 키를 입력해서 해당 키의 값을 불러오는 과정으로, 커맨드 창에서 파이썬을 실행한 결과는 다음과 같습니다.


3) 갱신

갱신은 특정 값을 변경하는 것이므로, 변경 대상 항목과 변경될 값을 입력하면 됩니다.

table.update_item(

    Key={

        'username': 'janedoe',

        'last_name': 'Doe'

    },

    UpdateExpression='SET age = :val1',

    ExpressionAttributeValues={

        ':val1': 26

    }

)

예제에서와 같이, 변경 대상 항목 지정을 위한 Key를 입력하고, UpdateExpression을 통해서 대상 속성의 값을 지정합니다.

그리고 ExpressionAttributeValues를 통해서 특정 값에 대한 변수 값을 입력합니다.

AWS Console에서의 갱신 결과는 아래와 같습니다.


4) 삭제

삭제는 기본 키를 조건으로 지정하면 즉시 삭제가 가능합니다.

table.delete_item(
    Key={
        'username': 'janedoe',
        'last_name': 'Doe'
    }
)

결과는 아래와 같습니다.

AWS Console에서 아무 항목도 없는 것으로 확인될 것입니다.



사실 여기까지는 너무 기본적인 내용입니다.

이제 DynamoDB에서 활용하는 데이터 관리에 대해서 좀 더 알아보도록 하겠습니다.



2. Batch Writing

DynamoDB에서는 대용량의 데이터를 입력할 때, Batch Writing기능을 사용하여 속도를 향상시키고, 요청에 필요할 수를 줄일 수 있습니다. 이 기능은 항목(Item)을 Batch 순서에 의해서 자동으로 조절할 수 있으며, 데이터 전송이 이루어지지 않을 때에 재전송 기능도 수행하도록 되어 있습니다.다.

데이터 추가는 put_item 명령어를 사용하는 것을 기본으로 하며, 반대로 삭제는 delete_item 명령어를 사용하는 것을 기본 명령어로 수행합니다.


라고 제 요량대로 번역해본 것입니다. 원문은 아래와 같습니다.

출처: 맨 위의 Boto3 Documentation


If you are loading a lot of data at a time, you can make use of DynamoDB.Table.batch_writer() so you can both speed up the process and reduce the number of write requests made to the service.

This method returns a handle to a batch writer object that will automatically handle buffering and sending items in batches. In addition, the batch writer will also automatically handle any unprocessed items and resend them as needed. All you need to do is call put_item for any items you want to add, and delete_itemfor any items you want to delete:

 


위의 기본 데이터 처리는 하나의 값을 넣는 형태로 이루어지지만, 대용량으로 한꺼번에 입력이 필요할 때, 이에 대한 속도 처리를 위한 명령어를 Boto3에서 제공한다고 보시면 간단히 이해가 될 것입니다.

일단 Batch Writing을 사용하여 여러 개의 데이터를 입력하는 예제부터 보여드리겠습니다.


with table.batch_writer() as batch:

    batch.put_item(

        Item={

            'account_type': 'standard_user',

            'username': 'johndoe',

            'first_name': 'John',

            'last_name': 'Doe',

            'age': 25,

            'address': {

                'road': '1 Jefferson Street',

                'city': 'Los Angeles',

                'state': 'CA',

                'zipcode': 90001

            }

        }

    )

    batch.put_item(

        Item={

            'account_type': 'super_user',

            'username': 'janedoering',

            'first_name': 'Jane',

            'last_name': 'Doering',

            'age': 40,

            'address': {

                'road': '2 Washington Avenue',

                'city': 'Seattle',

                'state': 'WA',

                'zipcode': 98109

            }

        }

    )

    batch.put_item(

        Item={

            'account_type': 'standard_user',

            'username': 'bobsmith',

            'first_name': 'Bob',

            'last_name':  'Smith',

            'age': 18,

            'address': {

                'road': '3 Madison Lane',

                'city': 'Louisville',

                'state': 'KY',

                'zipcode': 40213

            }

        }

    )

    batch.put_item(

        Item={

            'account_type': 'super_user',

            'username': 'alicedoe',

            'first_name': 'Alice',

            'last_name': 'Doe',

            'age': 27,

            'address': {

                'road': '1 Jefferson Street',

                'city': 'Los Angeles',

                'state': 'CA',

                'zipcode': 90001

            }

        }

    )

batch_writer를 사용하여 여러 개의 값을 입력하는 형태입니다.

4개의 값이 순차적으로 입력된 것을 확인할 수 있습니다.


다음은 for 반복문을 이용한 입력 결과입니다.

with table.batch_writer() as batch:

    for i in range(50):

        batch.put_item(

            Item={

                'account_type': 'anonymous',

                'username': 'user' + str(i),

                'first_name': 'unknown',

                'last_name': 'unknown'

            }

        )

순서는 좀 뒤죽박죽인 것 같습니다.


다음은 기본 키를 사용한 예제입니다.

with table.batch_writer(overwrite_by_pkeys=['username', 'last_name']) as batch:

    batch.put_item(

        Item={

            'username': 'p1',

            'last_name': 's1',

            'other': '111',

        }

    )

    batch.put_item(

        Item={

            'username': 'p1',

            'last_name': 's1',

            'other': '222',

        }

    )

    batch.delete_item(

        Key={

            'username': 'p1',

            'last_name': 's2'

        }

    )

    batch.put_item(

        Item={

            'username': 'p1',

            'last_name': 's2',

            'other': '444',

        }

    )

다른 예제와는 다르게, 상단에 overwrite by pkeys = [‘username’,’last_name’] 구문이 들어가 있는 것을 확인할 수 있을 것입니다.

여기에서의 pkeys는 기본키가 들어가며, 파티션 키, 정렬 키의 값이 들어갑니다.


위 예제에서는 [p1, s1, 111], [p1, s1, 222] 값을 입력한 후, [p1, s2] 키 값을 삭제하고 [p1, s2, 444] 값을 입력하는 순서로 되어 있습니다.

하지만 여기서 생각을 해야 할 것이 있습니다.


기본 키가 같을 경우, 세부 속성이 다르더라도 중복된 값이 들어가면 안됩니다.


그러므로 batch.put_item을 일반적으로 썼더라면 에러가 발생할 수 있습니다.

하지만 실제 결과는 다음과 같습니다.

[p1, s1, 222]와 [p1, s2, 444] 2개만 들어간 것을 확인할 수 있습니다.

어떻게 된 것일까요.


이는 batch_writer에서 overwrite by pkeys를 지정했기 때문에 오류가 발생하지 않는 것입니다.

만약에 같은 기본키에 값이 또 들어올 경우에는 overwrite를 해서 먼저 입력된 값을 덮어 씌우라는 뜻이였으므로,

[p1, s1, 111] 의 값이 이미 기본키로 들어가 있었지만, 그 후에 [p1, s1, 222]의 값으로 대체가 된 것으로 보시면 됩니다.


Batch Writer를 통한 입력/삭제는 위와 같이 활용하면 대용량 데이터 입력 시에도 원하는 형태로의 코드 작성이 가능할 것으로 생각됩니다.


다음은 마지막으로 실제 항목, 즉 데이터 호출을 위한 Query & Scan에 대해서 알아보도록 하겠습니다.


WRITTEN BY
鬼風
생각이 깨어있지 않다면 살아갈 이유도 없다

트랙백  0 , 댓글  0개가 달렸습니다.
secret

이번 글에서는 Amazon Web Service(AWS) 에서 DynamoDB를 사용하는 방법을 Python을 이용해서 다루도록 하겠습니다.

처음에 AWS Python 카테고리에서 DynamoDB를 다루고자 했던 것은 아니였지만, 이번 회사에서 기술보고서를 작성하는 과정에 있어서 주제를 DynamoDB를 하다 보니까 블로그에도 같이 다루는 것이 좋을 것 같아서 올려봅니다.


2018/06/03 - [Onik Lab./AWS Python] - AWS DynamoDB in Python (Boto3) - #1. 소개


이번 글은 Boto3 및 DynamoDB 테이블 관리에 대해서 다루어보도록 하겠습니다.

이전 글에서 언급했다시피, AWS DynamoDB를 사용하기 위해서 Amazon에서는 각 프로그래밍 언어 별 SDK를 배포하고 있다고 하였습니다.

Python SDK도 당연히 있으며, AWS SDK in Python 인 Boto3 를 이용해서 DynamoDB와 연동해보도록 하겠습니다.


원본 문서: http://boto3.readthedocs.io/en/latest/guide/

영어 문서이므로 참고하시기 바랍니다.


1. Boto3 설치

매우 쉽습니다. 이미 Python 2.7 이상 버전이 모두 설치되어 있을 것이므로, pip를 통해서 설치를 하면 됩니다.

$ pip install boto3 


큰 문제가 없다면 설치가 정상적으로 이루어 질 것입니다. 중간 과정은 너무 길어서 생략했습니다.

참고로 중간에 빨간색 에러메시지가 나타날 수 있는데, 해당 부분보다도 성공적으로 설치되었는지 확인만 하면 됩니다. 

(다만 에러메시지 부분은 추후 재확인해보도록 하겠습니다)


2. Table 생성

Boto3 만 설치했는데 테이블을 바로 생성한다고요?

네 그렇습니다. DynamoDB는 AWS의 EC2 Server 구축만 되어있고, Python, Boto3, AWS CLI 설치가 완료되면 곧바로 사용이 가능합니다.


AWS Console 상에서 테이블을 생성하는 것이 가능하지만, Python과의 연동을 위해서 Python을 통해서 생성하도록 하겠습니다.


import boto3

 

# Get the service resource.

dynamodb = boto3.resource('dynamodb')

 

# Create the DynamoDB table.

table = dynamodb.create_table(

    TableName='users',

    KeySchema=[

        {

            'AttributeName': 'username',

            'KeyType': 'HASH'

        },

        {

            'AttributeName': 'last_name',

            'KeyType': 'RANGE'

        }

    ],

    AttributeDefinitions=[

        {

            'AttributeName': 'username',

            'AttributeType': 'S'

        },

        {

            'AttributeName': 'last_name',

            'AttributeType': 'S'

        },

 

    ],

    ProvisionedThroughput={

        'ReadCapacityUnits': 5,

        'WriteCapacityUnits': 5

    }

)

 

# Wait until the table exists.

table.meta.client.get_waiter('table_exists').wait(TableName='users')

 

# Print out some data about the table.

print(table.item_count)


이게 다입니다. 굉장히 쉬울 것입니다.

그리고 실행만 하면 끝.


1) import boto3를 하여 boto3 SDK를 불러옵니다.

2) DynamoDB의 기본 키(Primary Key) 생성을 위해서 Key Schema 속성을 사용하고, 파티션키와 정렬키를 각각 HASH / RANGE 속성값으로 지정합니다.

3) 기본 키에 해당하는 속성의 유형을 AttributeDefinitions로 지정하고, 문자열(String) 유형인 'S"로 지정합니다.

4) 읽기 / 쓰기 용량도 더불어 지정합니다.

5) 커맨드 창에서 Python을 실행하면 '0'이라고 나오는데, 정상입니다. '0'은 생성된 이후 항목(Item) 개수를 나타내는 결과값이기 때문입니다.


생성된 DynamoDB 테이블을 보도록 하겠습니다.


아무 문제 없이 설치가 완료된 것을 볼 수 있습니다.


3. Table 사용

테이블 사용은 매우 간단합니다. 

아래의 세번째 라인의 table 변수에 dynamodb.Table(테이블명)을 입력하면 간단합니다.

import boto3

dynamodb = boto3.resource('dynamodb')

table = dynamodb.Table('users')

단 앞으로 DynamoDB의 Table에서 사용되는 모든 값은 이 table 변수를 통해서 사용하므로, 모든 예제에는 위의 코드가 반드시 들어가야 한다는 점을 참고하시기 바랍니다.


4. Table 삭제

삭제는 위의 table 변수가 지정된 상태에서 delete() 함수를 실행하면 됩니다.

table.delete()


DynamoDB의 Table 생성/사용/삭제 등 관리 방법에 대해서 알아보았습니다.

생각보다는 매우 쉽게 관리가 이루어진다는 것을 알 수 있습니다.

하지만 실제 데이터를 어떻게 관리하는 지도 보아야 되겠죠?


다음 글에서 다루도록 하겠습니다.






WRITTEN BY
鬼風
생각이 깨어있지 않다면 살아갈 이유도 없다

트랙백  0 , 댓글  0개가 달렸습니다.
secret

이번 글에서는 Amazon Web Service(AWS) 에서 DynamoDB를 사용하는 방법을 Python을 이용해서 다루도록 하겠습니다.

처음에 AWS Python 카테고리에서 DynamoDB를 다루고자 했던 것은 아니였지만, 이번 회사에서 기술보고서를 작성하는 과정에 있어서 주제를 DynamoDB를 하다 보니까 블로그에도 같이 다루는 것이 좋을 것 같아서 올려봅니다.


DynamoDB는 Amazon에서 AWS에 최적화된 NoSQL 데이터베이스로, 당연하게도 AWS에 최적화되어 있습니다. 

하지만 DynamoDB에 대한 소개는 AWS 홈페이지나 다른 인터넷 자료에도 나와있지만, 정작 국내에서는 이와 관련된 서적을 찾지 못하였고 해외 원서로만 존재하고 있습니다. 그 이유는 DynamoDB가 별로이기 때문이 아니라, 등장한 지 오래 되지 않은 데이터베이스이기 때문으로 볼 수 있습니다.



그렇지만, AWS에서 제공하는 다른 RDS 서비스와는 다르게 별도의 카테고리를 둬서 관리한다는 것은 그만큼 DynamoDB를 AWS에서 주력으로 밀겠다는 것으로도 볼 수 있습니다.



DynamoDB의 사용은 사실 어렵지 않습니다. AWS의 다른 서비스하고는 다르게 인스턴스를 생성한다거나 복잡한 과정을 거치지 않고, AWS Console에서 Table을 생성하는 것에서부터 시작하기 때문입니다.

그러므로 AWS Console에서 Table을 생성하고 관리하는 것은 매우 간단한 절차이므로, 이 글에서는 별도로 다루지 않겠습니다.



그렇다면 DynamoDB를 실제로 사용하려면 어떻게 해야 할까요.

기존의 RDBMS와는 다른 NoSQL 유형이기 때문에 별도의 SQL Programming을 하지 않는 대신, 일반 프로그래밍 언어 상에서 DB Scheme를 설계하고 데이터를 관리할 수 있어야 합니다.

그래서 AWS에서는 DynamoDB를 사용하기 위한 SDK를 프로그래밍 언어 별로 제공하고 있습니다.


지원 언어는 다음과 같습니다.

l  Java

l  Javascript

l  Node.js

l  .NET

l  PHP

l  Python

l  Ruby


그 중에서도 저는 Python을 사용하여 DynamoDB를 구현하고 나타낼 예정이며, 이는 현재 제 블로그에서 다루고 있는 주제가 AWS Python인 것과도 일맥상통하기 때문이겠지요.

다음 글에서는 Python 언어를 사용하여 AWS DynamoDB를 어떻게 구현하는 지를 다루어 보도록 하겠습니다.


WRITTEN BY
鬼風
생각이 깨어있지 않다면 살아갈 이유도 없다

트랙백  0 , 댓글  0개가 달렸습니다.
secret

이번 글에서 다룰 부분은 AWS(Amazon Web Service)에서의 Python 설치를 다루도록 하겠습니다.

사실 AWS에서 Python을 설치하는 것은 자습서 상에서 매우 잘 나타나 있지만, 여러 페이지를 옮겨다니면서 확인해야 하기 때문에 번거로움이 있었습니다.

이에 따라, 제 블로그에서는 옮겨다니는 번거로움을 줄이는 대신, 연재글의 형태로 순서대로 진행할 수 있도록 할 예정이니 참고하시기 바랍니다.


※ AWS의 VPC 네트워크 구축, IAM 서비스, S3 Storage 서비스 구축 부분은 생략하겠습니다.

※ AWS Console 수행을 위한 계정은 이미 보유하고 있어야 하며, VPC, S3는 이미 구축이 사전에 되어 있어야 하니 참고하시기 바랍니다.

※ PUTTYXMING 미리 설치해주시기 바랍니다. (설치 링크는 왼쪽의 글자를 누르면 됩니다)


이전 글: 

2018/05/12 - [Onik Lab./AWS Python] - AWS EC2 (Ubuntu) 구축 및 접속

2018/05/19 - [Onik Lab./AWS Python] - AWS CLI, AWS EB CLI 설치

2018/05/19 - [Onik Lab./AWS Python] - AWS Python Django Application 환경설정



10. Elastic Beanstalk 배포를 위한 구성

이전 글에서 수행했던 명령에 바로 이어서 한다면 가상환경이 이미 활성화되어 있는 상태일 것입니다.

하지만 가상환경에 들어오지 않았다면 가상환경을 먼저 들어가도록 합니다.

(eb-virt) ~/ebdjango$ source ~/eb-virt/bin/activate


그 다음에는 전에 실행했던 pip freeze를 실행합니다. 하지만 이번에는 실행 결과를 requirements.txt에 저장합니다.

(eb-virt) ~/ebdjango$ pip freeze > requirements.txt

이 부분은 매우 중요합니다. Elastic Beanstalk에서 애플리케이션을 실행할 때 어떤 패키지를 설치할 것인지를 결정하는데, 이 때 requirements.txt 파일을 참조하기 때문입니다. 


다음은 .ebextensions을 새로 생성한 후, django.config 파일을 생성해서 애플리케이션을 시작하는 데 사용되는 WSGI 스크립트 위치를 지정합니다.
(eb-virt) ~/ebdjango$ mkdir .ebextensions
(eb-virt) ~/ebdjango$ vi .ebextensions/django.config
django.config는 없는 파일이므로 새로 생성해야 하며, 다음의 내용을 넣도록 합니다.

option_settings:
  aws:elasticbeanstalk:container:python:
    WSGIPath: ebdjango/wsgi.py


다음은 가상환경을 비활성화 합니다.
(eb-virt) ~/ebdjango$ deactivate

(그러나 제가 테스트한 결과, 가상환경을 비활성화 하지 않고 다음 작업을 진행해도 문제는 없었습니다. 다만, 가상환경 활성화가 애플리케이션에 패키지를 추가하거나 로컬에서 실행할 때 활성화를 한다는 점에 비추어 봤을 때에는 주 용도로 사용될 때에만 가상환경을 활성화하는 것을 권장합니다.)


11. Elastic Beanstalk 배포

개인적으로 이 부분에서 시간을 많이 소모한 것 같습니다.

세팅을 똑같이 했는데도 에러메시지가 매번 다르게 나타났지 싶었습니다.

사실 정확한 원인을 찾아내는 데에는 어려움이 있었지만, 어떤 유형의 오류가 있었는지도 소개하도록 하겠습니다.


참고문서: https://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/create-deploy-python-django.html



먼저 Elastic Beanstalk(이하 EB) Repository를 초기화하고, Application을 생성해 줍니다.

~/ebdjango$ eb init -p python-2.7 django-tutorial
Application django-tutorial has been created.

python 2.7을 사용할 것이므로 언어는 다음과 같이 사용하도록 합니다.


※ 제가 이 부분과 관련해서 eb init 만 입력하고 여러 가지 테스트를 많이 해봤습니다만, 위와 같이 사용 언어(python-2.7) 및 애플리케이션 이름(django-tutorial)을 다 입력하는 것이 가장 안정적입니다. 물론 애플리케이션 이름은 어떤 것을 써도 문제는 전혀 없습니다.


참고문서에서는 SSH를 통해 실행할 때 Pair Key를 입력하는 방법도 추가로 나와있지만, 이 게시물에서는 생략합니다.

(실제로 생략해도 문제 없습니다)


이제 실제로 애플리케이션을 생성하도록 합니다.

/ebdjango$ eb create django-env

※ 이 부분 역시 'eb create'만 실행한 후 환경 이름을 직접 입력하는 방법도 해봤지만, 처음부터 환경이름을 명령어 뒤에 붙여주고 실행하는 것이 안정적입니다. 오히려 별도로 여러가지 입력을 하다가 에러가 발생하는 상황이 더욱 많이 발생합니다.


이 부분에서 시간이 거의 5분정도 소요 되니, 그 사이에 다른 준비를 하셔도 무방합니다.


생성이 완료되었으면 실제 가동을 하도록 합니다.

~/ebdjango$ eb open

테스트 결과는 다음과 같습니다.


먼저 django-env2라는 개발 환경에서 실행한 결과입니다.


다음은 django-env3라는 개발 환경에서 실행한 결과입니다.


모두 예상했듯이, django-env3 의 결과처럼 나오는 것이 정상이고, django-env2의 결과처럼 나오는 것이 비정상입니다.

놀랍게도 두 개의 환경은 모두 같은 환경설정에 같은 운영체제, 같은 설정값을 한 웹 애플리케이션입니다.


그런데도 이렇게 정반대의 결과가가 나온 이유는 저도 사실 파악을 하지는 못했습니다만,

한 가지 추정되는 것은 django-env2 가 제대로 나오지 않고, S3 Storage의 미사용 중인 Bucket을 삭제한 이후로 올바르게 나타난 것으로 보아 EB에 배포할 때 사용되던 이름 문제인 것으로 추정됩니다. (다만 정확한 원인은 좀 더 알아보겠습니다)


다음은 ebdjango/ebdjango/setting.py 에서 TIME ZONE을 수정합니다.


위와 같이 'ROK'라고 입력했는데, 이는 Republic of Korea의 줄임말로 군대에서 많이 듣던 용어였을 것입니다.

AWS의 Timezone은 한국을 ROK로 공식 표기하므로 이를 참고하시면 됩니다.


다음은 애플리케이션을 EB 환경에 배포합니다.

~/ebdjango/$ eb deploy


여기까지가 실제 Application을 배포하는 부분입니다.

참고자료에는 관리자 페이지 설정 및 배포 부분도 같이 나와있는데, 해당 부분은 블로그에서 언급하기보다는 직접 자료를 보시면서 실습하는 것이 더욱 유익할 것으로 생각됩니다.


이상 Python Django Application 배포를 마치도록 하며, 추후 실제 실습을 통해서 더욱 좋은 글로 찾아뵙겠습니다.


WRITTEN BY
鬼風
생각이 깨어있지 않다면 살아갈 이유도 없다

트랙백  0 , 댓글  2개가 달렸습니다.
  1. 안녕하세요 여기까지 잘 따라왔습니다.
    ~/ebdjango$ eb init -p python-2.7 django-tutorial

    이 명령어를 실행시키니
    You have not yet set up your credentials or your credentials are incorrect
    You must provide your credentials.
    (aws-access-id) :

    라고 나왔습니다.
    일단 저는 따로 IAM을 만들지 않고 계속해서 root권한을 가진 계정으로 작업을 해왔습니다
    여기서 id는 어떤 id를 입력해야 하는 건가요?
    • 먼저 댓글 감사드립니다!
      AWS계정 아이디는 당연히 아닙니다.
      Management Console에 로그인 하시면 로그인한 사용자 아이콘이 우측상단에 나오고 이걸 클릭하시면 “내 자격증명”인가 하는 메뉴가 나옵니다. 거기로 들어가시면 accessid와 password를 발급받을 수 있습니다. 거기서 발급받은 내용을 입력해주시면 됩니다.
secret

이번 글에서 다룰 부분은 AWS(Amazon Web Service)에서의 Python 설치를 다루도록 하겠습니다.

사실 AWS에서 Python을 설치하는 것은 자습서 상에서 매우 잘 나타나 있지만, 여러 페이지를 옮겨다니면서 확인해야 하기 때문에 번거로움이 있었습니다.

이에 따라, 제 블로그에서는 옮겨다니는 번거로움을 줄이는 대신, 연재글의 형태로 순서대로 진행할 수 있도록 할 예정이니 참고하시기 바랍니다.


※ AWS의 VPC 네트워크 구축, IAM 서비스, S3 Storage 서비스 구축 부분은 생략하겠습니다.

※ AWS Console 수행을 위한 계정은 이미 보유하고 있어야 하며, VPC, S3는 이미 구축이 사전에 되어 있어야 하니 참고하시기 바랍니다.

※ PUTTYXMING 미리 설치해주시기 바랍니다. (설치 링크는 왼쪽의 글자를 누르면 됩니다)


이전 글: 

2018/05/12 - [Onik Lab./AWS Python] - AWS EC2 (Ubuntu) 구축 및 접속

2018/05/19 - [Onik Lab./AWS Python] - AWS CLI, AWS EB CLI 설치



6. VirtualEnv 설치 및 가상환경 설정

이 부분은 Django Application을 Python 2.7로 실행된 Elastic Beanstalk 환경에  배포하는 방법을 나타내는 부분입니다.

이를 위해서는 먼저 가상환경을 설정한 후, 가상환경에 Django를 설치한 후, 실제 배포를 하는 순서로 이루어집니다.


참고문서: https://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/create-deploy-python-django.html


가상환경 설정을 위해서는 virtualenv가 설치되어 있어야 합니다.

하지만, 이전 게시물을 통해서는 virtualenv가 설치되어있지 않으므로, 먼저 설치를 진행합니다.


$ pip install --user virtualenv

설치는 pip를 통해서 진행하도록 합니다.


설치가 완료되었으면, 이제 가상환경을 실제로 구현하도록 합니다.

이 글은 Ubuntu 기반이므로, 타 운영체제에서의 실행방법은 AWS 내의 문서를 참조해주시기 바랍니다.


이름이 eb-virt인 가상 환경을 만듭니다.

~$ virtualenv ~/eb-virt

가상 환경을 활성화합니다.

~$ source ~/eb-virt/bin/activate (eb-virt) ~$

pip를 사용하여 Django를 설치합니다.

(eb-virt)~$ pip install django==1.9.12

Django가 설치되었는지 확인하려면 다음을 입력합니다.

(eb-virt)~$ pip freeze


사실 이 바로 위부분은 AWS의 기술문서와 같은 내용입니다만, 특별히 제가 설명할 부분이 없는 관계로 그대로 붙여넣었으니 참고바랍니다.

다만, 실제 이를 실행했을 때의 결과는 다음과 같이 나타낼 수 있습니다(이건 당연히 제가 직접 한 내용입니다).



7. Django Project 생성

이제 Django 설치까지 끝났으면, 이제 애플리케이션을 생성하도록 합니다.

바로 상기에서 설치까지 모두 끝난 상태이기 때문에 가상환경 유지는 계속 되어 있을 것입니다.

하지만, 가상환경 유지가 되어있지 않을 경우도 있을 수 있으니, 이를 위해서 가상환경에 있는지를 확인해 봅니다.

하단과 같이 (eb-virt)라고 prompt 앞에 나타나 있으면 가상환경에 있는 상태이고, 그렇지 않을 때에는 가상환경이 아니니 참고바랍니다.


가상환경이 아닐 때에는 다음 명령어를 실행하면 됩니다.

~$ source ~/eb-virt/bin/activate
(eb-virt) ~$


이제 프로젝트를 생성합니다. 프로젝트명은 ebdjango로 합니다 (즉 다른 이름으로 해도 됩니다).

(eb-virt)~$ django-admin startproject ebdjango


사실 더 자세한 내용은 위 참고문서에 나타나 있지만, 제 블로그에서는 명령어 실행과 결과 위주로 순서대로 나열할 계획이므로, 세부 설명이나 부가 문서가 필요하다면 상단 참고문서를 참조바랍니다.


프로젝트가 생성되었으면, 기본 Django 웹 문서가 생성되었을 것이며, 이를 웹에서 조회할 수 있습니다.

웹에서 조회하는 방법은 로컬 서버를 manage.py를 실행해서 나타내는 것이며, 이에 따른 실행 결과는 다음과 같이 조회됩니다.

(eb-virt) ~$ cd ebdjango
(eb-virt) ~/ebdjango$ python manage.py runserver


그런데 솔직히 생각을 해봅시다.

이전 문서에서와 같이, Ubuntu 기반으로 AWS 환경구축을 하고,

Putty를 접속해서 커맨드 창에서 명령어를 실행해서 환경구축을 한 것이 대부분입니다.

그런데 위 예제는 Django 프로젝트 구현에 따른 웹 조회를 localhost에서 하도록 되어 있습니다.


그렇다면 위 웹브라우저는 어떻게 띄운 것일까요.

그것은 바로 이전 글 중 첫 번째 글인 Putty 설정의 X11을 통한 GUI 설정과 관련되어 있습니다.

다시 링크를 걸어드리니 참고바랍니다.

2018/05/12 - [Onik Lab./AWS Python] - AWS EC2 (Ubuntu) 구축 및 접속


8. XMING을 활용한 Firefox 구동

Putty에서의 X11 세팅은 상단 링크를 참고하시면 되며,

Firefox와 같은 GUI Program을 실행하기 위해서는 먼저, Putty를 실행했을 때 XMING도 실행해야 합니다.

(단, XMING이 아닌 XMING 설치 시 동시에 깔린 XLaunch를 실행시켜줘야 합니다.)


XMING을 설치하셨던 분들은 다른 블로그 등의 설치 방법을 보면서 파악하셨겠지만,

XLaunch를 실행했을 때 별다른 세팅을 하지 않습니다.

그저 작업 표시줄에 XLaunch가 있으면 됩니다.


그리고 나서, Ubuntu에서도 Firefox를 설치해야 합니다. (가상환경 여부는 상관없습니다)

$ sudo apt-get update
$ sudo apt-get install firefox

이게 apt-get을 Update해주지 않으면 에러가 나더라고요.

그래서 업데이트도 하게 되었습니다.


9. Django 웹페이지 Localhost 호출

Firefox 설치까지 끝났으면 실제 호출을 해보도록 합니다.

먼저 파이어폭스를 백그라운드로 실행시킨 후, Django 사이트를 로컬에서 실행시킵니다.

(사실 위에 있었던 명령어와 동일합니다. 가상환경에서 실행시켜주시기 바랍니다)


$ firefox &
$ python manage.py runserver


그런데 막상 실행하면 에러메시지가 납니다. 위에 써진대로 실행시켜줍니다.

$ python manage.py migrate



그리고 다시 실행.


이제 다음은 Django Application을 AWS Elastic Beanstalk에 배포하는 것을 다루도록 하겠습니다.






WRITTEN BY
鬼風
생각이 깨어있지 않다면 살아갈 이유도 없다

트랙백  0 , 댓글  0개가 달렸습니다.
secret

이번 글에서 다룰 부분은 AWS(Amazon Web Service)에서의 Python 설치를 다루도록 하겠습니다.

사실 AWS에서 Python을 설치하는 것은 자습서 상에서 매우 잘 나타나 있지만, 여러 페이지를 옮겨다니면서 확인해야 하기 때문에 번거로움이 있었습니다.

이에 따라, 제 블로그에서는 옮겨다니는 번거로움을 줄이는 대신, 연재글의 형태로 순서대로 진행할 수 있도록 할 예정이니 참고하시기 바랍니다.


※ AWS의 VPC 네트워크 구축, IAM 서비스, S3 Storage 서비스 구축 부분은 생략하겠습니다.

※ AWS Console 수행을 위한 계정은 이미 보유하고 있어야 하며, VPC, S3는 이미 구축이 사전에 되어 있어야 하니 참고하시기 바랍니다.

※ PUTTYXMING 미리 설치해주시기 바랍니다. (설치 링크는 왼쪽의 글자를 누르면 됩니다)


이전 글: 2018/05/12 - [Onik Lab./AWS Python] - AWS EC2 (Ubuntu) 구축 및 접속


3. AWS CLI 설치

이번에는 AWS CLI (Command Line Interface)를 설치하도록 하겠습니다.

CLI를 설치해야 하는 이유는 다음과 같습니다. 

AWS EC2 서버에서 다른 서비스를 이용하고 연계를 하는 데 있어서는 Command 창을 통해서 명령어를 입력해야 하는 상황이 다수 발생하는데, 이를 위해서는 CLI가 설치되어있어야 하기 때문입니다.

물론 더욱 자세한 이유는 AWS 전문가나 홈페이지 등을 통해서 나타나 있긴 하지만, 일단 기본적인 이유는 이와 같다는 점을 참고하시면 됩니다.


참고자료: https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/awscli-install-linux.html


AWS CLI는 Python 언어로 구성되어 있기 때문에, Python이 설치되어 있어야 합니다. 

그래서 pip, python, python3이 설치되어있는 지를 확인합니다.


확인하는 방법은 

$ pip --version
$ python --version
$ python3 --version

이렇게 하면 됩니다.


확인 결과 pip, python은 설치되지 않은 반면, python3은 설치가 되어 있습니다.

이제 pip를 설치하겠습니다.

$ curl -O https://bootstrap.pypa.io/get-pip.py

여기서 주의할 점은 -O가 알파벳 대문자 'O'입니다. 숫자 0이 아닙니다.

물론 Copy & Paste 하셔도 됩니다.



다음은 python을 설치하겠습니다.
python3 설치는 이미 되어 있지만, python은 설치가 되어 있지 않으며,
향후 python 웹 개발 시에는 python2.7 기반의 django application을 개발할 예정이므로, 이 역시 반드시 설치가 이루어져야 합니다.

python 설치는 다음과 같습니다.


$ sudo apt install python


python 설치가 끝났으면, 다음 명령어를 실행해 봅니다.

$ python get-pip.py --user


AWS의 참고자료에서는 PATH 추가가 되었는지를 확인하라고 나오는데, 이미 추가 되어 있습니다.

만약 pip 명령이 실행이 안되면 아래 참고자료를 참조해주시기 바랍니다.

참고자료: https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/awscli-install-linux.html


이제 python 설치까지 모두 끝났으면, pip 버전을 확인해줍니다.

다음은 pip를 사용하여 AWS CLI를 설치합니다.

$ pip install awscli --upgrade --user

AWS CLI가 올바르게 설치되었는지 확인합니다.

$ aws --version


특별한 이상이 없다면 설치가 매우 양호하게 된 것을 확인할 수 있을 것입니다.


4. AWS EB CLI 설치

AWS CLI 설치에 이어서 이번에는 AWS EB CLI도 설치하도록 하겠습니다.

AWS EB CLI 설치를 하는 이유는 Elastic Beanstalk 사용을 위한 Command Interface를 설치하는 것이 되겠습니다.


여기서 Elastic Beanstalk라 함은, AWS에서 제공하는 서비스 중 하나로, 애플리케이션을 배포 및 관리를 하기 위한 서비스입니다.

AWS에서도 Python 애플리케이션을 개발 및 배포를 하기 위해서는 Elastic Beanstalk를 통한 배포가 필요하므로, 이 점을 참고하시면 됩니다.


EB CLI 참고문서: https://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/eb-cli3-install.html


EB CLI 설치는 다음과 같습니다.

$ pip install awsebcli --upgrade --user


eb cli가 올바르게 설치되었는 지를 다음과 같이 확인합니다.


eb cli 설치까지 이루어졌으면 이제 AWS Elastic Beanstalk를 사용할 준비까지 모두 마쳤으므로, 다음은 AWS Python 가상환경 구축을 해보도록 하겠습니다.




WRITTEN BY
鬼風
생각이 깨어있지 않다면 살아갈 이유도 없다

트랙백  0 , 댓글  0개가 달렸습니다.
secret

이번 글에서 다룰 부분은 AWS(Amazon Web Service)에서의 Python 설치를 다루도록 하겠습니다.

사실 AWS에서 Python을 설치하는 것은 자습서 상에서 매우 잘 나타나 있지만, 여러 페이지를 옮겨다니면서 확인해야 하기 때문에 번거로움이 있었습니다.

이에 따라, 제 블로그에서는 옮겨다니는 번거로움을 줄이는 대신, 연재글의 형태로 순서대로 진행할 수 있도록 할 예정이니 참고하시기 바랍니다.


※ AWS의 VPC 네트워크 구축, IAM 서비스, S3 Storage 서비스 구축 부분은 생략하겠습니다.

※ AWS Console 수행을 위한 계정은 이미 보유하고 있어야 하며, VPC, S3는 이미 구축이 사전에 되어 있어야 하니 참고하시기 바랍니다.

PUTTY, XMING 미리 설치해주시기 바랍니다. (설치 링크는 왼쪽의 글자를 누르면 됩니다)


1. EC2 서버 구축

AWS Console에서 EC2 인스턴스를 생성을 위해 '인스턴스 시작'을 누릅니다.


Ubuntu Server를 실행합니다.

물론 운영체제는 다른 것을 선택해도 되지만, 저는 Ubuntu로 하겠습니다.

그러므로 아래에 있는 모든 예제는 Ubuntu Server를 기준으로 합니다.



알아서 선택하시고 시작 누르시면 됩니다.

용량 및 요금 정책 관련 부분은 직접 찾아보시기 바랍니다.

이 게시물에서는 한번에 수행하기 위한 참고 게시물이기 때문에 세부적인 부분은 다루지 않겠습니다.



그냥 확인하시고 시작 누르시면 됩니다.


이제 새로운 창이 나옵니다. 이거 꼭 하시기 바랍니다.

'새 키 페어 생성' 누르신 후, 키 페어 이름은 그냥 맘에 드는 이름으로 하시기 바랍니다.

입력 다 하셨으면 '키 페어 다운로드' 누르시기 바랍니다. 누르면 아래 예제 기준으로는 eb2key2.pem이 생성됩니다.

다운로드를 다 하셨으면 인스턴스 시작을 누르고 대기합니다. 한 5분 이내로 생성 완료가 됩니다.



2. EC2 서버 접속

AWS EC2 서버 접속은 Putty를 통해서 접속합니다.

하지만 일반적인 접속은 어려우며, Putty로 접속할 때 Authentication을 위한 Private Key 파일을 넣어야 합니다.

그렇기 때문에 위애서 다운로드 했던 키 페어 파일을 입력해줘야 합니다.

그러나 다운로드된 파일은 pem파일이기 때문에 putty에서 넣는 것은 안되며, PUTTYGEN을 통해서 pem파일을 ppk 파일로 변환해줘야 합니다.


PUTTY를 미리 설치하셨으면, PUTTYGEN을 실행합니다. 그리고 Load Private Key에서 위에서 다운로드받은 eb2key.pem을 로드합니다.

Load 창에 'ppk' 파일만 보이므로, All files로 바꾸면 됩니다.


Save Private Key 누른 후 자기 맘에 드는 이름으로 저장. 저는 my-prv-key.ppk로 저장했습니다.


아마 이 단계까지 완료하고 5분 정도 지났으면 서버 구축이 완료되었을 것입니다. 이제 접속을 하겠습니다.

접속하려면 주소를 알아야겠죠?

아래 사진에서는 제가 서버를 몇 개를 가동하느라 여러 개가 나오지만, 체크된 서버가 예제에서 생성된 서버입니다.

아래 주소에서 보시면, 퍼블릭 DNS(IPv4)라고 나온 부분이 있습니다. 이 부분이 접속 Domain입니다.

(ec2-13-124-222-178.ap-northeast-2.compute.amazonaws.com)


이제 PUTTY로 접속을 합니다.

먼저 Host Name은 ubuntu@ec2-13-124-222-178.ap-northeast-2.compute.amazonaws.com 형태로 입력합니다.


다음은 Connection - SSH - Auth로 갑니다.

아래로 가면 Private Key file for autnehtication 부분이 있습니다.

여기에 아까 위에서 생성했던 my-prv-key.ppk 파일을 넣으면 됩니다.


다음은 Connection - SSH - X11로 갑니다.

여기에서 Enable X11 forwarding을 체크해주시고, X display location을 'localhost:0'으로 입력해줍니다.

이 부분을 설정하는 이유는, Python 프로그래밍을 통한 웹서버 가동 시 브라우저로 조회를 해야 하는데, 브라우저 조회 테스트를 위한 GUI를 설정해주는겁니다.

맨 위에 언급했듯이 XMING을 설치해야 한다고 하였는데, XMING을 통한 GUI를 띄우기 위한 설정으로 보시면 되고, 해당 부분이 필요없으면 생략해도 됩니다.


그냥 '예' 하면 됩니다.


이제 접속되면 아래와 같은 창이 나오게 됩니다.


이상 첫번째 글을 마치고 다음 글에 이어서 CLI 설치 및 Python 설치작업을 하겠습니다.


WRITTEN BY
鬼風
생각이 깨어있지 않다면 살아갈 이유도 없다

트랙백  0 , 댓글  16개가 달렸습니다.
  1. aws 관련해서 좋은글 감사합니다! 혹시 질문이 몇가지 있는데 답변 가능하신가요?
    • 저녁 6시 이후 가능합니다~
    • 편하신 시간에 답변해주시면 감사하겠습니다.

      제가 궁금한 부분은
      AWS Console 수행을 위한 계정은 이미 보유하고 있어야 하며, VPC, S3는 이미 구축이 사전에 되어 있어야 하니 참고하시기 바랍니다.
      이부분입니다.

      제가 현재 EC2를 사용해서 nginx와 uwsgi를 구축해놓았는데 elastic을 사용해서 배포를 하고싶은데 이것저것 문제가 생겨서 EC2인스턴스를 처음부터 다시 생성하려고 합니다. VPC와 S3는 제가 따로 튜토리얼이나 공식 문서를 보면서 설치를 하면 될까요?
    • AWS의 각 서비스는 상호간의 연동이 이루어지지만, 기본적으로는 독립된 서비스입니다. 하지만 EC2 인스턴스를 생성하기 위해서는 VPC가 반드시 필요하기 때문에 VPC가 이미 생성되어 있다면 해당 VPC를 선택하는 식으로 사용할 수 있고, VPC가 생성되어 있지 않다면 EC2 인스턴스 생성 시 VPC도 같이 생성해서 연결하게 됩니다.
      S3의 경우는 EC2 인스턴스와 연동되지는 않기 때문에 별도로 생성할 수 있지만, Elastic Beanstalk 애플리케이션을 생성할 때 S3 Bucket도 같이 생성하는 개념입니다.

      요약하자면 VPC, S3는 별도로 생성하지 않아도 EC2 인스턴스와 S3를 생성할 때 같이 생성되지만, 기존에 생성된 것이 있다면 해당 인스턴스를 선택해서 사용이 가능합니다.

      만약에 기존에 연결된 서비스에 문제가 발생했을 경우에는 사전에 생성해놓고 연결하는 방식을 사용하면 될것입니다만, 댓글 주셨던대로 VPC, S3는 별도의 고급 설정을 사용하지 않는다면 기본 설정만으로도 충분히 이용이 가능하니 이 점 참고해 주시면 될 것입니다.
  2. 네 그 부분까지는 완료를하고 python manage.py runserver를 실행했을 때 페이지를 찾을 수 없음이 계속 나오는데 어떻게 해결해야 할까요?
    • 페이지를 찾을 수 없다고 하면 원인이 두 가지일 것으로 추정됩니다.

      1. 현재 위치해 있는 디렉토리가 manage.py 파일이 있는 디렉토리가 아닐 경우

      2. Python 또는 Django가 설치되어있지 않는 경우

      만약에 둘 다 아닐 경우라면 좀 더 자세히 알려주시길 바랄게요
  3. (eb-virt) ubuntu@ip-172-31-20-218:~/ebdjango$ python manage.py runserver
    Performing system checks...

    System check identified no issues (0 silenced).
    May 31, 2019 - 20:23:34
    Django version 1.9.12, using settings 'ebdjango.settings'
    Starting development server at http://127.0.0.1:8000/
    Quit the server with CONTROL-C.

    이렇게까지 뜨지만 127.0.0.1에 접속했을 시 사이트에 연결할 수 없음이 뜹니다
    • 서버는 정상적으로 가동된 것이 맞습니다.
      루트 경로를 설정하지 않아서 생긴 현상으로 추정되므로, 설정 디렉토리의 urls.py 파일을 참조해보시기 바랄게요

      만약 urls.py에 루트 경로 설정을 하셨다면, 루트 경로에 지정한 뷰 또는 템플릿 파일 경로가 잘못 지정되었을 수 있습니다. Django 버전 별로 템플릿 파일 경로 구성이 차이가 있으므로 참고하시면될것같아요
  4. from django.conf.urls import url
    from django.contrib import admin

    urlpatterns = [
    url(r'^admin/', admin.site.urls),
    ]
    ~
    urls.py가 이렇게 설정되어 있습니다
    • 아아 제가 잠시 착각한 것 같습니다.
      기본 설정을 하면 default페이지가 나오는 것이 맞는데 나오지 않는것이였네요 죄송합니다 ㅠ
      인터넷 주소창 경로 뒤에 :8000 포트번호는 당연히 붙이셨을것 같고..
      이 글이 올린지 좀 된 글이라 저도 현재는 Django2.1버전으로 작업하고 있습니다만, 1.9.12버전으로 다시한번 확인해보도록 할게요
  5. 네 감사합니다. 헌데.. 제 파일들이 __init__.py와 __init__.pyc 처럼 확장자가 pyc로 된 파일들이 하나씩 더 생겼는데 왜 이런가요?
    • 아 한가지만 더 여쭤볼게요~
      웹브라우저는 현재 PC의 웹브라우저 말고 xming 사용해서 EC2인스턴스의 firefox로 실행하신것 맞으시죠?

      .py파일은 파이썬 소스코드 파일이고, .pyc는 파이썬 컴파일러 생성 파일입니다. 이들 파일은 크게 문제삼지 않으셔도 됩니다.
  6. 아 웹 브라우저로 사용중입니다 xming은 선택사항이라고 적으셔서 안했고 putty에서 실행하고있습니다. EC2 인스턴스의 firefox는 뭔지 잘 모르겠습니다. .
    • 아아 역시 그래서 안됐던 것이였군요.
      지금부터 다시 설명해드릴게요.
      EC2 인스턴스는 하나의 가상 컴퓨터라고 먼저 이해를 하시고요. EC2 인스턴스에서 장고를 사용하는 것은 원격서버에 접속해서 작업하는것으로 보시면 됩니다.
      127.0.0.1은 localhost, 즉 PC 자기자신의 IP주소입니다. 장고 배포를 하기 전에 테스트로 들어가는 주소는 당연히 본인 PC의 웹브라우저가 아닌 원격서버의 웹브라우저를 사용하여 들어가는것이고요.
      그런데 EC2인스턴스를 리눅스 서버로 선택했으므로 웹브라우저가 설치되어있지도 않고 GUI 인터페이스도 더불어 지원하지도 않습니다. 그래서 putty 프로그램을 사용하여 X11 프로그램을 연동해야 하고, 그 프로그램이 xming입니다. 파이어폭스를 언급한것도 EC2인스턴스에 웹브라우저 프로그램이 설치되어있지 않아서 설치하라고 말씀드린겁니다. (추가내용 더 있습니다 이어서 댓글 적을게요)
    • 그런데 저 게시물 작성 이후로 제가 이번에 책을 쓰게 되었는데, putty와 xming을 사용해서 실행하는 과정이 번거로움이 있고 모르시는 분들이 보시기에는 상당히 어렵게 보일 수도 있다는 점을 발견했고, 이를 감안해서 두 가지 대안을 제시해드릴게요.

      1. 127.0.0.1:8000 테스트를 생략하고 Elastic Beanstalk에 곧바로 배포를 진행해주신 후 해당 URL로 직접 접속해서 테스트 결과를 확인하시거나,

      2. Putty말고 Mobaxterm이라는 프로그램을 사용한 후, EC2 인스턴스에서 firefox 설치 후 실행해주셔서 거기서 127.0.0.1:8000을 들어가는 방법이 있습니다.

      Mobaxterm을 사용하면 xming설치 없이 X11환경을 지원하므로 즉시 실행이 가능하니 참고 바랄게요
    • 정성스러운 답변 정말 감사합니다.
      일단 배포를 바로 진행해보도록 하겠습니다
secret