만약에 이 과정이 따로 처리가 된다면? 호날두의 계좌에서 100만원을 인출했는데 다른 계좌에 입금이 안되면 100만원은 증발됨... 그래서 이 과정들은 하나의 단계처럼 처리해야 한다. (메시의 계좌에 100만원을 더 줄 수 없으면 호날두 계좌의 100만원도 빠지지 않아야 함)
CREATE PROCEDURE TransferMoney(IN account_id1 INT, IN account_id2 INT(
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
-- 하나의 쿼리라도 예외(에러) 발생하면 롤백~
ROLLBACK;
END;
START TRANSACTION;
UPDATE bank_accounts
SET balance = balance - 1000
WHERE account_id = account_id1;
UPDATE bank_accounts
SET balance = balance + 1000
WHERE account_id = account_id2;
COMMIT;
END
호출
CALL TransferMoney(123123, 383838)
EXEC TransferMoney 123123, 383838
후자는 MySql에선 작동 안 하나?
내가 운영하는 서비스가 있는데... 구독을 했는데 구독기간이 안 늘어난다...<같은 에러...
암호화의 종류
admin'; --
Injection에 대비
로컬 스토리지가 아닌 db에 refresh token을 저장하는 과정에서 자꾸 에러가 났다. JsonWebTokenError가 나는 경우 '토큰이 조작되었습니다.' 라는 에러 메시지를 송출하도록 코드를 짰는데 로그인 후 토큰을 정상적으로 생성하는데도 자꾸만 저 에러 메시지가 뜨는 거였다...
res.cookie('accessToken', `Bearer ${accessToken}`, { httpOnly: true });
res.cookie('refreshToken', refreshToken, { httpOnly: true });
해당 로직은 authorization 쿠키를 사용하여 로컬 스토리지에 Bearer 형식 토큰을 저장하기 위해 만들어졌다. 일반적으로, Bearer 토큰은 HTTP Authorization 헤더에서 사용된다고 함!
그러나 내가 해당 쿠키를 사용하지 않고 액세스 토큰과 리프래시 토큰을 발급하는 로직을 새로 짰기 때문에 Bearer 형식으로 명시한 게 문제가 되었다...
원래 쿠키에 토큰을 저장할 때는 일반적으로 Bearer 접두어 없이 토큰 값만 저장한다고 함...ㅠ 하루 종일 이것만 붙들고 있었던 것 같음
res.cookie('accessToken', accessToken, { httpOnly: true });
res.cookie('refreshToken', refreshToken, { httpOnly: true });
이렇게 수정했더니 간단히 해결됐다.