내일배움캠프

[내일배움캠프][TIL] 27일차 - 개인과제, Node.js 강의 듣기

program-yam 2024. 9. 12. 01:09

오늘의 목표

더보기

✔️ 프로그래머스 코테 문제 풀기

✔️ 개인과제

✔️ Node.js 강의 듣기


⏱️ 오늘의 일정

9:00 ~ 10:00 - 프로그래머스 코테 문제 풀기
10:00 ~ 13:00 - Node.js 강의 듣기

13:00 ~ 14:00 - 점심시간

14:00 ~ 20:00 - Node.js 강의 듣기

20:00 ~ 21:00 - 개인과제 기본 완료


📜 프로그래머스 코테 문제 풀기

9:00 ~ 10:00 - 프로그래머스 코테 문제 풀기

 

숫자 짝꿍 문제를 풀었다. 

 

function solution(X, Y) {
    let newSet = [];
    var answer = '';

    let findIndex = [];    

    for (let i = 0; i < X.length; i++) {        
        for (let j = 0; j < Y.length; j++) {
            if (X[i] === Y[j]) {
                let duplicateIndex = false;
                for (let k = 0; k < findIndex.length; k++) {
                    if (findIndex[k] == j) {
                        duplicateIndex = true;
                        break;
                    }
                }

                if (duplicateIndex == false) {
                    newSet.push(X[i]);
                    findIndex.push(j);
                }                
            }
        }
    }

    let answerArray = Array.from(newSet);
    answerArray.sort((a, b) => b - a);

    if (answerArray.length == 0) {
        return "-1";
    }
    else if (answerArray[0] == 0) {
        return "0";
    }
    else {
        return answerArray.join("");
    }    
}

 

 

📜 Node.js 강의 듣기

10:00 ~ 20:00  - Node.js 강의 듣기

 

드디어 길고 길었던, Node.js 강의를 모두 다 들었다.

한 강의당 시간이 꽤 길고, 블로그에 정리하면서 이해안되는 부분은 구글로 찾고 하느라 시간이 매우 오래걸렸다. ㅠㅠ

이번주 남은 시간 동안 다시 한번 복습해 빠진 부분이 있으면 추가로 글을 작성해야겠다.

 

2024.09.11 - [Javascript] - [Javascript] 로그 ( Log ), 에러 처리 ( Error Handling ) 미들웨어

 

[Javascript] 로그 ( Log ), 에러 처리 ( Error Handling ) 미들웨어

로그 미들웨어 ( Log Middleware )는 클라이언트의 모든 요청 사항을 기록해 서버의 상태를 모니터링하기 위한 미들웨어다. 로그 미들웨어는 클라이언트의 요청을 기록해 어플리케이션을 모니터링

program-yam.tistory.com

 

2024.09.11 - [내일배움캠프/실습] - [Javascript][실습][게시판 프로젝트] 게시글 API

 

[Javascript][실습][게시판 프로젝트] 게시글 API

게시글 생성 API 비즈니스 로직게시글을 작성하려는 클라이언트가 로그인된 사용자인지 검증한다.게시글 생성을 위한 title, content를 body로 전달받는다.Posts 테이블에 게시글을 생성한다. 게시글

program-yam.tistory.com

 

2024.09.11 - [데이터베이스] - [DATABASE] 트랜잭션 ( Transaction )

 

[DATABASE] 트랜잭션 ( Transaction )

트랜잭션 ( Transaction )은 작업의 완전성을 보장해주기 위해 사용되는 개념이다.특정한 작업을 전부 처리하거나, 전부 실패하게 만들어 데이터의 일관성을 보장해주는 기능이다. 트랜잭션 ( Transa

program-yam.tistory.com

 

2024.09.11 - [데이터베이스] - [DATABASE] Prisma Transaction ( [게시판 프로젝트] 회원가입 적용, 사용자 히스토리 테이블 생성해 적용해보기 )

 

[DATABASE] Prisma Transaction ( [게시판 프로젝트] 회원가입 적용, 사용자 히스토리 테이블 생성해 적용

Prisma의 트랜잭션은 여러개의 쿼리를 하나의 트랜잭션으로 수행할 수 있는 Sequential 트랜잭션과 Prisma가 자체적으로 트랜잭션의 성공과 실패를 관리하는 Interactive 트랜잭션이 존재한다. Sequential

program-yam.tistory.com

 

트랜잭션에 대해 다시 한번 개념을 이해하고, 실습을 통해 더욱 더 이해를 하게 되었다.

 

 

📜 개인과제 기본 완료

20:00 ~ 21:00 - 개인과제 기본 완료

 

 

개인 과제 기본을 완료했다. 내일 목요일 ( 9/12 ) 정오까지 제출이긴 한데...

쪽잠을 자더라도 도전 과제를 구현하고 자야겠다.

 

어제 의문점을 가졌던 로그인에서의 AccessToken과 RefreshToken의 사용방법에 대한 질문을 튜터님에게 했다.

로그인 단계에서는 보통 안전하다고 믿고 가는 경우도 있고, 내가 의문을 가졌던 RefreshToken이 변조되었을 경우에 해당 사용자를 거부 할 수도 있고 이처럼 회사마다 방식이 각각 다르다고 전달을 받았다.

 

지금 현재 내코드에서는 무조건 아이디와 비밀번호만 같다면 로그인 성공처리를 해주기는 하는데, 로그인 거부 할 수 있는 방법을 찾아 거부 할 수 있도록 해야겠다.

 

아이템 수정

// 아이템 수정
router.post('/item-edit/:itemCode', async (req, res, next) => {
    const { itemCode } = req.params;
    const editData = req.body;

    // 아이템을 찾음
    const searchItem = await prisma.items.findFirst({
        where: {
            itemCode: +itemCode
        }
    });

    // 못찾으면 에러 반환
    if (!searchItem) {
        return res
            .status(401)
            .json({ message: `수정할 아이템이 서버에 존재하지 않습니다.` });
    }

    // 가격 속성 삭제해서 가격 수정할 수 없게 함
    delete editData.itemPrice;

    // 아이템 나머지 능력치가 정해지지 않을 경우 각 데이터를 0으로 초기화
    if (editData.itemStr === undefined) {
        editData.itemStr = 0;
    }

    if (editData.itemDex === undefined) {
        editData.itemDex = 0;
    }

    if (editData.itemInt === undefined) {
        editData.itemInt = 0;
    }

    // item 테이블 업데이트
    await prisma.items.update({
        where: {
            itemCode: +itemCode
        },
        data: {
            ...editData
        }
    });

    return res
        .status(200)
        .json({ message: `${itemCode} 아이템 수정 성공` });
});

 

아이템 전체 조회

// 아이템 전체 조회
router.get('/item', async (req, res, next) => {
    // itemCode를 기준값으로 해서 오름차순으로 정렬해 데이터를 가져옴
    const allItems = await prisma.items.findMany({
        select: {
            itemCode: true,
            itemName: true,
            itemPrice: true,
            itemStr: true,
            itemDex: true,
            itemInt: true
        },
        orderBy: {
            itemCode: 'asc'
        }
    });

    // 조회한 전체 아이템 반환
    return res.status(200).json({ allItems });
});

 

특정 아이템 조회

// 특정 아이템 조회
router.get('/item/:itemCode', async (req, res, next) => {
    const { itemCode } = req.params;

    // itemCode로 item 테이블에서 아이템 찾음
    const item = await prisma.items.findFirst({
        where: {
            itemCode : +itemCode
        },
        select: {
            itemCode: true,
            itemName: true,
            itemPrice: true,
            itemStr:true,
            itemDex: true,
            itemInt:true,
        }
    })

    // 아이템을 찾지 못하면 에러 반환
    if (!item) {
        return res
            .status(401)
            .json({ message: '조회하고자 하는 아이템을 찾을 수 없습니다.' });
    }

    // 찾은 아이템 정보 반환
    return res
        .status(200)
        .json({ item });
});