스프링은 어떻게 동작할까?
개발 할 때 맨날 쓰고 있지만 스프링이 내부적으로 어떻게 동작하는지에 대해서는 정확히 설명하기 어려웠다. 그래서 요청부터 응답부터 어떤 흐름을 거치는지, 각 단계에서 어떤 동작을 하는지 정리해보기로 했다.
개발 할 때 맨날 쓰고 있지만 스프링이 내부적으로 어떻게 동작하는지에 대해서는 정확히 설명하기 어려웠다. 그래서 요청부터 응답부터 어떤 흐름을 거치는지, 각 단계에서 어떤 동작을 하는지 정리해보기로 했다.
🙋♂️1. Node.js로 5분만에 API 만들기
🙋♂️2. Node.js로 POST API 만들기
🙋♂️3. Node.js로 데이터 저장하기
🙋♂️4. Node.js에 저장된 데이터에 인덱스 붙이기, 데이터 삭제하기
🙋♂️5. Node.js로 세션 방식 로그인 구현하기
이번에는 미뤄뒀던 회원가입 기능을 구현해보자. 비밀번호 암호화 하는 방법도 함께 알아보겠다. 암호화에는 단방향 해시함수 bcrypt
를 사용할 예정이다.
개발을 하다보면 DB 접속정보나 Secret Key 같은 민감한 정보들이 생긴다. yml 파일에 써놓거나 하드코딩으로 코드에 박아놨다가 이런 정보들이 탈취되면 문제가 생길 수 있으니 사전에 관리를 하는 게 좋다. 이번에는 이런 중요한 정보들을 관리할 수 있는 .env
파일을 사용해보자.
🙋♂️1. Node.js로 5분만에 API 만들기
🙋♂️2. Node.js로 POST API 만들기
🙋♂️3. Node.js로 데이터 저장하기
🙋♂️4. Node.js에 저장된 데이터에 인덱스 붙이기, 데이터 삭제하기
이번에는 로그인 기능을 구현해보자. 제일 기본적인 세션 저장 방식으로 구현하고, 암호화는 고려하지 않는다(원래는 꼭 비밀번호 암호화 해야 함!).
📖 제목 : 가상 면접 사례로 배우는 대규모 시스템 설계 기초 : 2, 3장
🙋♂️ 저자 : 알렉스 쉬
시스템 설계 관련 면접을 보면 “이 서비스에 필요한 서버 수는 몇 대일까?” “하루에 얼마나 많은 요청이 들어올까?” “저장공간은 얼마나 필요할까?” 같은 질문을 받게 될 수 있다. 이런 질문들은 정확한 숫자를 요구하는 게 아니라, 얼마나 필요할 지를 대략적으로 계산해보는 능력을 보려는 의도다. 이 추론을 개략적인 규모 추정
이라고 한다. 쉽게 말해서 ‘대충 머릿속으로 계산해봤을 때 대략 어느 정도인지 감 잡기’를 할 수 있는지가 포인트다. 예시와 함께 어떻게 계산해야 할 지 알아보자.
그리고 3장에서는 시스템 설계 면접은 왜 보는 것인지
에 대해 생각해볼 수 있다.
자바스크립트는 싱글 스레드 언어
다. 즉, 한 번에 한 가지 작업만 할 수 있다는 뜻이다.
웹 서비스는 다양한 동작이 필요하다. DB 읽기, 파일 읽기, API 요청 보내기, 사용자 입력...
이 작업 하나하나가 끝날 때까지 기다려야 한다면 어떨까? 파일 하나가 다운로드 완료 될 때까지 기다려야 다음 파일을 받을 수 있고, 파일들이 다운로드 되는 동안에는 다른 동작을 아무것도 할 수 없을 것이다. 그래서 자바스크립트에서는 비동기asynchronous로 작업을 처리하는 경우가 많다. 그렇구나~ 하고 넘어가기에는 또 이상한 점이 있다. 비동기로 작업을 하려면 스레드가 두 개 이상 있어야 하는 거 아닌가? 하는 점이다.
쉽게 말해서 카페에 직원이 두 명은 있어야 한 명이 주문 받고 한 명은 음료 제조를 할 텐데, 직원이 하나 뿐이라면 어떻게 작업 분담이 가능하냐는 것이다.
MSA구조의 서비스들이 있다고 생각해보자. 하나의 서비스에서 데이터를 변경하면 다른 서비스들에게도 변경되었음을 알려야 하는 경우가 많다. 예를 들어 주문 서비스에서 주문이 생성되었을 때, 결제 서비스와 재고 서비스가 이 이벤트를 감지해야 결제와 재고 차감을 할 수 있다. 이를 위해 메시지 브로커(Kafka, RabbitMQ)를 사용한다고 치자. 어떤 문제가 발생할 수 있을까?
트랜잭션이란 데이터베이스 작업을 하나의 묶음으로 관리하는 기능
이다. 이 묶음은 한 배를 탄 운명이라서 안에 몇 가지 내부 기능이 들어 있든 둘 중에 하나다. 전부 성공하거나, 전부 실패하거나.
예를 들어, ATM에서 계좌이체를 한다고 생각해보자. A의 계좌에서 10만원이 출금되고
B의 계좌에 10만원이 입금되어야 한다.
만약 출금만 되고 입금이 되지 않으면 심각한 문제다. 이렇게 모든 작업이 다 성공해야 성공으로 인정하는 것을 트랜잭션이라고 한다.
트랜잭션의 4가지 특성인 ACID도 위 개념을 이해하고 나면 자연스럽게 이해가 된다.
남에게 코드 리뷰를 받는 건 왜 항상 긴장되는 걸까? 내 작업물과 나를 동일시 하면 안 된다는 건 알고 있지만, 그래도 열심히 짠 코드에 생각지도 못했던 결함이 있었다는 걸 남을 통해 알게 되는 건 참 감사하면서도 부끄러운 경험이다ㅠ_ㅠ. 하지만 이런 부끄러움이 있어야 더 성장하려는 의지가 생기는 거겠지. 이번에는 좋은 코드 리뷰를 하기 위해 고려해야 할 것들에 대해 정리해보았다. 내가 받는 코드 리뷰도 중요하지만, 남에게 해 줄 때도 성의를 보여야 한다는 것을 잊지 말자!
📖 제목 : 적을 만들지 않는 대화법
🙋♂️ 저자 : 샘 혼
어릴 땐 논쟁을 하면 무조건 이겨야 했다. 조금 더 철이 들고 나니 때로는 관계를 위해 내가 옳아도 져 줘야 할 때가 있다는 것을 알게 되었다. 하지만 여전히 종종 이럴 땐 어떻게 말하는 게 제일 나았을까
하고 고민하게 되는 순간들이 있다. 일부러 적을 만들고 싶은 사람은 아무도 없지만, 내 의견을 관철시키면서 관계도 유지하려면 많은 노력이 필요하다. 이 책은 상대방과 내 마음을 동시에 살피는 방법을 여러가지 사례들과 함께 소개하고 있다. 오래 기억하고 싶은 몇 가지 사례들을 정리해둔다.