사용자가 로그인해서 사용할 수 있는 블로그를 실제 배포해서 운영까지 해보려고 제작 중 일반 텍스트를 입력해서 블로그를 쓰는 대신 개발자에 특화된 블로그이므로 github에 올리는 것처럼 마크다운으로 작성할 수 있게 react-markdown 라이브러리를 적용 중 확인한 오류이다.

오류 코드

아래와 같이 오류 코드가 나왔다. 새로운 페이지에 방문했을 경우, 강제 새로고침을 했을 경우 로컬스토리지에 theme라는 객체의 값이 할당되어 있지 않아서 생긴 오류이다.

해결방안으로는 오류 코드에도 나와있듯이 localStorage에 값이 없을 경우의 예외처리를 추가해주면된다.

코드를 작성할 때 예외처리는 중요한데 이것을 놓친것을 지금에서야 확인했다. 아직 프론트화면 구성 단계에서 맞이했기 때문에 다행이라고 생각한다.

- error src/app/recoil/state/themeState.ts (8:31) @ localStorage
- error ReferenceError: localStorage is not defined
  at getTheme (./src/app/recoil/state/themeState.ts:13:26)
  at eval (./src/app/recoil/state/themeState.ts:22:14)
  at (sc_client)/./src/app/recoil/state/themeState.ts (/Users/homile/Desktop/Projects/NextJS-Blog/nextjs-blog/.next/server/app/write/page.js:1778:1)
  at __webpack_require__ (/Users/homile/Desktop/Projects/NextJS-Blog/nextjs-blog/.next/server/webpack-runtime.js:33:42)
  at eval (./src/app/recoil/utils/Theme.tsx:10:75)
  at (sc_client)/./src/app/recoil/utils/Theme.tsx (/Users/homile/Desktop/Projects/NextJS-Blog/nextjs-blog/.next/server/app/write/page.js:1789:1)
  at __webpack_require__ (/Users/homile/Desktop/Projects/NextJS-Blog/nextjs-blog/.next/server/webpack-runtime.js:33:42)
  6 | export const getTheme = (): ThemeEnums => {
  7 |  // 로컬스토리지 theme의 값을 추출
> 8 |  const theme: string = String(localStorage.getItem("theme"));
   |                ^
  9 | 
 10 |  // theme가 없을 경우 0 === ThemeEnums.DARK
 11 |  if (theme === ThemeEnums.DARK) {

수정 전 코드

import { atom } from "recoil";

// type
import { ThemeEnums } from "@/app/types/enum/themeEnum";

export const getTheme = (): ThemeEnums => {
  // 로컬스토리지 theme의 값을 추출
  const theme: string = String(localStorage.getItem("theme"));

  // theme가 없을 경우 0 === ThemeEnums.DARK
  if (theme === ThemeEnums.DARK) {
    return ThemeEnums.DARK;
  }

  return ThemeEnums.LIGHT;
};

export const themeState = atom<ThemeEnums>({
  key: "themeState",
  default: getTheme(), // 로컬스토리에서 가져온 값을 바로 사용
});

 

수정 후 코드

import { atom } from "recoil";

// type
import { ThemeEnums } from "@/app/types/enum/themeEnum";

export const getTheme = (): ThemeEnums => {
  // 로컬스토리지 theme의 값을 추출
  if (typeof window !== "undefined") {
    const theme: string = String(localStorage.getItem("theme"));

    // theme가 없을 경우 0 === ThemeEnums.DARK
    if (theme === ThemeEnums.DARK) {
      return ThemeEnums.DARK;
    }

    return ThemeEnums.LIGHT;
  }

  return ThemeEnums.LIGHT;
};

export const themeState = atom<ThemeEnums>({
  key: "themeState",
  default: getTheme(), // 로컬스토리에서 가져온 값을 바로 사용
});

 

위와 같이 type of window !== "undefined"를 추가하여 없을 경우의 예외처리를 해주면 해결되는 간단한 문제이다. 사소한 실수하나가 프로젝트를 망칠 수 있기 때문에 조금더 코드를 작성하는 것이 중요하다고 생각했다.

 

앞으로 작성 페이지를 마크다운으로 변경하고, 백엔드 스키마를 작성한 뒤 연동하는 과정만 하면 12월 안에 작게나마 배포할 수 있을 것 같다.
배포는 CloudFlare, DB는 MongoDB를 사용하여 배포할 생각이다.

'Daily > 개발관련' 카테고리의 다른 글

Web 3.0이란?  (0) 2023.02.06
[VS Code] 설치  (0) 2022.04.29

이번에 취업 준비를 하면서 NFT/블록체인에 대한 회사들이 늘어가고 있다는 것을 알게 되었고, Web 3.0이라는 단어가 눈에 띄게 많아졌다. 그래서 Web 3.0이란 무엇인가에 대해 학습한 내용을 작성해보고자 한다.

(틀린점이 있다면 말씀해주세요!)

 

Web 3.0을 알기전에 Web1.0과 Web 2.0에 대해서도 알아야한다.

 

Web 1.0이란?

  • Web 2.0이 유행하기 전의 WWW(World Wide Web) 상태이다.
  • 기본적인 읽기 기능만 가능한 상호작용이 없는 정적인 웹 페이지를 말한다.
    • ex) 홈페이지

Web 2.0이란?

  • 2000년대 부터 등장하기 시작했다.
  • Web 1.0에서는 읽기만 가능했지만 Web 2.0은 양방향 소통이 가능한 웹 페이지를 말한다.
  • 읽기, 쓰기, 참여, 공유 등 사용자가 직접 정보를 생산할 수 있다.
    • ex) 블로그, 위키 등
  • Web 2.0에서는 양방향 소통을 할 수 있다는 장점이 있지만 그로인한 단점도 존재한다.
  • 가장 큰 단점으로는 개인정보를 수집, 관리를 할 때 개인정보가 유출될 수 있다는 단점이 있다.

 

Web 3.0이란?

  • 시맨틱 웹(Semantic Web)을 말한다.
    • ex) 인공지능, NFT, 블록체인, 3D 그래픽 등
  • 시맨틱 웹이란 컴퓨터가 인간들이 사용하는 정보를 이해하고 상황과 맥락에 맞는 개인 맞춤형 정보를 제공하는 지능형 웹이다.

 

 

참고자료

시맨틱 웹 

web 3.0

'Daily > 개발관련' 카테고리의 다른 글

[project]Blog 제작 도중 theme localStorage 오류  (0) 2023.12.13
[VS Code] 설치  (0) 2022.04.29

Visual Studio Code란?

  • 마이크로소프트에서 개발한 가장 대중적인 소스 코드 편집기이다. 
  • Windows, Linux, Mac 어느 운영체제에서도 사용이 가능하다.
  • 다양한 extension을 사용하여 개발자의 취향에 맞게 환경을 설정 할 수 있다.

 

Visual Studio Code 설치방법

1. 다운로드 사이트에 접속한다. https://code.visualstudio.com/Download

 

Download Visual Studio Code - Mac, Linux, Windows

Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows. Download Visual Studio Code to experience a redefined code editor, optimized for building and debugging modern web and cloud applications.

code.visualstudio.com

 

2. 자신의 운영체제에 맞는 다운로드를 진행한다.

 

 

업데이트 확인 방법

1. windows: help → Check for Updates... 클릭  (윈도우에서는 거의 자동 업데이트가 되는 듯 하다.)

 

2. Mac: Code → Check for Updates... 클릭

 

2-1. Mac 업데이트 확인 시 오류 발생할 경우

필자는 다운로드에서 바로 VSCode를 사용하고 있었는데 응용 프로그램으로 파일을 옮겨서 사용하게 되면 업데이트 확인 오류가 해결이 되었다.

 

 

📝 참고자료

'Daily > 개발관련' 카테고리의 다른 글

[project]Blog 제작 도중 theme localStorage 오류  (0) 2023.12.13
Web 3.0이란?  (0) 2023.02.06

+ Recent posts