정말 복합적인 일주일이였다. 예전에 배웠던 Linux를 아주 조금 심화된 내용을 배웠고, 알고리즘 문제를 한 단계 올라간 내용과 백앤드 부분인 데이터베이스를 살짝 배웠다. 역시 가장 재밌었던 부분은 데이터베이스 부분이였다. 알고리즘 문제도 기본적인 틀만 알고 있다면 문제 푸는데 어렵지 않았지만, 다시 한번 강조하지만 동료가 정말 중요했던 부분이였다🤨 혼자 공부할 때가 더 잘 되었고 다양한 방식의 코드를 작성해보면서 복습을 하는 과정에서 도움이 많이 되었다.
공부와는 별개로 스터디원들과 함께 작은 프로젝트를 진행하고 있는데 정말 복합적으로 공부를 많이 했던 한 주였다. 배웠던 내용들을 직접 구현해보고 실행시키는데 오류가 발생하고, 데이터를 받아오고 보내는데 완벽하게 정리가 되지 않은 상태에서 코드를 작성하니 복잡해진 부분이 많이 있었다. 하지만 잘못된 부분은 수정하고, 새로 기능을 추가하면서 제대로 실행되는 것을 보니 성취감이 아주 컸다😍 다음에 프로젝트를 진행하게 된다면 어떤 방식으로 시작해야 좋을지 확실하게 알게 되었다. 여러모로 깨우친 부분이 많았던 한 주였다.
11주차 배운 내용 중 정리하고 싶은 내용
파일과 폴더 권한 확인
drwxrwxrwx => d/rwx/rwx/rwx => directory(파일인 경우 -)/owner/group/other
r: read permission. w: write permission, x: execute permission
Symbolic method
Acess class | operator | Acess 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
Permission | Number |
---|---|
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
순열, 조합, 중복순열 모두 같은 로직
순열(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)
: 데이터베이스용 프로그래밍 언어, 데이터베이스에 쿼리를 보내 원하는 데이터를 가져오거나 삽입가능
데이터베이스 관련 용어
중복된 값 제거
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>
Atomicity(원자성): 모든 작업이 전부 성공하거나 전부 실패해서 결과를 예측할 수 있도록 함
부분적 실패 => 전부 실패
Consistency(일관성): 데이터베이스의 상태는 이전과 같이 유효해야 함
유효한 상태는 다를 수 있음 but, 상태에 대한 일관성 변하지 않음
Isolation(격리성, 고립성): 모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 함
트랜잭션이 동시에 실행 or 연속실행시 데이터베이스 상태 동일
Durability(지속성): 트랜잭션이 실행, 오류 발생시도 해당 기록은 영구적이어야 함
1:1관계
: 하나의 레코드가 다른 테이블의 레코드 한개와 연결된 경우1:N관계
: 하나의 레코드가 서로 다른 여러개의 레코드와 연결된 경우N:N관계
: 여러개의 레코드가 다른 테이블의 여러 레코드과 관계 있는 경우자기참조관계