728x90
반응형

전체 글 551

[9장] 소프트웨어 개발 보안 구축

※ Secure SDLC : SDLC에 보안 강화를 위한 프로세스를 포함한 것을 의미 ※ 소프트웨어 개발 보안 요소 기밀성 : 인가된 사용자만 접근이 허용 무결성 : 인가된 사용자만 수정 가능 가용성 : 인가받은 사용자는 시스템 내의 정보와 자원을 언제라도 사용할 수 있다. 인증 부인 방지 : 데이터를 송수신한 자가 송수신 사실을 부인할 수 없도록 송수신 증거를 제공 ※ 시큐어 코딩 : 시큐어 코딩(Secure Coding)은 구현 단계에서 발생할 수 있는 보안 취약점들을 최소화하기 위해 보안 요소들을 고려하며 코딩하는 것 ※ SQL 삽입 : SQL 삽입(Injection)은 웹 응용 프로그램에 SQL을 삽입하여 내부 데이터베이스(DB) 서버의 데이터를 유출 및 변조하고, 관리자 인증을 우회하는 보안 약..

CS/CS 2023.07.16

[7장] 애플리케이션 테스트 관리

※ 애플리케이션 테스트의 기본 원리 파레토 법칙 : 애플리케이션의 20% 코드에서 80% 결함이 발견 살충제 패러독스 : 동일한 TC로 동일한 테스트를 반복하면 더 이상 결함이 발견되지 않는 현상 오류-부재의 궤변 : 소프트웨어의 결함이 모두 제거되었어도 사용자 요구사항을 충족시키지 못하면 소프트웨어 품질이 높다고 평가할 수 없음 ※ 프로그램 실행 여부에 따른 테스트 정적 테스트 프로그램을 실행하지 않고 명세서나 소스 코드를 대상으로 분석하는 테스트 코딩 표준, 코딩 스타일, 코드 복잡도, 남은 결함 등을 발견하기 위함 종류 : 워크 스루, 인스펙션, 코드 검사 등 동적 테스트 프로그램을 실행하여 오류를 찾는 테스트 소프트웨어 개발의 모든 단계에서 테스트 수행 종류 : 블랙박스 테스트, 화이트박스 테스트..

CS/CS 2023.07.16

[OpenSource Contribution] MySQL Replication Protocol (7월 15일(토))

1. replication protocol이 무엇인지 2. replication protocol에 사용되는 이벤트 객체는 C++ 객체로 이루어져 있고, Query_event와 Rows_event로 나뉜다. 해당 이벤트들은 slave db에 넘겨주기 위한 단위이다. 3. 엔진 관점에서 바라보면 Disk에 쓰이기 전 Cache에 담기게 되는데 이를 binary log라고 한다. ※ 여기서 궁금했던 점 : 공부했던 내용들에 의하면 MySQL 엔진에서 스토리지 엔진 중 InnoDB 스토리지 엔진의 버퍼 풀 캐시에 쓰인 후 한 번에 Disk에 쓰이는 것으로 공부했었는데 binary log와 같은 역할을 수행하는 것처럼 보인다. 그렇다면 InnoDB 스토리지 엔진의 버퍼 풀 캐시가 Binary Log와 같은 것인가..

카테고리 없음 2023.07.15

MySQL DISTINCT 처리, 임시테이블이 필요한 쿼리

특정 칼럼의 유니크한 값만 조회하려면 SELECT 쿼리에 DISTINCT를 사용한다. DISTINCT는 MIN(), MAX() 또는 COUNT() 같은 집합 함수와 함께 사용되는 경우와 집합 함수가 없는 경우의 2가지로 구분해서 살펴볼 수 있다. 위 2가지로 구분하는 이유는 각 경우에 DISTINCT 키워드가 영향을 미치는 범위가 달라지기 때문이다. 그리고 집합 함수와 같이 DISTINCT가 사용되는 쿼리의 실행 계획에서 DISTINCT 처리가 인덱스를 사용하지 못할 때는 항상 임시 테이블이 필요하다. ▶ SELECT DISTINCT ... 단순히 SELECT 되는 레코드 중에서 유니크한 레코드만 가져오고자 하면 SELECT DISTINCT 형태의 쿼리 문장을 사용한다. 이 경우에는 GROUP BY와 동..

CS/MySQL 2023.07.14

MySQL 옵티마이저란? MySQL 기본 데이터 처리 [ORDER BY - 소트 버퍼, 정렬 방식]

MySQL에서도 쿼리를 최적으로 실행하기 위해 각 테이블의 데이터가 어떤 분포로 저장돼 있는지 통계 정보를 참조하며, 그러한 기본 데이터를 비교해 최적의 실행 계획을 수립하는 작업이 필요하다. MySQL 서버를 포함한 대부분의 DBMS에서는 옵티마이저가 이러한 기능을 담당한다. ▶ 쿼리 실행 절차 MySQL 서버에서 쿼리가 실행되는 과정은 크게 세 단계로 나눌 수 있다. 사용자로부터 요청된 SQL 문장을 잘게 쪼개서 MySQL 서버가 이해할 수 있는 수준으로 분리(파스 트리)한다. SQL의 파싱 정보(파스 트리)를 확인하면서 어떤 테이블로부터 읽고 어떤 인덱스를 이용해 테이블을 읽을지 선택한다. 두 번째 단계에서 결정된 테이블의 읽기 순서나 선택된 인덱스를 이용해 스토리지 엔진으로부터 데이터를 가져온다...

CS/MySQL 2023.07.12

MySQL B-Tree 인덱스 [2/2]

▶ B-Tree 인덱스를 통한 데이터 읽기 ◎ 인덱스 레인지 스캔 인덱스 접근 방법 중 가장 대표적인 방법으로 가장 빠른 방법 인덱스를 통해 레코드를 한 건만 읽는 경우와 한 건 이상을 읽는 경우를 각각 다른 이름으로 구분하지만 모두 "인덱스 레인지 스캔"이라 표현인덱스 레인지 스캔은 검색해야 할 인덱스의 범위가 결정됐을 때 사용하는 방식이다. 검색하려는 값의 수나 검색 결과 레코드 건수와 관계없이 레인지 스캔이라고 표현한다. 위 그림에서 알 수 있듯 루트 노드에서부터 비교를 시작해 브랜치 노드를 거치고 최종적으로 리프 노드까지 찾아 들어가야만 비로소 필요한 레코드의 시작 지점을 찾을 수 있다. 일단 시작해야 할 위치를 찾으면 그때부터는 리프 노드의 레코드만 순서대로 읽으면 된다. 만약 스캔하다가 리프 ..

CS/MySQL 2023.07.06

MySQL 인덱스(index)와 B-Tree 인덱스 [1/2]

인덱스는 데이터베이스 쿼리의 성능을 언급하면서 빼놓을 수 없는 부분이다. 각 인덱스의 특성과 차이는 상당히 중요하며, 물리 수준의 모델링을 할 때도 중요한 요소가 될 것이다. ▶ 디스크 읽기 방식 인덱스를 시작하기 전 데이터베이스의 성능 튜닝은 어떻게 디스크 I/O를 줄이느냐가 관건이냐이기 때문에 사전 지식으로 "랜덤(Random) I/O", "순차(Sequential) I/O" 방식에 대해 이해해야 한다. ▶ 하드 디스크 드라이브(HDD)와 솔리드 스테이트 드라이브(SSD) 컴퓨터에서 CPU나 메모리 같은 주요 장치는 대부분 전자식 장치지만 하드 디스크 드라이브는 기계식 장치다. 그래서 데이터베이스 서버에서는 항상 디스크 장치가 병목이 된다. 물리적 방식으로 데이터를 읽고 쓰는 HDD보다 플래시 메모리..

CS/MySQL 2023.07.05

[JAVA] StringBuffer, StringBuilder 클래스

문자열을 저장하는 String은 내부의 문자열을 수정할 수 없다. 예를 들어 String의 replace() 메소드는 내부의 문자를 대치하는 것이 아니라, 대치된 새로운 문자열을 리턴한다. String 객체를 + 연산할 경우에도 마찬가지다. String data = "ABC"; data += "DEF"; "ABC"에 "DEF"가 추가되었기 때문에 한 개의 String 객체가 사용되었다고 생각할 수 있지만, String 객체는 내부 데이터를 수정할 수 없으므로 "ABC"에 "DEF"가 추가된 "ABCDEF"라는 새로운 String 객체가 생성된다. 그리고 data 변수는 새로 생성된 String 객체를 참조하게 된다. 문자열을 결합하는 + 연산자를 많이 사용하면 할수록 그만큼 String 객체의 수가 늘어..

JAVA 2023.07.04

MySQL 데이터 압축 (페이지 압축, 테이블 압축)

MySQL 서버에서 디스크에 저장된 데이터 파일의 크기는 일반적으로 쿼리의 처리 성능과도 직결되지만 백업 및 복구 시간과도 밀접하게 연결된다. 디스크의 데이터 파일이 크면 클수록 쿼리를 처리하기 위해서 더 많은 데이터 페이지를 InnoDB 버퍼 풀로 읽어야 할 수도 있고, 새로운 페이지가 버퍼 풀로 적재되기 때문에 그만큼 더티 페이지가 더 자주 디스크로 기록돼야 한다. 그리고 데이터 파일이 크면 클수록 백업 시간이 오래 걸리며, 복구하는 데도 그만큼의 시간이 걸린다. 물론 그만큼의 저장 공간이 필요하기 때문에 비용 문제도 있을 수 있다. 많은 DBMS가 이런 문제점을 해결하기 위해 데이터 압축 기능을 제공한다. MySQL 서버에서 사용 가능한 압축 방식은 크게 테이블 압축과 페이지 압축의 두 가지 종류로..

CS/MySQL 2023.07.03
728x90
반응형