최종 프로젝트 회고 #1 - 레이아웃

DO YEON KIM·2024년 10월 12일


최종 프로젝트를 분해해보고자 한다.

노션에 대부분의 역할과 프로젝트에 대한 설명이 적혀있긴 하지만, 필자의 역할에 대해 간단하게 작성하자면,

우선 필자가 맡은 페이지는 마이페이지(모바일사이즈 유저보드, 복약 전체 리스트, 내가 쓴 댓글), 캘린더 페이지 내 약 등록, 그 외 페이지 내에 자잘한 모달들이었다.

#1에선 필자가 맡은 페이지와 레이아웃에 대해서 간단히 소개하고자 한다.


🟡 src\app(root)\mypage\page.tsx

import React from "react";
import MediLists from "@/components/templates/mypage/MediLists";
import UserBoard from "@/components/templates/mypage/UserBoard";
import Posts from "@/components/templates/mypage/posts";

const MyPage = () => {
  return (
    <div className="max-w-[996px] mx-auto px-4 desktop:px-0 py-4 mt-20 desktop:mt-24">
      {/* 데스크탑 사이즈 레이아웃 */}
      <div className="hidden desktop:flex desktop:flex-row desktop:gap-[25px] mb-8">
        <div className="w-[301px]">
          <UserBoard className="h-full" />
        </div>
        <div className="w-[670px]">
          <MediLists className="h-full" />
        </div>
      </div>
      
      {/* 모바일 사이즈 레이아웃 */}
      <div className="flex flex-col gap-10 mb-8 desktop:hidden">
        <UserBoard className="w-full" />
        <MediLists className="w-full" />
      </div>
      
      {/* Posts는 항상 아래에 배치 */}
      <div className="mt-10 desktop:mt-8">
        <Posts />
      </div>
    </div>
  );
};

export default MyPage;

필자의 마이페이지 페이지 레이아웃.

파일명에서 유추할 수 있 듯 app router를 사용하여서 페이지를 정의하였다. 반응형도 구현하였기에, 사이즈에 맞추어 값을 준 상태이다.


+ 🟣 app router와 page router의 차이?

-> app router는 파일 시스템 기반 라우팅을 더 유연하게 처리할 수 있으며 디렉터리 구조에 따라 페이지를 정의.

-> next는 app 디렉터리 안의 파일과 폴더를 기준으로 라우트를 자동으로 생성.

-> (root)는 특정 그룹을 나누기 위한 용도로 사용. 괄호로 감싸진 폴더는 url 경로에 영향을 미치지 않고 내부적으로 경로를 구성하는데에만 사용.

-> mypage 폴더 내에 있는 page.tsx 파일로 매핑. => 해당 경로에 렌더링될 컴포넌트를 정의할 파일.

//

그렇다면 페이지 라우터는?

-> pages 디렉토리의 파일을 기반으로 URL 경로가 생성

-> 경로 설정: pages/about.js → /about 경로로 자동 매핑.

보통은 next 12 이하버전에서 사용하기 떄문에 app router를 사용하는 추세이다.


피그마에 정의된 사이즈대로 값을 준 모습이다.


🟡 src\app(root)\mypage\Medications\page.tsx

그리고 복약 정보를 보여주는 페이지의 레이아웃.

// src/app/(root)/mypage/Medications/page.tsx

import Medications from '@/components/templates/mypage/Medications';

export default function MedicationsPage() {
  return (
    <div className="max-w-[1000px] mx-auto px-4 py-4"> {/* MyPage와 동일한 최대 너비 및 좌우 여백 설정 */}
      <Medications />
    </div>
  );
}

이또한 디자이너 분이 지정해주신 피그마 값에 맞게 주었다.

profile
프론트엔드 개발자를 향해서

0개의 댓글