본문 바로가기
Everyday Study

2024.08.01 (목) { 메이크파일, 정규화, CI/CD, null값과 0과 공백 }

by xogns93 2024. 8. 1.

메이크파일

 

메이크파일의 구성 요소

  1. 타겟(Target):
    • 메이크파일에서 작업의 목표 또는 결과물입니다. 예를 들어, 컴파일된 프로그램이나 생성된 파일이 타겟이 될 수 있습니다.
  2. 종속성(Dependencies):
    • 타겟을 생성하기 위해 필요한 파일이나 다른 타겟을 나타냅니다. 타겟이 갱신되기 전에 확인됩니다.
  3. 레시피(Recipe):
    • 타겟을 만들기 위해 실행해야 하는 명령어들의 집합입니다. 각 레시피는 종속성을 만족하기 위해 실행되며, 명령어들은 쉘 명령으로 실행됩니다.

예제

target: dependency1 dependency2
    command1
    command2

 

  • target: 만들어질 파일 또는 작업의 이름.
  • dependency1, dependency2: 타겟을 만들기 위해 필요한 파일들.
  • command1, command2: 타겟을 생성하기 위해 실행될 쉘 명령어들.

레시피의 역할과 중요성

  • 재사용성: 한 번 정의된 레시피는 여러 타겟에 걸쳐 재사용될 수 있어 효율적입니다.
  • 자동화: 수동으로 수행해야 할 복잡한 빌드 과정을 자동화하여 개발자의 작업을 단순화합니다.
  • 의존성 관리: 타겟과 그 종속성 사이의 관계를 명확하게 정의하여, 변경된 파일만 갱신할 수 있도록 합니다.

 


CI/CD = Continuous Integration/Continuous Delivery(Continuous Deployment)

 

CI/CD는 "Continuous Integration"과 "Continuous Delivery" 또는 "Continuous Deployment"의 약어로, 소프트웨어 개발 및 배포 프로세스를 자동화하고 효율적으로 만드는 방법론입니다. 이를 통해 개발팀은 빠르고 신뢰성 있게 소프트웨어를 릴리스할 수 있습니다.

 

CI (Continuous Integration)

Continuous Integration은 개발자들이 변경한 코드를 자주, 최소한 하루에 한 번 이상 중앙 리포지토리에 통합하는 것을 말합니다. 이 과정에서 다음과 같은 단계들이 포함됩니다:

  1. 코드 통합:
    • 개발자들은 변경된 코드를 중앙 리포지토리에 커밋합니다.
    • 코드 변경 사항은 자동으로 빌드 시스템에 의해 통합됩니다.
  2. 자동 빌드:
    • 각 커밋마다 자동으로 빌드가 트리거됩니다.
    • 빌드 실패 시 즉각적인 피드백을 제공하여 문제를 빠르게 해결할 수 있습니다.
  3. 자동 테스트:
    • 빌드 과정에서 자동화된 테스트가 실행됩니다.
    • 단위 테스트, 통합 테스트 등을 포함하여 코드의 품질을 보장합니다.

CD (Continuous Delivery/Continuous Deployment)

Continuous Delivery Continuous Deployment는 빌드된 코드가 자동으로 배포 단계로 넘어가는 것을 의미합니다. 이 두 가지 개념은 유사하지만, 약간의 차이가 있습니다.

Continuous Delivery

  • 자동화된 배포 준비:
    • 빌드된 코드가 스테이징 환경에 자동으로 배포됩니다.
    • 운영 환경으로의 배포는 수동으로 트리거됩니다.
  • 지속적인 테스트:
    • 스테이징 환경에서 추가적인 테스트가 수행됩니다.
    • 사용자가 배포 전 최종 검토 및 승인을 할 수 있습니다.

Continuous Deployment

  • 완전 자동화된 배포:
    • 코드가 빌드되고 테스트를 통과하면 자동으로 운영 환경에 배포됩니다.
    • 수동 개입 없이 배포가 이루어집니다.
  • 빠른 피드백 루프:
    • 개발자들은 코드를 커밋한 후 곧바로 라이브 시스템에서 동작을 확인할 수 있습니다.
    • 사용자 피드백을 빠르게 반영하여 지속적인 개선이 가능합니다.

 

CI/CD 파이프라인

CI/CD 파이프라인은 위에서 설명한 모든 과정을 자동화하고 효율적으로 관리하기 위한 일련의 단계들을 말합니다. 일반적인 CI/CD 파이프라인은 다음과 같은 단계로 구성됩니다:

  1. 코드 커밋: 개발자가 코드를 중앙 리포지토리에 커밋합니다.
  2. 빌드: 커밋된 코드를 자동으로 빌드합니다.
  3. 테스트: 빌드된 코드를 자동으로 테스트합니다.
  4. 배포 준비: (Continuous Delivery의 경우) 스테이징 환경에 배포 준비를 합니다.
  5. 운영 배포: (Continuous Deployment의 경우) 운영 환경에 자동으로 배포합니다.

CI/CD의 이점

  1. 빠른 피드백:
    • 코드 변경 사항이 즉시 빌드 및 테스트되므로, 개발자는 빠르게 피드백을 받을 수 있습니다.
  2. 높은 품질:
    • 지속적인 테스트와 통합으로 코드의 품질을 유지하고, 버그를 조기에 발견하여 해결할 수 있습니다.
  3. 효율성:
    • 수동 작업을 자동화하여 개발자가 더 중요한 작업에 집중할 수 있도록 합니다.
  4. 신뢰성:
    • 일관된 빌드 및 배포 프로세스로 인해 배포 과정에서의 오류를 줄입니다.

도구들

여러 도구들이 CI/CD 파이프라인을 구축하고 관리하는 데 사용됩니다. 대표적인 도구들로는 Jenkins, GitLab CI/CD, Travis CI, CircleCI, Bamboo 등이 있습니다.

 


정규화(Normalization)

 

정규화(Normalization)는 데이터베이스 설계에서 데이터를 구조화하는 프로세스로, 데이터의 중복을 줄이고 무결성을 높이기 위해 사용됩니다. 정규화는 데이터를 더 작은 테이블로 나누고, 이 테이블들 간의 관계를 정의하는 방식으로 이루어집니다.

 

정규화의 목적

  • 데이터 중복 제거: 데이터베이스 내의 중복된 데이터를 제거하여 저장 공간을 절약하고, 데이터 일관성을 유지합니다.
  • 데이터 무결성 유지: 데이터가 정확하고 일관성 있게 유지되도록 보장합니다.
  • 데이터베이스 성능 향상: 데이터 중복이 줄어들어 쿼리 성능이 향상될 수 있습니다.

정규화 과정

정규화는 여러 단계로 이루어지며, 각 단계는 특정 규칙을 따릅니다. 주요 정규형(Normal Form)에는 다음과 같은 것들이 있습니다.

 

제 1 정규형 (1NF: First Normal Form)

  • 조건: 모든 열 값이 원자값(Atomic Value)이어야 합니다. 즉, 각 셀에는 하나의 값만 있어야 하며, 반복 그룹이나 배열이 존재해서는 안 됩니다.

예시:

  • 비정규형:
학생ID | 학생이름 | 과목
-------|----------|---------
1      | 김철수   | 수학, 영어
2      | 이영희   | 과학, 역사

 

  • 1NF:
학생ID | 학생이름 | 과목
-------|----------|-----
1      | 김철수   | 수학
1      | 김철수   | 영어
2      | 이영희   | 과학
2      | 이영희   | 역사

 

제 2 정규형 (2NF: Second Normal Form)

  • 조건: 1NF를 만족하며, 기본 키가 아닌 모든 열이 기본 키에 완전히 종속되어야 합니다. 부분 종속성을 제거합니다.

 

 

예시:

  • 1NF
학생ID | 과목     | 교수명
-------|----------|-------
1      | 수학     | 박교수
1      | 영어     | 김교수
2      | 과학     | 이교수
2      | 역사     | 최교수
  • 2NF
학생ID | 과목
-------|-----
1      | 수학
1      | 영어
2      | 과학
2      | 역사
과목   | 교수명
-------|-------
수학   | 박교수
영어   | 김교수
과학   | 이교수
역사   | 최교수

 

제 3 정규형 (3NF: Third Normal Form)

  • 조건: 2NF를 만족하며, 기본 키가 아닌 모든 열이 기본 키에 비이행적(Transitive)으로 종속되어야 합니다.

 

예시:

  • 2NF:
학생ID | 과목 | 교수명 | 학과
-------|------|--------|-----
1      | 수학 | 박교수 | 수학과
1      | 영어 | 김교수 | 영어과
2      | 과학 | 이교수 | 과학과
2      | 역사 | 최교수 | 역사과
  • 3NF:
학생ID | 과목
-------|-----
1      | 수학
1      | 영어
2      | 과학
2      | 역사
과목   | 교수명 | 학과
-------|--------|-----
수학   | 박교수 | 수학과
영어   | 김교수 | 영어과
과학   | 이교수 | 과학과
역사   | 최교수 | 역사과

 

정규화의 장점과 단점

장점

  • 데이터 무결성 유지: 정규화된 데이터베이스는 데이터의 일관성을 유지하고, 데이터 무결성을 보장합니다.
  • 중복 최소화: 데이터 중복을 최소화하여 저장 공간을 절약하고, 데이터 관리 효율성을 높입니다.

단점

  • 복잡성 증가: 정규화된 데이터베이스는 다수의 테이블 간 조인을 필요로 하므로, 쿼리가 복잡해질 수 있습니다.
  • 성능 저하: 조인 연산이 많아지면 쿼리 성능이 저하될 수 있습니다.

정규화는 데이터베이스 설계의 핵심 개념 중 하나로, 데이터의 구조와 무결성을 유지하기 위해 반드시 고려해야 할 사항입니다. 정규화의 단계를 통해 데이터베이스를 효율적이고 체계적으로 관리할 수 있습니다.

 

 


null 값은 공백이나 0과 같지 않습니다. 공백은 다른 공백과 같으며, 0은 다른 0과 같지만 두 개의 null 값은 같지 않다고 간주됩니다.

 

Null 값에 대한 설명

Null과 공백 및 0의 차이

  • Null 값:
    • 데이터베이스에서 null 값은 값이 존재하지 않음을 의미합니다. 이는 "알 수 없음" 또는 "값이 없음"을 나타냅니다.
    • null 값은 데이터베이스에서 특별하게 취급되며, 다른 null 값과 비교할 때도 같지 않다고 간주됩니다. 즉, null = null 비교는 true가 아니라 false입니다.
    • SQL에서 null 값을 비교할 때는 IS NULL 또는 IS NOT NULL 연산자를 사용합니다.
  • 공백 값:
    • 공백은 문자 데이터 타입에서 하나 이상의 공백 문자로 이루어진 값입니다.
    • 공백 값은 다른 공백 값과 비교할 때 같다고 간주됩니다. 예를 들어, ' ' = ' '는 true입니다.
  • 0 값:
    • 0은 숫자 데이터 타입에서 수치 값이 0임을 나타냅니다.
    • 숫자 0은 다른 숫자 0과 비교할 때 같다고 간주됩니다. 예를 들어, 0 = 0은 true입니다.

Null 값의 비교와 처리

  • Null 값 비교:
    • SQL에서 null 값은 다른 null 값과 같지 않다고 간주되며, 두 null 값을 비교하면 항상 false를 반환합니다.
    • 이는 null이 "알 수 없는 값"을 의미하기 때문에 두 null 값이 같은지 확실하게 알 수 없다는 개념에서 비롯됩니다.
  • Null 값 처리:
    • 데이터베이스에서 null 값을 처리할 때는 IS NULL 또는 IS NOT NULL 연산자를 사용해야 합니다.

핵심

  • null 값은 값이 존재하지 않음을 나타내며, 다른 null 값과 같지 않다고 간주됩니다.
  • 공백 값은 문자 데이터에서 빈 공간을 의미하며, 다른 공백 값과 같다고 간주됩니다.
  • 숫자 0은 수치 데이터에서 0을 나타내며, 다른 0 값과 같다고 간주됩니다.