본문 바로가기

Study

[백엔드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 .. 더보기
[백엔드온라인TIL] JWT의 Refresh Token과 Access Token은 어디에 저장해야 할까? 그리고 successfulAuthentication (62일차) JWT에서 가장 중요한 점은 '보안'입니다. 어떤 공격에도 토큰을 탈취당하면 안되고 어떤 방식으로도 악용당하면 안되기 때문에 이 토큰을 어디에 어떻게 저장할 지를 고민해 보았습니다. 1. Access Token 먼저 Access Token은 말 그대로 인증 인가 서비스를 구현하기 위한 것입니다. 사용자가 로그인을 하면 백엔드 서버에서 토큰을 만들어서 헤더에 담아 클라이언트에 전송합니다. 클라이언트는 서버에 요청을 할 때 서버로부터 받았던 토큰을 함께 전송합니다. 서버는 요청과 토큰을 함께 받고 서버에서 토큰을 디코딩하여 로그인한 사용자를 확인합니다. Access token은 서버에서 사용자를 로그아웃시키는 권한을 가질 수가 없기 때문에 일정 기간이 지나면 사용자가 자동으로 로그아웃되도록 만료 기간을 짧게.. 더보기
[백엔드온라인TIL] jwt 개념 (60일차) 1. JWT(JSON Web Token)란? JWT는 인증에 필요한 정보들을 암호화 시킨 JSON 토큰을 의미합니다. 따라서 JWT를 이용한 인증은 유저를 인증하고 식별하기 위한 Token 기반 인증입니다. JWT는 JSON 데이터를 Base64 URL-safe Encode를 통해 인코딩하여 직렬화한 것이고, 토큰 내부에는 개인키를 통한 전자서명이 들어있습니다. ※ Base64 URL-safe Encode란, 일반적인 Base64 Encode를 URL에서 오류 없이 사용하도록 '+'와 '/'를 각각 '-', '_'으로 표현한 것입니다. 토큰 기반 인증에서 토큰은 토큰 자체에 사용자의 정보들이 포함되어 있다는 점(Self-contained)이 특징입니다. 클라이언트의 상태를 알아야했던 Stateful했던 .. 더보기
[백엔드온라인TIL] OAuth의 동작원리, pk와 fk 복습 (59일차) OAuth(OAuth2.0)란 무엇일까? 소셜로그인이 작동하는 법 사이트에 회원가입을 하지않아도 이미 가지고 있는 아이디를 통해 로그인할 수 있게 만드는 소셜로그인. 많은 사람들이 들어봤거나 사용해봤을 것이다. 이렇게 간편한 로그인은 OAuth를 통해서 구현할 수 있다. 이 OAuth는 무엇이고 어떻게 작동하는 것인지 궁금해져서 이번 기회에 간단하게 정리해보려고한다. What is OAuth? OAuth는 Open Authorization의 줄임말로 보안 위임 엑세스(secure delegated access) 개방형 표준(open standard)이다. 현재 OAuth1.0과 OAuth2.0 두 버전이 존재한다. Open Standard 많은 사람들이 OAuth를 API라고 생각하는데 OAuth는 개방.. 더보기
[백엔드스터디WIL] jpa에서 cascade와 orphanremoval의 차이 (12주차) 이번주는 사용할 때마다 헷갈릴 수 있는 개념 cascade 옵션과 orphanremoval 옵션의 사용상 차이점에 대해 알아보았다. JPA를 공부하다 보면 바로 이해하기 쉽지 않은 개념들을 몇 개 마주친다. 필자는 연관관계 매핑, 영속성 전이, 고아 객체 등이 특히 어려웠다. 이번 글에서는 영속성 전이(REMOVE)와 고아 객체를 학습 테스트를 통해 비교하여 살펴본다. 최종적으로 독자들이 둘의 차이를 이해하는 것을 목표로 한다. 엔티티 기본 세팅 Team과 Member 엔티티를 바탕으로 두 개념의 공통점과 차이점을 알아본다. Team은 @OneToMany, Member는 @ManyToOne으로 양방향 매핑을 했다. // Team.java @Entity public class Team { @Id @Gene.. 더보기
[백엔드온라인TIL] cpu 스케쥴링 (58일차) 0.🚶들어가며 이전 글에서는 프로세스와 스레드에 대해 알아보았었습니다. 프로세스가 CPU에 할당을 받아야 작업을 수행한다고 했었죠. 이때 여러 프로세스 중 누가 CPU의 할당을 받을 것인지에 대한 내용을 다룬 CPU 스케줄링에 대해 글을 작성해보겠습니다. 1.⏰CPU 스케줄링이란? 이전 글에서 알아봤듯 프로세스는 생성되고 난 뒤 여러 상태를 거치게 됩니다. 운영체제의 CPU 스케줄러는 Ready 상태의 프로세스 중에서 어떤 프로세스에게 CPU를 할당할지 결정합니다. 이를 CPU 스케줄링이라 하는 것이죠. 또한 Dispatcher는 CPU 제어권을 CPU 스케줄러에 의해 선택된 프로세스에게 넘깁니다. 이를 Context Switch라고 합니다. CPU 스케줄링은 규모에 따라 장기, 중기, 단기 스케줄링으로.. 더보기
[백엔드온라인TIL] MVC 구조에 대해 각 역할과 흐름을 설명하시오 (57일차) 디자인 패턴 정의 소프트웨어 공학의 소프트웨어 설계에서 공통으로 발생하는 문제에 대해 자주 쓰이는 설계 방법을 정리한 패턴이다. 프로그램이나 어떤 특정한 것을 개발하는 중에 발생했던 문제점들을 정리해서 상황에 따라 간편하게 적용해서 쓸 수 있는 것을 정리하여 특정한 "규약"을 통해 쉽게 쓸 수 있는 형태입니다. 사용 이유 개발의 효율성, 유지보수성, 운용성이 높아지며 프로그램의 최적화에 도움이 됩니다. MVC 패턴이란? 프로그래밍을 할 때 전체적인 구조에 관련된 여러 디자인 패턴 중 하나 model, view, controller의 약자인 MVC 패턴은 하나의 어플리케이션, 프로젝트를 구성할때 그 구성요소를 세가지의 역할로 구분한 디자인 패턴입니다. 이 패턴을 성공적으로 사용시, 사용자 인터페이스로부터 .. 더보기
[백엔드온라인TIL] Spring Test junit5 (56일차) 테스트 인스턴스란? JUnit은 설정된 테스트 단위로 테스트 객체를 만듭니다. 이를 테스트 인스턴스라고 말합니다. 테스트 실행 범위라고 생각하시면 됩니다. 예를 보시면 더 빠른 이해가 가실 거에요. 아래 예제의 테스트를 전부 다 돌리면 어떤 결과가 나올까요? 저 test_1, test_2 메소드 중 하나는 테스트가 성공하지 않을까요? package com.effortguy.junit5; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertTrue; public class TestInstanceAnnotation { public int i=0; @Test void test_1() { assertTrue.. 더보기