til_230411 ~ 12

김강현·2023년 4월 11일
0

블체스-3기-TIL

목록 보기
8/12

Express Routing

< user.js >

const express = require("express");

const router = express.Router();

router.get("/:id", (req, res) => {
  res.send("유저 조회");
});

module.exports = router;

< app.js >

const express = require("express");
const userRouter = require("./routes/user");

const app = express();

const port = 3010;

app.use("/user", userRouter);

app.get("/", (req, res) => {
  res.send("Hello, Express!");
});

app.listen(port, () => {
  console.log(`Server listening on port: ${port} 🚀🚀🚀`);
});

Middle ware

요즘은 서버 짜놓으면, 알아서 문서화 까지 해주는 패키지가 있다고 함!!

실시간 개발 모드

nodemon <= npm i nodemon

< package.json >

npm run dev 로 실행하면, 파일 바뀔 때마다 서버 재시작!

json post 요청을 받지 못함!
-> app.use(express.json()); 을 추가해주어, json 을 읽을 수 있도록 세팅!!

오류 보내기

  if (parseInt(id) >= todoData.length) {
    res.status(400).json({ error: "존재하지 않는 ID입니다." });
  }

포트

포트 번호는 공용 번호를 제외하고는(http, https 등) 커스텀하게 사용해도 됨!!

기타

<package.json> 에

"scripts": {
    "start": "node app.js",
    "dev": "nodemon app.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },

SOP (Same-Origin Policy)

  • 같은 출처를 가진 곳에서만 리소스를 요청할 수 있는 정책

CORS (Cross-Origin Resoure Sharing)

  • 교차 출처(다른 출처) 간의 리소스를 공유할 수 있는 정책
  • 서버 <-> 브라우저 간에 check를 함
  • 서버 <-> 서버 간에는 따로 check 하지 않음
    (포스트맨에서는 잘 됨)

브라우저에서 해결을 해버리면, 문을 활짝 열어버리게 됨.
따로 웹사이트를 올릴때, 정책 추가해주기!

CORS 라이브러리 설치 후 , Express 미들웨어로 추가!

뜬금 덧

포커 아웃츠 남았을때, 확률계산하는 알고리즘 진행중...

식을 대충 요약하자면, 나올 수 있는 모든 커뮤니티 카드를 potentialCommunityCards 에 담아서, 그 모든 경우마다 누가 이기는지를 리스트에 저장한다.

핸드가 2명일때 프리플랍 : (52 - 4) C 5 : 1712304
핸드가 3명일때 프리플랍 : (52 - 6) C 5 : 1370754
핸드가 9명일때 프리플랍 : (52 - 18) C 5 : 278256

calculatePokerRank 라는 함수는 7장의 카드를 받아, 족보/카드를 출력해준다!

  • calculatePokerRank 호출 회수
    핸드가 2명일때 프리플랍 : (52 - 4) C 5 : 1712304 2 : 3424608
    핸드가 3명일때 프리플랍 : (52 - 6) C 5 : 1370754
    3 : 4112262
    핸드가 4명일때 프리플랍 : (52 - 8) C 5 : 1086008 4 : 4344032
    핸드가 9명일때 프리플랍 : (52 - 18) C 5 : 278256
    9 : 2504304

대략적으로 약 300 - 400만회의 calculatePokerRank 함수 호출이 일어난다!
평균 25초가 걸리는데... 이건 말이 안됨!!

https://www.cardplayer.com/poker-tools/odds-calculator/texas-holdem
https://www.pokernews.com/poker-tools/poker-odds-calculator.htm

이런 사이트에서는 1초도 안걸려서 해주는데!!

노력 1. reduce 같은 함수가 오래걸리지 않을까?

  • 포카드, 풀하우스, 트리플 확인할때,
    numList로 변환한뒤에, 각 개수를 확인하기 위해 reduce 함수를 쓰는데, 그럴 가치 조차 없는 카드들은 배제하기 (카드 개수가 많으면 뜰수가 없는!)

택도 없네... 여전히 25초대

노력 2. straight 에 쓸데없는게 많다


5,4,3,2,a 스트레이트를 확인하기 위해, 만든 함수 getBottomStraight 가 쓸데없이 많이 도는 것 같아,
a,2,3,4,5 를 가지고 있을때만 실행하도록 함!

미미하지만 효과는 있는 것 같다!!

노력 3. reduce 함수의 중복

포카드, 풀하우스, 트리플, 투페어, 원페어
5개의 함수에서 reduce가 쓰이고 있다.
하나로 만들어서, 넘기면?
노력1은 수포로 돌아가지만, 효과는 있어보이는 느낌적인...?

흠 이게 효과가 있다고 해야할까? 진짜아 쬐끔 줌....

노력4. list 에 몇백만개 쌓이는게 느려지나?

  • 쌓지 말고, 계속 더해보자!

이전


흠... 미미하다... 쬐금...

노력5. 7장의 카드에 대한 filter가 너무 많음

순서 :
1. 스트레이트
2. 플러시
3. 포카드
4. 풀하우스
5. 트리플
6. 투페어
7. 원페어

각 모든 경우에, 배열값을 리턴함에 있어, 계속 filter 함수가 실행됨.
cards를 다 넣지 말고, 숫자만 넣고, filter 를 쓰지 않는 걸로!

스트레이트만 바꿔줬는데!!

에라라아ㅏㅇ아 모르곘다

profile
this too shall pass

0개의 댓글