전체 글 58

[Python] Circular import(순환참조)란?

근래 Circular import에 대한 질문을 받았다.나름 답변을 했다고 생각했지만, 되짚어보니 Circular import 가 아니라 다중 상속 개념을 떠올리고 대답했다....... 이번 게시물에선, Circular import가 왜 발생하는지 짚어보고, 실제로 발생할 만한 케이스를 예시로 보며 익혀보려 한다. # a.pyfrom b import bbdef aa(): bb() print("a")aa()# b.pyfrom a import aadef bb(): print("b") python a.py 위 코드를 실행하면 아래와 같은 에러를 마주할 것이다. ImportError: cannot import name 'bb' from partially initialized modu..

개발언어/PYTHON 2024.11.08

[프로그래머스] 가장 큰수 - 퀵정렬 활용

코딩테스트 문제를 보고 공부 차 재귀를 이용하여 풀고자 했다.잘 생각이 나지 않았던 아이디어지만, 퀵정렬과 같은 방식으로 풀었고, 정리하고자 한다.  퀵정렬이란?아래 그림과 같이 pivot을 선택하고 분할 정복 방식을 사용하는 정렬 알고리즘이다.시간복잡도는 평균 O(nlogn)을 갖는다. 쉽게 말해 Pivot을 하나 정하여 좌측은 큰값, 우측은 작은값을 두는 방식이다. 그림출처 : https://gmlwjd9405.github.io/2018/05/10/algorithm-quick-sort.html    장점은 평균적으론 빠르다는 것이고, 단점은 최악의 경우 O(n^2) 으로 느릴 수 있다는 것이다.참고로 선택정렬이나, 버블  정렬이 평균 O(n^2) 로 느린편이다. 내장 Sort 알고리즘은 뭘까?적다보니..

[AWS] API Gateway Lambda 통합 Proxy 설정

API Gateway 통해서 Lambda 함수를 호출하는 API를 개발하고 있었다.기본적으로 API Gateway 에서는 Lambda와 통신한 결과에 따라 HTTP Status Code를 반환해 주고 있었는데, 나는 응답 값에 따라 HTTP Status Code를 설정해 줄 일이 생겼다. 1. API Gateway에서 Integration Response 사용첫 번째로 시도한 방법은 API Gateway에서 Integration Response 기능을 사용하는 것이었다.Lambda Proxy Integration을 사용하면 API Gateway에서 Mapping Templates을 사용할 수 없다.최대한 기존 소스를 건들지 않는 선에서 수정하려고 Integration Response에서 200 / 400..

IT 기술/AWS 2024.11.03

[DB] Materialized view

어느날 태블로 대시보드에 장애가 발생했습니다. 원인은 아래와 같이 ... DW에서 데이터 추출 간 걸리는 시간이 초과한 상태였습니다.   크게 추출 시간은 고려하지 않았고 (초기에 1시간쯤 걸리던 추출이 2시간을 넘기겠어?) 일 단위 추출이라 시간은 크게 고려하지 않았습니다.  물론 Timeout 을 늘리면 문제는 해결되겠지만, 근본적으로 문제를 해결하고자 사용했던 방법인 구체화된 뷰에 대해 적어볼까 합니다.  Materialized view(구체화된 뷰)란?구체화된 뷰는 더 빠른 데이터 검색을 위해 여러 기존 테이블의 데이터를 결합하여 생성되는 중복 데이터 테이블입니다. 예를 들어 고객과 제품 데이터를 위한 두 개의 기본 테이블이 있는 소매 애플리케이션을 생각해 봅니다. 고객 테이블에는 고객 이름 및 ..

IT 기술/DB 2024.10.31

[코딩테스트] 행렬 탐색 - 대각 행렬 탐색

최근에 본 문제 중 정말 쉬운 난이도라고 느껴지지만, 시간을 진짜 많이 들어 풀었기 때문에기록 남긴다. 두가지 정도 풀이 방식을 기록하는데, 아직도 이걸 왜 못풀었을까 이해가 안된다.참회하고자 기록을 남긴다. input_data = "[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]" 로 주어질때 1, 2, 6, 11, 7, 3, 4, 8, 12 ,13, 9, 5, 10, 14, 15 로 출력하시오 1 2 3 4 56 7 8 9 1011 12 13 14 15 input_data = "[[1,2,3,4,5] [6,7,8,9,10] [11,12,13,14,15]]"def solution(s): arr = [word.replace('[','').replace(']','') fo..

[프로그래머스] 게임 맵 최단거리 - BFS

"""최단거리 -> 다익스트라, BFS다익스트라 -> 간선에 가중치가 있을때BFS -> 가중치가 모두 1일때 효율적가중치가 음수일땐 벨만-포드 고려동서남북 중 갈수 있는 곳 Q에 넣어줌 최소로 도착한다는게 결국 모든 경로를 탐색할 필요가 없는것가다 막히는 경로는 알아서 pop 되며 소실 될거고많이 뻣어나가는 경로중 가장 일찍 도착하는 하나만 보면 되는거임 """from collections import dequedef bfs(maps): pos = [0,0] goal = [len(maps)-1,len(maps[0])-1] path = deque([(pos,1)]) visited = [[False for _ in range(len(maps[0]))] for _ in range(len(..

[프로그래머스] 더 맵게 - 힙, 힙큐

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/42626 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr시간복잡도 Olog(n)"""최소 힙의 0 index 가 key 이상일때까지heapq 는 정렬 되어있지 않고 그냥 최솟값을 찾는 알고리즘임"""import heapqdef solution(scoville, K): heap = scoville heapq.heapify(heap) answer = 0 while heap[0]

[프로그래머스] 소수 찾기 - 에라토스테네스의 채, 재귀

아이디어는 어렵지 않았지만, 구현하기 꽤 까다로웠다.소수를 일일이 판별할 생각은 했지만 찾다 보니 에라토스테네스의 채라는 개념을 보고 아이디어를 얻어 풀었다.해당 포스트는 아래 첨부한다.  일단 직관적으로 풀었지만, 애초에 2 미만은 제거한다던지 하면 한번 필터하는 작업을 없앨 수 있을 것 같다.그리고 순열을 구하는 것에 머리가 아팠지만 permutation 라는 걸 쓰면 순열도 쉽게 만들 수 있다더라~~ """여러개의 수가 소수인지 아닌지 -> 에라토스테네스의 체 이 수가 소수인지 아닌지 -> 제곱근 까지 나누기소수 중엔 2빼곤 짝수가 없다.numbers 의 가능한 모든 조합을 만듬 -> 짝수 제외가장 큰 수의 에라토스테네스 체를 통해 소수들 구함교집합"""import mathdef allCombi(n..

[AWS] EC2 절약하기!! - 람다, EventBridge로 스케줄링하기 -2

이전 포스팅에서 람다 함수로 EC2를 On/Off 하는 코드를 작성했다.이번엔 트리거에 등록하여 자동으로 스케줄링 하는 것을 적용할 예정이다. 난 한국시간 09시부터 21시 까지만 가동할 예정이다.스케줄을 통한 관리를 할 예정이니, EventBridge를 사용하여 트리거를 등록하면 된다. 간편히 기존에 만들어둔 람다 화면에서 진행 가능하다. 1. 트리거 추가- 기존 생성해둔 람다 함수에서 트리거 추가 버튼을 누른다. 새 규칙 생성을 선택하고 실행할 시간을 설정한다.Cron은 UTC 기준으로 작성하고 UTC+9 = 한국시간이다.(분 시간 일 월 요일 연도) 순으로 아래 (0 12 * * ? *) 은 매일 12시(UTC)에 실행한다는 뜻이다. (즉 한국 21시) 추가를 하면 아래와 같이 등록됨이 보인다.  ..

IT 기술/AWS 2024.10.21

[AWS] EC2 절약하기!! - 람다, EventBridge로 스케줄링하기 -1

접속하는 경우가 많지 않은 개발 서버에 EC2비용이 나가는 게 아쉬웠다.특히 새벽 시간에는 접속할리가 없으므로 낮에만 켜두는 방식을 적용하고자 한다. EC2에서 자체 스케줄링은 지원하지 않으므로, 람다를 통해 EC2를 시작, 종료하고 EventBridge로 스케줄링하려 한다.  1. 람다 함수 생성- 난 파이썬을 사용하였고, 함수 이름은 stop_ec2, start_ec2 로 두 개의 함수 만들어줬다.  2. 람다 함수 작성- 아래와 같이 간단히 stop 스크립트를 작성하였다. 지금은 인스턴스를 지정하지만 따로 tag를 보고 검사하던지 여러 방안이 있을 수 있다. 관련하여 참고한 글은 아래 첨부하겠다. (Start는 아래 stop_instance 부분을 start_instance로 변경하면 된다)impo..

IT 기술/AWS 2024.10.21