오늘의 목표
✔️ 프로그래머스 코테 문제 풀기
✔️ 팀 프로젝트 ( 회원가입, 로그인 )
⏱️ 오늘의 일정
9:00 ~ 10:00 - 프로그래머스 코테 문제 풀기
10:00 ~ 11:00 - 스탠다드반 CS 강의
11:00 ~ 21:00 - 팀 프로젝트
19:00 ~ 20:00 - 챌린지반 수업
📜 프로그래머스 코테 문제 풀기
9:00 ~ 10:00 - 프로그래머스 코테 문제 풀기
대충만든 자판
function solution(keymap, targets) {
var answer = [];
for (let i = 0; i < targets.length; i++) {
answer.push(0);
for (let j = 0; j < targets[i].length; j++) {
const targetChar = targets[i][j];
let minBtnClick = 1000;
let findChar = false;
for (let k = 0; k < keymap.length; k++) {
for (let l = 0; l < keymap[k].length; l++) {
if (keymap[k][l] == targetChar) {
if (l < minBtnClick) {
minBtnClick = l + 1;
findChar = true;
}
}
}
}
if (findChar == false) {
answer[i] = -1;
break;
}
answer[i] += minBtnClick;
}
}
return answer;
}
문제 설명에 있는 대로 반복문을 사용해 구현했다.
반복문이 많아서 시간초과가 날까 싶었는데, 초과하는 예시는 없었다.
targets 의 개수 만큼 answer에 0을 넣고 해당 값을 증가시켜주는 방식으로 구현했다.
📜 스탠다드반 CS 강의
9:00 ~ 10:00 - 스탠다드반 CS 강의
IP 주소와 클래스풀 주소 체계에 대한 내용과 서브넷 마스크를 배웠다.
스탠다드반 수업내용은 따로 정리해 포스팅하고 링크를 남겨야겠다.
📜 팀 프로젝트
11:00 ~ 21:00 - 팀 프로젝트
본격적인 팀 프로젝트 구현 첫 날을 맞았다.
우선 기초적인 회원가입과 로그인을 구현해 Push 했다.
회원가입 api
// 회원가입
usersRouter.post('/Sign-Up', async (req, res, next) => {
const { name, nickname, id, password, confirmPassword } = req.body;
const isExistUser = await prisma.users.findFirst({
where: {
id: id
}
});
if (isExistUser) {
return res.status(404).json({ message: `이미 존재하는 아이디입니다.` });
}
if (confirmPassword === undefined) {
return res.status(404).json({ message: `비밀번호 확인을 입력하세요` });
}
if (password !== confirmPassword) {
return res.status(404).json({ message: `비밀번호와 비밀번호 확인이 일치하지 않습니다.` });
}
const hashedPassword = await bcrypt.hash(password, 10);
// 유저 생성해서 Users table에 저장
const user = await prisma.users.create({
data: {
name: name,
nickname: nickname,
id: id,
password: hashedPassword
}
});
// 랭킹 생성해서 Ranking table에 저장
const rank = await prisma.ranking.create({
data: {
userId: user.userId
}
});
// 스쿼드 생성해서 Squad table에 저장
const squad = await prisma.squad.create({
data: {
userId: user.userId
}
});
return res
.status(201)
.json({ message: `${id}로 회원가입이 완료되었습니다.` });
});
회원가입은 위 코드에서 추가할 부분이 없어보이기는 한다.
아마 닉네임 중복 점검 정도 추가하지 않을까 싶다.
로그인 api
usersRouter.post('/Sign-In', async (req, res, next) => {
// 아이디, 비밀번호 가져오기
const { id, password } = req.body;
// AccessToken이 있는지 확인
const { authorization } = req.headers;
// userDB에 아이디가 있는지 확인
const user = await prisma.users.findFirst({
where: {
id: id
}
});
// 아이디 검사
if (!user) {
return res.status(404).json({ message: `${id}은 존재하지 않는 아이디 입니다.` });
}
// 비밀번호 검사
if (!(await bcrypt.compare(password, user.password))) {
return res.status(404).json({ message: `비밀번호가 일치하지 않습니다.` });
}
// JWT로 AccessToken 생성
const s2cAccessToken = CreateAccessToken(id);
// JWT로 RefreshToken 생성
const s2cRefreshToken = CreateRefreshToken(id);
// 응답 헤더에 accessToken 기록
res.header("authorization", s2cAccessToken);
return res.status(200).json({ message: `${id}로 로그인에 성공했습니다.` });
})
로그인은 기본적으로 jwt로 accesstoken을 발급하고, 헤더에 저장해 발급해주는 방법을 우선 사용했다.
테스트를 해야하기 때문에 인증은 간단하게!
로그인은 RefreshToken을 활용해 로직을 구현하려고 한다.RefreshToken을 DB에 저장해 관리한다.AccessToken이 만료되면, RefreshToken으로 AccessToken의 재발행 여부를 판단한다.
📜 챌린지반 수업
19:00 ~ 20:00 - 챌린지반 수업
오늘 챌린지반 수업에서는 DB Query 중 집계함수와 그룹핑에 대한 내용을 배웠다.
추가로 숙제를 내줬는데 프로그래머스 SQL 문제 4개를 풀어오는 숙제다.
랜덤하게 챌린지반 수강생 중 3명을 골라 발표를 시킨다고 공지를 받았다.
SQL 문제를 풀고, TIL에 기록해야겠다.
'내일배움캠프' 카테고리의 다른 글
[내일배움캠프][TIL] 32일차 - 팀프로젝트 완성 (0) | 2024.09.23 |
---|---|
[내일배움캠프][TIL] 31일차 - 팀 프로젝트 (0) | 2024.09.20 |
[내일배움캠프][TIL] 29일차 - 팀 프로젝트 시작 (5) | 2024.09.14 |
[내일배움캠프][TIL] 28일차 - 개인과제 끝 (0) | 2024.09.13 |
[내일배움캠프][TIL] 27일차 - 개인과제, Node.js 강의 듣기 (4) | 2024.09.12 |