Study

    [이것이 MYSQL이다] 스토어드 프로시저, 스토어드 함수, 커서, 트리거에 대하여 정리

    본 포스트는 2021년에 업로드된 포스트입니다. 개념이 아직 정리안된 나이에 업로드한 포스트이기에 수정사항이 있으면 연락주세요. 들어가기에 앞서 스토어드 프로시저/함수, 커서, 트리거는 mysql 데이터베이스에서 많이 쓰이는 문법이다. 위 개념을 잘 알아두면 MYSQL에서 쿼리문을 작성할때 보다 효율적이고 MYSQL에서 더 많은 처리를 수행할 수 있을것이다. 이제부터 위의 중요한 개념을 하나씩 설명하겠다. 스토어드 프로시저 스토어드 프로시저는 쉽게 설명하면 MYSQL에서 쿼리문을 모듈화 해놓을 수 있는 기능이다. 실제로 프로그래밍 언어에서 모듈화가 왜 필요한지 생각해보자. 모듈화를 하면 중복되는 코드를 하나의 파일이나 함수로 만들어서 호출로 간편하게 사용할 수 있기에 코드의 가독성이 높아지며 또한 중복되..

    [이것이 MYSQL이다] 인덱스에 대하여

    본 포스트는 2021년에 업로드된 포스트입니다. 개념이 아직 정리안된 나이에 업로드한 포스트이기에 수정사항이 있으면 연락주세요. 인덱스란 인덱스란 한마디로 정의하면 인덱스 == 탐색이라고 할 수 있을것같다. sql에서 인덱스를 잘 활용하면 검색속도가 무척이나 빨라진다. 대용량 테이블을 예시로 들어보자면 row가 30만개가 있는 테이블을 예시로 들어본다. 여기서 한개의 값만 찾으려면 엄청나게 많은 시간이 소요될 것이다. 또한 이러한 작업이 반복된다면 시스템에 큰 과부하를 줄 수 있다. 따라서 인덱스를 사용하면 검색속도(SELECT)가 엄청나게 빨라질것이다, 그러한 이유는 인덱스는 책 뒤에 찾아보기페이지와 비슷하다. 만약 책에서 어떠한 한 부분이 나오는 페이지를 찾으라고 할때 전체 페이지 수가 1000페이지..

    [이것이 MYSQL이다] 인덱스의 기초개념과 뷰 테이블

    본 포스트는 2021년에 업로드된 포스트입니다. 개념이 아직 정리안된 나이에 업로드한 포스트이기에 수정사항이 있으면 연락주세요. 뷰란? view table은 존재하지 않는 가상의 테이블을 지칭한다. 따라서 말 그대로 눈에 보이기만 하는 테이블이다. 뷰를 사용하는 이유는 다음 예시를 들으면서 설명할 수 있다. 뷰를 사용하는 이유 우리가 어떤 알바에게 회원 정보중 주소열을 모두 수정하라고 알바를 고용했다. 회원테이블에는 회원들의 수많은 개인정보가 들어있다. 알바는 주소를 수정할때 회원들의 다른 개인정보를 가져갈수도 있는 최악의 상황이 발생한다. 따라서 새로운 테이블을 하나 만들어서 알바에게 해당 테이블에게만 접근권한을 부여해서 그 테이블만 수정하게끔하면 되지만 그러면 알바가 수정해놓은 결과를 또 한번 메인테..

    [이것이 MYSQL이다] 7장 중후반 정리 (pivotTable, Join)

    7장 주요내용 mysql 7장에서는 대표적으로 sql프로그래밍, join, pivot에 대하여 배우게 되었다. sql 고급문을 다룬 내용이므로 이해하기 어려운 부분이 있었지만 잘 소화하였던것 같다. 특히 join이라는 개념은 mysql과 다른 관계형 데이터베이스에서 무지막지 하게 많이 쓰이는 개념이므로 정말 중요하다. Pivot Table (피벗 테이블) 피벗테이블은 데이터의 통계나 집계를 하기 위하여 많이 쓰이는 형식이다. 간단하게 쇼핑몰의 구매 테이블을 생각하게 된다면 한 유저는 여러 물건을 구입할수 있게 된다. 아래와 같은 테이블이 될것이다. 위와 같이 같은 유저 아이디로 여러개의 물건을 구입할 수 있다. 하지만 이러한 통계는 눈에 잘 보이지 않는다. 이제 이걸 pivot table로 나타내보자. ..

    [이것이 MYSQL이다] 7장 초반 정리 (내장함수, MYSQL 자료형)

    본 포스트는 2021년에 업로드된 포스트입니다. 개념이 아직 정리안된 나이에 업로드한 포스트이기에 수정사항이 있으면 연락주세요. MYSQL의 자료형 mysql의 자료형은 무궁무진하게 많다. 하지만 이들중 많이 사용되는것은 많이 없다. 대표적으로 VARCHAR, CHAR, INT, BIGINT, SMAIL INT 등이 있다. 나는 기본적으로 VARCHAR과 CHAR의 차이를 햇갈려했었는데 그 이유는 실행 했을떄 저장되는 데이터의 차이를 모르겠어서이다. VARCHAR과 CHAR의 차이는 CHAR는 고정적인 byte 길이, VARCHAR은 유동적인 byte 길이를 뜻한다. CHAR(30)은 크기가 30byte인 고정적인 길이를 할당한다. 따라서 30byte인 char에 "Helloworld"만 입력한다면 20..

    [이것이 MYSQL이다] MYSQL 인덱스, 트리거, 뷰, 스토어드 프로시저 간단한 개념 정리

    본 포스트는 2021년(중1)에 업로드된 포스트입니다. 개념이 아직 정리안된 나이에 업로드한 포스트이기에 수정사항이 있으면 연락주세요. 인덱스 인덱스는 데이터베이스에서 SELECT 문을 사용할때 쓰이는 키이다. 데이터베이스안에 데이터가 많이 없을경우에는 인덱스를 쓸 필요는 없지만 데이터가 2만개 3만개....100만개 이렇게 늘어난다고 가정하면 데이터베이스에서 원하는 row를 찾을때 엄청난 시간이 소요될뿐 아니라 과부하가 일어날 가능성이 크다. 바로 이때 인덱스 키를 사용한다. 책으로 가정해보면 책에서는 맨뒤에 라는 칸이있다. 원하는 위치 부분의 쪽수를 알려주면 그쪽 부분으로 바로 가서 원하는 부분을 읽을수 있다. 이 개념과 비슷한 것이 바로 인덱스 키이다. 만약 책에서 가 없다면 우리가 원하는 페이지를..

    [WebHacking Study] ORM 데이터베이스 모듈에서 발생하는 ORM Injection 원리 분석 (Feat. Django)

    공부를 진행하게 된 이유 최근 ORM 기반 데이터베이스 모듈을 사용하면서 프로젝트를 개발할 일이 잦아지다 보니, ORM 모듈 (Sequelize, Django 등) 에서는 SQL Injection 취약점이 정말 없을까?에 대한 의문점에서부터 공부를 시작하게 되었습니다. 저번 26회 동계 해킹캠프때, Django에서 SQL Injection이 발생하는 1-day가 존재한다고 들었던거 같은데, 기억이 잘 나지 않아 다시 블로그와 관련 글을 찾아보면서 공부를 진행하였습니다. 해당 스터디에서 이번에 발견한 Django ORM Injection의 발생 백터와 직접 익스플로잇을 진행해보면서 정리해보려고 합니다. ORM 소개 ORM이란 Object Relational Mapping(객체 관계 매핑)의 약자로 프로그래..

    [JS Deep하게 공부하기] - 식과 문

    식과 문이란? 자바스크립트에서는 "식"과 "문"이라는 개념이 존재합니다. 해당 개념이 왜 중요한지 모르는 경우가 대부분입니다, 하지만 식과 문은 자바스크립트를 이해하는데 아주 중요한 요소 중 하나입니다. 자바스크립트 엔진은 코드를 실행할때 식과 문을 구별해서 연산을 처리합니다. 즉, 식과 문만 정확하게 이해한다면 자바스크립트 엔진이 식과 문을 어떻게 구별하는지, 어떻게 처리하는지 대략적으로라도 이해할 수 있습니다. 값 값이란 표현식이 평가되어 생성된 결과를 말합니다, 평가란 쉽게 말해서 식을 해석해서 값을 참조 또는 생성하는 것을 말합니다. 10 + 20 // 30 위의 코드에서는 10 + 20 이라는 식을 평가해서 30이라는 "값"을 생성합니다. 아래의 코드를 확인해보겠습니다. var result = ..