코드스테이츠 11주차 -[Linux] 심화 / [자료구조/알고리즘] 코딩 테스트 준비 / [데이터베이스] 관계형 데이터베이스

엄혜진·2021년 8월 28일
0

CodeStates

목록 보기
11/15
post-thumbnail

정말 복합적인 일주일이였다. 예전에 배웠던 Linux를 아주 조금 심화된 내용을 배웠고, 알고리즘 문제를 한 단계 올라간 내용과 백앤드 부분인 데이터베이스를 살짝 배웠다. 역시 가장 재밌었던 부분은 데이터베이스 부분이였다. 알고리즘 문제도 기본적인 틀만 알고 있다면 문제 푸는데 어렵지 않았지만, 다시 한번 강조하지만 동료가 정말 중요했던 부분이였다🤨 혼자 공부할 때가 더 잘 되었고 다양한 방식의 코드를 작성해보면서 복습을 하는 과정에서 도움이 많이 되었다.
공부와는 별개로 스터디원들과 함께 작은 프로젝트를 진행하고 있는데 정말 복합적으로 공부를 많이 했던 한 주였다. 배웠던 내용들을 직접 구현해보고 실행시키는데 오류가 발생하고, 데이터를 받아오고 보내는데 완벽하게 정리가 되지 않은 상태에서 코드를 작성하니 복잡해진 부분이 많이 있었다. 하지만 잘못된 부분은 수정하고, 새로 기능을 추가하면서 제대로 실행되는 것을 보니 성취감이 아주 컸다😍 다음에 프로젝트를 진행하게 된다면 어떤 방식으로 시작해야 좋을지 확실하게 알게 되었다. 여러모로 깨우친 부분이 많았던 한 주였다.


11주차 배운 내용 중 정리하고 싶은 내용

[Linux] 심화


  • 파일과 폴더 권한 확인
    -> ls-l로 진행, 명령어 chmod로 폴더나 파일의 읽기, 쓰기, 실행 권한 변경 가능
    -> If, OS에 로그인한 사용자와 폴더나 파일의 소유자가 다른 경우 sudo를 이용

        drwxrwxrwx => d/rwx/rwx/rwx => directory(파일인 경우 -)/owner/group/other
        r: read permission. w: write permission, x: execute permission

  • Symbolic method
Acess classoperatorAcess type
u(user)+ (add acess)r (read)
g(group)- (remove access)w (write)
o(other)= (set exact access)x (execute)
a(all)

ex) chmod g-x filename chmod a=rw hello.js chmod a+rx hi.js

  • Absolute form
PermissionNumber
Read (r)4
Write (w)2
Execute (x)1

ex) chmod 744 hello.js chmod 310 hi.js


  • 터미널에 export로 환경변수 확인 & 추가 가능 : export check="well"
  • echo와 환경변수 입력 시 값 확인 가능 : echo $check
  • dotenv 설치 시 자바스크립트에서 환경변수 사용 가능 : npm init => npm i dotenv
  • Node.js에서 환경변수 영구 적용 : .env


[자료구조/알고리즘] 코딩 테스트 준비


  • 순열, 조합, 중복순열 모두 같은 로직

    1. 하나의 수를 선택한다
    2. 선택한 것을 제외하고 남은 배열에서 n-1개를 선택 => 설정과정 차이만 존재

순열(nPr)

function permutation (arr, selectNum) {
  let result = [];
  if (selectNum === 1) return arr.map(el => [el])
  
  arr.forEach((v, idx, arr) => {
    const fixer = v
    const restArr = arr.filter((_, index) => index !== idx)
    const permuationArr = permutation(restArr, selectNum-1)
    const combineFixer = permuationArr.map(el => [fixer, ...el])
    result.push(...combineFixer)
  })
  return result
}





중복순열(nπr)

function permutation (arr, selectNum) {
  let result = [];
  if (selectNum === 1) return arr.map(el => [el])
  
  arr.forEach((v, idx, arr) => {
    const fixer = v
    const restArr = arr
    const permuationArr = permutation(restArr, selectNum-1)
    const combineFixer = permuationArr.map(el => [fixer, ...el])
    result.push(...combineFixer)
  })
  return result
}





조합(nCr)

function combination (arr, selectNum) {
  let result = [];
  if (selectNum === 1) return arr.map(el => [el])
  
  arr.forEach((v, idx, arr) => {
    const fixer = v
    const restArr = arr.slice(idx+1)
    const combinationArr = combination(restArr, selectNum-1)
    const combineFixer = combinationArr.map(el => [fixer, ...el])
    result.push(...combineFixer)
  })
  return result
}





멱집합(2^n)

const subsets=(nums) => {
  const res = []
  const dfs = (start = 0, arr = []) => {
    res.push(arr)
    for(let i = start; i<nums.length; i++) {
      dfs(i+1, [...arr, nums[i]])
    }
  }
  dfs()
  return res
}





최대공약수(GCD)

const gcd = (a, b) => a % b === 0 ? b : gcd(b, a % b)





최소공배수(LCM)

const lcm = (a, b) => a*b/gcd(a, b)



[데이터베이스] 관계형 데이터 베이스


  • SQL(Structured Query Language) : 데이터베이스용 프로그래밍 언어, 데이터베이스에 쿼리를 보내 원하는 데이터를 가져오거나 삽입가능

  • 데이터베이스 관련 용어

    • CREATE DATABASE (TABLE)
    • DROP DATABASE (TABLE)
    • TRUNCATE TABLE => 복구 불가
    • DELETE TABLE (WHERE)
    • ALTER TABLE (ADD, DROP)

중복된 값 제거
SELECT DISTINCT country FROM Customers



업데이트
UPDATE Customers
SET City='Oslo'



제거
DELETE FROM Customers
WHERE Country = 'Norway'



최대, 최소, 평균, 합계
SELECT MIN (Price)	=> MAX, AVG, SUM
FROM Products



특정 값 조건
SELECT * FROM Customers
WHERE NOT City ='Berlin'



데이터 갯수
SELECT COUNT(*)
FROM Products
WHERE Price = 18

             
             
특정 단어 배열 조건
SELECT * FROM Customers
WHERE City LIKE 'a%'	=> '[acs]%', '[a-x]%', '_a%'
             

             
             
정렬             
SELECT * FROM Customers
ORDER BY City DESC

             
             
특정 값 여러개 설정             
SELECT * FROM Customers
WHERE Country IN ('Korea', 'USA')



범위 지정
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20



별칭
SELECT *
FROM Customers AS Consumers



결합
SELECT * 
FROM orders 
LEFT JOIN Customers 
ON orders.CustomerID = Customers.CustomerID



그룹화
SELECT COUNT(CustomerID),
Country
FROM Customers
GROUP BY Country




<SELECT문의 실행순서>
  FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY
           



  • 관계형 데이터베이스 / 비관계형 데이터베이스
관계형데이터베이스(SQL) : 테이블의 구조와 데이터 타입을 사전에 정의. 알맞은 형태의 데이터만 삽입 가능
		      행과 열로 구성된 테이블에 데터 저장
		      원하는 정보를 쿼리할 수 있음 => 스키마 뚜렷 (테이블 간의 관계를 직관적 파악)




비관계형데이터베이스(NoSQL) : 데이터가 고정되어 있지 않은 데이터베이스
			 데이터를 읽어올 때 스키마에 따라 데이터를 읽어옴

             

             
             
<관계형데이터베이스 기본키워드>
  
  - 데이터(data): 각 항목에 저장되는 값

  - 테이블(table or relation): 사전에 정의된 열의 데이터 타입대로 작성된 데이터가 행으로 축적
  
  - 칼럼(column or field): 테이블의 한 열을 가르킴
  
  - 레코드(record or tuple): 테이블의 한 행에 저장된 데이터
  
  - (key): 테이블의 각 레코드를 구분할 수 있는 값. 각 레코드마다 고유한 값 존재
	    기본키(Primary key) / 외래키(Foreign key) 



  • 트랜잭션: 여러개의 작업을 하나로 묶은 실행 유닛(모든 작업을 완료 -> 정상적 종료)
                    데이터베이스 트랜잭션은 ACID 특성

<ACID>

Atomicity(원자성): 모든 작업이 전부 성공하거나 전부 실패해서 결과를 예측할 수 있도록 함
		  부분적 실패 => 전부 실패

          
Consistency(일관성): 데이터베이스의 상태는 이전과 같이 유효해야 함
		    유효한 상태는 다를 수 있음 but, 상태에 대한 일관성 변하지 않음

            
Isolation(격리성, 고립성): 모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 함
			트랜잭션이 동시에 실행 or 연속실행시 데이터베이스 상태 동일

            
Durability(지속성): 트랜잭션이 실행, 오류 발생시도 해당 기록은 영구적이어야 함



  • 1:1관계 : 하나의 레코드가 다른 테이블의 레코드 한개와 연결된 경우
  • 1:N관계 : 하나의 레코드가 서로 다른 여러개의 레코드와 연결된 경우
  • N:N관계 : 여러개의 레코드가 다른 테이블의 여러 레코드과 관계 있는 경우
  • 자기참조관계

0개의 댓글