본문 바로가기

분류 전체보기135

Python - SQLAlchemy 간단 정리 목차 LIST SQLAlchemy Python에서 사용하는 ORM(Object-relational mapping)이다. ORM은 말 그대로 객체(Object)와 관계(Relation)를 연결하는 것으로 데이터베이스 테이블의 데이터를 Object 필드와 매핑한다. 참고) 의존성 역전의 예제로 SQLAlchemy가 사용된다. SQLAlchemy를 사용하면 스키마를 별도로 정의하고, 스키마와 도메인 모델을 상호 변환하는 명시적인 매퍼(mapper)를 정의한다. 이렇게 ORM 기능을 사용하면 데이터와 애플리케이션 로직 사이의 강한 의존성을 줄이고, 도메인 모델과 데이터베이스 스키마 사이의 매핑을 추상화하여 의존성 역전 원칙이 적용된다. 장점 객체 지향적인 코드로 비즈니스 로직에 집중할 수 있다. 재사용 및 유지.. 2023. 8. 22.
Python Thread는 블로킹I/O에 사용한다. GIL이란? 목차 LIST 핵심 파이썬 쓰레드는 전역 인터프리터 잠금(GIL : Global Interpreter Lock) 때문에 여러 CPU 코어에서 병렬로 바이트코드를 실행할 수 없음 GIL이 있지만 쓰레드는 여러 작업을 동시에 하는 것처럼 보여주기 쉬우므로 유용한 부분이 있다. 여러 시스템 콜을 병렬로 수행할 때 파이썬 쓰레드를 사용하자. 이렇게 하면 CPU 연산과 같은 계산 작업을 하는 동안에도 병렬로 I/O 작업을 수행할 수 있다. 쓰레드를 블로킹 I/O용으로 사용하고 병렬화용으로는 사용하지 말자 CPython은 파이썬 프로그램을 두 단계로 실행한다. 1) 소스코드를 바이트코드(byte code)로 파싱하고 컴파일한다. 2) 스택 기반 인터프리터로 바이트코드를 실행한다. 참고) CPython : 파이썬 코.. 2023. 8. 20.
Python subprocess 모듈 목차 LIST 들어가기 전에 Concurrency(병행성) : 컴퓨터가 여러 일을 동시에 하듯이 수행하는 것 예) CPU 코어가 하나인 컴퓨터에서 운영체제는 단일 프로세서에서 실행하는 프로그램을 교대로 빠르게 변경하여 프로그램들이 동시에 실행되는 것처럼 보이게 한다. Parallelism(병렬성) : 실제로 여러 작업을 동시에 실행하는 것 CPU 코어가 여러 개인 컴퓨터는 여러 프로그램을 동시에 실행할 수 있다. 각 CPU 코어가 각기 다른 프로그램의 명령어(instruction)를 실행하여 같은 순간에 여러 프로그램들이 실행될 수 있다. Concurrency 와 Parallelism은 속도 향상의 측면에서 가장 큰 차이점을 가진다. 한 프로그램에서 서로 다른 작업을 병렬로 진행하면 전체 작업에 걸리는.. 2023. 8. 20.
[프로그래머스] 테이블 해시 함수 Java 풀이 목차 LIST 최종 결과 import java.util.*; public class Main { public static void main(String[] args) { int[][] data = {{2,2,6}, {1,5,10}, {4,2,9}, {3,8,3}}; int res = solution(data, 2, 2, 3); System.out.print(res); } public static int solution(int[][] data, int col, int row_begin, int row_end) { Arrays.sort(data, (o1, o2) ->{ if(o1[col-1] == o2[col-1]) { return Integer.compare(o2[0], o1[0]); } return In.. 2023. 7. 30.
[프로그래머스] 숫자 변환하기 Java 풀이 첫 번째 풀이 exists를 사용하지 않으면 시간초과가 뜬다. 이전에 한번이라도 큐에 들어갔던 숫자면 skip. Node 를 쓰고싶지 않았는데, 다른 방법이 생각나지 않아서 사용했다. 밑에 풀이에선 배열로 수정됨 import java.util.*; public class Main { public static void main(String[] args) { int res = solution(2, 5, 4); System.out.print(res); } public static int solution(int x, int y, int n) { if (x == y) return 0; Queue queue = new LinkedList(); int[] exists = new int[1000001]; queue.a.. 2023. 7. 28.
[Druid] indexing service / Overlord 목차 LIST Druid indexing service Apache druid의 indexing service는 인덱싱 관련 작업을 실행하는 고가용 분산 서비스 입니다. 인덱싱 작업은 드루이드 세그먼트를 생성하거나 destroy(파괴)합니다. 인덱싱 서비스는 master/slave 와 같은 아키텍처를 가지고 있습니다. 인덱싱 서비스는 세개의 주 구성요소로 이루어져 있습니다. 1) Peon component : 단일 task 실행 2) Middle Manager component : peon 관리 3) Overlord component : middle manager에게 작업 분배 Overlord와 MiddleManager는 동일한 프로세스 또는 여러 프로세스에서 실행될 수 있지만, Middle Manage.. 2023. 7. 16.
반응형