SW사관학교 정글7기 개발일지 (08/09)

c4fiber·2023년 8월 9일
0

SW사관학교 정글7기

목록 보기
2/49
post-thumbnail

경험한 flask app.py 오류

pymongo.errors.OperationFailure: command find requires authentication, full error: {'ok': 0.0, 'errmsg': 'command find requires authentication', 'code': 13, 'codeName': 'Unauthorized'}

mongoDB에 접속하는 과정에서 권한 오류가 발생함
나의 경우는 계정으로 접속해야 했기 때문에 mongoClient('localhost') 부분에서 'mongo://id:pwd@localhost'로 변경해야 했다.

xshell에서 ssh를 이용해 ec2 접속하기


ec2 instance를 생성하면 key pair를 통해서 접속하도록 유도합니다.
발급된 key pair는 .pem, .ppk 두가지 방식이 있는데 저는 .pem을 기준으로 설명하겠습니다.

connection의 properties로 들어가면 connection 카테고리에 Authentication이 있습니다.
User name에 자신의 instance name을 입력해주고 (저는 ubuntu instance를 생성해서 ubuntu로 되어있었습니다.)
Password에 체크를 해제하고 Public Key에 체크해줍니다.

Username을 입력하고 나면 password or Public Key 를 사용하는 옵션이 나옵니다.
내가 사용할 key를 xshell에 저장해두기 위해서 Browse -> User Keys로 넘어갑니다.

import를 통해서 key를 불러오고 사용할 key를 더블클릭(선택 후 ok)해주면 됩니다.

passphrase는 빈칸으로 두셔도 됩니다. 이는 private Key를 암호화 할때 사용하는 일종의 seed 혹은 salt 역할을 합니다. 기본적으로 존재하지 않기때문에 넘어갑니다.

로그인에 성공했습니다.

Apscheduler

//TODO

문자열 포맷팅

‘?는 ?살 입니다.’ 같은 패턴의 문자열에 특정 값을 대입하여 채워 넣는 것을 문자열 포맷팅 이라고 한다.

크게 세가지가 있다.

1. format()

기본적인 활용 방법은 다음과 같다.

name = 'charlie'
age = 26

str = '{}는 {}살 입니다.'.format(name, age)
print(str)
# charile의 나이는 26살 입니다.

''' 받아들일 인자의 순서를 지정할 수도 있다.'''
str = '{1}는 {0}살 입니다. 안녕 {1}!'format(age, name)
print(str)
# charlie의 나이는 26살 입니다. 안녕 charlie!

''' 인자의 이름을 사용할 수 있다.'''
str = '{name}는 {age}살 입니다. 안녕 {name}!'format(age, name)
print(str)
# charlie의 나이는 26살 입니다. 안녕 charlie!

보기좋게 정렬하는 방법도 있다.

{ <인자> : <정렬방향><확보할 공간>} ex) {name:^20} -> name 인자를 20칸 공간을 확보하여 가운데정렬

''' 보기좋게 정렬하는 방법도 있다.'''
str = 'this is {0:<10}'.format('left')
print(str)
# this is left    

str = 'this is {0:>10}'.format('right')
print(str)
# this is      right

str = 'this is {0:^10}'.format('center')
print(str)
# this is   center

숫자 자리수도 보기좋게 표현할 수 있다.

number = 27
str = 'number is {0:03d}'.format(number)
print(str)

number = 1.5543
str = 'number is {0:0.2f}'.format(number)
print(str)

# number is 027
# number is 1.55

2. format string

//TODO

3. f-string

//TODO

python 문자열 종류

r string

raw string 이라고 한다.

문자열 내부의 모든 escape를 무시하고 있는 그대로 출력한다.

str = r‘1%2F35print(str)
# 1%2F35

u string

해당 문자열이 유니코드 string임을 표현하기 위해 사용한다

str = u'Some String'
print(str)
# Some String

b string

binary string, 이진 문자열

해당 문자열이 0과 1로만 이루어져있다는걸 표현한다. 내부적으로 구현된 내용은 읽을 수 없다.

b'01001000 01100101 01101100 01101100 01101111'

유니코드 vs UTF-8

Unicode 유니코드

유니코드(Unicode)는 전 세계에서 사용하는 각각에 부여한 코드들의 집합이다. 전 세계 기기들이 통일된 인코딩 방식을 사용할 수 있도록 하기위해 고안되었다.

유니코드에 표기된 각 문자는 ‘U+XXXX’ 형태로 표현된다 예를들어 ‘한’ 이라는 글자는 ‘U+D55C’, 글 이라는 글자는 ‘U+AE00’으로 표현된다.

UTF-8, UTF-16, UTF-32 등은 유니코드 기반의 문자들을 바이트열에 인코딩 하는 방식을 뜻한다.

ASCII, ANSI, EUC-KR, CP949 등의 인코딩 방식은 Unicode표에서해당되는 코드를 찾아 그대로 바이트열에 저장한다.

그럼 UTF-8 등은 어떤 방식으로 저장할까?

UTF-N (Universal Coded Cahracter Set + Transformation Format - N-bit)

//TODO

flask + nginx 리버스 프록시 서버 세팅

domain을 ec2 instance로 연결하기

탄력적 IP 신청
ec2 instance에 할당

dns A record 에 탄력적 IP 입력

  • 가비아
  • aws: route53

ssl: certbot 활용

sudo apt install certbot python-certbot-nginx

설치 후 sudo certbot 수행

설정파일

/etc/nginx/sites-available/myapi

server {
    listen 80;
    server_name yousayrun.store www.yousayrun.store;

    # Redirect HTTP to HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name yousayrun.store www.yousayrun.store;

    # SSL/TLS settings
    ssl_certificate /etc/letsencrypt/live/yousayrun.store/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yousayrun.store/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    # Proxy settings
    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    # Additional Nginx settings...
}

해당 파일에 대해 심볼릭 링크 생성

생성위치는 cd /etc/nginx/sites-enabled/

sudo nginx -t 명령어로 config 파일이 정상적인지 확인할 수 있다.

다음과 같이 테스트에 성공하면 sudo service nginx start 명령어로 nginx 가동한다.

profile
amazing idiot

0개의 댓글