Computer Science

    JOIN의 종류

    JOIN 조인이란 두 개 이상의 테이블을 서로 연결하여 하나의 결과를 만드는 것을 말합니다. 즉, 필요한 데이터가 여러 테이블에 흩어져 존재하는 경우에 조인을 이용해 데이터들을 결합할 수 있습니다. 조인은 분리된 데이터 간의 공통된 정보, 즉 동일한 칼럼 또는 키 기준으로 데이터를 논리적으로 연결합니다. Inner Join 두 테이블에 공통된 데이터가 존재하는 행에 대해서만 조인을 수행하는 방법으로, 교집합에 해당합니다. [명시적 방법] JOIN 키워드에 조인 대상 테이블을 작성하고 ON 절에는 조인할 비교조건 작성 SELECT 학생.학번, 학생.이름, 지도교수.교수명 FROM 학생 JOIN 지도교수 ON 학생.학번 = 지도교수.학번 [암시적 방법] SELECT 학생.학번, 학생.이름, 지도교수.교수명 ..

    `서브쿼리와 뷰

    서브쿼리 서브쿼리란 쿼리 안의 보조 쿼리를 가리키는 용어로, 가장 바깥쪽의 SELECT 문인 메인쿼리를 기준으로 내부에 SELECT 문을 추가로 작성한다. 서브쿼리는 SELECT 문 안쪽에 위치한 SELECT 문이 어느 위치에 작성되었는지에 따라 아래와 같이 구분할 수 있다. 위치 이름 SELECT 절 스칼라 서브쿼리 FROM 절 인라인 뷰 WHERE 절 중첩 서브쿼리 스칼라 서브쿼리 메인쿼리의 SELECT 절에 있는 또 다른 SELECT 절 스칼라 서브쿼리의 결과값은 1행 1열의 구조로 출력되어야 하며, 만약 스칼라 서브쿼리의 결과값이 2개 이상 나오면 에러가 발생한다. 보통 스칼라 서브쿼리는 출력되는 데이터 건수가 1건이어야 하므로 집계함수(max, min, avg, sum, count 등)와 같이 ..

    인덱스와 인덱스 스캔

    인덱스 인덱스는 데이터베이스에서 키값으로 실제 데이터 위치를 식별하고 데이터 접근 속도를 높이고자 생성되는, 키 기준으로 정렬된 오브젝트이다. 저장된 데이터를 검색할 일이 많을 때는 인덱스를 설계하고 생성하는 과정이 매우 중요하다. 인덱스는 생성하려는 열의 속성에 따라 고유 인덱스와 비고유 인덱스로 구분할 수 있다. 고유 인덱스 고유 인덱스란 인덱스를 구성하는 열들의 데이터가 유일하다는 의미로, 차례로 정렬되는 인덱스 열의 데이터는 서로 중복되지 않고 유일성을 유지한다. 만약 동일한 데이터가 생성되면 고유 인덱스의 중복 체크 과정에서 에러가 발생한다. 또한, 중복이 없는 열들을 고유 인덱스로 생성하려 한다면 중복이 있는지 검증하는 절차를 거쳐햐 하므로, 불필요한 중복 검증 과정이 추가되므로 주의해야 한다..

    테이블과 키

    테이블 테이블은 데이터를 저장하는 오브젝트로 행과 열의 정보를 저장하며, 관계형 데이터베이스는 2차원 배열 형태로 테이블을 관리합니다. Row 로우는 행에 해당하는 용어로, 테이블에서 동일한 구조의 데이터 항목들의 집합을 가리킵니다. 즉, 행은 하나의 데이터 항목 집합이며 모든 행의 집합은 테이블! 로우 수가 많아지면 데이터에 접근하는 과정에서 시간이 오래 소요될 가능성이 높기 때문에, 파티셔닝 기법으로 SQL 문의 성능 향상을 고려해볼 수도 있습니다. Column 컬럼은 열에 해당하는 용어로, 사전에 정의한 데이터 유형으로 데이터값을 저장합니다. 키 Super Key 각 row를 유일하게 식별할 수 있는 하나 또는 그 이상의 속성들의 집합을 말합니다. 유일성 만족 유일성: 하나의 키 값으로 특정 row..

    `DB 엔진과 SQL 수행 프로세스

    SQL 수행 전체 프로세스 사용자가 DB에서 원하는 데이터를 가져오기 위해 SQL 문을 실행한다. 실행된 SQL 문은 MySQL 엔진에서 문법 에러가 있는지, DB에 존재하는 테이블 대상으로 SQL 문을 작성했는지와 같은 세부사항을 다양한 문법 및 구문으로 검사한다. (파서) 사용자가 요청한 데이터를 빠르고 효율적으로 찾아가는 전략적 계획을 수립한다. (옵티마이저) 수립한 계획을 토대로 스토리지 엔진에 위치한 데이터까지 찾아간 뒤 해당 데이터를 MySQL 엔진으로 전달한다. MySQL 엔진은 전달된 데이터에서 불필요한 부분을 필터링하고 필요한 연산을 수행한 뒤 사용자에게 최종 결과를 전달한다. DB 엔진 스토리지 엔진 스토리지 엔진은 사용자가 요청한 SQL 문을 토대로 DB에 저장된 디스크나 메모리에서 ..

    `MySQL과 MariaDB

    MySQL MySQL은 1995년 오픈소스로 배포된 관계형 데이터베이스 관리 시스템으로, 대용량 데이터와 가용성, 안정성을 제공한다. 다중 스레드, 다중 사용자 형식의 구조질의어 형식의 데이터베이스 관리 시스템으로, 2010년 오라클에 인수되었다. 현재 MySQL8.0 버전까지 배포되었으며 상용 버전과 커뮤니티 버전으로 구분한다. 상용 버전은 오라클에서 다양한 보안 패치와 개선된 기능을 제공하지만, GPL 라이선스를 사용하는 무료 버전은 제약된 기능과 서비스만 사용할 수 있다. MariaDB MySQL이 오라클로 인수되고 나서 개발 지침과 라이선스 정책의 변화에 따라, MySQL의 핵심 개발자 주도로 오픈소스 정책을 지향하는 MariaDB가 탄생했다. MariaDB는 MySQL 소스코드를 기반으로 개발되..

    소켓 프로그래밍 (JAVA)

    소켓 프로그래밍은 소켓을 이용한 통신 프로그래밍을 말한다. 소켓이란 프로세스간의 통신에 사용되는 양쪽의 endpoint를 의미하며, 소켓 통신에 사용되는 프로토콜이 TCP냐 UDP냐에 따라 다른 종류의 소켓을 이용한다. TCP와 UDP TCP/IP 프로토콜은 이기종 시스템간의 통신을 위한 표준 프로토콜로, 프로토콜의 집합이다. TCP와 UDP 모두 TCP/IP 프로토콜에 포함되어 있으며, OSI 7계층의 전송계층에 해당한다. TCP UDP 연결방식 연결기반 - 연결 후 통신 - 1:1 통신 비연결기반 - 연결없이 통신 - 1:1, 1:N, N:N 통신 특징 데이터의 경계를 구분하지 않는다. (byte-stream) UDP보다 전송속도가 느리다. 신뢰성 있는 데이터 전송 - 데이터의 전송순서 보장 - 데이..

    네트워킹 기본지식

    네트워킹이랑 두 대 이상의 컴퓨터를 케이블로 연결하여 네트워크를 구성하는 것을 말하며, 컴퓨터들을 서로 연결하여 데이터를 주고받거나 주변기기를 공유할 수 있다. 전 세계의 컴퓨터가 인터넷이라는 하나의 거대한 네트워크를 구성하며, 인터넷을 통해 다양하고 방대한 양의 데이터를 공유하는 것이 가능해졌다. ※참고: 자바에서 제공하는 java.net 패키지를 사용하면 네트워크 애플리케이션의 데이터 통신 부분을 쉽게 작성할 수 있다. 클라이언트/서버 클라이언트/서버는 컴퓨터 간의 관계를 역할로 구분하는 개념으로, 서버는 서비스를 제공하는 컴퓨터이고, 클라이언트는 서비슬르 사용하는 컴퓨터가 된다. 일반적으로 서버는 다수의 클라이언트에게 서비스를 제공하는 소프트웨어가 실행되는 컴퓨터로, 고사양의 하드웨어를 갖추고 있다..