Skip to content

Comments

[FEAT/#3] 프로젝트 초기 환경 설정 및 디자인 토큰 적용#4

Merged
chunjaemin merged 7 commits intodevelopfrom
feat/#3-init-and-github-actions
Feb 15, 2026
Merged

[FEAT/#3] 프로젝트 초기 환경 설정 및 디자인 토큰 적용#4
chunjaemin merged 7 commits intodevelopfrom
feat/#3-init-and-github-actions

Conversation

@chunjaemin
Copy link
Contributor

추가 작업 내용

이전 프로젝트 파일(#3브랜치 2/11일 시점)에 존재했던 몇가지 개선점을 보완하였습니다.


주요 변경 사항

README.md 수정

  1. 기존 README.md는 npm 패키지 매니저 기반으로 잘 못 기입되어 있었습니다.
  2. 현 프로젝트는 yarn 기반의 프로젝트이며, 이를 README.md에 명시해두었습니다.
  3. 추가적으로 프로젝트 스펙 및 사용가능한 명령어도 간단히 정리해두었습니다.

폰트 import 경로 수정

  1. 프리텐다드 폰트 import 경로가 잘 못 되어 프로젝트가 실행되지 않는 문제가 있었습니다.
  2. Alias(@/)를 적용하여 import 경로를 수정하였습니다.

프리텐다드 폰트 굵기 (커스텀 클래스) 추가

  • Tailwind CSS 설정을 통해 프리텐다드 폰트의 굵기를 제어할 수 있는 커스텀 클래스를 생성했습니다. 생성한 커스텀 클래스는 다음과 같습니다.

사용 예시

클래스명 굵기 (Weight)
font-regular 프리텐다드 레귤러 폰트
font-medium 프리텐다드 미디움 폰트
font-semibold 프리텐다드 볼드 세미볼드 폰트
font-bold 프리텐다드 볼드 볼드 폰트
<Text className="font-regular">프리텐다드 레귤러 적용 예시</Text>
<Text className="font-medium">프리텐다드 미디움 적용 예시</Text>
<Text className="font-semibold">프리텐다드 세미볼드 적용 예시</Text>
<Text className="font-bold">프리텐다드 볼드 적용 예시</Text>

@gemini-code-assist
Copy link

Summary of Changes

Hello @chunjaemin, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

이 PR은 프로젝트의 초기 환경을 견고하게 설정하고, 확장 가능한 아키텍처를 도입하는 데 중점을 둡니다. 주요 변경 사항으로는 yarn 기반의 의존성 관리, Tailwind CSS와 디자인 토큰을 활용한 스타일 시스템 구축, 폰트 로딩 문제 해결, 그리고 개발 워크플로우 개선을 위한 다양한 개발 도구 설정이 포함됩니다. 특히 Feature-Sliced Design (FSD) 아키텍처를 적용하여 코드의 응집도를 높이고 재사용성을 극대화하며, 각 레이어에 대한 명확한 가이드라인을 제공하여 향후 개발의 효율성을 향상시켰습니다.

Highlights

  • 초기 환경 설정 및 의존성 관리: 프로젝트 초기 환경을 설정하고, yarn 기반의 의존성 관리를 명확히 했습니다. package.json 스크립트를 업데이트하고, README.md에 관련 내용을 반영했습니다.
  • 디자인 토큰 및 스타일 시스템 적용: Tailwind CSS와 NativeWind를 사용하여 디자인 토큰 기반의 스타일 시스템을 구축했습니다. 전역 CSS 변수(global.styles.css)와 React Native용 그림자 스타일(shadows.ts)을 정의하고, Pretendard 폰트 굵기를 제어하는 커스텀 Tailwind 클래스를 추가했습니다.
  • 폰트 로딩 및 경로 문제 해결: Pretendard 폰트의 잘못된 import 경로를 Alias(@/)를 사용하여 수정하고, 스플래시 스크린과 연동되는 폰트 로딩 훅(useLoadFonts)을 구현하여 안정적인 폰트 적용을 보장했습니다.
  • 개발 도구 및 품질 관리 설정: GitHub Actions용 라벨러 설정, PR 템플릿 추가, .gitignore 업데이트, VSCode 확장 및 설정(extensions.json, settings.json)을 통해 개발 편의성을 높였습니다. 또한 Biome을 도입하여 코드 포맷팅 및 린팅 규칙을 강화했습니다.
  • Feature-Sliced Design (FSD) 아키텍처 도입: 프로젝트에 FSD 아키텍처를 적용하고, entities, features, pages, shared, widgets 각 레이어에 대한 상세한 README.md 문서를 추가하여 구조와 사용 가이드를 명확히 했습니다.
  • Expo Router 기반 라우팅 설정: Expo Router를 사용하여 파일 기반 라우팅을 설정하고, 기본 탭 레이아웃과 홈 화면을 구성했습니다. app.jsontypedRoutes 실험적 기능을 활성화하여 타입 안정성을 확보했습니다.
Changelog
  • .github/labeler.yml
    • 이슈 및 PR에 자동으로 라벨을 할당하는 GitHub Action 설정이 추가되었습니다.
  • .github/pull_request_template.md
    • PR 작성 시 활용할 한국어 템플릿이 추가되었습니다.
  • .gitignore
    • Expo, 네이티브 빌드 폴더 및 개발 관련 파일에 대한 무시 규칙이 추가되었습니다.
  • .vscode/extensions.json
    • VSCode에서 권장되는 expo.vscode-expo-tools 확장이 추가되었습니다.
  • .vscode/settings.json
    • 저장 시 코드 자동 수정, 임포트 정리, 멤버 정렬을 위한 VSCode 설정이 추가되었습니다.
  • README.md
    • 프로젝트 기술 스택 배지 정보가 최신 버전으로 업데이트되었습니다.
    • 기술 스택에 Expo Router가 추가되었습니다.
    • 스크립트 명령어와 빠른 시작 가이드가 yarn 및 Biome 관련 명령어로 업데이트되었습니다.
    • shared/ 디렉토리 설명이 '공용 assets/hooks/styles/utils 등'으로 구체화되었습니다.
  • app.json
    • Expo 애플리케이션의 기본 설정(이름, 슬러그, 버전, 아이콘, 스플래시 스크린 등)이 추가되었습니다.
    • Expo Router 플러그인 및 typedRoutes 실험적 기능이 활성화되었습니다.
  • babel.config.js
    • Expo 및 NativeWind를 위한 Babel 설정이 추가되었습니다.
  • biome.json
    • 코드 포맷팅, 린팅, 자동 수정을 위한 Biome 설정 파일이 추가되었습니다.
  • metro.config.js
    • NativeWind와 global.styles.css를 통합하기 위한 Metro 설정이 추가되었습니다.
  • nativewind-env.d.ts
    • NativeWind 타입 참조 파일이 추가되었습니다.
  • package.json
    • 프로젝트 의존성 및 개발 의존성이 업데이트되었습니다.
    • 타입 체크 및 Biome 관련 스크립트 명령어가 추가되었습니다.
  • src/app/(tabs)/_layout.tsx
    • Expo Router의 기본 탭 레이아웃이 추가되었습니다.
  • src/app/(tabs)/index.tsx
    • 디자인 토큰(색상, 그림자, 폰트 굵기)이 적용된 샘플 홈 화면이 추가되었습니다.
  • src/app/_layout.tsx
    • 루트 레이아웃이 추가되어 폰트 로딩 및 스플래시 스크린 관리를 처리합니다.
  • src/app/index.tsx
    • 루트 경로에서 기본 탭 경로로 리다이렉트하는 설정이 추가되었습니다.
  • src/entities/README.md
    • Feature-Sliced Design의 entities 레이어에 대한 상세한 가이드 문서가 추가되었습니다.
  • src/features/README.md
    • Feature-Sliced Design의 features 레이어에 대한 상세한 가이드 문서가 추가되었습니다.
  • src/pages/README.md
    • Feature-Sliced Design의 pages 레이어에 대한 상세한 가이드 문서가 추가되었습니다.
  • src/shared/README.md
    • Feature-Sliced Design의 shared 레이어에 대한 상세한 가이드 문서가 추가되었습니다.
  • src/shared/lib/hooks/useLoadFonts.ts
    • Pretendard 폰트를 로드하고 스플래시 스크린을 관리하는 커스텀 훅이 추가되었습니다.
  • src/shared/styles/global.styles.css
    • 전역 디자인 토큰(색상, 간격, 그림자)을 정의하는 CSS 파일이 추가되었습니다.
  • src/shared/styles/shadows.ts
    • React Native에서 사용할 그림자 스타일 객체가 추가되었습니다.
  • src/shared/utils/formatDate.ts
    • 날짜 및 날짜+시간 포맷팅 유틸리티 함수가 추가되었습니다.
  • src/shared/utils/index.ts
    • 유틸리티 함수를 내보내는 인덱스 파일이 추가되었습니다.
  • src/widgets/README.md
    • Feature-Sliced Design의 widgets 레이어에 대한 상세한 가이드 문서가 추가되었습니다.
  • tailwind.config.js
    • 디자인 토큰을 활용하여 Tailwind CSS의 색상, 간격, 폰트 설정을 확장하는 구성이 추가되었습니다.
    • Pretendard 폰트 굵기별 커스텀 유틸리티 클래스가 추가되었습니다.
  • tsconfig.json
    • TypeScript 설정이 업데이트되어 strict 모드를 활성화하고 경로 별칭(@/*)을 구성했습니다.
Ignored Files
  • Ignored by pattern: .github/workflows/** (2)
    • .github/workflows/ai-labeler.yml
    • .github/workflows/ci.yml
Activity
  • chunjaemin 님이 프로젝트 초기 환경 설정을 완료했습니다.
  • GitHub Actions 라벨러 및 PR 템플릿을 추가하여 개발 워크플로우를 개선했습니다.
  • Expo, NativeWind, Biome 등 핵심 개발 도구들을 통합하고 설정했습니다.
  • Feature-Sliced Design 아키텍처를 도입하고 각 레이어에 대한 상세한 가이드 문서를 작성했습니다.
  • 디자인 토큰 기반의 스타일 시스템을 구축하고 Pretendard 폰트 적용 문제를 해결했습니다.
  • Expo Router를 활용한 기본 라우팅 및 탭 레이아웃을 구현했습니다.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@chunjaemin chunjaemin added the feature 새로운 기능 구현 label Feb 14, 2026
Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

이번 PR은 프로젝트 초기 환경 설정을 위한 훌륭한 시작입니다. FSD 아키텍처 도입, TypeScript, 디자인 토큰 시스템 구축 등 확장성과 유지보수성을 고려한 점이 인상적입니다. 특히 각 FSD 레이어에 대한 README 문서를 상세히 작성해주셔서 새로운 팀원이 프로젝트 구조를 이해하는 데 큰 도움이 될 것입니다. 몇 가지 코드 개선점을 제안드리니 확인 부탁드립니다.

Comment on lines +4 to +15
* 날짜를 `YYYY.MM.DD` 형태로 포맷합니다. (기본: ko-KR)
*
* - Date, timestamp(number), ISO string(string) 모두 허용
* - invalid date면 빈 문자열 반환
*/
export function formatDate(
input: DateInput,
options?: {
locale?: string;
separator?: "." | "-" | "/";
}
): string {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

formatDate 함수의 주석에는 (기본: ko-KR)이라고 명시되어 있고, options으로 locale을 받지만 실제 구현에서는 사용되지 않고 있습니다. 현재 구현은 getFullYear, getMonth, getDate를 사용하여 문자열을 직접 조합하므로 로케일에 영향을 받지 않습니다. 이는 버그의 소지가 있거나 최소한 오해를 불러일으킬 수 있습니다.

locale 옵션을 제거하고 주석을 수정하여 현재 구현과 일치시키는 것을 제안합니다.

 * 날짜를 `YYYY.MM.DD` 형태로 포맷합니다.
 *
 * - Date, timestamp(number), ISO string(string) 모두 허용
 * - invalid date면  문자열 반환
 */
export function formatDate(
	input: DateInput,
	options?: {
		separator?: "." | "-" | "/";
	}
): string {

Comment on lines +49 to +51
"eslint": "^9.25.0",
"eslint-config-expo": "~10.0.0",
"prettier-plugin-tailwindcss": "^0.7.2",

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

biome을 린터 및 포맷터로 사용하고 있으므로, devDependencies에 있는 eslint, eslint-config-expo, prettier-plugin-tailwindcss 패키지들은 현재 설정에서 사용되지 않는 것으로 보입니다. package.json의 스크립트에서도 biome만 사용되고 있습니다. 사용하지 않는 의존성을 제거하여 프로젝트를 더 깔끔하게 유지하는 것이 좋겠습니다.

@@ -0,0 +1,182 @@
import { ScrollView, Text, View } from "react-native";
import { shadows } from "../../shared/styles/shadows";

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

tsconfig.json에 경로 별칭(path alias)이 @/*로 설정되어 있습니다. 프로젝트의 일관성을 위해 상대 경로 대신 별칭을 사용하는 것이 좋습니다.

Suggested change
import { shadows } from "../../shared/styles/shadows";
import { shadows } from "@/shared/styles/shadows";

Comment on lines +61 to +113
.dark {
/* Primitive Colors - 원시값 (지정된 색상만) - 현재는 root와 동일 */

/* 파란색 계열 */
--blue-100: #e5f6fe;
--blue-50: #f4f6fe;
--blue-500: #0068fe;

/* 회색 계열 */
--gray-100: #f4f4f5;
--gray-300: #dbdde1;
--gray-500: #8e9398;

/* 흰색 */
--white: #fefffe;

/* 검은색 */
--black: #040404;

/* 빨간색 */
--red-500: #ff6562;

/* Shadow Colors - Primitive */
--blue-shadow-rgb: 102 164 254;
--gray-shadow-rgb: 142 147 152;

/* Brand Colors - Primitive 참조 */
--color-primary: var(--blue-500);
--color-primary-tint: var(--blue-100);

/* Neutral Colors - Primitive 참조 */
--color-neutral: var(--gray-100);
--color-neutral-variant: var(--gray-300);

/* Background Colors - Primitive 참조 */
--color-canvas: var(--white);

/* State Colors - Primitive 참조 */
--color-danger: var(--red-500);

/* Text Colors - Primitive 참조 */
--color-content-primary: var(--black);
--color-content-secondary: var(--gray-500);
--color-content-inverse: var(--blue-50);

/* Layout Spacing */
--layout-margin: 24px; /* 화면 좌우 전체 여백 */
--layout-gutter: 10px; /* 그리드/리스트 요소 사이의 간격 */

/* Shadow (X Y Blur Spread Color) */
--shadow-primary: 0px 0px 6px 0px rgba(var(--blue-shadow-rgb), 0.4); /* blue-shadow의 40% 투명도 */
--shadow-neutral: 0px 5px 10px 0px rgba(var(--gray-shadow-rgb), 0.15); /* gray-shadow의 15% 투명도 */
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

.dark 클래스 내의 CSS 변수들이 :root에 정의된 변수들과 완전히 동일하게 중복 선언되어 있습니다. 다크 모드에서 값이 변경되는 변수들만 .dark 내에 선언하고, 나머지는 제거하여 중복을 줄이는 것이 유지보수 관점에서 더 좋을 것 같습니다. 현재는 변경되는 값이 없으므로, 향후 다크 모드 구현을 위한 주석만 남겨두는 것을 제안합니다.

.dark {
	/* TODO: 다크 모드에서 재정의할 색상 변수를 여기에 추가합니다. */
	/* 예시: */
	/* --color-canvas: var(--black); */
	/* --color-content-primary: var(--white); */
}

Copy link
Contributor

@kimyw1018 kimyw1018 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

readme까지 너무 설정 잘해주셨네요

@eunhyekimyeah
Copy link
Contributor

확인했습니다 수고하셨어요👏👏

@chunjaemin chunjaemin merged commit 396ec8e into develop Feb 15, 2026
5 checks passed
@chunjaemin chunjaemin deleted the feat/#3-init-and-github-actions branch February 15, 2026 11:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature 새로운 기능 구현

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants