
웹 개발을 시작하려고 조사했습니다.
React가 가장 인기 있었습니다.
검색하다 보니 Next.js를 많이 추천하더군요.
Next.js의 장점:
React로도 가능합니다:
솔직히 말하면, Next.js를 배워보고 싶었습니다.
요즘 많이 쓰이는 기술이고, 이력서 사이트 만들기에도 적합해 보였습니다.
일단 Next.js로 시작해보고, React도 따로 배워볼 생각입니다.
어차피 Next.js가 React 기반이니까 둘 다 경험해보면 좋을 것 같습니다.
Next.js를 사용하려면 Node.js가 필요합니다.
터미널을 열고 확인했습니다.
node -v
v20.11.0
이미 설치되어 있었습니다.
npm -v
10.2.4
npm도 있었습니다.
만약 command not found 에러가 나온다면:
설치 방법:
node -v로 확인왜 LTS 버전인가요?
공식 문서를 보고 따라했습니다.
npx create-next-app@latest
npx란?
create-next-app을 다운로드하고 바로 실행합니다npx가 없다면?
만약 command not found: npx 에러가 나온다면:
npm install -g npx
또는 Node.js를 최신 버전으로 업데이트하세요.
(npm 5.2.0 이상부터 npx가 포함됩니다)
명령어를 실행하니 질문들이 나왔습니다.
1. 프로젝트 이름
✔ What is your project named? › my-resume
my-resume라고 입력했습니다.
2. TypeScript 사용
✔ Would you like to use TypeScript? › Yes
Yes를 선택했습니다.
왜 TypeScript인가요?
3. ESLint 사용
✔ Would you like to use ESLint? › Yes
Yes를 선택했습니다.
ESLint란?
4. Tailwind CSS 사용
✔ Would you like to use Tailwind CSS? › Yes
Yes를 선택했습니다.
Tailwind CSS란?
className="text-xl font-bold" 형식으로 스타일 적용5. src 디렉토리 사용
✔ Would you like your code inside a `src/` directory? › Yes
Yes를 선택했습니다.
왜 src 디렉토리를 사용하나요?
app/src/ 구조와 비슷6. App Router 사용
✔ Would you like to use App Router? (recommended) › Yes
Yes를 선택했습니다.
App Router란?
app/about/page.tsx → /about7. Import alias
✔ Would you like to customize the import alias? › No
No를 선택했습니다.
Import alias란?
@/components/Button 형식으로 import@/*)으로 충분합니다Creating a new Next.js app in /Users/mozzmily/my-resume.
Using npm.
Installing dependencies:
- next
- react
- react-dom
Installing devDependencies:
- typescript
- @types/node
- @types/react
- @types/react-dom
- eslint
- eslint-config-next
- tailwindcss
added 357 packages in 24s
Success! Created my-resume
프로젝트가 생성되었습니다!
cd my-resume
code .
VS Code가 열렸습니다.
VS Code를 사용하는 이유:
VS Code가 없다면?
npm run dev
터미널 출력:
▲ Next.js 15.1.0
- Local: http://localhost:3000
✓ Ready in 818ms
포트 3000이란?
localhost:3000으로 브라우저에서 접속http://localhost:3000을 열었습니다.

화면이 떴습니다!
VS Code에서 파일들을 봤습니다.
my-resume/
├── src/
│ └── app/
│ ├── page.tsx
│ ├── layout.tsx
│ └── globals.css
├── public/
├── package.json
├── tsconfig.json
└── next.config.ts
src/app/page.tsx
@Composable 함수와 비슷src/app/layout.tsx
public/
res/ 폴더와 비슷package.json
tsconfig.json
next.config.ts
src/app/page.tsx를 열어봤습니다.
export default function Home() {
return (
<div>
<h1>To get started, edit page.tsx</h1>
</div>
);
}
Jetpack Compose:
@Composable
fun HomeScreen() {
Column {
Text("안녕하세요!")
}
}
React:
export default function Home() {
return (
<div>
<h1>안녕하세요!</h1>
</div>
);
}
비교:
@Composable → export default functionColumn → <div>Text → <h1>함수로 UI를 만드는 건 똑같습니다!
page.tsx를 수정했습니다.
export default function Home() {
return (
<div className="flex min-h-screen flex-col items-center justify-center">
<h1 className="text-4xl font-bold">안녕하세요!</h1>
<p className="mt-4 text-xl">8년차 Android 개발자입니다.</p>
</div>
);
}
레이아웃:
flex: Flexbox 사용min-h-screen: 최소 높이 100vh (화면 전체)flex-col: 세로 방향items-center: 가로 중앙 정렬justify-center: 세로 중앙 정렬텍스트:
text-4xl: 큰 글씨 (36px)font-bold: 굵은 글씨mt-4: 위 마진 (16px)text-xl: 큰 텍스트 (20px)Column(
modifier = Modifier
.fillMaxSize()
.padding(16.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(
text = "안녕하세요!",
fontSize = 36.sp,
fontWeight = FontWeight.Bold
)
Spacer(modifier = Modifier.height(16.dp))
Text(
text = "8년차 Android 개발자입니다.",
fontSize = 20.sp
)
}
Compose의 Modifier와 Tailwind의 className이 비슷합니다!
저장했습니다.
브라우저가 자동으로 새로고침됐습니다.

Hot Reload!
Android Studio의 Apply Changes처럼 자동 반영됩니다.
src/app/layout.tsx를 열어봤습니다.
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="en">
<body>{children}</body>
</html>
);
}
<html>, <body> 태그 정의{children}에 각 페이지 내용이 들어갑니다@Composable
fun App() {
MaterialTheme { // layout.tsx와 비슷 (공통 테마)
HomeScreen() // page.tsx와 비슷 (화면 내용)
}
}
구조:
layout.tsx = MaterialTheme (공통 래퍼)page.tsx = HomeScreen() (화면 내용){children} = 함수 호출로 화면 렌더링Port 3000 is already in use
해결 방법:
다른 포트로 실행:
PORT=3001 npm run dev
다른 터미널에서 npm run dev를 실행하면:
Port 3000 is in use, using 3001 instead
자동으로 다음 포트(3001)를 사용합니다.
3000 포트를 사용하고 싶다면:
기존 서버를 종료하세요:
Ctrl + C터미널을 닫아버린 경우:
프로세스를 강제 종료해야 합니다.
Mac/Linux:
lsof -ti:3000 | xargs kill -9
Windows:
netstat -ano | findstr :3000
taskkill /PID [프로세스ID] /F
그 다음 다시 실행:
npm run dev
브라우저 캐시를 지우세요:
Cmd + Shift + R (Mac)Ctrl + Shift + R (Windows)rm -rf node_modules package-lock.json
npm install
Column, Text, Modifier<div>, <h1>, className