전체 글 802

동시성(병행성) vs 병렬성

동시성(Cuncurrency) 논리적 개념 at the same time (X) 동시성이란 스위칭으로 한 번에 여러 작업을 동시에 다루는 것을 의미 → 싱글 프로세스, 싱글 스레드가 스위칭을 하면서 여러 작업을 수행 → 멀티스레드도 스위칭하며 작업 가능 비유) 하나의 로봇이 왔다 갔다 하며 작업을 수행 (바운드될 때마다 스위칭) 병렬성(Parallelism) 물리적 개념 at the same time (O) 병렬성은 한 번에 여러 작업을 병렬적으로 처리하는 것을 의미 → 멀티 프로세스, 멀티 스레드를 통해 동시에 여러 작업을 수행 → 싱글 스레드는 불가능 비유) 여러 로봇이 동시에 각자 맡은 작업을 수행 유의할 점 동시성과 병렬성은 함께 공존할 수 있다. 예를 들어 병렬적으로 작업을 수행하면서 그 하위에..

컴퓨터 구조와 운영체제 기본

1. 컴퓨터 구성 요소 CPU 명령어를 해석하여 실행하는 장치 메모리 주메모리 : 작업에 필요한 프로그램과 데이터를 저장하는 장소(동적) 보조메모리 : 저장장치라고 불리며 데이터를 일시적 또는 영구적으로 저장하는 장소(정적) 입출력 장치 키보드, 마우스, 모니터 등 시스템 버스 컴퓨터 구성 요소들을 연결하고 데이터를 주고 받는 역할 2. 운영체제(OS) 정의 : 컴퓨터 시스템을 운영하고 관리하는 소프트웨어 운영체제가 없는 컴퓨터는 처음에 설계한 대로만 사용할 수 있는 단순한 계산기에 불과하다 운영체제가 있는 컴퓨터를 프로그램이 가능한 기계라고 한다 윈도우, 맥, 우분투, 리눅스 등 프로세스 프로그램 : 어떤 문제를 해결하기 위해 컴퓨터에게 주어지는 처리 방법과 순서를 기술한 일련의 명령문의 집합체 (일련..

파이썬 코루틴 활용

웹사이트 데이터 가져오기 1. session을 통해 url에 접속한다 2. request.get을 통해 데이터를 가져온다 3. session을 닫고 걸린 시간을 측정한다 * session을 간편하게 닫기 위해 with문을 사용했다. with문을 사용하면 with 블록을 벗어나는 순간 자동으로 close되어 편리하다. 4. 일반 코드와 코루틴 코드의 결과를 비교해본다 일반 코드의 경우(동기) >>> 15.04025387763977 초 ''' 동기로 코드를 작성할 경우 15.04025387763977 초 소요 ''' import requests import time def fetcher(session, url): with session.get(url) as response: return response.te..

하샤드 수

문제 설명 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요. 제한 조건 x는 1 이상, 10000 이하인 정수입니다. 입출력 예 설명 입출력 예 #1 10의 모든 자릿수의 합은 1입니다. 10은 1로 나누어 떨어지므로 10은 하샤드 수입니다. 입출력 예 #2 12의 모든 자릿수의 합은 3입니다. 12는 3으로 나누어 떨어지므로 12는 하샤드 수입니다. 입출력 예 #3 11의 모든 자릿수의 합은 2입니다. 11은 2로 나누어 떨어지지 않으므로 11는 하샤드 수가 아닙니다. 입출력 예..

파이썬 코루틴

루틴이란? 일련의 명령 흐름 (코드의 흐름) 메인 루틴 프로그램의 메인 코드의 흐름 서브 루틴 ( = 함수 ) 함수나 메서드 (메인 루틴을 보조하는 역할) 하나의 진입점과 하나의 탈출점이 있는 루틴 코루틴 서브루틴의 일반화된 형태 다양한 진입점과 다양한 탈출점이 있는 루틴 await에 의해 진입과 탈출점이 추가됨 비동기적 코드를 가능하게 함 await 은 어웨이터블 객체 앞에 사용한다 어웨이터블 객체는 코루틴, 태스크 및 퓨처를 의미한다 코루틴 함수 time.sleep() → X asyncio.sleep() → O 함수 정의 시 async 를 붙이는 경우 → O 태스크 객체 태스크를 예약할 때 사용 task1 = asyncio.create_task(func()) await task1 # 이렇식으로 코드 ..

동기 vs 비동기

동기란? 코드가 반드시 작성된 순서로 실행된다 요청 후 응답을 받지 못하면 바운드 상태를 유지한다 이전 요청에 대한 응답을 받아야만 다음 코드를 진행하므로 연산이 느려진다 예) 주문 받은 순서대로 처리한다. 앞선 주문이 완료되지 않으면 다음 주문으로 넘어가지 않는다 비동기란? 코드가 반드시 작성된 순서로 실행되는 것이 아니다 요청 후 응답을 받지 못해도 바운드 없이 다음 코드를 수행한다 이전 요청에 대한 응답을 기다리지 않으므로 동기보다 더 빠르게 연산이 가능하다 예) 주문을 수행하지만 완료되지 않아도 다음 주문을 진행한다 무조건 비동기가 좋을까? 단순한 계산은 비동기로 구현할 경우 코드가 복잡해지고 유지보수가 어려워질 수 있다 다음 단계로 넘어가면 안되는 계산이라면 동기로 구현하자 동기 비동기 비교를 ..

CPU 바운드와 I/O 바운드

CPU 바운드 연산을 많이 해서 cpu가 막는 행위 프로그램이 실행될 때 실행 속도가 cpu 속도에 의해 제한됨을 의미함 정말 복잡한 수학 수식을 계산하는 경우에 컴퓨터의 실행속도가 느려진다 I/O 바운드 I는 인풋, O는 아웃풋 프로그램이 실행될 때 실행 속도가 I/O에 의해 제한됨을 의미함 사용자가 입력을 해야 다음 단계가 진행되는 경우 네트워크 I/O : 컴퓨터와 컴퓨터끼리 통신을 할 때 블로킹 : 바운드에 의해 코드가 멈추게 되는 현상 # 실습 코드 : 구글에 요청을 반복한다면? # pip3 install requests import requests def func(): result = requests.get("") return result for i in range(10): result = fu..

핸드폰 번호 가리기

문제 설명 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요. 제한 조건 s는 길이 4 이상, 20이하인 문자열입니다. 해결 방법 ''' 1. 마지막 요소 4개를 제외한 문자열을 구한다 2. 마지막 요소 4개를 제외한 수만큼 '*'을 만든다 3. 구한 문자열을 '*'문자열로 바꾸어 반환한다 ''' def solution(phone_number): a = phone_number[:-4] b = '*' * len(phone_number[:-4]) return phone_number.replace(a, b) ''' 입력값 〉"027778888" 기댓값 〉"*****8888" ''' 이 ..

행렬의 덧셈

문제 설명 행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요. 제한 조건 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다. 해결 방법 1. 최종 리턴할 리스트를 생성한다 2. 내장함수 zip과 for를 이용하여 각 리스트의 요소를 분리한다 3. 반복 시 초기화되는 임시 리스트를 생성한다 4. 다시 각 리스트의 요소를 분리한다 5. 분리된 요소끼리 더한 값을 임시 리스트에 추가한다 6. 최종 리스트에 임시 리스트를 요소로 추가한다 7. 최종 리스트를 반환한다 def solution(arr1, arr2): answer_list ..

파일 시스템으로 DB 인서트 하는 중

목표 파일 시스템을 활용하여 수신 데이터를 저장해두었다가 벌크로 DB에 저장하는 로직 구현하기 문제 파일 시스템으로 csv파일에 데이터를 입력해야 함 DB에 벌크로 입력하는 코드를 작성해야 함 csv에서 DB로 벌크 입력한 후 해당 파일의 내용은 삭제해야 함 최신 데이터 100개를 가져오는 로직을 구현해야 함 행동 csv파일을 생성하고 데이터를 입력하는 로직 구현함 sql문으로 벌크 저장하는 로직 구현함 csv의 전체 데이터를 읽어 들여 DB에 입력하는 기능 구현함 DB에서 최근 데이터 100개 불러오는 로직 구현함 고민 csv 데이터를 요청 때마다 초기화 해주지 않으면 DB로 중복해서 저장될 우려가 있음 csv 전체 데이터를 한 번에 저장하기 때문에 요청과는 별개로 불필요한 부하가 생길 수 있음 앞으로..

Log/Today 2022.01.14