인증/보안 - 기초 2: CSRF, Token
·
SE Bootcamp 내용 정리
CSRF(Cross Site Request Forgery) CSRF는 여러가지 보안 취약점 공격 중 하나이다 다른 사이트(cross-site)에서 유저가 보내는 요청(request)을 조작(forgery)하는 것 ex) 이메일에 첨부된 링크를 누르면 내 은행 계좌의 돈이 빠져나감 해커가 직접 데이터를 접근할 수는 없다 → 다른 사이트이기에 response에 직접 접근할 수는 없음 (해커가) CSRF 공격을 하기 위한 조건 * 쿠키를 사용한 로그인 - 유저가 로그인했을 때, 쿠키로 어떤 유저인지 알 수 있어야 함 * 예측할 수 있는 요청/ 파라미터를 가지고 있어야 함 - request에 해커가 모를 수 있는 정보가 담겨 있으면 안됨 (해커로 빙의해) Get 요청으로 CSRF 공격한다면? ex) 고객 A가 ..
인증/보안 - session 기반 인증 구현하기 실습
·
SE Bootcamp 내용 정리
session 기반 인증(session-based authentication) 구현 실습 학습 목표 * 세션의 개념을 이해 -> 접속 상태를 서버가 가지는(stateful) 인증 방식 * 쿠키와 세션은 서로 어떤 관계이며, 각각이 인증에 있어서 어떤 목적으로 존재하는지 이해하기 -> 쿠키는 단순히 무상태성을 보완해주는 도구일 뿐, 인증이 아니다 -> 세션은 인증 과정에 쿠키를 이용해서 인증 작업을 하고 세션을 열어준다고 보면 된다 -> 접속 상태와 권한 부여를 위해 세션 아이디를 쿠키로 전송하므로... * 세션의 한계를 이해 -> 서버에서 인증 정보를 가지므로 서버가 부담을 가짐(성능 저하 이슈) -> 분산에 불리 -> 여전히 쿠키를 사용하는 방식이므로 XSS공격에 취약점 존재 getting starte..
인증/보안 - 기초 1: HTTPS, Hashing, Cookie, Session
·
SE Bootcamp 내용 정리
인증/보안 – 기초 1 HTTPS HTTP + Secure → HTTP 프로토콜 내용을 암호화(보안성) HTTP 요청을 SSL 혹은 TLS 알고리즘을 이용해서 내용을 암호화 TLS는 SSL의 진화버전?이라고 보면 되는데, 통상 같이 부른다 // HTTPS의 특징 * 인증서 * CA * 비대칭키 암호화 인증서(Certificate) 데이터 제공한 서버가 정말로 데이터를 보낸 서버가 맞는지 확인하는 용도 데이터 제공자 신원 보장 도메인 종속 - 도메인 정보가 들어가 있음 기본 로직은 다음과 같다 1. Client가 인증서(domain 정보 포함)와 함께 서버에 요청 2. 서버는 인증서와 함께 응답을 전송 3. Client는 인증서에 작성된 domain과 응답(res) 객체에 작성된 domain을 비교 → d..
데이터베이스 - MVC 패턴 연습
·
SE Bootcamp 내용 정리
데이터베이스 MVC 디자인 연습: cmarket database MVC - 3티어 아키텍쳐에서 주로 사용 일종의 디자인 패턴이며, 디자인 패턴은 아주 많고 유용한 코드 집합이라 보면 된다. * Controller: `비즈니스 로직` 의 관점으로 보면 → 프로그램을 통해서 어떤 문제를 해결할 것인가? → 어떻게 문제를 풀 수 있을지 글로 나열 할 때, 글 하나하나가 `기능`이 되고, 기능이 `비즈니스 로직`이 되고, 로직은 `컨트롤러`로 들어감 * Model: 데이터베이스와 통신하는 역할 * View: 보통 Client의 역할 사전 작업 mySql에 사용할 database 명으로 데이터베이스를 미리 생성하자 > CREATE DATABASE 사용할데이터베이스명; 스키마와 더미 데이터들도 미리 작업 env 파..
데이터베이스 - MVC 패턴 기초
·
SE Bootcamp 내용 정리
데이터베이스 – MVC MVC(Model-View-Controller)란 소프트웨어 설계와 관련된 디자인 패턴으로, 소프트웨어 공학에서의 "흔히 사용되는" 설계 패턴을 의미 → Model과 Controller 사이, 그리고 Model이 데이터베이스와 어떤 방식으로 연결되는지가 중요 ORM: Model을 기술하는 도구 → 데이터베이스 세계와 프로그래밍 언어 사이의 개념의 간극을 줄여 주는 역할 → ORM을 이용하여 SQL 문을 직접 작성하지 않고 엔티티를 객체로 표현할 수 있다 → 이를 통해 느슨하게 연결된, 테스트에 용이한 애플리케이션 개발 가능 {} ↔ ORM ↔ 관계형 DB 객체 학습 목표 * MVC 패턴 - 코드를 구분하여 작성하는 이유 이해하기(MVC 디자인 패턴) - Model, View, Co..
데이터베이스 - 관계형 데이터베이스 보충 내용
·
SE Bootcamp 내용 정리
데이터베이스 보충 내용 1 데이터베이스 정규화(Database Normalization) 데이터베이스 정규화는 데이터베이스 설계와 관련 → 어떻게 설계하느냐에 따라 데이터가 어떻게 저장될지 등 그 구조가 결정됨 다음 3가지 부분을 잘 고려해야 한다 * Data Redundancy(데이터 중복) * Data Integrity(데이터 무결성) * Anomalry(이상 현상) Data Redundancy(데이터 중복) 실제 데이터의 복사본이나, 부분적인 복사본 둘 다 포함하는 뜻 → 데이터베이스 내에 중복이 있을 시 발생할 수 있는 문제점 * 일관된 자료 처리의 어려움(일관성 측면) * 저장 공간 낭비 * 데이터 효율성 감소 Data Integrity(데이터 무결성) 데이터의 수명 주기 동안 정확성과 일관성을..
자료구조/알고리즘 - 중복 순열/순열/조합, DP의 알고리즘 예시
·
SE Bootcamp 내용 정리
중복 순열/순열/조합 조합: 순서 상관x 순열: 순서 상관 o 중복순열: 순서도 상관x, 중복도 상관x 먼저 반복문(for문)만으로 만들어서 생각해보자 for문을 이용한 순열/조합 중복 순열 중복 순열: 3개 중 3개를 뽑아서 중복 순열을 만든다면? → for 반복문을 3중으로 쓰면 된다 (3중 for문) // 3개 중 3개를 뽑는 중복순열의 예 let result=[]; const game = ['rock', 'paper', 'scissors']; for(let i=0;i < game.length; i++){ for(let j=0;j < game.length; j++){ for(let k=0; k< game.length; k++){ result.push([game[i], game[j], game[k]]..
자료구조/알고리즘 - 정규표현식
·
SE Bootcamp 내용 정리
정규 표현식 문자열 관리를 간단하게 해주는 표현식 → 회원 가입과 관련하여 비밀 번호 입력 조건 설정 시에 이용할 수 있다 정규식은 문자열에서 특정한 문자를 찾아내는 도구 라고 정의 가능 → 특정한 규칙을 갖는 문자열로 이루어진 표현식(코딩을 간단화 시킬 수 있음) // 이메일 유효성 검사의 예 let regExp = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i; // 휴대전화 번호 유효성 검사의 예 let regExp = /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/; 중요한 점은 정규 표현식은 알고리즘 문제를 푸는데 적용할 수 있다는 점! 문자열 str 이 ..
자료구조/알고리즘 - 코딩 테스트 2
·
SE Bootcamp 내용 정리
Algorithm with Math 수학과 알고리즘 Math in Programming 컴퓨터 과학과 수학은 통하는 부분이 많다 → 수학을 학습하는 것은 프로그래밍 기본을 탄탄히 하는 것 알고리즘에서 다루는 수학은 기본적으로 크게 어렵지 않음(중학교 수준의 수학) → 최소한의 수학이므로 이 정도는 해 줘야 한다? Algorithm with Math 알고리즘 문제를 풀 때는 문제를 어떻게 이해하고 풀 것인지 전략을 세우는 것이 중요 → 코딩 테스트에서는 단순히 특정 알고리즘을 아는지 묻는게 아니라 특정 기법을 사용해서 풀어봐라는 식의 문제가 출제된다 → 수학적 사고를 통해 컴퓨팅 사고를 할 수 있어야 한다 최소한, GCD/LCM(최대공약수, 최소공배수), 순열/조합, 멱집합에 대한 수학적 개념 및 알고리즘..
자료구조/알고리즘 - 코딩 테스트 1
·
SE Bootcamp 내용 정리
Time Complexity(시간 복잡도) 알고리즘 문제는 해답을 찾는 것도 중요하지만, 그만큼 효율적인 방법으로 해결했는지도 중요하다 → 효율성 = 시간 복잡도 시간 복잡도 알고리즘 문제에서 자주 겪게 되는 문제? → 바로, 시간 복잡도 그 의미는? 입력값의 변화에 따라 연산을 실행할 때, 연산 횟수에 비해 시간이 얼마만큼 걸리는가? 효율적인 알고리즘이란, 입력값이 커짐에 따라 증가하는 시간의 비율을 최소화한 것 이러한 시간 복잡도는 빅-오 표기법으로 나타낸다 Big-O 표기법 시간 복잡도를 표기하는 방법은 아래의 3가지가 있으나 주로 빅-오 표기법을 사용한다 * Big-O(빅-오): 시간 복잡도를 최악의 경우에 대해 나타내는 방법 * Big-Ω(빅-오메가): 최선의 경우 * Big-θ(빅-세타): 중..
SECTION 2 회고
·
SE Bootcamp 내용 정리
지난 SECTION 2에서 학습한 내용? 지난 섹션2에서 배운 내용들을 캘린더를 보면서 복기해보았다... [JS/Node] * 객체지향 자바스크립트 - 클래스형 모듈 작성하기 * 비동기 - Underbar 구현하기(내장 메서드 만들기) - 타이머 API - fs(fileSystem) 모듈 - fetch API [자료구조/알고리즘] * 재귀, 자료구조 - 재귀 함수 기초 - Tree UI, stringfyJSON - Stack, Queue, Graph, Tree, BST, DFS, BFS [HTTP/네트워크] * 기초 - 클라이언트, 서버, 네트워크 기초 - REST API, POSTMAN [React] * 데이터 흐름의 이해와 비동기 처리 - Effect Hook(useEffect) - statesAir..
Linux - 사용 권한과 환경변수
·
SE Bootcamp 내용 정리
사용 권한 학습 목표 * 사용 권한과 소유자에 대한 이해 및 사용 권한 변경하기 - 파일의 소유자와 파일에 적용된 사용 권한 확인하기: ls -l - 파일에 적용된 사용 권한 변경하기: chmod Read, Write, Execute 권한 폴더와 파일의 판별(폴더인지 파일인지?) CLI에서 디렉토리 하나(mkdir 디렉토리명)와 특정 파일을 하나 생성해 보자 ls -al 또는 ls -l 로 권한을 확인해 보자 drwxrwxr-x 2 사용자명 blabla 4096 11월 8 10:23 . -rw-rw-r-- 1 사용자명 blabla 29 11월 8 10:23 helloworld.js 첫 시작이 d로 시작하면 → directory 즉, 폴더라는 뜻 첫 시작이 - 로 시작하면 → 파일이라는 뜻 그 다음부터는 ..