전체 글 (73) 썸네일형 리스트형 DB 정규화 1. 정규화란? 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스 데이터 중복에 의한 이상현상을 해소하는 과정 2. 정규화 종류 ① 1정규형(1NF): 모든 속성은 반드시 하나의 원자값만 가져야 한다. 반복그룹(취미1, 취미2, 취미3)을 가지거나 다중값(축구, 게임, 독서)를 가진다. 이는 1정규형을 위배하는 것이다. 테이블을 분리하여 1:N 관계를 만들어 준다. ② 2정규형(2NF): 부분적 함수종속 제거, 모든 속성은 반드시 모든 기본키에 종속되어야 한다. 기본키 일부에만 종속X 점수는 기본키(강의번호+학번)에 종속적이다. 하지만 이름은 학번만으로도 종속적이다. 이는 2정규형을 위반한다. 새로운 학생을 추가하는 경우 점수에 null값이 들어간다→입력이상 강의를 삭제할 경우.. 이상(Anomaly) 1. 이상이란? 릴레이션에서 일부 속성들의 종속이나 데이터들의 중복으로 인해 데이터 조작 시 불일치가 발생하는 것을 말한다. 즉, 테이블을 설계할 때 잘못 설계하여 데이터를 삭제, 수정, 삽입할 때 논리적으로 오류가 생기는 것을 말한다. 이를 해결하는 것은 후에 포스팅할 '정규화'이다. 2. 이상의 종류 {Student ID, Course ID, Department, Grade} ① 삽입 이상 자료를 삽입할 때 의도하지 않은 자료까지 삽입해야만 자료를 테이블에 추가할 수 있는 현상 ex) 기본키가 {Student ID, Course ID}인 경우 → Course를 수강하지 않은 학생은 Course ID가 없다. 새로운 학생의 Course ID는 Null일 수밖에 없는데, 기본키는 Null이 될 수 없다... SQL vs NoSQL 1. SQL (관계형 DB) 데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다. 데이터는 관계를 통해 여러 테이블에 분산된다. 즉, 스키마를 준수하지 않은 데이터는 테이블에 추가될 수 없다. 하나의 테이블에서 중복없이 하나의 데이터만을 관리하기 때문에 다른 테이블에서 부정확한 데이터를 다룰 위험이 없다. 장점 명확하게 정의된 스키마 데이터 무결성 보장 각 데이터가 중복없이 한번만 저장된다 단점 덜 유연하다. 스키마를 사전에 계획하고 알려야 한다. (추후 수정 어려움) 관계를 맺고 있어서 복잡한 쿼리가 만들어질 수 있다. 수직적 확장만 가능하다. → 관계를 맺고 있는 데이터가 자주 변경될 경우 변경될 여지가 없고 명확한 스키마가 사용자와 데이터에게 중요한 경우 2. NoSQL (비관계형 DB) 스키마.. 트랜잭션의 격리수준 먼저 오류 3가지를 정리하자면, ① Dirty Read: 존재하지 않거나, 롤백되었거나, 저장 위치가 바뀌었을 수도 있는 데이터를 읽는 현상 ② Non-Repeatable Read: 동일한 쿼리문이 2번 이상 수행되었을 때 결과값이 다른 현상 ③ Phantom Read: Non-Repeatable Read의 한 종류로, 컬럼이 없어지거나 생기거나 등의 현상 1. Read Uncommitted 커밋 전의 데이터도 조회할 수 있다. Dirty Read 발생 2. Read Committed 커밋이 완료된 데이터만 조회할 수 있다. Dirty Read 방지 Phantom Read, Non-Repeatable Read 발생 교착 상태가 발생할 수 있다. 3. Repeatable Read 쓰는 동안 읽을 수 없고,.. Injection Injection이란, 악성 사용자가 보안상의 추약점을 이용하여 임의의 sql문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위이다. '여기어때' 홈페이지도 2017년 3월에 해당 공격을 당했다고 한다. 1. 공격 종류 ① 논리적 에러 or 뒤에 있는 구문 1=1 은 항상 true인 값이다. 따라서 항상 결과를 보여주게 된다. ② Union 명령어 원하는 컬럼값까지 한꺼번에 보일 수 있다. 현재 id, passwd까지 같이 보이도록 인젝션했다. ③ Boolean based Injection 참과 거짓만 출력하는 페이지에 공격자가 조작한 쿼리로 인해 db내용을 노출할 수 있다. ④ Time based Injection 값 뒤에 sleep() 함수를 넣어 만약 참이면 sleep.. 수직적 확장과 수평적 분할 1. 수직적 확장(Scale Up) 서버 자체를 증강시켜 처리 능력을 향상시킨다. 구축, 설계가 쉽다. 인프라 비용이 별도로 발생하지 않는다. 하지만 확장성의 한계가 있다. 트래픽 부하로 인한 장애 영향이 커진다. 데이터 갱신이 빈번하게 일어나는 데이터 베이스 서버 등 2. 수평적 분할(Scale Out) 서버 대수를 증가시켜서 처리 능력을 향상시킨다. 지속적인 확장이 가능하다. 분산처리로 장애 가능성이 낮아진다. scale up 보다는 저렴하다. 설계, 구현이 복잡해서 관리 비용이 증가한다.(서버 모두 같은 데이터를 유지해야 한다) 로드 밸런서가 필요하기 때문에 기본적인 직렬화가 존재한다. 높은 병렬성 실현이 쉽고 정합성 유지가 쉬운 경우에 사용한다. 메일 게시판 서버, 데이터 읽기 전용 어플리케이션,.. 웹의 동작 1. 웹의 동작 원리 ①② 사용자가 웹 브라우저를 통해 찾고 싶은 웹 페이지의 URL 주소를 입력함. ③ 사용자가 입력한 URL 주소 중에서 도메인 네임(domain name) 부분을 DNS 서버에서 검색함. ④ DNS 서버에서 해당 도메인 네임에 해당하는 IP 주소를 찾아 사용자가 입력한 URL 정보와 함께 전달함. ⑤⑥ 웹 페이지 URL 정보와 전달받은 IP 주소는 HTTP 프로토콜을 사용하여 HTTP 요청 메시지를 생성함. 이렇게 생성된 HTTP 요청 메시지는 TCP 프로토콜을 사용하여 인터넷을 거쳐 해당 IP 주소의 컴퓨터로 전송됨. ⑦ 이렇게 도착한 HTTP 요청 메시지는 HTTP 프로토콜을 사용하여 웹 페이지 URL 정보로 변환됨. ⑧ 웹 서버는 도착한 웹 페이지 URL 정보에 해당하는 데이터.. CORS 지난 앱잼 때 나를 지독하게도 괴롭혔던...CORS정책에 대해 알아보자. CORS정책에 대해 알기 위해서는 먼저 SOP에 대해서 알아야 한다. 1. SOP Same-Origin Policy의 약자이다. 다른 출처의 리소스를 사용하는 것을 제한하는 정책 방식이다. 클라이언트는 매우 취약한 환경에 놓여있기 때문에 보안에 신경써야 할 필요가 있다. 당장 개발자 도구만 클릭해서 보더라도 어떤 형식으로 구현되어 있는지 다 알 수 있으니.. 하지만 오픈스페이스 환경에서 어떻게 동일 출처의 자원만 사용할 수 있겠는가..따라서 예외 조항을 신설하고, CORS 정책을 지킨 리소스 요청은 허용하기로 했다. 2. Origin 그럼, '출처'는 어떻게 파악할까? 프로토콜, 호스트, 포트를 통해 출처를 판단한다. 이 때 포트번.. 이전 1 ··· 4 5 6 7 8 9 10 다음