본문 바로가기

Study/개발일지

[백엔드TIL] 세션과 토큰그리고 인증과 인가 (69일차) 인증과 인가 세션기반 인가와 토큰기반 인가에 대해 알아보기 이전에 먼저, 인증과 인가가 무엇인지 부터 알아야할 필요가 있다. 인증과 인가를 같거나 비슷한 개념이라고 생각하는 사람들이 많을텐데, 엄밀하게는 서로 다른 개념이다. 인증과 인가는 요약하자면 시스템의 자원을 적절하고 유효한 사용자에게 전달하고 공개하는 방법이다. 인증 (Authentication) 인증은 쉽게 말하자면, 로그인 이다. 클라이언트가 자기자신이라고 주장하고 있는 사용자가 맞는지를 검증하는 과정이다. 예를 들어 로그인 화면에서 내가 유저 아이디를 USER1 로 입력하고 패스워드를 입력해 제출하면, 서버에서는 내가 진짜로 USER1 이라는 유저가 맞는지 확인한다. 인가 (Authorization) 인가는 인증 작업 이후에 행해지는 작업으.. 더보기
[백엔드TIL] 시간복잡도에 대한 이해 (68일차) CPU 시간자원이란?컴퓨터는 한정된 CPU를 여러 프로세스가 나누어서 사용한다고 했는데요. 이것을 효율적으로 나누어서 사용하기 위해 CPU 스케쥴러를 통해 시간자원을 관리합니다.네트워크에서 타임아웃(Timeout)은 장치나 프로그램이 연결을 중단하기 전까지의 응답 시간을 의미합니다.- 빅오표기법 - 시간복잡도 함수에서 상대적으로 **불필요한 연산을 제거**하여 알고리즘의 분석을 조금 더 간편하게 할 목적으로 시간복잡도를 표기하는 방법입니다. - Big-O(빅-오) ⇒ 상한 점근** - Big-Ω(빅-오메가) ⇒ 하한 점근** - Big-θ(빅-세타) ⇒ 그 둘의 평균**1. O(1)- **입력값의 크기가 아무리 커져도 즉시 출력값을 얻어낼 수 있다.** - **예를 들어 arr의 길이가 100만이라도, .. 더보기
[백엔드WIL] Redis ( Remote Dictionary Server ) (14주차) Redis ( Remote Dictionary Server ) 오픈소스로 key-value 기반의 인-메모리 데이터 저장소이다. 따라서 key-value 기반이라 쿼리를 날릴 필요 없이 결과를 바로 가져올 수 있고 디스크에 데이터를 쓰는 구조가 아니라 메모리에서 데이터를 처리하기 때문에 속도가 매우 빠르다. (DB를 조회하는 것보다 빠르다.) 유명가수의 티케팅을 웹에서 한다고 가정해보자. 티켓팅이 열리는 순간 엄청난 양의 데이터가 DB에 쓰기 위해 몰리게 된다. 이때 DB 에러가 발생하여 결제가 되지 않는다면 엄청난 손해를 발생할 수 있다. 이때 해결책으로 레디스의 캐시를 사용한다. 하나씩 로직을 보자. Look aside cache(조회 로직)을 보면, 클라이언트가 웹서버에 요청을 하면 웹서버는 먼저 .. 더보기
[백엔드TIL] 공간복잡도에 대한 이해 (67일차) 프로그램 복잡도 프로그램 계산 복잡도는 다음 두 가지 척도로 표현될 수 있음 시간 복잡도: 얼마나 빠르게 실행되는지 공간 복잡도: 얼마나 많은 저장 공간이 필요한지 좋은 프로그램은 실행 시간도 짧고, 저장 공간도 적게 쓰는 프로그램 (=알고리즘) 통상 둘 다를 만족시키기는 어려움 시간과 공간은 반비례적 경향이 있음 최근 대용량 시스템이 보편화되면서, 공간 복잡도보다는 시간 복잡도가 우선 그래서! 알고리즘은 시간 복잡도가 중심 하지만, 공간 복잡도는 기본이기 때문에 기본이 안되서 떨어지는 경우도 많습니다! 공간 복잡도와 시간 복잡도 모두 빅 오 표기법으로 표현한다. = O(n) 1) O(n) 공간 복잡도 예시 1️⃣ n! 팩토리얼 구하기 재귀 함수를 통해서 구현하므로 변수 n에 따라서 변수 n이 n개가 만.. 더보기
[백엔드TIL] Https, SSL에 대한 이해 (66일차) HTTPS 개요 Hypertext Transfer Protocol Secure 의 약자 HTTP 는 전송되는 요청/응답 정보가 기본적으로 암호화 되지않아서 보안정보 도난의 위험이 있음 이걸 해결하기 위해 **SSL(보안 소켓 계층)**을 사용 SSL은 서버와 브라우저 사이에 안전하게 암호화된 연결을 만들 수 있게 도와주고, 서버와 브라우저가 보안정보를 주고받을때 해당 정보가 도난당하는 것을 막아줌 Secure Sockets Layer 의 약자 Netscape 사에서 웹 서버와 웹 브라우저간의 보안을 위해 만든 프로토콜 (규칙) 대칭키와 비대칭키 기반으로 사용함 SSL 인증서는 클라이언트와 서버간의 통신을 제3자가 보증해주는 전자화된 문서입니다. 클라이언트가 서버에 접속한 직후에 서버는 클라이언트에게 이 .. 더보기
[백엔드TIL] 객체지향 프로그래밍 (66일차) 객체지향 프로그래밍이란 무엇이고 어떻게 활용할 수 있나요? 먼저, 객체는 실제 세계에서 존재하는 사물이나 개념 등을 프로그래밍에서 표현한 것입니다. 객체 지향 프로그래밍은 데이터와 해당 데이터를 처리하는 메소드를 하나로 묶어서 객체를 만들고, 이러한 객체들이 서로 상호작용하면서 프로그램을 구성하는 것입니다. 객체 지향 프로그래밍은 코드의 재사용성과 유지보수성을 높이는 등 많은 장점을 가지고 있습니다. 객체지향 프로그래밍에서는 데이터와 이를 처리하는 메소드를 하나의 단위로 묶어서 클래스라는 개념으로 정의합니다. 클래스는 객체를 생성하기 위한 객체가 가져야할 속성과 행위르 정의합니다. 객체지향 프로그램의 특징 중 하나는 상속입니다. 상속은 부모 클래스의 특성을 물려받는 개념으로 이미 만들어진 클래스를 상속받.. 더보기
[백엔드TIL] github Actions 개념 (65일차) 도입 배경 1. #PR 을 올림 2. #코드리뷰 완료 3. Merge 시킴 4. development 브랜치를 빌드 & 배포 5. development 테스트 후 통과 6. master 브랜치로 머지 후 빌드 & 배포 ​ 이런방식으로 개발을 하는데, 4번 dev 브랜치에 머지된 코드를 배포하기전 빌드를 하면 타입스크립트 에러가 난다거나 컴파일에러가 나는 경우가 종종 발생했다. 사실 PR을 올리기전에 개발자가 각자 build를 해보고 올리면 좋으려만 ... 하고 있었는데 ​ #github 에서 #Action이라는 기능이 추가된 것이다. ​ 그래서 우리 프로젝트에도 PR을 올리면 #CI (npm run build 실행)가 돌도록 적용해 보았다. ​ 적용 방법 ​ 한줄 요약 .github/workflows/n.. 더보기
[백엔드TIL] 비트와 바이트 개념그리고 http와 https (64일차) cs 공부 비트는 컴퓨터에서 정보를 표현하는 가장 기본적인 단위입니다. 비트는 "binary digit"의 줄임말로, 이진수 체계에서 0과 1 두 가지 값을 가질 수 있는 최소한의 단위입니다. 비트는 컴퓨터의 모든 데이터를 표현하는 데 사용됩니다. 텍스트, 숫자, 이미지, 음악, 비디오 등 모든 종류의 정보는 비트로 변환되어 저장되고 처리됩니다. 컴퓨터는 비트를 이해하고 다룰 수 있는 회로와 알고리즘을 사용하여 정보를 처리하고 표현합니다. 바이트는 컴퓨터에서 데이터를 저장하고 처리하는 데 사용되는 단위입니다. 바이트는 여러 개의 비트를 모아놓은 형태로, 보통 8개의 비트로 이루어져 있습니다. 컴퓨터 메모리는 주로 바이트 단위로 관리됩니다. 메모리의 각 주소는 바이트 단위로 접근되며, 프로그램이나 데이터는.. 더보기
[백엔드스터디WIL] Refresh Token을 쓰는 이유 (13주차) Refresh Token을 사용하는 이유 access token은 발급된 이후, 서버에 저장되지 않고 토큰 자체로 검정을 하며 사용자 권한을 인증한다는 stateless(무상태)라는 특징이 있는데요. 때문에 access token이 탈취되면 토큰이 만료되기 전까지 토큰을 가진 사람은 누구나 권한 인증이 가능해진다는 문제점이 발생할 수 있으며, 이러한 문자점을 보완하기 위해서 액세스 토큰의 만료 기간을 짧게 주는 방식이 적용되고 있습니다. 설정하기에 따라 다르지만 일반적으로 access token의 유효 기간은 30분에서 1시간 정도로 발급되며, 유효 기간이 짧은 만큼 사용자의 측면에서는 토큰이 만료될 때마다 다시 로그인을 하여 액세스 토큰을 발급받아야 하는 불편함이 생기게 됩니다. 이러한 이유 때문에 r.. 더보기
[백엔드온라인TIL] database종류 (63일차) DBMS란 Database Management system의 준말로 데이터를 한곳에 모은 저장소를 만들고 그 저장소에 여러 사용자가 접근하여 데이터를 저장 및 관리 등의 기능을 수행하며 공유할 수 있는 환경을 제공하는 응용 소프트웨어 프로그램 튜플(Tuple)- 테이블에서 행을 의미합니다. - 같은 말로는 레코드(Record) 혹은 로우(Row) 어트리뷰트(Attribute)- 테이블에서 열 릴레이션(Relation=Table)- 관계형 데이터베이스에서 정보를 구분하여 저장하는 기본 단위 키(Key)- 테이블에서 행의 식별자로 이용되는 테이블의 열을- 주키(PK) : 현재 테이블에서 행을 식별하는 식별자 - 외래키(FK) : 현재 테이블과 연관되어있는 외부 테이블과 연관된 행을 식별하는 식별자nosql .. 더보기