메이크파일
메이크파일의 구성 요소
- 타겟(Target):
- 메이크파일에서 작업의 목표 또는 결과물입니다. 예를 들어, 컴파일된 프로그램이나 생성된 파일이 타겟이 될 수 있습니다.
- 종속성(Dependencies):
- 타겟을 생성하기 위해 필요한 파일이나 다른 타겟을 나타냅니다. 타겟이 갱신되기 전에 확인됩니다.
- 레시피(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은 개발자들이 변경한 코드를 자주, 최소한 하루에 한 번 이상 중앙 리포지토리에 통합하는 것을 말합니다. 이 과정에서 다음과 같은 단계들이 포함됩니다:
- 코드 통합:
- 개발자들은 변경된 코드를 중앙 리포지토리에 커밋합니다.
- 코드 변경 사항은 자동으로 빌드 시스템에 의해 통합됩니다.
- 자동 빌드:
- 각 커밋마다 자동으로 빌드가 트리거됩니다.
- 빌드 실패 시 즉각적인 피드백을 제공하여 문제를 빠르게 해결할 수 있습니다.
- 자동 테스트:
- 빌드 과정에서 자동화된 테스트가 실행됩니다.
- 단위 테스트, 통합 테스트 등을 포함하여 코드의 품질을 보장합니다.
CD (Continuous Delivery/Continuous Deployment)
Continuous Delivery와 Continuous Deployment는 빌드된 코드가 자동으로 배포 단계로 넘어가는 것을 의미합니다. 이 두 가지 개념은 유사하지만, 약간의 차이가 있습니다.
Continuous Delivery
- 자동화된 배포 준비:
- 빌드된 코드가 스테이징 환경에 자동으로 배포됩니다.
- 운영 환경으로의 배포는 수동으로 트리거됩니다.
- 지속적인 테스트:
- 스테이징 환경에서 추가적인 테스트가 수행됩니다.
- 사용자가 배포 전 최종 검토 및 승인을 할 수 있습니다.
Continuous Deployment
- 완전 자동화된 배포:
- 코드가 빌드되고 테스트를 통과하면 자동으로 운영 환경에 배포됩니다.
- 수동 개입 없이 배포가 이루어집니다.
- 빠른 피드백 루프:
- 개발자들은 코드를 커밋한 후 곧바로 라이브 시스템에서 동작을 확인할 수 있습니다.
- 사용자 피드백을 빠르게 반영하여 지속적인 개선이 가능합니다.
CI/CD 파이프라인
CI/CD 파이프라인은 위에서 설명한 모든 과정을 자동화하고 효율적으로 관리하기 위한 일련의 단계들을 말합니다. 일반적인 CI/CD 파이프라인은 다음과 같은 단계로 구성됩니다:
- 코드 커밋: 개발자가 코드를 중앙 리포지토리에 커밋합니다.
- 빌드: 커밋된 코드를 자동으로 빌드합니다.
- 테스트: 빌드된 코드를 자동으로 테스트합니다.
- 배포 준비: (Continuous Delivery의 경우) 스테이징 환경에 배포 준비를 합니다.
- 운영 배포: (Continuous Deployment의 경우) 운영 환경에 자동으로 배포합니다.
CI/CD의 이점
- 빠른 피드백:
- 코드 변경 사항이 즉시 빌드 및 테스트되므로, 개발자는 빠르게 피드백을 받을 수 있습니다.
- 높은 품질:
- 지속적인 테스트와 통합으로 코드의 품질을 유지하고, 버그를 조기에 발견하여 해결할 수 있습니다.
- 효율성:
- 수동 작업을 자동화하여 개발자가 더 중요한 작업에 집중할 수 있도록 합니다.
- 신뢰성:
- 일관된 빌드 및 배포 프로세스로 인해 배포 과정에서의 오류를 줄입니다.
도구들
여러 도구들이 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 값과 같다고 간주됩니다.
'Everyday Study' 카테고리의 다른 글
2024.08.05 (월) { Concerns, 다형성(Polymorphism), 어그리게이션&컴포지션, UML Class Diagram } (0) | 2024.08.05 |
---|---|
2024.08.02 (금) { WHERE절 ON절, 1대 다 관계, NoSQL, 트랜잭션(Transaction) } (0) | 2024.08.02 |
2024.07.31 (수) { 행(Row)과 열(Column), git clone, 깃허브시험 } (0) | 2024.07.31 |
2024.07.30 (화) { DDL / DML } (0) | 2024.07.30 |
2024.07.29 (월) { Maven, POM 파일, cascade, @Entity } (0) | 2024.07.29 |