사전적 정의와 개념은 이미 너무나도 좋은 자료가 많으니, 여기서는 나의 언어로 작성하겠다(틀린 게 있어도 오해하지 말고 찾아보기!) 이번 프로젝트를 진행하면서, 기존의 3-layer 계층의 설계가 아닌 클린 아키텍처의 설계를 학습하면서 적용해 보는 노력을 하였다. 프로젝트 초반에 익숙하지 않은 형식의 설계와 완숙하지 못한 Nest 프레임워크 실력에 의존성 오류를 엄청 많이 겪으면서 삽질을 하는 시간이었다. 지금 와서 생각해 보면, 인터페이스의 개념과 사용법을 체득하지 못한 상태여서 기본적인 에러의 원인구조를 빨리 파악하지 못한 듯하다. 이번에 구현하면서 체득한 내가 생각하는 의존성 역전 원칙이란 한마디로, 직접 상속하지 마!이다. 객체지향에서 이야기하는 설계원칙의 핵심은 유연성과 확장성(재활용)이라고 생..
요약 이 글은 로그인 기능의 보안을 강화하기 위한 인증과 인가에 대한 개선 방법을 다루고 있다. 기존의 단일 토큰 방식에서의 보안 취약점을 보완하기 위해 두 개의 토큰, 즉 accessToken과 refreshToken을 사용하는 방법을 소개하고 있다. 이를 통해 토큰 탈취 시의 리스크를 줄이기 위해 유효기간을 짧게 설정하고, 사용자 편의성을 유지하기 위해 슬라이딩 세션을 도입하는 방법을 설명하였다. 또한, refreshToken을 서버의 DB 대신에 redis 캐싱을 이용하여 저장함으로써 성능을 향상시키는 방법에 대해서도 언급하고 있다. 마지막으로, 보안성을 강화하기 위해 클라이언트 정보와 함께 refreshToken을 이용하여 새로운 accessToken을 발급하는 방법을 소개하고 있다. 전반적으로 ..
결과테스트 세팅:테스트 환경: Mac M1 Air / RAM 16GB / SSD 256GB 테스트 시나리오: 1000명의 동시 사용자가 (약 3초 간격) 15번 반복 조회테스트 목적: 유명맛집에 걸려있는 Cache 성능과 안정성 검증Redis?Redis는 오픈 소스 인메모리 데이터 구조 저장소이다. 여기서 주목할 점은 인메모리 데이터 저장소라는 것!일반적인 데이터베이스와는 다르게 데이터를 메모리에 저장하는데, 하드웨어적으로 RAM 의 읽기, 쓰기 속도가 HDD, SDD보다 매우 많이 빠른 것이 가장 큰 장점이다. 그렇기 때문에, 데이터를 가져오는 속도에서 차이가 난다. 그렇다면 이게 다 일까?그럼 무조건 인메모리 데이터 저장소 구조가 좋은 거야?라고 생각한다면 당연한 것은 아니다!RAM이라는 특성을 생..
문제 링크 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 해설 성격 유형을 검사하고, 결과를 반환해야 하는 문제이다. 일반적인 검사처럼 선택지마다 점수를 부여하고, 점수를 기준으로 성격 유형을 나눈다. 첫번째로, 생각난 것은 딕셔너리로 {'R': 0, 'T': 0, 'C': 0, 'F': 0, 'J': 0, 'M': 0, 'A': 0, 'N': 0} 유형마다 점수를 저장하는 것이었다. 그리고 나서, 동의 선택지의 기준과 비동의 선택지의 기준을 선택지에서 얻은 점수를 더하면서, 모든 점수 계산이 끝났을때 높은 점수 순으로 성격유형을 만든다고 생각했다...