본문 바로가기

전체 글192

Infrastructure as Code : 코드를 통한 인프라 구축 IaC (Infrastructure as Code) 소프트웨어를 작성하는 것처럼 인프라를 코드로 관리하는 것을 IaC라고 한다. 인프라를 코드로 관리할 때의 장점은 아래와 같다. 효율적인 구성 관리 : IaC로 인프라를 구성할 때의 장점 중 하나는 버전 관리 시스템(Git 등)을 활용할 수 있다는 점이다. 이를 통해 인프라의 구성을 버전별로 추적하고 이전 버전으로 되돌리는 등 인프라 구성을 쉽게 수정할 수 있다. 자동화 : IaC를 사용하면 인프라가 자동으로 구성되기 때문에 사람이 구성할 때보다 신뢰성과 정확성이 증가한다. 쉬운 구축과 배포: IaC를 사용하면 인프라 구축과 배포가 쉽고 빨라진다. 히스토리 : 직접 구축된 서버를 보면 실제로 사용하진 않지만, 작업 중에 남겨진 흔적 등이 발견되는 경우가 .. 2022. 12. 30.
[Python] 디렉토리 내부의 동일한 파일 찾기 이름이나 확장자는 다르지만 사실 동일한 파일이 있다. 이 2개의 파일을 코드로 구분하려면 어떻게 해야 할까? 그리고 디렉토리 내에 그런 파일들이 여러개 있다면 어떻게 찾을 수 있을까? 아래 파일은 get_tickers.py를 복사하여 .txt로 확장자를 바꾼 동일한 파일이다. 2개의 파일이 사실은 같다는 걸 코드로 확인해보자. 파일이 동일하다는 걸 확인하려면 파일 전체를 해쉬로 만들어 값을 비교해보면 된다. 코드로 작성해보자. import hashlib def my_hash(file): with open(file, 'rb') as f: read_data = f.read() hash = hashlib.sha512() hash.update(read_data) hexSHA512 = hash.hexdigest(.. 2022. 12. 10.
[Open Source] ChatGPT Chat GPT Chat GPT는 OpenAI 재단에서 GPT-3.5 모델로 만든 인공지능 챗봇이다. 기존 3.0 버전도 성능이 좋았지만 ChatGPT는 직접 사용 해보고 꽤 충격을 받았다. 공식적으로는 해당 모델이 인터넷에 연결되어있지 않고, 2021년까지의 데이터를 기반으로 학습되었기 때문에 아래처럼 정확하지 않은 정보를 진실처럼 전달해주기도 한다. 하지만 공식 또는 지식과 같은 내용을 질문한다면 문맥 파악 능력과 정확하고 방대한 지식에 큰 충격을 받을 것이다. 개인적으로 웹 서비스를 만들면서 생겼던 문제를 Chat GPT에게 물어보면서 해결하는 과정을 글로 작성해보았다. 해당 모델에 대한 좀 더 자세한 내용은 아래 기사를 참고하자. 오픈AI, 'GPT-3.5' 모델 공개 - AI타임스 오픈AI가 대.. 2022. 12. 4.
[자격증] 2022년 정보처리기사 3회 실기 후기 실기 시험 대비 방법 및 후기 코로나 확진으로 인해 2회차 실기를 못봐서 3회 시험을 바로 신청했다. 정보처리 기사 실기 시험 대비를 위해 먼저 아래 수제비 문제집을 구입했다. 1권을 거의 다 풀고 기본 내용을 반복적으로 공부했고, 아래 CBT 사이트에서 문제를 반복적으로 풀면서 외웠다. 앱스토어(또는 play 스토어)에서 정보처리기사를 검색해 나온 어플로 두음 암기도 했다..! SQL 중 1문제가 이전 기출 중에서 동일하게 출제되어, 정답을 바로 적을 수 있었고 두음암기도 처음엔 효과를 의심했지만 막상 시험장에선 그것만 생각났다. https://q.fran.kr/%EC%8B%9C%ED%97%98/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC%20%EC.. 2022. 11. 27.
[Python] Docstring Docstring 파이썬은 자료형이 명시되지 않기 때문에(언어의 동적 특성) 파이썬에서의 문서화는 매우 중요하다. 문서화를 위해서 파이썬은 docstring이라는 문서화 문자열 기능을 제공하고 """ 문서화 문자열입니다. """ 처럼 표현할 수 있다. docstring은 모듈, 클래스, 함수에 붙일 수 있고 각 객체의 __doc__ 속성에 접근하여 문자열을 가져올 수 있다. 어떤 대상에 docstring을 작성할 지에 따라 적어야하는 내용들도 달라진다. *더 많은 내용은 https://peps.python.org/pep-0257/ 를 참고 모듈 docstring 각 모듈에는 최상위 docstring이 필요하다. docstring의 첫문장은 모듈의 목적을 기술하는 한 문장으로 구성되며 이후는 모듈의 동작을.. 2022. 11. 27.
[Python] OS 모듈 : 디렉토리 전체 탐색하기 (하위 디렉토리까지) 디렉토리 탐색 모든 하위 디렉토리 내부 파일까지 포함된 전체 파일의 목록을 가져오기 위해 파이썬으로 코드를 작성하려고 한다. 그런데 디렉토리(또는 폴더) 내부에 하위 디렉토리가 있다면? 그리고 그 디렉토리 내부에 하위 디렉토리가 있는지 없는지 모른다면? 코드를 어떻게 작성해야 될까? 먼저 파이썬에서 경로를 다루기위해 os 패키지를 import 했다. 그리고 아래와 같은 디렉토리 구조(주석)를 만들어 둔 뒤 하위 디렉토리 어딘가에 FindMe.txt 파일을 숨겨두었다! #Find_TMP #┣━1234 #┗━TEST # ┗━TEST1 import os os 모듈 내부의 메소드들을 사용해서 FindMe.txt 파일이 어디에 있는지 찾아보자. os.listdir() 메소드를 사용하면 입력한 폴더 내부에 존재하는.. 2022. 11. 20.
[DevOps] Jenkins로 Flask 웹 서버 컨테이너 CI/CD 구현하기 Jenkins 젠킨스는 오픈소스 CI 툴이다. 원 제작자는 카와구치 코스케이고 JAVA로 제작되었으며 MIT License를 따른다. 원래 목적은 자바 프로젝트의 CI였지만 여기서는 팀에서 제작한 Pluto 프로젝트의 컨테이너를 빌드하고 Docker Hub에 업로드 하여 버전 관리와 컨테이너 배포까지 (반)자동으로 이루어지도록 아래처럼 간단한 CI/CD를 작성해보았다. Python 프로젝트 컨테이너화 시키기 먼저 팀 프로젝트의 결과물인 Pluto(Flask 웹 서버)를 자동 배포하기 위해 서버를 컨테이너화 시켰다. 컨테이너화가 어렵게 느껴질 수 있지만 내가 했던건 이미 만들어진 우분투 컨테이너에 필요한 조치를 하고 서버를 올리는 스크립트(?)를 작성한게 전부다. 아래는 파이썬 프로젝트를 Ubuntu:20.. 2022. 10. 10.
[프로그래머스][Lv.2][Python] 최댓값과 최솟값 1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/12939 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2. 접근 방식 split 하고 min, max 함수로 결과 return 3. 코드 def solution(s): list_s = [int(x) for x in s.split(" ")] return f'{min(list_s)} {max(list_s)}' 4. 결과 2022. 10. 1.
[프로그래머스][Lv.2][Python] 땅따먹기 1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/12913 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2. 접근방식 DP문제이다. 바텀업 방식으로 해결하면 좋다. 점화식 : 4개의 열(Column) 중 현재 열과 같은 열을 제외한 나머지 값 중 최대값을 현재값에 더한다. for j in range(4): land[i][j] += max([land[i-1][x] for x in list({0, 1, 2, 3} - {j})]) 가장 큰 합들이 마지막 열에 반영되었기 때문에 가장 아래 열에서.. 2022. 10. 1.
[프로그래머스][Lv.2][Python] 카펫 1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/42842 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2. 접근방식 주어진 brown과 yellow의 개수는 해당 색 부분의 넓이와 같다. 가로를 x, 세로를 y라고 할 때, 주어진 brown과 yellow의 조합으로 xy와 x+y를 알 수 있다. 간단한 이차방정식을 만들고 이후는 완전탐색으로 값을 찾음 3. 코드 def solution(brown, yellow): answer = [] x_y = int(brown / 2) + 2 xy =.. 2022. 10. 1.
[프로그래머스][Lv.2][Python] 올바른 괄호 1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/12909 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2. 접근 방식 괄호가 "("면 push 한다. 괄호가 ")"면 pop한다. 문자열의 반복이 끝났을 때, 스택에 값이 남아있다면 잘못된 괄호이다. 3. 코드 def solution(s): list_stack = [] for ch in s: if ch == "(": list_stack.append(ch) else: if list_stack == []: return False else: l.. 2022. 10. 1.
[프로그래머스][Lv.2][Python] H-Index 1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/42747 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2. 접근 방식 H-Index는 N편의 논문중 H번 인용된 논문이 H편 이상일 때의 최대값을 의미한다. 논문의 순서는 중요하지 않다. H-Index는 내부의 인용된 회수와 같지 않을 수도 있다. 3. 코드 def solution(citations): citations = list(reversed(sorted(citations))) len_citations = len(citations) .. 2022. 10. 1.
[프로그래머스][Lv.1][Python] 다트 게임 1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/17682 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2. 접근 방식 S, D, T, *, #을 공백을 포함하여 replace 후 공백으로 split 해주면 서로 분리됨(마지막 공백은 제거) 각 기호에 맞는 점수를 제곱해서 정수로 변경해줌 *은 현재와 이전 값에 *2 (해당 범위에 * 이나 다른 기호가 포함될 경우도 고려해서 미리 정수로 변경해줌) #은 0으로 변경 후 현재 값에 -1 정수로 변환된 전체 리스트를 합쳐줌 -> 총점 3. 코.. 2022. 9. 25.
[프로그래머스][Lv.1][Python] 3진법 뒤집기 1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/68935 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2. 접근 방식 10진법을 2진법으로 만들때와 비슷하게 3으로 나눈 나머지를 리스트에 추가 역순으로 들어갔기 때문에 문제에서 요구하는 앞뒤 반전은 생략 해당 자리에 맞게 3의 제곱수를 곱해서 누적해줌 3. 코드 def solution(n): answer = 0 tmp = [] # 3^0:1, 3^1:3, 3^2:9, 3^3:27, 3^4:81... while(n!=0): tmp.appe.. 2022. 9. 20.
[프로그래머스][Lv.1][Python] 최대공약수와 최소공배수 1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/12940 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 2. 접근 방식 최대 공약수 : 두 수 이상의 여러 수의 공약수 중 최대인 수 -> n과 m에 동시에 나눠지는 i 중 가장 큰 값 최소 공배수 : 두 수 이상의 여러 수의 공배수 중 최소인 수 -> n과 m을 곱한 값을 최대 공약수로 나눈 값 (유클리드 호제법) 더 쉬운 방법 : math 패키지 활용 import math math.gcd(a, b) math.lcm(a, b) 3. 코드 .. 2022. 9. 20.
[백엔드] Flask에서 JWT 토큰 생성하기 flask_jwt_extended flask에선 flask_jwt_extended라는 이름으로 jwt 토큰에 대한 기능을 제공해준다. 토큰 인증에 대한 테스트는 POSTMAN으로 했고, JWT에 대한 내용은 아래 글을 참고하면 좋을 것 같다. https://hwan001.tistory.com/277 [python] JWT 모듈 JWT (Json Web Token) JWT는 웹 표준(RFC 7519) 으로 두 개체 사이에서 JSON을 사용하여 정보를 안전성 있게 전달해준다. 웹에서 로그인을 하거나 인증을 받게되면 보통 세션을 사용하여 인증 정보를 기 hwan001.co.kr Access 토큰 생성하기 config.py flaskJwt_secret_key = "secret_key" flask_admin_id.. 2022. 9. 18.
[python] JWT 모듈 JWT (Json Web Token) JWT는 웹 표준(RFC 7519) 으로 두 개체 사이에서 JSON을 사용하여 정보를 안전성 있게 전달해준다. 웹에서 로그인을 하거나 인증을 받게되면 보통 세션을 사용하여 인증 정보를 기록하는데, JWT는 토큰 내부의 Signature에 해당 정보를 기록한다. JWT를 사용할 경우 인증을 위해 웹 브라우저의 세션 공간을 사용하지 않고 인증 여부를 알 수 있기 때문에 확장성이 좋다. 또한 생성 시 권한을 지정할 수 있어 각 토큰별로 기능을 제어할 수 있고 플랫폼에 종속적이지 않다. JWT의 구조는 Header.Payload.Signature로 나뉘어져 있다. Header는 토큰의 typ(해당 토큰의 타입)과 alg(해싱 알고리즘)을 Payload는 토큰에 담을 정보를 .. 2022. 9. 13.
[SE] SDLC (Software Development Life Cycle) ** 아래 글은 개인의 조사를 바탕으로 주관적으로 작성되었습니다. 잘못된 부분은 댓글로 남겨주시면 수정하겠습니다. 소프트웨어 생명 주기 (Software Development Life Cycle, SDLC) 소프트웨어의 계획부터 배포에 이르기까지 시간적인 경과를 의미하며, 명확하게 나눠진 여러 단계를 통해 시스템의 품질을 올려 고객의 만족도를 높이는 것이 목적이다. 이런 목적의 달성을 위해 구조적, 정보공학적, 객체지향, CBD(Component-Based Development), Agile, DevOps 와 같은 방법론들과 여러 모델들이 발생하게 되었다. 아래 이미지는 SDLC의 각 과정을 나타낸 그림이다. 구조적 방법론 1970년 발생한 기능 중심의 전통적인 방법론이다. 자세한 내용은 아래에 정리해보.. 2022. 9. 12.
백엔드 로드맵 정리 백엔드 공부를 하다보면 볼 수 있는 로드맵 이미지이다. 각 내용을 정리하고 개인적으로 필요하다고 생각하는 내용들도 조금 추가해 보았다. Internet How does the internet work? 패킷과 프로토콜을 OSI 7을 기반으로 설명 A PC의 프로그램에서 B PC에 위치한 프로그램으로 패킷이 전달되는 과정 Private IP와 Public IP 라우터와 스위치 전송 계층의 전송 장비 CIDR, 서브네팅, 클래스 What is HTTP? HTTP가 무엇인지에 대한 설명, 아래 요소들을 설명하면 되는데 조금 더 나가면 브라우저에 대한 내용과 HTTPS와의 차이를 같이 말할 수 있을 듯 하다. 브라우저에 대한 이야기 (7계층에 위치한 프로그램의 일종) HyperText Transfer Proto.. 2022. 9. 12.
[Python] Yahoo_fin 모듈 Yahoo_fin 모듈 yahoo_fin은 시가총액, 배당수익률, 종목에 대한 최신 정보를 제공하는 Python 3 패키지이며, 아래 추가 기능들을 제공한다. 손익 계산서/ 대차 대조표/ 현금 흐름표/ 재무 상태 표 보유자 정보 및 분석가 데이터 스크래핑 가상자산(암호화폐) 데이터 현재 거래일 실시간 주가 및 거래 상위 종목 옵션 가격 및 만료 날짜 검색 모듈 수입 캘린더 기록 금융 뉴스 RSS 피드 스크랩 yahoo_fin은 stock_info module, options module 두 가지 모듈로 구성된다. 자세한 옵션이 궁금하면 아래 링크들에서 찾아보자. https://algotrading101.com/learn/yahoo-finance-api-guide/ Yahoo Finance API - A .. 2022. 9. 11.