본문 바로가기

Programming181

[Security] OAuth 2.0란? ( 개념 + 인증방식 ) OAuth 2.0 웹에서 소셜 로그인 방식은 대부분 OAuth 2.0 방식을 채택하고 있다. 전통적인 인증방식은 서버에서 인증 과정을 처리하게 된다. 자연스럽게 서버의 오버헤드는 증가하게 되고 성능은 떨어지게 된다. 이런 단점을 개선하기 위해 나온게 OAuth 2.0 인증 방식이다. OAuth 2.0은 인증을 위한 표준 프로토콜의 한 종류다. OAuth 2.0 이란 무엇인가? OAtuth 2.0은 기존 인증방식과 달리 인증을 중개해주는 방식이다. 보안이 중요한 리소스에 클라이언트에 접근하는 경우 권한을 제공하는 과정을 단순화하여 제공하고 있다. 이미 사용자 정보를 가지고 있는 소셜 서비스(Google, Meta, Kakao, Naver, Github 등등)에서 인증을 대신 진행해주고, 특정 접근 권한에 .. 2022. 6. 9.
[Algorithm] 삽입 정렬(insert sort) Javascript 구현하기 삽입정렬(Insert Sort)란? 정렬 알고리즘 중 하나다. 데이터들의 위치를 기준으로 좌측에 요소들과 비교를 진행하면서 위치를 찾아나가는 방식이다. 선택 정렬과 다르게 삽입정렬은 좌측 데이터와 비교해야 하기 때문에, 2번째 요소부터 비교하기 시작한다. 만약 좌측 데이터보다 작은 경우 좌측에 데이터를 삽입하고 우측의 데이터들은 우측으로 한칸 밀려난다. 삽입 정렬의 시간복잡도는 O(N^2)이다. 예를 들어 아래 배열이 있다고 가정하자. const arr = [33, 22, 55, 66, 11]; 먼저 2번째 요소인 22부터 비교를 시작한다. 왼쪽 데이터 33과 비교를 진행한 후 22가 작은 데이터기 때문에 큰 데이터 좌측에 22를 삽입하고 나머지 요소는 index가 1씩 증가한다. 다음으로 55를 sta.. 2022. 6. 9.
[Security] JWT 토큰 기반 인증이란? 토큰 기반 인증 서버 사이드에서 사용자를 특정하는 방법은 여러가지다. 그 중 대표적인 방법이 세션 인증이다. 세션 기반 인증 방식은 서버 혹은 DB에 사용자를 특정할 수 있는 세션ID를 생성해서 저장하는 방식이다. 이 후 클라이언트의 cookie에 세션정보를 저장하고, 매 요청시 세션 쿠키를 헤더에 태워서 보내면 서버는 사용자를 인증한다. 세션 방식이 효과적이긴 하지만 분명 단점이 존재한다. 세션 인증 방식을 사용하는 경우 서버에서 사용자의 민감한 요청이 들어올 때 마다 유효한 결과값을 반환하기 위해 세션 인증 절차를 거치게 된다. 즉, 매 요청마다 DB에 접근해야 한다는 것이다. 또한 DB에 세션 정보를 계속 저장하는 것도 서버와 DB 입장에서는 부담이 되는게 사실이다. 세션 인증방식을 대체할 수 있는.. 2022. 6. 8.
[Security] HTTP session이란 ? (session cookie 차이) session이란? session은 네트워크 환경에서 사용자 및 컴퓨터 간 대화를 위한 논리적인 연결 또는 컴퓨터의 프로세스들 사이에 통신하기 위해 메시지를 교환하여 서로를 인식한 이후부터 통신을 마칠 때 까지의 시간을 의미한다. 세션은 통신 주체들 사이에 활성화된 접속이므로 일정 시간이 지나면 세션이 종료되어야 하고, 비인가자에 대한 세션 가로채기(Session Hijaking)을 통제할 필요가 있다. 일반적인 웹 페이지에서 세션을 이용한 통신구조는 아래와 같다. 사용자가 본인의 아이디와 비밀번호를 통해 로그인을 하면 서버는 인증(Authentication)에 성공했다고 판단한다. 인증에 따라 사용자의 적절한 인가(Authorization)이 달라지기 때문에 사용자는 본인에게 인가된 서비스를 마음껏 이.. 2022. 6. 7.
[Security] HTTP Cookie란? Cookie란? 우리가 알고 있기로는 분명 HTTP 프로토콜은 stateless(상태를 가지고 있지 않음) 성질을 가지고 있다. 즉 서버 클라이언트 간 관계에서 서버입장에서는 클라이언트에 대한 정보를 가지고 있지 않아야 한다. 그럼에도 불구하고 장시간 로그인이 유지되고, 내가 담은 물건이 장바구니에서 볼 수 있고, 페이스북에 접속하면 내가 원하는 광고만 뜬다. 왜 그런걸까? Cookie는 서버 사이드에서 클라이언트 정보를 저장하는 방법 중 하나다. 서버는 원하면 언제든지 클라이언트에서 쿠키를 이용해 user의 정보를 가져올 수 있게 된다. 즉 쿠키를 이용한다는 것은 서버 사이드에서 클라이언트에게 데이터를 전송하는 것 뿐만 아니라 클라이언트로부터 정보를 받아오는 것도 포함하게 된다. 쿠키가 전송되는 방식 .. 2022. 6. 7.
[Security] HTTP vs HTTPS 차이 HTTPS 프로토콜 HTTPS(Hyper Text Transfer Protocol Secure Socket Layer)란 HTTP over SSL(TLS) 혹은 HTTP over Secure라고 불린다. HTTPS는 서버와 클라이언트 간 통신하는 과정에서 내용을 SSL || TLS 알고리즘을 사용, 암호화하여 데이터를 전송하는 방식이다. HTTPS는 비대칭 키를 사용한다. SSL vs TLS SSL(Secure Socket Layer)는 서버, 클라이언트 간 인증 및 암호화를 제공하는 프로토콜이다. 1995년 Netscape에 의해 개발되 최초 공개되었다. TLS(Transfer Layser Security)는 SSL 이후 출시되었고, SSL 표준화되면서 TLS이름으로 변경되었다. 기존 클라이언트 서버 .. 2022. 6. 7.
[회고록] 코드스테이츠 블록체인 부트캠프 국비 후기 (Digital Training 과정) 코드스테이츠 부트캠프 그리고 블록체인 코드스테이츠는 온라인 교육기관이다. 온라인 상에서 교육을 진행하는 유명한 곳은 많다. 등등.. 부트캠프 특성상 한번 선택하면 6개월간의 시간이 소비되는 것이기 때문에 현재 직장을 다니고 있으면서 커리어 전환을 생각하거나, 컴공 학생이지만 좀더 실무적인 걸 배우고 취업의 길로 들어서고자 하는 분들이라면 부트캠프를 찾게 된다. 나 또한 마침 시간이 6개월간 생기게 되었고, 마침 코드스테이츠에서 진행하는 부트캠프를 만나게 되었다. 주저 없이 신청했고, 운 좋게 수강생으로 선정되었다. Digital Training 과정으로 수강생으로 모집하고 있었던 과정이었고, 신청자가 100명이 넘었었는데, 정원 45명 선발 기준은 정확히 모르겠다. 원래 정원 초과로 대기 3번이었고 대기.. 2022. 6. 7.
[MongoDB] mongoexport / mongoimport / mongodump / mongorestore 사용법 MongoDB로 관리중인 데이터를 내보내거나 불러와야 하는 경우가 있다. 백업을 위해서 현재 데이터베이스를 JSON 혹은 BSON으로 저장해놓거나, 서버를 이전하는 경우 마이그레이션 과정에서 데이터를 가져와야 하는 경우가 있다. DB파일을 한번에 불러들여와 적용시킬 수 있다. 이 때 사용하는 명령어가 mongoimport / mongoexport다. mongoexport 현재 작업중인 데이터베이스를 파일형태로 외부에 내보내는 명령어다. 대량의 데이터를 내보낼 수 있기 때문에 백업 용도로 많이 사용된다. 기본적인 명령어는 다음과 같다. MongoDB에서는 기본 포트를 27017번을 사용한다. 마치 PostgreSQL에서 5432번을 디폴트로 사용하는 것과 같다. 파일은 굳이 JSON으로 보내지 않더라도 B.. 2022. 6. 3.
[Redux] 리덕스 CRUD ! 정적인 HTML 소스 구성 Redux를 활용해서 CRUD 작업을 진행하기 전, 먼저 정적인 웹 페이지를 구성해준다. 기본적인 Header, Nav, Article 3개의 섹션으로 구분이 되어 있는 간단한 웹페이지다. Redux CRUD hello redux ! Javascript CSS React Create Javasciprt Javascirpt is ... 모듈화(Modularity) 위의 코드들은 변경하기 위해서 많은 리소스가 필요하다. 만약 코드가 수만줄에 다다른다면 관리가 매우 어려워 질 것이다. 따라서 정적인 웹 페이지 소스를 관리하기 용이하도록 모듈화를 진행한다. 현재 동일한 결과를 가지고 있지만, 각 컴포넌트에 변수와 함수를 사용해서 훨씬 편리하게 컴포넌트 관리가 가능해진다. Redux 초.. 2022. 6. 1.
[Redux] Redux란? 리덕스 사용법 What is Redux? Redux란? Redux는 Javascript로 빌드된 앱을 위한 예측 가능한 상태 컨테이너다. Redux는 일관적으로 동작하고, 서로 다른 환경(서버, 클라이언트, 네이티브) 등 모든 환경에서 작동한다. 또한 상태 관리 뿐만 아니라 시간여행형 디버거를 제공한다. 예측이 가능하다는 것은 애플리케이션 내의 컴포넌트들이 가진 결합도를 낮추고 응집도를 올려준다는 말이다. 즉, 각각의 컴포넌트들은 자신이 할일에만 집중하게 되고, 애플리케이션을 관통하고 있는 state 정보는 중앙집중식으로 관리하게 도와주는 툴이다. Redux 구조 Redux의 핵심은 store에 있다. 웹 애플리케이션이 사용자와 상호작용하면서 발생하는 모든 정보들은 store에 집중된다. 임의의 방법으로 store에 .. 2022. 6. 1.
[Database] MongoDB operators list, 연산자 종류 사용법 비교 연산자 비교 연산자는 지정한 값을 비교하는 연산자다. { : {:}} $eq(Equal to): $gt(Greater Than) $gte(Greator Than or Equal to) $ne(Not Equal to) $lt(Less Than) $lte(Less Than or Equal to) $gte tripduration이 1000 보다 크거나 같은 Document들을 추출한다. db.trips.find({"tripduration":{"$gte": 1000}}).limit(3); { _id: ObjectId("572bb8222b288919b68abf5f"), tripduration: 2321, 'start station id': 3167, 'start station name': 'Amsterdam.. 2022. 5. 31.
[Database] MongoDB CRUD ! Create MongoDB의 모든 Document들은 고유한 값인 "_id"를 가진다. _id 필드 값은 Document를 구별한 역할을 수행한다. Document 내부의 필드 값이 동일한 경우에도 _id 값이 다를 경우 서로 다른 Document가 된다. 반대로 필드값이 다르더라도 _id값이 동일하면 동일한 Document로 간주된다. 개별 Document들은 고유한 _id 값을 가지고 있어야 한다. 새로운 Document를 생성할 때 일반적으로 ObjectId 타입(12byte, 24char)을 값으로 사용한다. 물론 임의로 고유한 값을 생성해서 사용할 수도 있다. 만약 Document를 추가할 때 _id 필드와 값을 명시하지 않으면 자동으로 _id필드가 생성되면서 ObjectId 타입이 할당된다. .. 2022. 5. 31.
[Database] MongoDB Document 데이터 BSON JSON 형식 차이점 MongoDB Document MongoDB에서 Document란 객체와 유사하게 Field ~ value로 데이터를 저장하고 구성한다. Document에서 필드는 데이터의 고유한 식별자가 되고, 값은 식별자와 관련된 데이터를 의미한다. 이 처럼 field~value로 묶인 Document 모음을 Collection이라고 한다. 데이터베이스는 여러개의 Collection으로 구성된다. Collection은 MongoDB의 Document로 구성된 저장소다. Document 간 공통된 Field가 존재할 수 있고, 한개의 데이터베이스에는 많은 Collection이 존재한다. Collection 마다 많은 Document가 존재한다. { : , : , "name" : "About-Tech", "title" .. 2022. 5. 31.
[Database] MongoDB란? NoSQL, 도큐먼트 데이터베이스, cluster replica set Instance MongoDB란? MongoDB는 대표적인 NoSQL Document 데이터베이스다. 테이블 단위로 저장하는 SQL 기반 관계형 데이터베이스와는 다르게 문서처럼 데이터를 저장 및 관리한다. 일반적으로 Document 데이터베이스에서의 데이터는 JSON 유사 형식으로 데이터를 문서화 한다. 개별 데이터는 Field ~ Value 형태로 저장되며, Collection이라고 불리는 그룹으로 묶어서 관리한다. NoSQL 기반 비관계형 데이터베이스를 사용하는 경우 ① 비구조적인 대용량 데이터를 저장하는 경우 NoSQL 데이터베이스는 관계를 중시하는 SQL 데이터베이스에 비해 자유로운 형태로 데이터 저장이 가능하다. 따라서 새로운 데이터 유형을 추가해서 사용할 수 있다. 소프트웨어 개발 과정에서 정형화되지 않은 대.. 2022. 5. 31.
[Database] 3개 이상 테이블 LEFT RIGHT JOIN 하기 (GROUP BY 사용) SQL JOIN JOIN SQL은 2개 이상의 테이블의 열(records)를 연결시키는 SQL 명령어다. 예를 들어 아래 2개의 테이블이 있다. 한명의 Customer는 여러개의 Order을 가질 수 있지만, Order는 여러명의 Customer가 공유할 수 없다. 따라서 1:N의 관계다. order 테이블의 customerID는 customer 테이블의 customerID를 가리키고 있다. 두 테이블의 관계는 customerID로 성립된다. 이 경우 INNER JOIN 쿼리문을 사용해서 두 테이블에 공통적으로 매칭되는 데이터를 추출할 수 있다. SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate FROM Orders INNER JOIN Cu.. 2022. 5. 30.