상점 id랑 가챠상품 id랑 이어져있어야 한다.
-> 이어져는 있고, product - gacha가 1:N 관계.
한개의 상품에 여러 가챠템이 올 수 있다고 생각해서 이렇게 연결.
그러면 난 뭘해주고 싶은가 -> 일단 상품이 있는지부터 불러와본다.
(나는 이 작업을 위해 DB에 데이터 삽입이 먼저 필요했다) -> 그럼 삽입 라우터부터 만들자
INSERT INTO `our_futsal`.`product` (productName, price, productInfo)
VALUES ('10회 뽑기', 50000, '조금 좋은 선수가 있을까?')
UPDATE Temp_Table SET field3='변경된 값' WHERE field1 = 'data2';
일단 이런 식으로 데이터를 집어넣었다. 가챠는 프로덕트 테이블의 가격을 참조하기 때문.
프로덕트는 가격이 쓰인 포장박스 같은거고, 가챠는 그 안에 들어가는 상품인 셈.
Math.random은 0이상 1미만 사이에서 난수를 발생시켜 리턴해준다.
(0.000...1 ~ 0.999....9 사이)
여기서 추출되는 숫자를 깔끔하게 정수부만 취하기 위해 보통 Math.floor를 바깥에 입히는데,
문제는 이게 버림이라서 0이 나오면 안되는 경우에도 0이 출력된다. 그래서 보통 + 1을 해주는 것.
-> 이걸 응용하면 최소값도 1이 아니고 내가 원하는 숫자 범위로 만들 수 있다. 참고 블로그
ex) 5 ~ 40 사이의 수를 만들어주고 싶으면 Math.floor(Math.random()*(40 - 5 + 1)) + 5
(두 수 모두 범위에 들어가므로 +1. 최소값 이상 최대값 미만 범위로 잡히기 때문)
Math.random()이 내뱉는 수가 굉장히 촘촘하기 때문에(대충 소수 15번째 자리 정도 뱉는다) 장점이 있다.
Math.random() * 10 + 1
하면 1~10 사이의 수다.
그러면Math.random() * 60 + 1
하면 1~60 사이의 수가 될 것이다. 어떻게?
-> * 10
에서는 그냥 Math.random() 값대로 수가 나오겠지만, * 60을 하게 되면 0.5대의 수를 곱한다고 무조건 30이 나오지 않는다. 29는 아니겠지만 31 일수도 있고 심지어는 32 일수도 있을 것. 0.59라면 35도 나온다. 0.6인 수 전까지 그 사이에서 자유롭게 나오는 것.
아주 잘 설명되어 있는 참고 블로그
그러나 위 블로그에도 없었던 prisma.(테이블이름).count - 참고 블로그2 에서 발견
-> 내가 하고싶었던 건 테이블 내 컬럼의 갯수가 몇개인 지 세고 싶었던 것인데, 정확히 그 기능을 발견했다.
instanceOf를 쓰는 것이 브루트포스로 대조하는 것 보다 훨씬 낫다.
'그래서 그걸 왜 쓰는거죠?' 라는 부분까지 의문을 가지는 것이 좋다!
validation에 대한 코드가 보통 길다.
-> 중복되는 기능은 함수로 뽑고, 중복되는 내용은 미리 정의해두고 스프레드 문법 쓰면 훨씬 깔끔하다.
함수로 뽑았을 때 변할 가능성이 있는 값은 함수의 인자로 받으면 좋다. JWT의 expiresIn 같은 값들.
MVC 패턴은 디자인 패턴이라 자바 스프링에서만 쓰는 것이 아니다.
router를 import할때는 Camel Case로 맨앞 두문자를 소문자로 써주자. JS 진영에서는 Pascal 문법을 쓰지 않는다. -> 맨 앞이 대문자인 것은 클래스일 때만.
이건 튜터님도 말씀해 주셨지만 제로초님도 이렇게 말씀해주셨다. 당장 내배캠 동안은 쉽지 않겠지만 코테는 파이썬으로...?
https://ko.javascript.info/<- 여기 내용들 다 읽고도 코테 못풀겠는건 문법을 모르는게 아니다
Q. 그러면 노드도 처음부터 멀티스레드로 하면 되지 않았어요? 된다면서요
A. 멀티스레드 코드짜는거 진짜 정말 넘사벽으로 어렵다. 사람 머리로 이해할 수 없을 정도로 어려움!
Q. 노드도 멀티쓰레드인데 JS돌리면 한개만 차지한다면서요. 그럼 나머지 쓰레드는 뭐해요?
A. 여러 코드를 동시에 돌릴 준비를 하고 있다가, 특정 조건을 만족하면 돌아갑니당.
-> 일단 점원(스레드)이 주문만 좌라락 받아놓은 다음에, 요리 다 되면 불러드릴게요! 하고 손님들을 돌려보내는 것.
-> 그래서 노드는 이 '점원(스레드)' 관리를 진짜 잘해야 한다. 점원이나 주방장이 쓰러지는 순간 가게 운영이 멈추기 때문.
-> 그래서 나온게 멀티 프로세싱 - 점원(스레드)이 한명인 체인점(프로세스)가 여러 군데 있어서 손님을 분산시키는 것
Q. 그러면 노드말고 다른 언어로 멀티 스레드 코딩 하면 비동기 안해도 돼요?
A. 아뇨. 멀티 스레드 하고도 비동기 해야됩니다. 근데 멀티 스레드 코딩 진짜 헬 헬 헬 헬 어려움.
싱글스레드라 리소스를 적게 사용함
-> 그런데 CPU 코어도 한개만 사용해서 세월아네월아처럼 느껴질 수도
I/O 작업이 많은 서버로 적합
-> CPU 사용량이 많은 서버로는 부적합! (like 진상손님 한명) 이러면 서버가 정신을 못차린다!
-> 이미지 리사이징, 알고리즘 처리, 암호화 등... 이런걸 위해서 멀티스레딩을 열어준 것임
멀티 스레드 방식보다 쉬움 (점원 한명이어도 오픈 가능)
-> 이 점원 한명(싱글스레드) 안쓰러지게 겁나 관리 잘해야 함!
자바스크립트를 사용함 - 웹개발자가 가장 많기에 생태계가 크고 사라질 염려가 적다!
-> 어중간한 성능.. 노드보다 성능 좋은 거 찾으려면 많다. 진짜 성능 짱짱한건 C/C++/Rust 같은 것들.
-> 그러나 어떤 언어의 모든 것을 다 쓰고도 한계가 보인다면 그 때가 언어를 바꿀 때다.
JSON 형식과 호환하기 쉽다
-> 타 언어는 JSON으로 호환을 해야 하는데, JS는 그런게 필요없다.
-> JSON이 JavaScript Object Notation 이기 때문
JS는 런타임이기 때문에 웹, 앱, 기타 뭐든 붙을 수 있다. 웹, 모바일, 데스크탑 애플리케이션에도 사용한다.
웹 - 앵귤러, 리액트, 뷰, 메테오
앱 - 리액트 네이티브
데스크탑 - 일렉트론
당신이 회사원이라면 LTS를 쓰는 것이 정신건강에 이로울 것이다
제로초님은 웹스톰이라는 유료 프로그램을 쓴다고. 회사가 사준다면 웹스톰 추천
회사가 안 사주거나 내 컴이 후지다면 VS Code를 쓰자 -> 웹스톰은 램을 최소 4기가 이상 먹음
Node라고 JS만 쓰는거 아니다. Python이나 C++도 필요하다. 이거 안 깔면 라이브러리 잘 안 돌아갈거다.