오늘 한 일

  • 코드 캠프 과제 스타일링
  • 어제 jsx-> tsx로 오류 해결
  • 회사에서 Next js 배포해보기

 

회고

오늘 크게 한 건 없었고... 모든 작업 다 마치고 시간이 남아서 회사 웹페이지 만든게 있어서, 물리 서버에 회사에서 도커 이용해서 Next js 배포해 봤다. 앞으로 자주 사용해야겠다. 도커 사용해 보니 너무 신기했고, 주말에 도커 공부한 거 정리 좀 해야겠다.

그리고 집 와서 공부 좀 더 했는데 어제 해결했다고 생각한 것이 다시 해보니 안돼서.. 발목을 잡았다. 
17.0.2 버전을 깔아야 하는데  "@types/node": "^17.0.2", "@types/react": "^17.0.2" 실수로 다음과 같이 ^을 붙여서 오류가
발생했던 것이다. 이후에 "@types/node": "17.0.2", "@types/react": "17.0.2"으로 하니 잘되었다. ㅜㅜ 오타 조심해야겠다.
이거 때문에 어제부터 시간을 너무 많이 잡아먹었는데 그래도 정말 해결해서 다행이다.

'회고록' 카테고리의 다른 글

[회고록] 20231016  (0) 2023.10.16
[회고록] 20231015  (0) 2023.10.15
[회고록] 20231009  (1) 2023.10.09
[회고록] 20221007  (0) 2022.10.07
[회고록] 20201004  (0) 2022.10.04

오늘 한 일 

인프런 Codecamp detail 페이지 구축

 

[Next js] useRouter, useEffect data fetching

인프런에서 코드 캠프인강을 들으면서 최근에 Next js를 공부를 다시 시작하고있다. 해당 강의에서는 graphql을 사용하는데, rest api으로도 실습을 하고싶어서 간단하게 express를 사용해서 백엔드 서

mo4811.tistory.com

  • express 활용하여, board 게시판 api 구축

Nvm 설치시 오류 해결

 

[Javscript] nvm 설치시 python command not found 에러

에러 로그 nvm: install v14.17.0 failed! pyenv: python3.8: command not found 원인 mac m1 사용은 15 버전 밑으로 설치를 하면 다음과 같이 파이썬 에러가 발생 해결 nvm install 16 버전대를 설치하니 잘되었음 다른 방

mo4811.tistory.com

 

회고

오늘 인프런 강의를 보면서 js -> ts 변환하는 과정에서 버전 호환성 때문에 해결하면서 시간을 많이 잡아먹었다. 그래도 해결을 했으니 다행이긴하다.그리고 요즘 블로그를 잘 안썼는데, 계속해서 블로그랑 깃허브 꾸준히 하자. 

'회고록' 카테고리의 다른 글

[회고록] 20231015  (0) 2023.10.15
[회고록] 20231011  (0) 2023.10.11
[회고록] 20221007  (0) 2022.10.07
[회고록] 20201004  (0) 2022.10.04
[회고록] 20221002  (0) 2022.10.02

에러 로그

nvm: install v14.17.0 failed!
pyenv: python3.8: command not found

 

원인

mac m1 사용은 15 버전 밑으로 설치를 하면 다음과 같이 파이썬 에러가 발생

 

해결

nvm install 16 버전대를 설치하니 잘되었음
다른 방법이 있겠지만.. 15 버전 이후를 사용하자

 

16 버전대를 설치해 보니 잘됨

 

인프런에서 코드 캠프인강을 들으면서 최근에 Next js를 공부를 다시 시작하고있다.
해당 강의에서는 graphql을 사용하는데, rest api으로도 실습을 하고싶어서 간단하게 express를 사용해서 백엔드 서버를 구축하였다.
간단한 게시판을 만들고 있는데, 글의 detail 페이지를 만드는데, data를 가져오는 과정에서 문제를 겪었다. 

 

일단 먼저 프론트에서는 pages/boards/new/[boardId] BoardDetailPage 컴포넌트가 있고,

백엔드에서 /api/posts/1, /api/posts/2, /api/posts/:id와 같은 board의 정보를 담고있는 api가 있다.

useRotuer의 router.query를 사용하여, pages/boards/new/[boardId]에서 boardId를 가져왔다.
그러고 난후에, boardId값을 백엔드 페이지에 요청했는데 계속 id값을 못불러와서 전달이 안되어 백엔드에서 호출이 안되었다.

 

문제 코드

export default function BoardDetail() {
  const [data, setData] = useState();
  const [isLoading, setIsLoading] = useState(false);
  
  const router = useRouter();
  const { boardId } = router.query;

  useEffect(() => {
    (async () => {
      setIsLoading(true);
      try {
        const board = await getBoardById(boardId);
        setData(board);
      } catch (error) {
        console.log(error);
      } finally {
        setIsLoading(false);
      }
    })();
  }, []);

  return (
    <>
      <BoardDetailUI data={data} isLoading={isLoading} />
    </>
  );
}

알고보니 useEffect의 배열에 값에 boardId값을 전달안해주어서 발생한 것으로, boardId 값을 넣어주니 렌더링이 된다는 것을 확인했다.

 

수정된 코드

export default function BoardDetail() {
  const [data, setData] = useState();
  const [isLoading, setIsLoading] = useState(false);

  const router = useRouter();
  const { boardId } = router.query;

  useEffect(() => {
    if (!boardId) {
      return;
    }
    (async () => {
      setIsLoading(true);
      try {
        const board = await getBoardById(boardId);
        setData(board);
      } catch (error) {
        console.log(error);
      } finally {
        setIsLoading(false);
      }
    })();
  }, [boardId]); // 추가

  return (
    <>
      <BoardDetailUI data={data} isLoading={isLoading} />
    </>
  );
}

 

참고 URL

https://github.com/vercel/next.js/discussions/11484

터미널에 yarn dev or npm run dev 실행 시 http://localhost:3000 으로 진입이 불가능할 때 해결 방법

 

1) 루트 경로에 .babelrc 파일을 생성 후 다음과 같이 입력

{
  "presets": ["next/babel"],
  "plugins": []
}

2) 루트 경로에 있는 .eslintrc.json 파일을 열어 코드를 아래와 같이 수정

{
  "extends": ["next/babel","next/core-web-vitals"]
}

3) next.config.js에 공백 부분을 밑의 코드 처럼 수정함

const nextConfig = {
    reactStrictMode: true,
    swcMinify: true,
    experimental: {
        appDir: true,
    },
}

https://school.programmers.co.kr/learn/courses/30/lessons/181929

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

삼항 연산자와 reduce를 이용하여 만들었다.

 

<삼항 연산자 식>

참이 이였을 때 값 if 조건문 else 참이 아니였을 때 값

 

<코드>

from functools import reduce


def multiply(num_list):
    return reduce(lambda x, y: x * y, num_list)


def solution(num_list):
    return 1 if multiply(num_list) < sum(num_list) ** 2 else 0

 

https://www.acmicpc.net/problem/1292

from functools import reduce


def main():
    A, B = map(int, input().split(" "))

    i: int = 1
    nums: list[int] = []
    while True:
        if len(nums) > B:
            break
        nums.extend([i]*i)
        i += 1

    result = reduce(lambda val, acc: acc + val, nums[A-1:B], 0)
    print(result)


if __name__ == "__main__":
    main()

https://www.acmicpc.net/problem/1550

 

1550번: 16진수

첫째 줄에 16진수 수가 주어진다. 이 수의 최대 길이는 6글자이다. 16진수 수는 0~9와 A~F로 이루어져 있고, A~F는 10~15를 뜻한다. 또, 이 수는 음이 아닌 정수이다.

www.acmicpc.net

def main():
    print(int(input(), 16))


if __name__ == "__main__":
    main()

+ Recent posts