SQL Injection 데이터베이스를 손상시킬 수 있는 코드 주입 기술 웹 페이지 입력을 통해 SQL 문에 악성코드를 배치하는 가장 일반적인 웹 해킹 기술 중 하나이다. 일반적으로 사용자의 사용자 이름/사용자 ID와 같은 입력을 요청할 때 발생하며 이름/ID 대신 사용자가 DB에서 무의식적으로 실행할 SQL 문을 제공한다. 1 = 1 은 항상 True SQL 쿼리의 WHERE 절에 삽입되어 항상 참인 조건을 만들어 모든 레코드를 선택하도록 유도하는 방법 예를 들어, 다음과 같은 SQL 쿼리가 있다고 가정: SELECT * FROM users WHERE username = 'admin' AND password = '12345'; 이 쿼리에서 "1 = 1"을 주입하여 WHERE절을 조작하면 다음과 같이 쿼..
조인 (Join) 데이터베이스에서 두 개 이상의 테이블을 연결하여 하나의 결과 집합으로 결합하는 연산 테이블 간의 관계를 활용하여 데이터를 효과적으로 검색하고 조작하는 데 사용된다. INNER JOIN 두 테이블 간의 일치하는 행만 반환 = 교집합 그냥 JOIN 을 하면 INNER JOIN 과 같은 결과가 나온다. ex) 고객 정보와 주문 정보가 각각 다른 테이블에 저장되어 있는 경우, 두 테이블의 정보를 결합하여 해당 고객의 주문 내역을 조회하는 경우에 사용 SELECT * FROM 고객정보 INNER JOIN 주문정보 ON 고객정보.고객ID = 주문정보.고객ID WHERE 고객정보.고객ID = '고객ID값'; LEFT OUTER JOIN = LEFT JOIN 왼쪽 테이블의 모든 행을 포함하며, 오른쪽..
기수 정렬 (Radix Sort) 낮은 자릿수부터 정렬하는 방식 시간 복잡도 : O(dn) → d: 최대 자릿수 장점 각 원소 간의 비교 연산을 하지 않아 빠르다. 문자열, 정수 정렬 가능 단점 자릿수가 없는 것은 정렬할 수 없다. (ex. 부동 소숫점) 기수 테이블을 위한 메모리가 필요하다. 계수 정렬 (Counting Sort) 숫자끼리 비교하지 않고 카운트를 세서 정렬하는 방식 카운팅을 위한 메모리 필요 시간 복잡도 : O(n + k) → k: 정렬 대상 데이터 중 최댓값
이 글은 '스프링 부트 핵심 가이드 - 스프링 부트를 활용한 애플리케이션 개발 실무' 책을 통해 학습한 내용을 정리한 글입니다. 09장. 연관관계 매핑 연관관계 매핑 종류와 방향 One To One : 일대일(1:1) One To Many : 일대다(1:N) Many To One : 다대일(N:1) Many To Many : 다대다(N:M) 단방향 : 두 엔티티의 관계에서 한쪽의 엔티티만 참조하는 형식 양방향 : 두 엔티티의 관계에서 각 엔티티가 서로의 엔티티를 참조하는 형식 JPA와 데이터베이스의 차이 데이터베이스 : 두 테이블의 연관관계를 설정하면 외래키를 통해 서로 조인해서 참조하는 구조 JPA : 엔티티 간 참조 방향을 설정 연관관계가 설정되면 한 테이블에서 다른 테이블의 기본값을 외래키로 갖게 ..
파일 시스템 (File System) 파일이나 자료를 쉽게 발견 할 수 있도록 유지, 관리하는 방법 사용자 영역이 아닌 커널 영역에서 동작 파일을 빠르게 읽기, 쓰기, 삭제 등 기본적인 기능을 원활히 수행하기 위한 목적 파일 시스템 역할 파일 관리 : 파일 저장, 참조, 공유 보조 저장소 관리 : 저장 공간 할당 파일 무결성 메커니즘 : 파일이 의도한 정보만 포함하고 있음을 의미 접근 방법 : 저장된 데이터에 접근할 수 있는 방법 제공 파일 시스템 개발 목적 하드디스크를 효율적으로 이용하고 하드디스크와 메인 메모리의 속도 차이를 줄이기 위해 파일 관리 파일 시스템 구조 블록(Block) 파일 시스템의 최소 저장 단위 각 블록은 고유한 주소 또는 인덱스를 가진다. 파일 데이터와 메타데이터가 포함된다. 파일..
메인 메모리 컴퓨터 시스템에서 중앙 처리 장치(CPU)가 직접 접근하여 데이터와 명령어를 저장하고 읽어들이는 주 기억장치이다. 프로세스가 실행되기 위해서는 메인 메모리에 적재되어야 한다. 빠른 접근 속도를 제공하며, 프로그램 실행 속도와 성능에 직접적인 영향을 미친다. 전원이 종료되면 데이터가 지워지는 휘발성 메모리이다. MMU (Memory Management Unit) 주 기억장치인 메인 메모리의 관리를 담당하는 장치 CPU와 메인 메모리 사이에서 동작하며, 주소 변환과 메모리 보호 기능을 수행한다. 주소 변환(Address Translation) 프로세스는 가상 주소(Virtual Address)를 사용하여 메모리에 접근한다. 이때, MMU는 가상 주소를 실제 물리 주소(Physical Addres..
Thrashing 메모리 영역에 접근할 때 페이지 폴트가 지나치게 많이 일어나는 현상 이는 프로세스가 실제 작업보다 페이지 교체 작업에 더 많은 시간을 소비하게 되어 CPU 이용률이 급감하고 성능이 저하되는 결과를 가져온다. Thrashing 발생 이유 다중 프로그래밍 정도가 높아짐에 따라 CPU 이용률이 높아지게 된다. CPU 이용률이 최대값에 도달했을 때, 다중 프로그래밍 정도가 그 이상으로 커지면 쓰레싱이 발생하고, CPU 이용률이 급격히 떨어진다. 운영체제는 CPU 이용률을 감시하며, CPU 이용률이 너무 낮아지면 새로운 프로세스를 추가하여 다중 프로그래밍 정도를 높이게 된다. 이때 전역 페이지 교체 알고리즘을 사용하여 어떤 프로세스의 페이지인지에 대한 고려없이 교체를 수행한다. 그러나, 만약 교..
힙 정렬 (Heap Sort) 힙 자료구조를 기반으로 하는 정렬 알고리즘 시간복잡도 : O(nlogn) 공간복잡도 : O(n) 장점 : 효율적이며 추가적인 메모리 공간이 불필요하다. 단점 불안정한 정렬이다. 힙 자료구조를 구성하고 유지하기 위해 추가적인 구현이 필요하다. 루트 노드에서 최댓값 또는 최솟값을 추출하고 배열의 마지막 요소와 교환하는 과정을 반복하기 때문에 요소들의 이동 횟수가 많을 수 있다. 힙 정렬 프로세스 배열을 힙으로 만들기 (Max Heap 또는 Min Heap 구성) Bottom-up 방식으로 시작 주어진 배열을 이진 트리로 간주하고, 가장 마지막 레벨의 부모 노드부터 시작하여 루트 노드까지 차례대로 아래로 내려가며 힙의 특성을 만족하도록 조정 (Heapify 과정) 최대 힙 또는 ..
병합 정렬 (Merge Sort) = 합병 정렬 분할 정복(Divide and Conquer) 방식을 사용하여 정렬을 수행하는 알고리 배열을 계속 분할해서 길이가 1이 되도록 만들고, 인접한 부분끼리 크기를 비교하여 정렬하면서 합병하는 방식 시간복잡도 : O(nlogn) 공간복잡도 : O(n) 병합 정렬 기본 프로세스 분할(Divide) : 정렬할 배열을 반으로 나눈다. 이를 위해 배열의 중간 지점을 찾고, 중간을 기준으로 왼쪽과 오른쪽 부분 배열로 나눈다. O(logn) 정복(Conquer) : 나누어진 부분 배열에 대해 재귀적으로 정렬을 수행한다. 이 단계에서는 분할된 부분 배열이 단일 원소로 이루어질 때까지 계속해서 재귀 호출을 수행한다. 병합(Merge) : 정렬된 부분 배열을 병합하여 전체 배열..
퀵 정렬 (Quick Sort) 분할 정복(Divide and Conquer) 방식을 사용하여 정렬을 수행하는 알고리즘 임의의 값(pivot)을 선택하고 피벗을 기준으로 배열을 분할한다. 분할된 부분 배열은 피벗을 기준으로 작은 값들과 큰 값들로 구분되며 각 부분 배열에 대해 동일한 과정을 반복하여 재귀적으로 정렬을 수행한다. 왼쪽/오른쪽/중앙을 고른다. 최솟값 또는 최댓값을 기준 값으로 정하지 않기 위해서 3개의 값을 임의로 정해서 그 중 중앙값을 고른다. 시간복잡도 : 기준 값이 최솟값 또는 최댓값으로 지정되는 경우는 O(n^2) 이지만 평균적으로는 O(nlogn) 이다. 공간복잡도 : O(nlogn) 장점 속도가 빠르다. 평균적으로 O(nlogn)의 시간 복잡도를 가지며, 다른 일반적인 정렬 알고리..