본문 바로가기
4기 카카오 프론트 전체 스터디 - 리액트 3주차 (HTTP 요청 + 주요 Hooks 정리) 시작하기 전에, hook에 대한 공식 문서 링크는 다음과 같다. 참고하자.https://ko.react.dev/reference/react/hooks 내장 React Hook – ReactThe library for web and native user interfacesko.react.dev오늘은 hook에 대한 글을 쓰겠다. 목표이번 글의 목표는 다음과 같다.fetch + useEffect 조합으로 API 요청 흐름 익히기주요 Hook (useState, useEffect, useRef) 실습성능 최적화용 Hook (useMemo, useCallback) 개념 잡기커스텀 Hook 구조 맛보기 (useInput)+ 여기에 커스텀 훅을 만드는 기준은 뭘까? (공통 로직 분리 기준) 에 대한 이야기도 진행해.. 2025. 5. 11.
보일러 플레이트 코드란? 보일러 플레이트 코드가 무엇인가? 컴퓨터 프로그래밍에서 보일러플레이트 코드 ( boilerplate code)는 거의 또는 전혀 변형 없이 여러 군데에서 반복되는 코드 섹션을 뜻한다.쓰면 좋은 점.가장 좋은 건 "개발 속도를 빠르게 만드는" 속도에 있다.어차피 계속 재사용될 코드이기 때문이고, 변형도 거의 없이 쓰기 때문이다.(참고한 글)https://aws.amazon.com/ko/what-is/boilerplate-code/ 상용구 코드란? - 상용구 코드 설명 - AWS보일러플레이트 코드는 여러 가지 상황에서 거의 또는 전혀 변경하지 않고 재사용할 수 있는 컴퓨터 언어 텍스트입니다. 이 용어는 상황에 따라 변경을 최소화하면서 문서 템플릿이나 보일러플aws.amazon.comhttps://brunch.. 2025. 5. 8.
코드 스플리팅에 대해.. 코드 스플리팅에 대한 좋은 글이 있어서 나의 티스토리에 기록으로 남기면서 동시에 공유할 겸 이 글을 작성해 본다.코드 스플리팅이 무엇인가? 우리가 자바스크립트로 애플리케이션을 개발하게 되면, 기본적으로는 하나의 파일에 모든 로직들이 들어가게 된다. 그럼, 프로젝트의 규모가 커질수록 자바스크립트 파일 용량도 커지게 된다. 용량이 커지면, 인터넷이 느린 환경에서는 페이지 로딩속도도 느려질 것.코드 스플리팅을 하게 되면, 지금 당장 필요한 코드가 아니라면 따로 분리시켜서, 나중에 필요할 때 불러와서 사용할 수 있다. 이를 통하여, 페이지의 로딩 속도를 개선할 수 있다.하는 방법> 관련 링크https://velog.io/@velopert/react-code-splitting 리액트 프로젝트 코드 스플리팅 정복하.. 2025. 5. 6.
깃허브 레포지토리의 Public / Private 전환 레포지토리의 전체 공개랑 프라이빗을 전환할 수 있다. (보통 시작은 퍼블릿으로 열어두긴 한다.)이 부분에 대한 좋은 글이 있어서 공유해 본다.https://vipdeveloper.tistory.com/147 GitHub 리포지토리 접근 권한 변경하기: Public에서 Private으로GitHub에서 리포지토리의 접근 권한을 변경하는 것은 협업과 프로젝트 관리에 중요한 요소입니다. 특히 Public과 Private 설정을 적절히 활용하면 코드의 공개 범위와 보안을 효과적으로 관리할 수vipdeveloper.tistory.com이 글을 참고하면 변환하는 방법을 알 수 있다.(프라이빗은 보통 무언가 정보를 보호할 때에 사용한다. 2025. 5. 4.
4기 카카오 프론트 전체 스터디 - 리액트 2주차 (조건부 렌더링, 리스트, 스타일링, 폼 다루기) 이번에는 리액트를 스타일링하는 것 그리고 양식 및 사용자 입력에 대한 폼 다루는 방법을 이야기해 보겠다.목표이를 통해 이룰 목표는 다음과 같다.조건부 렌더링리스트 렌더링 / keyStyled-components / Tailwind CSS폼 다루기하나식 해결해 보자.조건부 렌더링우리는 조건부에 따라서 렌더링을 부분적으로 일으킬 수 있다. 코드를 살펴보자.예시 1 (if문 작성)let content;if (isLoggedIn) { content = ;} else { content = ;}return ( {content} );심플하게 보면, if문을 이용해서 조건부로 렌더링을 할 수 있다.이보다 더 코드를 축약하고 싶다면 삼항연산자를 사용하면 된다.예시 2 (삼항연산자) {isLoggedIn .. 2025. 5. 1.
타입스크립트에서 타입은 집합이다. 타입스크립트에서 타입은 여러 개의 값을 포함하는 집합이다.집합은 동일한 속성을 갖는 여러 개의 요소들을 하나의 그룹으로 묶은 단위를 뜻한다.예를 들어..위 값을 모아둔 집합을 타입스크립트에서는 number타입이라고 부르는 것이다.이에 반해 리터널 타입은 "아주 작은 집합"이라고 볼 수 있다.즉, 숫자형 리터널 타입은 "숫자 타입" 안으로 들어간다.위 숫자 타입이 슈퍼타입(부모타입)으로 부를 수 있고, 밑의 리터널 타입이 서브타입(자식타입)으로 부를 수 있다.타입 호환성 2025. 4. 28.
4기 카카오 프론트 전체 스터디 - 리액트 1주차 (JSX, Props, 컴포넌트 구조) 1주차: JSX, Props, 컴포넌트 구조목표JSX 문법과 HTML과의 차이 이해Props를 통한 데이터 흐름 익히기컴포넌트 분리 및 재사용 기본토론 주제JSX와 HTML의 차이는 무엇인가?JSX 문법과 HTML과의 차이 이해function AboutPage() { return ( About Hello there.How do you do? );}위 문법이 jsx 문법이다. jsx는 javascript + xml을 합친 말이다.AboutHello there.How do you do?위 문법은 HTML이다.리액트는 무조건 "상위 태그"의 부모태그로 감싸있어야 한다. HTML은 뭐 그딴 거 없다.또한, jsx는 자바스크립트 기능도 지원하기 때문에 HTML보다 더 상위의 문.. 2025. 4. 26.
타입스크립트의 void와 never 타입 let a: void;a = undefined;이번에는 타입스크립트의 void와 never 타입을 다룰 것이다. 이번까지의 글로 기초적인 타입은 끝난다. (야호!)void 타입void이란 "공허" 즉, 아무것도 없다는 뜻이다. void는 아무것도 없음을 뜻한다. 예시 코드 >function func2(): void { console.log("hello");}물론 다음과 같이 변수의 타입으로도 void 타입을 지정할 수 있다. 그러나 void 타입의 변수에는 undefiend 이외의 다른 타입의 값은 담을 수 없다.let a: void;a = undefined;이때 tsconfig.json에 엄격한 null 검사 옵션을 해제하면 특별하게 void에도 null을 담을 수 있다.// "strictNullCh.. 2025. 4. 25.
Next.js에서 'use client'를 사용하는 경우 최신 버전인 Next.js 15 기준으로 이야기하겠다.시작하기 전에..기본적으로 Next.js 는 "서버 사이드 렌더링" 으로 렌더링이 된다.리액트에서는 클라이언트 사이드 렌더링을 하는데, 이 부분에서 가장 큰 차이가 난다.SSR / CSR 이 개념은 다음 글을 참고하자.https://codingworld2002.tistory.com/216 SSR 과 CSR (서버 사이드 렌더링/클라이언트 사이드 렌더링)Next.js나 리액트를 배울 때, 서버 사이드 렌더링이랑 클라이언트 사이드 렌더링 이야기가 나온다. 간단하게 말하면 렌더링에서 차이가 나는 것인데,서버 사이드 렌더링은 "서버"에서 미리 렌더링codingworld2002.tistory.com근데, 이때 "여러 가지" 경우로 인해 클라이언트 사이드 렌더링.. 2025. 4. 24.
마이크로 서비스 아키텍처이란? 마이크로서비스란?마이크로서비스란 독립적인 서비스들의 모음이 경량화 API를 통해 통신하는 애플리케이션 아키텍처의 한 유형을 말한다.가장 최근 온라인 구매 사이트에 방문했던 때를 떠올려 보자. 제품을 검색하기 위해 사이트에 있는 검색창을 사용했을 것입니다. 이러한 검색이 하나의 서비스가 된다. 또는 관련 제품 추천을 봤거나 장바구니에 상품을 추가함 > 이러한 것들 역시 서비스. 이러한 마이크로서비스들이 합쳐질 때 완벽하게 작동하는 하나의 애플리케이션이 성립된다.더욱 효율적인 애플리케이션 개발 방식마이크로서비스 아키텍처는 하나의 애플리케이션 내에 있는 각 핵심 기능이 독립적으로 존재할 수 있도록 소프트웨어를 구축하는 클라우드 네이티브 접근 방식이다.애플리케이션의 요소들이 이러한 방식으로 분리되면 개발 팀과 .. 2025. 4. 23.
Next.js에서 shadcn 사용하기 공식 문서 링크는 다음과 같다. 디테일한 건 공식 문서를 참고하자.https://ui.shadcn.com/docs/installation/next Next.jsInstall and configure shadcn/ui for Next.js.ui.shadcn.comshadcn이란리액트 ui 컴포넌트 라이브러리인 React MUI를 알 것이다. next.js에도 비슷한 게 있다. 그게 shadcn이다https://ui.shadcn.com/ Build your component library - shadcn/uiA set of beautifully-designed, accessible components and a code distribution platform. Works with your favorite f.. 2025. 4. 22.
타입스크립트의 Any타입 / Unknown타입 이번에는 "any타입"과 "unknown타입"에 대한 이야기를 해보겠다.any 타입단어에 힌트가 있다. 말 그대로 "모든 타입"을 자유롭게 사용할 수 있게 만드는 만능 타입이다.코드를 살펴보자.let anyVar: any = 10;anyVar = "hello";anyVar = true;anyVar = {};anyVar.toUpperCase();anyVar.toFixed();anyVar.a;만일 타입을 any로 선언하지 않고 number로 선언했다면 오류가 떴을 것이다. any로 선언하기에 문제가 생기지 않는다.any는 최대한 쓰지 말자.위 코드를 ts-node로 실행하면 런타임 오류가 발생한다.any 타입은 타입 검사를 받지 않는 타입이다. 문법과 규칙에서 자유롭지만 그만큼 위험하다.애초에 이런 식으로 .. 2025. 4. 19.
Next.js를 이용한 포트원 결제 구현(테스트) Next.js와 포트원을 이용한 결제 시스템을 구축하고자 한다. 이 부분에서 진행되는 흐름을 글로 작성하고자 한다. 이 글이 다른 사람들에게도 도움이 되면 좋을 것 같다. 참고로 테스트 용도이다. 실제 결제 시스템은 이것보다는 조금 더 복잡하긴 하다...시작하기 전에..시간이 흐름에 따라 나의 글은 "옛날 말"이 될 가능성이 있다. 버전의 차이. 혹은 Next.js의 업데이트 등등이 있을 것 같다. 이 점을 참고해 주길 바란다. 또한. 이 글은 조금씩 추가 및 수정 가능성이 포함되어 있다.시작.코드 샘플이 있어서 쉽다. 코드 샘플은 밑 링크를 참고하라.https://github.com/portone-io/portone-sample/tree/main/nextjs portone-sample/nextjs at.. 2025. 4. 18.
타입스크립트의 enum 타입 타입스크립트에서 enum타입은 "열거형 타입"이라고 불리는 타입이다.이 타입은 자바스크립트에서는 지원하지 않고, 타입스크립트에서만 지원한다.일단 코드 예시부터 보자.enum Role { ADMIN, USER, GUEST,}열거형은 위와 같이 여러 개의 값을 나열하는 용도로 사용한다.사용하고 싶다면 enum를 선언해 주면 된다.// enum 타입// 여러가지 값들에 각각 이름을 부여해 열거해두고 사용하는 타입enum Role { ADMIN = 0, USER = 1, GUEST = 2,}const user1 = { name: "이정환", role: Role.ADMIN, //관리자};const user2 = { name: "홍길동", role: Role.USER, // 회원};const us.. 2025. 4. 17.
TIL이 무엇인가? TIL이란?TIL은 Today I Learn 의 약어이다.한국말로 직역하면 오늘 내가 배운 것! 이라는 뜻.일일커밋 이라고 부르기도 한다. 오늘 공부 한 내용을 매일매일 기록하는 방법이라고 쉽게 이해하면 될 것 같다. (일종의 일기장이라고 보면 된다.)왜 함?목적은 두 가지.1. 매일 공부하는 것을 기록하기 위함.2. 성실하게 공부하고 그것을 커밋해서 잔디를 채우기 위함.사실. 2번 전략이 핵심이다. 다만 이 전략이 너무 유명해져서 면접관들도 알고 있다.그러나 나쁘게 보는 전략은 아니다. 절대로 마이너스되는 요소가 아니라는 것!토스의 프론트 리더분도 한다!https://github.com/milooy/TIL GitHub - milooy/TIL: Today I LearnedToday I Learned. C.. 2025. 4. 16.
타입스크립트의 타입 별칭과 인덱스 시그니처 이번에는 타입 별칭과 인덱스 시그니처에 대한 이야기를 해볼 것이다. 천천히 따라오자!타입 별칭타입 별칭이란, 여러 변수의 타입을 하나의 "타입"으로 모아서 선언한 이후 마치 변수처럼 쓸 수 있게 만드는 것이다. 예시코드를 살펴보자.// 타입 별칭type User = { id: number; name: string; nickname: string; birth: string; bio: string; location: string;};let user: User = { id: 1, name: '이정환', nickname: 'winterlood', birth: '1997.01.07', bio: '안녕하세요', location: '부천시',};User라는 타입을 따로 선언해 주고 이걸 user.. 2025. 4. 15.
인디해킹이란? 인디해킹이라는 개념 혹은 (직업?) 같은 것이 있다.인디해킹이란?심플하게 말하면 1인 개발자을 말한다. 혼자서 1인 프로덕트를 완성시키는 것이다. 프로덕트 안에는 결제를 넣어서 수익화를 한다.이 인디해킹이라는 개념은 외국에서 유명하다. 아직까지는 국내에 유명한 개념은 아니지만, 결국 널리 퍼질 것이라고 생각한다.levelsiolevelsio라는 인디해킹에서 가장 유명한 개발자가 있다. (사진 참고)이 사람은 무려 자신만의 프로덕트를 여러 개 만들어서 월에 1억을 넘게 번다. 그것도 "혼자서" 말이다.이 분의 sns는 다음 링크를 참고하자.https://x.com/levelsio X의 @levelsio님(@levelsio)🇪🇺@euaccofficial ✈️https://t.co/UVJczDtp9x $4.. 2025. 4. 13.
포트원으로 결제 모듈 개발하는 것에 대하여.. 이번엔  포트원을 이용해서 결제 모듈을 세팅하는 연습을 해볼 것이다. 언어는 Next.js를 채택하였다. 이 언어를 채택한 이유는 프론트엔드 진영에서 가장 핫하고, 풀스택으로 개발을 진행할 수 있기에 선택하였다.이거 왜 하는거임?"인디해킹"이라는 것이 있다. 이건 추후에 글을 작성할 것이다.개인적으로, 개발자가 풀스택. 즉 화면을 다루는 프론트와, 서버와 데이터를 다루는 백엔드를 할 수 있다면? 그리고 그 기술에 "결제 모듈"을 붙일 수 있다면? 이론적으로 보나, 실질적으로 보나 "하나의 완전한 프로덕트"를 만들어 낼 수 있다.게다가. 이제는 Next.js나 Remix 같은 풀스택 프레임워크가 등장하였으니, "1인 개발"을 하는 난이도가 기하급수적으로 낮아졌다. 심지어 커서 AI, bolt AI 같은 a.. 2025. 4. 12.
타입스크립트의 객체를 다루는 방식 이번에는 타입스크립트에서 객체를 다루는 방식을 이야기해 보겠다.일단 코드는 다음과 같으니 참고하길 바란다.예시 코드 >let user: { id?: number; name: string;} = { id: 1, name: '이정환',};let config: { readonly apiKey: string;} = { apiKey: 'MY API KEY',};// config.apiKey = "hacked";먼저, 객체를 선언한다. 여기까지는 자바스크립트와 동일하다.이때, 내가 객체에 할당하고 싶은 변수에 대한 타입을 작성해 두면 된다.객체 리터럴 타입let user: { id: number; name: string;} = { id: 1, name: '이정환',};객체 리터럴 타입이란, 중괄호.. 2025. 4. 10.
타입스크립트의 배열과 튜플 이번에 배운 것은 "배열과 튜플"이다. 타입스크립트 뿐 아니라, 언어를 배우면 꼭 알아가는 것이 배열이다.일단 코드는 다음과 같다. 참고하자.// 배열let numArr: number[] = [1, 2, 3];let strArr: string[] = ["hello", "im", "winterlood"];let boolArr: Array = [true, false, true];// 배열에 들어가는 요소들의 타입이 다양할 경우let multiArr: (number | string)[] = [1, "hello"];// 다차원 배열의 타입을 정의하는 방법let doubleArr: number[][] = [ [1, 2, 3], [4, 5],];// 튜플// 길이와 타입이 고정된 배열let tup1: [numb.. 2025. 4. 9.