Development/TIL (56) 썸네일형 리스트형 Access와 Refresh Token 주특기 토이 프로젝트 이틀째다 FE와 BE 첫 협업으로 일주일이라는 시간 동안 하나의 프로젝트를 완성해야하다보니 걱정이 되었는데 BE 개발 스코프를 인원에 비해 작게 잡은 탓인지 생각보다 구현이 빨리 되었다. 물론 FE 구현이 완료되었을 때 함께 테스트를 해보면 어떤 에러들이 발생할지 모르겠지만....ㄷㄷ 아무튼 FE 작업 완료를 기다리는 언어 학습을 해볼까 하다가 프로젝트에 추가할 수 있는 기능이 없을까 고민하다가 주특기 학습 주차에 배웠던 access, refresh 토큰이 떠올랐다. 그때는 그냥 그런 것이 있구나 하고 훑고 지나갔는데 이번 기회에 다시 공부하여 프로젝트에 적용해보면 좋을 것 같다. 그래서 천천히 정리부터 시작해보겠다. 왜 토큰을 둘로 나누었나? 기존에 하나의 토큰을 사용한 인증 방식.. git으로 commit하고 push하자 전에 git 사용법을 세션을 통해 배우긴 했는데 뭔가 복잡해서 vscode에서 github 연동해서 사용하다가 본격적인 협업 프로젝트에 접어들면서 이대론 안되겠다는 생각이 들었다. 그래서 터미널을 통해 git을 조작하는 법을 복습하였다. git 조작 기초 git을 사용해보자 1. github 회원가입 2. repository 생성 3. git 다운로드 4. git bash 실행 5. 사용자 등록 $ git config --global user.name "my name" 6. 사용자 이메일 등록 $ git config --global user.email "my email" 7. 잘 등록되었는지 확인 (use redjun89.tistory.com 이번 토이 프로젝트 repository는 다른 팀원이 생성하여.. 객체지향 프로그래밍(Object Oriented Programming) 사전지식 객체지향이란? 소프트웨어의 핵심을 기능이 아닌 객체에 맞추고 각각의 역할을 정의하는 것에 초점을 맞춘다. 책임과 권한을 가진 객체들이 서로 협력해서 필요한 기능을 수행하도록 한다. 크고 복잡한 시스템을 효과적으로 분해 및 구성한다. 이해가 쉽고 효율적으로 다룰 수 있게 해주는 가장 보편적인 프로그래밍 패러다임이다. 객체지향의 특징 캡슐화 (Encapsulation) 개념적, 물리적으로 객체 내부의 세부 정보를 감추는 것이다. 캡슐화를 사용하는 가장 큰 이유는 정보은닉을 통한 객체 사이의 결합도 감소를 추구하고 이로 인해 코드의 안정성과 보안성을 높이는데 있다. 상속 (Inheritance) 부모 클래스에서 정의한 속성과 메서드를 자식 클래스에서 그대로 물려받아 사용하는 것을 말한다. 이는 코드의.. 트랜잭션의 동시성과 격리수준 동시성(Concurrency)이란? 다수의 클라이언트가 하나의 데이터를 동시에 사용 및 공유하는 것이다. 이때 여러 작업이 동시에 수행되면 동시성 문제(Concurrency Issues)가 발생할 수 있다. 동시성 문제란, 여러개의 트랜잭션이 동시에 실행될 때 각각의 트랜잭션이 데이터를 일관성 있게 처리하지 못하는 문제를 말한다. 예를 들어 A와 B 두 개의 트랜잭션이 동시에 실행될 때 A 트랜잭션에서 수정한 데이터가 B 트랜잭션에서 읽어들인 데이터와 일치하지 않는 경우가 발생할 수 있다. 동시성 문제를 해결하기 위해 하나의 클라이언트가 자원(Resource)를 점유할 수 있도록하는 자원 잠금(Resource Locking)을 사용한다. 이것을 락(Lock)기반 제어 기술이라고 한다. 락(Lock)이란?.. Transaction과 ACID 트랜잭션(Transaction)이란? 데이터베이스에서 수행되는 작업의 논리적 단위이다. 다시 말해 DB의 데이터를 변경하는 일련의 작업을 하나의 단위로 묶어서 처리하는 것이다. 예를들어 DB에 새로운 데이터를 추가하거나 기존 데이터를 수정 또는 삭제할 때 여러개의 작업을 순서대로 실행하는 것이 아니라, 하나의 트랜잭션으로 묶어서 처리하는 것이다. 쉽게 말해 하나의 작업에 하나의 쿼리를 종속하는 것이 아닌 여러개의 작업(쿼리)를 묶어 하나의 단위로 그룹화하여 처리하는 작업을 뜻한다. 이렇게 트랜잭션을 사용하면 작업의 완전성이 보장된다. 특정한 작업을 전부 처리하거나 전부 실패하게 만들어 데이터의 일관성을 보장해주는 기능이다. 트랜잭션의 예시 은행에서 계좌이체를 하는 상황이다. a계좌에서 b계좌로 10만원을.. Thunder Client 문제 항해 99 주특기 주차 Lv4 과제중 특정 api가 자꾸 실행이 안되는 문제 발생 썬더 클라이언트로 해당 api로 get요청을 넣으면 터미널에 자꾸 엉뚱한 query가 실행되는게 보인다. 시도 처음엔 해당 api 코드 문제인줄 알고 인증 미들웨어부터 변수와 메서드, 키워드 등등 모든 것을 바꿔보았다. 장장 6시간 동안..... 해결 그러다 결국 api uri를 바꾸고 썬더클라이언트로 다시 요청을 넣었더니 거짓말처럼 해결되었다....... 알게된 것 지나간 내 시간이 너무 아깝고 허무하다. 알게된 것도 없다. 지금은 시간이 너무 늦었으니 내일 다른 팀원분들께 공유해서 정확한 원인을 알아봐야겠다. MongoDB와 MySQL 항해99 주특기 주차 Lv3 과제는 CRUD 게시판의 데이터 베이스를 MongoDB에서 MySQL로 바꾸는 것이었다. 따라서 사용하는 라이브러리도 mongoose에서 sequelize로 바뀌었다. 일단 두가지 DB를 사용해서 프로젝트를 진행해본 결과 mongoose가 더 편리했다. schema를 언제든지 변경할 수 있고 변경하는 것에 따라 별다른 조작 없이 DB에 저장이 되었기 때문이다. 반면, sequelize는 하나의 스키마에 migration과 model 두개의 파일이 필요했고 구조가 변경될 때마다 거쳐야하는 과정들이 굉장히 번거롭게 다가왔다. 그런 과정들이 데이터가 일관성과 무결성을 획득하기 위해 필요하겠지만 아직 대규모 데이터 처리를 해본 경험이 없어서 딱히 중요성을 체감하지 못한 상태다. 아무.. Sequelize 탐구 Migration이란? Migration은 DB 테이블 생성, 삭제, 수정을 수행한다. Migration 파일은 테이블의 구조와 필드 등을 정의하고 이를 통해 Sequelize가 DB를 관리할 수 있다. Sequelize에서 Migration 파일은 up, down 함수를 가지고 있다. up 함수는 새로운 변경을 적용하고 down 함수는 변경을 취소한다. Migration 파일은 버전 관리가 가능하며 변경 이력을 추적할 수 있다. 예시 코드 'use strict'; module.exports = { up: async (queryInterface, Sequelize) => { await queryInterface.createTable('users', { id: { allowNull: false, autoI.. 이전 1 2 3 4 5 6 7 다음