1. 환경 차이로 생기는 오류를 방지하기 위해- 어떤 운영체제든 동일한 환경에서 실행됨- 예: 윈도우에서 잘 되던 코드가 리눅스 배포서버에서는 오류나는 경우- 어떻게? Docker는 컨테이너 안에 리눅스 기반 OS계층을 포함하고 있어서, 리눅스 환경을 가상화 한다.=> 어떤 OS를 사용하던, 컨테이너 안에선 동일한 리눅스 환경이 보장된다.- 그럼 windows에서 작성한 Docker 이미지가 리눅스 서버에서 100% 똑같이 동작할까?=> 대부분의 경우 동일하게 동작하지만, 만약 윈도우 전용 경로(/, \)나 한글 인코딩을 사용하는 경우 문제가 발생할 수 있다=> Docker에서는 가능한 리눅스 기반 이미지를 사용하고, 환경 독립적인 코드 작성이 중요하다 2. 배포가 편하다- 직접 서버에 적속해서 설치, ..
1. JOIN과 서브쿼리 모두 같은 결과는 출력한다면, 언제 어떤걸 써야 할까? 1) JOIN- 다른 테이블의 컬럼을 함께 보여주고 싶을 때- 빠른 결과를 도출하고 싶다, 컬럼에 대한 정보를 다 알고 있을 때(명확한 관계(키-ON을 내가 직접 지정해야 하므로))- 실무에서는 JOIN을 많이 쓴다, 특히 INNER JOIN- 가독성이 좋고, 튜닝할 수 있는 여지도 많다- 배치? 2) 서브쿼리는?- 급한 결과는 아니지만 데이터 프로세스의 흐름을 그때그때 보고싶을때- 속성에 대한 정보를 잘 모를 때(한 테이블 먼저 쿼리하고, 그결과를 다른 쿼리에 넘김)
1. 비교1) Oracle- 상용 DB의 대표- 대규모 기업용 시스템에 적합- 가장 많은 기능과 고급 트랜잭션 처리- 라이선스 비용이 비싸다 2) PostgreSQL- 오픈소스 중 가장 강력한 기능- 확장성, 표준 SQL, JSON, 복잡 쿼리 최강- AI, 데이터분석, 백엔드 서버 등 다양하게 사용 3) MySQL- 가볍고 빠름, 진입장벽이 낮음- 웹 서비스, CMS에서 많이 씀- 복잡한 SQL에 약함(Grouping sets 등 없음) 4) MariaDB- MySQL의 포크(fork)로, MySQL과 90% 이상 호환된다- 커뮤니티 중심, 더 자유로움- 기능이 MySQL보다 빠르게 업데이트되는 경향이 있다
1. 윈도우함수() + OVER()- 순위, 집계 등 행과 행사이의 관계를 정의하는 함수, OVER 구문을 필수로 한다- 순위함수(RANK, DENSE_RANK/ROW_NUMBER) + 집계함수(AVG/SUM/MAX/MIN)로 구성- 언제쓸까? 특정 테이블의 특정 행만 선택해서 볼때* 특정 테이블의 특정 컬럼만 볼땐 JOINSELECT WINDOW_FUNCTION(ARGUMENTS)OVER ([PARTITION BY 칼럼] [ORDER BY절] [WINDOWING 절]) FROM 테이블명;-- MySQL 8.0.22 이상-- MariaDB 10.2.0 이상- ARGUMENTS: 윈도우 함수에 따라서 필요한 인수- PARTITION BY: 전체 집합에 대해 소그룹으로 나누는 기준- ORDER BY: 소그룹..
1. 관계형 대수란(STANDARD SQL)?- 관계형 데이터베이스에서 원하는 정보를 유도하기 위한 기본 연산 집합 1) 일반 집합 연산- 두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회하는 방법 중 하나- 컬럼의 수와 각 컬럼의 데이터 타입이 같아야 함- 합집합(UNION) : A 또는 B에 존재하는 모든 데이터(중복처리를 위해 정렬 후 중복제거, UNION ALL은 중복 포함, 정렬X)- 교집합(INTERSECT) : A와 B 둘 다에 있는 데이터, 공통된 부분을 추출하고 중복된 결과는 제거(ORACLE, MariaDB는 지원되지만 MySQL에서는 지원되지 않아 JOIN 사용)- 차집합(EXCEPT): A에는 있지만 B에는 없는 데이터(A-B)- 카디션곱(CROSS JOIN): A..
1. GIL이란?- python 인터프리터가 동시에 하나의 스레드만 실행하도록 제한하는 락- 단일 바이트코드 실행 중엔 다른 스레드가 끼어들지 못함=> 복잡한 여러 바이트코드 작업(예: 리스트 두번 접근)은 중간에 끼어들 수 있다 => threading.Lock으로 보호=> 멀티스레드를 써도 한 번에 하나의 스레드만 실행된다=> 동시에 여러 CPU 코어를 못쓴다 => 병렬 처리에 제한이 있다.# threading.Lock 없으면# GIL만 있고 Lock 없이 공유 변수 접근counter = 0def add(): global counter for _ in range(100000): counter += 1 # 읽고 → 계산 → 쓰는 사이에 다른 스레드가 끼어들 수 있음!threads..
1. SQL- 정해진 스키마와 테이블 구조를 기반으로하며, 트랜잭션 안정성이 중요할 때 적합- 테이블 간의 관계를 외래키로 연결(JOIN으로 연결해 한번에 조회 가능)* 외래키란? 2. NoSQL- 유연한 데이터 구조와 수평 확장성에 강점이 있어, 빠르게 변하는 데이터나 대규모 트래픽 환경에 적합- 한 문서에 중첩 저장(내장관계)하거나, python 등의 코드를 사용해 결과를 합쳐서 사용(데이터를 문서 단위로 설계, 관계는 코드에서 처리, $loopup으로 join이 가능하지만, 성능이나 구조적인 제약 때문에 코드 기반 병합을 더 많이 사용)# 1단계: user_id가 101인 주문 조회orders = db.orders.find({"user_id": 101})# 2단계: orders에서 user_id 뽑..
1. 인덱스란?- 테이블의 특정 컬럼에 대한 검색 속도를 높이기 위해 사용하는 자료구조 - 장점: 검색 속도 향상- 단점: 추가적인 저장 공간 사용, 삽입/수정/삭제 성능 저하 2. VIEW란?- 하나 이상의 테이블을 가상의 테이블처럼 보여주는(논리적으로만 존재) 저장된 쿼리- 자주 사용되는 복잡한 쿼리를 미리 뷰로 정의해 놓으면, 추후 쿼리는 간단한 형태로 표현할 수 있다.- 생성된 뷰는 또 다른 뷰를 생성하는데 사용될 수 있다. 뷰의 정의는 변경할 수 없으며, 삭제 후에는 재생성이 필요- 장점: 코드 재사용, 보안(민감한 컬럼 숨기기), 복잡한 쿼리 단순화- 테이블 구조가 변경되어도, 뷰를 사용하고 있는 응용프로그램은 변하지 않아도 된다는 장점을 가지고 있다- 용도: 조회 전용 대시보드, 보고서 출력..
- Total
- Today
- Yesterday
- Python
- 다이어트
- 30분
- C언어
- 프로그래머스
- 스크랩
- Ai
- 경제
- 갓생
- 미라클모닝
- 고득점 Kit
- 실기
- 오블완
- 영어회화
- IH
- 아침운동
- ChatGPT
- 줄넘기
- 루틴
- llm
- 티스토리챌린지
- SQL
- 아침
- 빅데이터 분석기사
- 습관
- 뉴스
- 오픽
- 기초
- opic
- 운동
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |