본문 바로가기

분류 전체보기

(54)
OAuth 2.0 Authentication과 Authorization 둘다 리소스에 대한 액세스를 컨트롤한다. Authentication (인증) 유저의 신원을 확인한다. (로그인으로) Authorization (인가) 유저가 권한을 가지고 있는지 확인한다. 로그인 된 유저마다 가지고 있는 권한이 다를 수 있다. 예) 일반 사용자와 관리자는 접근할 수 있는 정보가 다를 수 있다. OAuth 2.0 와 OpenId Connect OAuth 2.0 OAuth 2.0은 유저가 애플리케이션과 credentials을 공유할 필요 없이 애플리케이션이 유저를 대신하여 리소스에 액세스할 수 있도록 표준화된 방법을 제공하는 Open Authorization Protocol 이다. 여기에서 애플리케이션은 OAuth 로그인을 사용하고 있는..
Associative Array와 Key 충돌 해결 전략 Associate Array key-value 쌍을 저장하는 자료구조이다. key는 unique하며, 특정 value와 매핑된다. 배열과 같은 순차적인 인덱스가 아닌, 키로 인덱싱된 elements들의 모음이다. Java에서는 Map, Python에서는 Dictionary로 구현되어있다. Bucket bucket은 value를 저장하는 자료구조이다. probe probe는 빈 bucket을 찾는 행위이고, probe number은 빈 bucket을 몇 번째 찾고 있는지를 의미한다. load factor 테이블이 얼마나 차있는지 나타내는 수치이다. 테이블 사이즈가 10이고, 5개의 element가 있을 때, load factor는 0.5가 된다. Key 충돌 해결 전략 Perfect Hash Functio..
InnoDB Strage Engine MVCC (Multi Version Concurrency Control) 하나의 레코드에 대해 여러 개의 버전이 동시에 관리된다. 격리 수준 (Isolation level)이 READ_COMMITTED인 MySQL 서버에서 InnoDB 스토리지 엔진을 사용하는 테이블의 변경을 어떻게 처리하는지 살펴보자. UPDATE 문장이 실행되면 커밋 실행 여부와 관계없이 InnoDB의 버퍼 풀은 새로운 값으로 업데이트된다. 아직 COMMIT이나 ROLLBACK이 되지 않은 상태에서 다른 사용자가 다음 같은 쿼리로 작업 중인 레코드를 조회하면 어디에 있는 데이터를 조회할까? 이는 격리 수준에 따라 다르다. READ_UNCOMMITTED인 경우에는 변경된 상태의 데이터를 반환한다. READ_COMMITTED 이상의 격리..
Spring Session With Redis 설정하기 사용 기술 스택 Redis Spring Security Spring Boot Spring Session: provides an API and implementations for managing a user’s session information. HttpSession: 문서에서 HttpSession을 Spring Session으로 통합할 수 있다(Spring Session provides transparent integration with HttpSession)고 하는데, 이게 모듈인지? 아니면 개념적 용어인지? 잘 모르겠다. Redis를 Spring Session 저장소로 사용하기 Dependencies dependencies { implementation 'org.springframework.sess..
SpringFox 3.0.0 Server URL Error 기술 스택 OpenJDK 17.0.5 Spring Boot 2.7.7 SpringFox 3.0.0 발단 스테이징 서버에서 Swagger의 Server URL을 등록해주다가 발견한 문제. @Configuration public class SwaggerConfiguration { @Bean public Docket swagger() { return new Docket(DocumentationType.OAS_30) .servers(new Server("", "https://xxx.com", "", new ArrayList(), new ArrayList())) .select() .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build() ...
[Github Actions] 정규식으로 PR Title 확인 name: PR Title Validation on: pull_request: types: [opened, edited, reopened] jobs: title-check: runs-on: ubuntu-latest steps: - name: Check PR Title run: | title=$(jq -r '.pull_request.title' $GITHUB_EVENT_PATH) if [[ "$title" =~ ^(\[Feat\]|\[Refactor\]|\[Fix\]|\[Test\]|\[Chore\]|\[Setting\]|\[Docs\]) ]]; then echo "PR Title is valid." else echo "PR Title is invalid." exit 1 fi 위의 yaml 파일을 .git..
[Architecture of a Database System] Storage Management DBMS storage manager 타입에는 두 가지가 있다. low-level block-mode 디바이스 드라이버와 바로 연결 표준적인 OS 파일 시스템 이용 두 가지 방법을 차례로 공부하고 스토리지 계층에 대해서 공부한다. 5.1 Spatial Control 디스크로 왔다갔다 하는 Sequential bandwidth 는 Random Access보다 10에서 100배 빠르다. 디스크 밀집도는 18개월마다 두배가 되고 bandwidth는 밀집도의 제곱근으로 증가한다. 디스크 암 움직임은 일년에 약 7퍼센트 향상한다. 따라서 DBMS Storage Manager는 디스크의 블락을 sequential하기 움직일 수 있도록 해야한다. DBMS가 spatial locality를 제어하는 가장 좋은 방법은 ..
MongoEngine Document to Pydantic (ObjectId 처리하기) MongoEngine의 Document를 dict, 또는 Pydantic으로 변환시, ObjectId 파싱이 제대로 되지 않는 문제가 있었다. 다음 문서를 보고 MongoEngine의 Document를 Pydantic으로 변환하기 위해 GetterDict 클래스를 구현해줬다. https://docs.pydantic.dev/usage/models/#data-binding from typing import Any from bson import ObjectId from pydantic import BaseModel from pydantic.utils import GetterDict class ModelGetter(GetterDict): def get(self, key: Any, default: Any = No..