본문 바로가기
Data Analysis/Computer Science

동적으로 쿼리를 생성한다는 것 / 동적할당 정적할당

by Hagrid 2024. 4. 23.
반응형

 

동적 쿼리생성

동적으로 쿼리를 생성한다는 것은 프로그램 실행 시간에 데이터베이스 쿼리를 프로그래밍적으로 조합하고 수정하여 사용할 수 있게 만든다는 의미입니다. 이를 통해 다양한 변수나 조건에 따라 유연하게 쿼리를 변경하고 적용할 수 있습니다.

예를 들어, 사용자 입력, 설정 파일, 혹은 프로그램의 다른 부분에서 정의된 값에 따라 SQL 문을 조정할 수 있습니다. 이 방법은 특히 날짜, 사용자 ID, 설정된 데이터베이스 이름과 같이 변할 수 있는 데이터에 대해 쿼리를 실행할 때 유용합니다.

여러분이 제시한 코드의 일부를 살펴보면:


kst_date = '2024-04-22'
database = 'contents'

query = "SELECT * FROM {{ config.database.hive.get_contents() }} WHERE date = '{{ kst_date }}'"
replaced_query = query.replace('{{ kst_date }}', kst_date).replace('{{ config.database.hive.get_contents() }}', database)

이 코드에서 query 문자열은 두 개의 플레이스홀더(**{{ kst_date }}{{ config.database.hive.get_contents() }})를 포함하고 있습니다. 이 플레이스홀더는 나중에 실제 값(kst_date**와 database)으로 대체됩니다. 이렇게 하면 동일한 쿼리 템플릿을 다양한 상황에 맞게 조정하여 사용할 수 있습니다.

동적 쿼리 생성은 코드의 재사용성을 높이고, 다양한 상황에 대응하기 위해 매우 유용합니다. 다만, SQL 인젝션 같은 보안 취약점을 방지하기 위해 적절한 값 검증과 안전한 쿼리 생성 방식을 사용하는 것이 중요합니다.


동적 / 정적 할당

동적할당과 정적할당은 프로그래밍에서 자원(주로 메모리)을 할당하는 두 가지 주요 방식을 가리킵니다. 각각의 방식은 자원을 할당하고 관리하는 방법에서 차이를 보입니다.

정적할당 (Static Allocation)

정적할당은 프로그램이 실행되기 전에 메모리의 필요한 양이 결정되고 컴파일 시간에 그 크기가 고정되는 방식입니다. 정적할당된 메모리는 프로그램이 실행될 때 생성되고 프로그램이 종료될 때 해제됩니다.

  • 장점: 메모리 관리가 간단하고, 메모리가 할당되는 시간이 빠릅니다.
  • 단점: 프로그램 실행 전에 메모리 사용량을 예측해야 하며, 실행 중에 메모리 크기를 변경할 수 없어 유연성이 떨어집니다.

동적할당 (Dynamic Allocation)

동적할당은 프로그램이 실행되는 도중에 필요에 따라 메모리를 할당하고 해제할 수 있는 방식입니다. 동적할당을 사용하면 실행 시간에 데이터의 크기가 변할 수 있는 경우에도 유연하게 대응할 수 있습니다.

  • 장점: 실행 중에도 메모리 크기를 조정할 수 있어 유연성이 높습니다. 필요한 만큼 메모리를 할당하여 효율적으로 자원을 사용할 수 있습니다.
  • 단점: 메모리 할당과 해제를 직접 관리해야 하므로 복잡성이 증가하며, 메모리 누수나 단편화와 같은 문제가 발생할 수 있습니다.

각각의 할당 방식은 그 특성에 따라 서로 다른 사용 사례에 적합합니다. 예를 들어, 실행 전에 필요한 자원의 크기가 명확하고 변하지 않을 때는 정적 할당이 효과적이고, 데이터의 크기가 예측 불가능하거나 실행 중에 자주 변경될 때는 동적 할당이 더 적합할 수 있습니다. 프로그래머는 각 상황에 맞게 적절한 메모리 할당 방식을 선택해야 합니다.

정적할당 예시

정적할당은 주로 글로벌 변수, 로컬 정적 변수, 배열과 같이 크기가 변하지 않는 자료형에 사용됩니다. C 언어에서 정적 배열을 선언하는 방법을 예로 들 수 있습니다.

cCopy code
#include <stdio.h>int main() {
    int array[10];  // 크기가 10인 정적 배열

    for (int i = 0; i < 10; i++) {
        array[i] = i * i;
        printf("array[%d] = %d\\n", i, array[i]);
    }

    return 0;
}

이 예제에서 배열 **array**는 크기가 10으로 고정되어 컴파일 시간에 메모리가 할당됩니다. 배열의 크기를 실행 중에 변경할 수 없습니다.

동적할당 예시

동적할당은 프로그램 실행 중에 메모리 크기를 결정하고 할당해야 할 때 사용됩니다. C 언어에서 malloc 함수를 사용하여 동적으로 메모리를 할당하는 방법을 예로 들 수 있습니다.

cCopy code
#include <stdio.h>#include <stdlib.h>int main() {
    int *array;
    int n;

    printf("Enter the size of the array: ");
    scanf("%d", &n);

    // 사용자가 입력한 크기로 메모리 할당
    array = (int*) malloc(n * sizeof(int));

    if (array == NULL) {
        printf("Memory allocation failed!\\n");
        return -1;
    }

    // 배열 초기화 및 출력
    for (int i = 0; i < n; i++) {
        array[i] = i * i;
        printf("array[%d] = %d\\n", i, array[i]);
    }

    // 메모리 해제
    free(array);

    return 0;
}

이 예제에서는 사용자로부터 배열의 크기를 입력받아 해당 크기만큼 메모리를 동적으로 할당합니다. 이 경우 배열의 크기는 실행 시간에 결정되며, 프로그램이 끝날 때 free 함수를 사용하여 할당된 메모리를 해제합니다. 동적할당은 메모리 사용을 최적화할 수 있지만, 할당과 해제를 관리하는 추가적인 작업이 필요합니다.

 

Python에서는 메모리 관리가 내부적으로 처리되기 때문에 개발자가 직접 메모리를 할당하고 해제할 필요는 없습니다. 그러나 개념적으로는 정적 할당과 동적 할당의 차이를 이해하는 것이 중요합니다.

 
반응형

'Data Analysis > Computer Science' 카테고리의 다른 글

jar 파일  (0) 2024.08.07
JWT (JSON Web Token)란?  (0) 2024.08.06
GIT 명령어 정리  (1) 2023.05.09
FTP / SFTP(SSH파일전송프로토콜)/ FTPS / SMTP / TCP/IP & FileZilla  (0) 2023.05.09
Docker  (0) 2023.04.21

댓글