목록개발/알쓸코잡 (30)
Jest Jest 란 페이스북에서 만든 것으로, 완성한 각종 기능들이 정상 작동하는지 파악하는데 도움을 주는 라이브러리이다. 해당 라이브러리는 NestJS에 내장되어 있어 쉽게 사용이 가능하다는 특징을 가지고 있다. Jest 가 필요한 이유에 대해 가볍게 설명하자면, 개발자의 의도대로 작동하고 있던 API 라고 하더라도 타 API나 함수가 개입하게 된 후에도 이전처럼 정상작동한다는 보장이 없을 뿐더러, 매번 기능을 추가할 때마다 기존의 API를 일일히 모두 정상작동하는지 확인할 수도 없는 노릇이다. 하지만 Jest 를 사용하게 되면 TestCode를 작성해 둘 경우 테스트를 통해 한번에 모든 기능들의 작동을 확인할 수 있다는 장점을 가진다. 테스트를 진행하는 방식으로는 unit test : 프로그램 내 ..
DNS DNS 란, Domain Name System의 약자로, 웹 사이트의 IP주소와 도메인 주소를 이어주는 역할을 한다. 굳이 따지면, 'zynoob.tistory.com'이라는 사이트를 IP주소로 변환시켜 브라우저가 접속할 수 있도록 하는 것을 말한다. 방식은 위와 같다. 1. 브라우저에서 어떤 사이트에 대해 접속을 시도하면, 2. DNS 서버는 이 주소를 받아 해당 key에 맞는 value(IP주소) 를 반환하게 되고, 3. 브라우저는 반환받은 IP주소로 접속하게 된다. 이때 DNS 서버는 세상에 넘쳐나는 도메인 주소들을 계층화하여 각기 다른 서버에 저장하게 된다. Load Balancer 앞서 DNS에 대해 설명하면서, 수많은 주소들을 각기 다른 서버에 저장한다고 얘기했다. 이는 서버에서 클라이..
TDD TDD (Test Driven Development)는 '테스트 주도 개발'의 약어다. 기본적인 정의로는, 경영학에서의 'Plan - Do - See' 의 방식과 같은 피드백 과정을 프로그래밍 과정에서도 사용하는 것을 의미한다. 프로그래밍에서는 '실패 코드 작성 - 성공 코드 작성 - 리팩토링 코드 적용' 의 과정을 거치며 TDD가 이루어지게 되는데, TDD 가 여러 번 이루어질수록 해당 코드에서 오류가 일어날 가능성이 적어지며 더욱 안정성을 가질 수 있게 된다. TDD의 장단점 위와 같은 방식의 장점으로는 사소한 실패 코드를 작성하고 이를 피해 프로그래밍함으로써 프로그래밍 중 나타나는 오류들을 최소화시킬 수 있으며, 등장하는 오류들의 원인이 무엇인지 파악하기 쉬운 편이고, 이로 인해 리팩토링 시..
마이크로서비스 아키텍쳐 마이크로서비스 아키텍쳐(MicroService Architecture)는 MSA 라고도 불린다. 마이크로서비스는 정확히 콕 짚어 무엇이라 정의할 수는 없지만, 작고도 독립적으로 배포가 가능한 '각각의 기능'을 수행하는 서비스로 구성된 프레임워크라고 볼 수 있다고 한다. 각각의 서비스마다 서버를 열어 관리하는 방식으로 이해하는 것이 편하다. 모놀리식 아키텍쳐 마이크로서비스 아키텍쳐의 반대 개념은 모놀리식 아키텍쳐인데, 모놀리식 아키텍쳐는 각 기능이 독립적으로 수행되는 것이 아닌 한 프로젝트 안에서 단일 서비스로 실행되게 구현한 아키텍쳐를 말한다. 모든 프로세스는 각 기능들이 긴밀히 연결되어 있기 때문에 복잡하고, 한 서비스에 대한 수요가 급증할 경우 해당 아키텍쳐 전체를 확장해야 한..
로그인 관련 포스팅 2023.02.04 - [코딩/알쓸코잡] - Login process 2023.02.12 - [코딩/nest.js] - NestJS - login process 구현 (refresh Token) 2023.02.11 - [코딩/알쓸코잡] - 소셜 로그인 프로세스 2023.02.12 - [코딩/nest.js] - NestJs - 소셜로그인 구현(google login) Logout process 로그아웃 프로세스란 그 말마따나 로그아웃 과정을 의미한다. 이는, 로그인 프로세스에서 발급했던 accessToken & refreshToken 을 반대로 만료시키는 방법을 통해 로그아웃 프로세스를 구현할 수 있다. 1. 사용자가 로그아웃 요청 2. 백엔드 서버에서 사용자 입력값과 DB 값 비교 3..
이미지 업로드 프로세스 이미지의 경우 데이터를 다룰 때, 타 데이터를 DB에 저장하는 방식과 다른 방식을 사용한다. 그 이유는 이미지 자체가 갖는 용량이 상대적으로 매우 크기에 DB 저장에 비효율적이기 때문이다. 따라서, 실제 이미지는 다른 컴퓨터 || storage 에 저장하고, DB에는 이미지가 갖는 이미지 주소만을 저장한 뒤에 필요할 때 주소를 참조하여 사용한다. 과정은 다음과 같다. 프론트엔드 브라우저에서 사용자가 이미지를 저장하기 위한 파일 태그를 생성한다. **(input type='file'/>) 업로드 요청 API를 받은 백엔드는 해당 이미지를 스토리지에, 이미지 주소를 DB에 각각 저장한다. 이후, 이미지 열람을 원하는 경우가 생긴다면, 위와 같은 방식으로 열람 또한 진행된다. 프론트엔드..
트랜잭션 트랜잭션은 DB 내에서 한 묶음으로 처리되야 하는 명령어들을 모아 놓은 최소 작업 단위를 의미한다. 트랜잭션은 데이터의 일관성을 유지하며 안정적으로 데이터를 복구하는 것이 목적으로, 여러 단계로 나뉘어진 단계들을 한 가지의 단계로 다룰 수 있다는 특징을 가진다. 때문에 트랜잭션 내에 포함된 명령어들이 모두 정상적으로 처리되면 정상 종료되며, 반대로 하나의 명령어에 문제가 생겼을 경우 명령어 전체가 취소될 수 있다. 위와 같은 처리는 트랜잭션이 작업 처리의 일관성(Consistency)과 트랜잭션이 모두 반영되거나 그렇지 않다는 원자성(Atomicity)의 특징을 가진다고 볼 수 있다. 추가적으로 트랜잭션은 둘 이상의 데이터들이 명령문에 의해 처리되는 과정이라고도 말할 수 있는데, 트랜잭션 그 말..
Redis Redis(REmote DIctionary Server) 란, 비관계형 데이터베이스(NoSQL) 관리 시스템이다. 'key-value'로 데이터를 저장하며, 처리 및 저장이 빠르다는 장점이 있지만, 비영구적 속성을 지니기 때문에 서버가 꺼질 경우 모든 데이터가 사라진다는 치명적인 단점도 있다. 위와 같은 단점을 가지고 있기 때문에 Redis는 속도 향상을 위한 보조 DB로 사용되는 것이 일반적이며 추가적으로, 데이터에 만료 시간을 지정하여 만료 시간에 도달하면 데이터가 Redis에서 삭제되게 할 수 있으며, 만료되지 않았더라도 메모리가 꽉찰 경우 LRU(Least recently used) 알고리즘에 의해 데이터가 삭제되기도 한다. 위와 같은 이유로 Redis 는 몇몇 페이지를 캐싱하거나 검색..