썸네일 [JS] JavaScipt의 변수 # 변수명 작성 규칙 반드시 문자, 달러($), 밑줄(_)로 시작 대소문자 구문 예약어(for, if, function) 사용 불가 카멜 케이스(camelCase): 변수, 객체, 함수 파스칼 케이스(PascalCase): 클래스, 생성자 대문자 스네이크 케이스(SNAKE_CASE): 상수 # 변수 선언 키워드 1. let 블록 스코프(block scope)를 갖는 지역 변수를 선언 재할당 가능 재선언 불가능 초기값 없이 선언 가능 let number = 10 number = 20// 재할당 가능 let num = 10 let num = 20// 재선언은 불가능 2. const 블록 스코프를 갖는 지역변수를 선언 재할당, 재선언 둘 다 불가능 초기값 반드시 필요 const number= 10 number..
썸네일 [SQLD] DB의 구조와 성능 # 슈퍼 타입과 서브 타입 Extended ER 이라고도 부른다. 공통인 부분을 슈퍼 타입, 상속받아 다른 엔터티와 차이가 있는 부분은 서브 타입이라고 함 각각의 속성을 할당해서 수평 분할을 하는 모델을 슈퍼/서브 타입 데이터 모델이라고 함 슈퍼/서브 타입 데이터 모델을 통해.. 정확하게 업무를 표현할 수 있고 물리적 모델링 시 선택의 폭을 넓힐 수 있다. 하지만, 일정한 기준으로 변환해한다 → 아니라면 성능저하의 위험이 있다 ▶ 슈퍼 / 서브 타입 데이터 모델의 변환 기술 변환 기준: 데이터 양, 트랜잭션 유형 1:1 타입: 개별로 발생되는 트랜잭션에 대해서는 개별 테이블로 구성 슈퍼/서브 타입: 슈퍼/서브 타입에 대해 발생되는 트랜잭션에 대해서는 슈퍼/서브 타입 테이블로 구성 All in One 타입..
썸네일 [JS] JavaScript와 DOM # JavaScript를 사용하는 방법 1.html파일 내 Body에 script 태그를 이용함 2. js파일을 만든 후, script: src 태그를 이용 3. 개발자도구 > console에서 직접 입력 → Node.js / Deno등을 통해 바로 할 수도 있음 # DOM = Document Object Model 웹 페이지를 하나의 객체로 보는 것, 프로그래밍 언어가 페이지 구조에 접근할 수 있는 방법을 제공한다 HTML 문서를 자바스크립트가 접근 및 조작할 수 있도록 도와주는 API를 제공하는 인터페이스 → 문서의 요소(element), 속성(attribute), 스타일(style) 등을 접근, 변경할 수 있도록 함 DOM에서 모든 요소, 속성, 텍스트는 하나하나 모두 객체임 최상위에는 docume..
[JS] JavaScript 개요 # 자바스크립트란? 웹 페이지의 동적인 기능을 구현하기 위해 사용되는 프로그래밍 언어 초기에는 브라우저에서 실행되어 웹 페이지를 변환시키기 위해서만 사용 → 프로그래밍 언어로써의 취급 별로였음 실행 환경 == 브라우저 해석기: 자바스크립트 엔진 서버 측에서도 자바스크립트 실행 환경이 필요해짐 같은 언어를 사용해서 생산성 / 일관성을 향상시키기 위해 자바스크립트의 강점(in 비동기 프로그래밍)을 살려서 개발 가능 프론트엔드 개발자들이 백엔드 개발도 가능함(생태계 확장) # 컴파일 언어& 인터프리터 언어 JavaScript는 인터프리터 언어에 해당함(그 중에서도 스크립트 언어) 스크립트 언어란? 기존에 존재하는 소프트웨어를 제어하기 위한 용도로 쓰이는 단어 연극의 대본(Script)이 연기자를 제어하는 것에..
[DB] DB의 관계 종류와 KEY DB의 관계 종류는 크게 세가지로 나눌 수 있다. # 1:1 관계 A 테이블의 하나의 레코드가 B 테이블의 하나의 레코드와 연결된 경우 예를 들어, 각 사용자는 하나의 프로필을 가짐 / 각 주문은 하나의 결제 정보를 가짐 외래키의 위치: 시스템에서 조회가 많은 쪽 # 1:N 관계 A 테이블 하나의 레코드가 B 테이블 여러 레코드와 연결된 경우 예를 들어, 하나의 게시글에는 여러 개의 댓글이 달릴 수 있다 외래키의 위치: N쪽에 있어야 함 # N:M관계 A 테이블 여러 레코드가 B 테이블 여러 레코드와 연결된 경우 예를 들어, 한 게시글에는 여러 명이 좋아요를 누를 수 있고 한 명이 여러 개의 게시글에 좋아요를 누를 수 있다. 외래키의 위치: 중계 테이블을 생성해야 한다 DB에서 특정 레코드를 고유하게 식..
[SQLD] 대용량 데이터에 따른 성능 데이터가 많아지면.. 블록(= 테이블의 데이터 저장 단뒤)의 I/O(입출력) 횟수가 증가하고 그에 따라 디스크 I/O 성능 저하가 일어난다. 이 때 일어나는 두가지 현상 1. 로우 체이닝(Row Chaining): 행 길이가 너무 길어서 여러 블록에 걸쳐 저장되는 현상 2. 로우 마이그레이션(Row Migration): 수정된 데이터가 해당 블록이 아닌 다른 블록의 빈 공간에 저장되는 현상 그래서 이런현상을 방지하기 위해 트랜잭션을 분석해서 적절하게 1:1관계로 분리해서 관리 # 테이블 분할 반정규화 기법 중 하나 수직 분할: 칼럼단위 수평 분할: 행단위 / 파티셔닝 # 파티셔닝(Partitioning) PK에 의해 테이블을 분할하는 방법 논리적으로는 한개의 테이블 / 물리적으로는 여러 데이터 파일에 분..
[SQLD]★반정규화★ # 반정규화란? 데이터를 중복, 통합, 분리하여 성능을 향상시키는 기법 데이터 무결성이 깨질 수 있는 위험을 감수하고 조회속도를 향상 하지만 데이터 모델의 유연성은 낮아짐 half정규화가 아니라 reverse정규화임 # 반정규화를 해야하는 이유? 디스크 I/O 양이 많아서 성능이 저하된 경우 경로가 너무 멀어 JOIN으로 인해 성능이 저하된 경우 다량의 범위를 자주 처리해야하는 경우 칼럼을 계산하여 읽을 때 성능이 저하되는 경우 등등.. # 반정규화의 절차 1. 반정규화 대상 조사 : 데이터 처리 범위, 통계성 등을 확인해서 대상을 조사한다 2. 다른 방법 검토 VIEW 사용: 지나치게 많은 JOIN이 걸리는 경우 클러스터링 or 인덱스 조정: 대량의 데이터처리나 부분처리에 의해 성능이 저하되는 경우 더..
썸네일 [Django] 게시판 + 로그인 + 댓글 + 팔로우 기능의 홈페이지 만들기 https://github.com/gimezi/pjt6_ssafy GitHub - gimezi/pjt6_ssafy: 싸피 관통플젝 6주차 싸피 관통플젝 6주차. Contribute to gimezi/pjt6_ssafy development by creating an account on GitHub. github.com 코드는 깃허브 참조 # 새롭게 배운 것 1. require_http_methods() 메서드 @require_http_methods(["POST"]) 해당 데코레이터로 POST방식으로 접근이 올 때만 실행되도록 할 수 있다. 필요한 이유는 예를 들어, 회원 탈퇴를 한다고 가정하면 정상적인 접근은 페이지에서 주는 회원탈퇴 form을 통해 접근하는 것이지만, 회원탈퇴를 담당하는 url을 입력해..
썸네일 [Django] API 문서화 # OpenAPI Specification(OAS) RESTful API를 설명하고 시각화하는 표준화된 방법 → API에 대한 세부사항을 기술할 수 있는 공식 표준 # drf-spectacular 라이브러리 DRF를 위한OAS를 도와주는 라이브러리 https://drf-spectacular.readthedocs.io/en/latest/readme.html#installation 를 통해 설치해준다 $ pip install drf-spectacular # settings.py INSTALLED_APPS = [ # 추가 'drf_spectacular', ] # 추가 REST_FRAMEWORK = { # YOUR SETTINGS 'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.open..
썸네일 [Django] DRF(2) N:1 Relation 이번엔 게시판에 댓글다는 기능으로 DRF를 N:1 관계에서 어떻게 쓰는지 확인해보자 0. Serialize를 위해 SerializerModel만들어주기 # articles/serializers.py from .models import Article, Comment class CommentSerializer(serializers.ModelSerializer): class Meta: model = Comment fields = '__all__' 1. GET - 모든 댓글 조회 (1) urls.py에서 url부터 추가해주기 # articles/views.py urlpatterns = [ ... path('comments/', views.comment_list),# 추가 ] (2) view 함수 작성 # art..
[SQLD] ★정규화★와 성능 # 정규화 (Normalization) 데이터 분해 과정, 이상현상 제거 반복되는 데이터를 분리하고 각 데이터가 제자리를 잘 찾아가도록 정리하는 과정 ▶ 1차 정규화(1NF) 같은 성격 or 내용인 컬럼이 연속될 때 컬럼을 제거하고 테이블을 생성 즉, 중복되는 속성을 제거하는 작업 1차 정규화를 통해 속성의 원자성을 확보할 수 있다 ▶ 2차 정규화(2NF) 모든 속성은 반드시 기본키 전부에 종속되어야 한다 부분적 함수 종속성을 제거하는 작업 하지만, 1차 정규화 결과 기본키가 한개라면 생략 예를 들어서, 하나의 테이블이 학생 번호, 듣는 강의, 강의실로 이루어져 있을 때 학생 번호 → 듣는 강의 듣는 강의 → 강의실 으로 종속되므로 테이블을 쪼개줘야 한다 ▶ 3차 정규화(3NF) 기본키가 아닌 다른 속성..
[SQLD] 성능 데이터 모델링 # 성능 데이터 모델이란? DB 성능향상을 목적으로 설계단계의 데이터 모델링 때부터 정규화, 반정규화, 테이블 통합, 테이블 분할, 조인구조, PK, FK 등 여러가지 성능과 관련된 사항이 데이터 모델링에 반영될 수 있도록 하는 것 분석 및 설계 단계에서 진행됨 성능 데이터 모델링 시점이 늦어질수록 재업무 비용이 증가 성능을 튜닝하면서 변경이 가능 데이터의 증가가 빠를수록 성능저하에 따른 성능개선비용은 증가 # 고려 사항 및 모델링 순서 정규화 → 용량산정 → 트랜잭션 → 반정규화 → 기타조정 데이터 모델링을 할 때 정규화를 정확하게 수행 DB 용량을 계산해서 정해놓는다(용량산정) DB에 발생되는 트랜잭션의 유형을 파악해 놓는다 용량과 트랙잭션 유형에 따라 반정규화를 수행 이력 모델의 조정, PK/FK조..