반응형

출처: 여성시대 https://cafe.daum.net/subdued20club/ReHf/5422854?svc=cafeapi



오늘로 데뷔 25주년을 맞은 보아

팬들이 25년간의 모든 소장품과 자체제작 굿즈들로 기증 받아서 박물관 수준의 기념카페를 준비함 (위글참조)




그런데 오늘 아무생각 없이 놀러간 팬들
문열고 들어갔더니 보아 있음ㅋㅋㅋ

 

 

 

 
 
 

수술 때문에 앨범 활동 및 콘서트 전부 취소된 이후 첫 얼굴 보여준 외부활동이 바로 팬들 방문

 

슴사옥도 25주년으로 꾸며져 있었는데 보아가 방명록 쓰고 감ㅋㅋㅋ

 

보아 인형 피스비 꾸미기에 진심인 팬들과 슴에서 만들어준 핫플 대왕피스비ㅋㅋ



오래된만큼 서로 아끼고 고마워하는 관계

728x90
반응형

출처: https://v.daum.net/v/20250429104849337

아파트 단지 안에 있는 사우나에

샴푸, 바디워시 등 공급을 중단함.










이유를 알고보니 입주민들이

빈 통을 가져와서 펌프질로 다 가져갔다고 ㅋㅋ









참고로 저 아파트 가격

24평 40억
33평 70억
52평 106억

ㅋㅋ 샴푸도둑 ㅋㅋ

728x90
반응형

바이브 코딩(Vibe Coding), 개발자의 새로운 흐름


최근 몇 년간 소프트웨어 개발 환경은 눈에 띄게 달라졌다. 과거에는 프로젝트를 시작하기 위해 IDE 설치, 복잡한 빌드 환경 설정, 의존성 관리 등에 상당한 시간을 투자해야 했다. 그러나 이제는 브라우저 기반 IDE와 클라우드 인프라 덕분에 “즉시 실행형 개발(instant execution development)”이 가능해졌다.
이를 흔히 바이브 코딩(Vibe Coding)이라고 부른다. 단순히 “재미있게 코딩한다”는 의미를 넘어,
개발자의 경험(Developer Experience, DX)을 혁신적으로 개선하는 패러다임 전환이다.

 

바이브 코딩은 초심자 친화적이다. 프로그래밍 교육에서 가장 큰 장벽은 언어 문법보다도 “개발 환경 세팅”에 있다.
예를 들어, 파이썬을 배우는 학생은 print("Hello World") 한 줄을 실행하기 위해 인터프리터 설치, 패키지 경로 지정,
가상 환경 설정을 거쳐야 했다. 그러나 Colab이나 Replit 같은 환경에서는 브라우저를 열고 몇 초 만에 같은 결과를 확인할 수 있다.

솔직히 말하면 나도 아직 신입 같은 낡은 개발자 느낌으로 살아가고 있게되더라.
예전에 개발한다고 하면 IDE 설치 → 환경 세팅 → 빌드 에러 잡기 → 포기 😂 이게 기본 코스다보니깐


1. 실무 개발에서의 장점

 

바이브 코딩은 단순히 교육용 도구가 아니다. 실무 개발 프로세스 전반에서도 강력한 장점을 가진다.

(1) 개발 환경 표준화

“내 컴퓨터에서는 되는데?”라는 문제는 소프트웨어 개발에서 흔한 장애물이다. 로컬 환경마다 설치된 라이브러리 버전이 다르고, 운영체제 차이로 인해 빌드 에러가 발생하기도 한다. 그러나 클라우드 IDE 기반의 바이브 코딩은 팀원 전원이 동일한 컨테이너/가상 환경에서 작업하므로 환경 불일치 문제를 근본적으로 제거한다.

(2) 빠른 프로토타이핑

아이디어를 신속하게 구현하고 검증하는 속도는 제품 경쟁력과 직결된다. 브라우저 기반 IDE에서는 별도의 설정 과정 없이 코드 작성 → 실행 → 공유가 가능하다. 이를 통해 개발자는 “생각에서 구현까지의 시간(time-to-prototype)”을 획기적으로 단축할 수 있다.

(3) 협업 효율성

바이브 코딩 환경은 실시간 협업 기능을 내장하고 있는 경우가 많다. CodeSandbox나 Replit은 구글 독스처럼 여러 개발자가 동시에 코드에 접근하고 수정할 수 있으며, GitHub Codespaces는 버전 관리와 연계되어 원활한 협업을 보장한다. 이는 재택·원격 근무가 보편화된 시대에 팀 생산성을 극대화하는 수단이 된다.

2. 개발자 경험(DX) 혁신

바이브 코딩의 본질은 **DX(Developer Experience)**를 향상시키는 데 있다. 개발자가 겪는 가장 큰 불편은 코드 작성 자체가 아니라, 실행 환경 세팅·의존성 충돌·디버깅 등에서 비롯된다. 바이브 코딩은 이러한 “잡음(noise)”을 최소화하고, 개발자가 문제 해결과 창의적 사고에 집중할 수 있는 환경을 제공한다.

여기에 AI 코드 어시스턴트(Copilot, ChatGPT 등)가 결합하면 생산성은 더욱 높아진다. 개발자는 반복적인 코드 작성에 소모되지 않고, 본질적인 설계·아이디어 확장에 집중할 수 있다.


바이브 코딩이 뭔데? 🤔

1. vibe 코딩의 기술적 정의

  • 즉시 실행형 개발 환경(Instant Execution Environment)
    → 코드 입력 후 곧바로 실행·피드백 받을 수 있는 환경을 말해.
  • 클라우드 기반 IDE(Cloud IDE)
    → 로컬 설치 없이 브라우저에서 바로 코드를 작성, 실행, 공유할 수 있음.
  • 라이브 코딩(Live Coding)과 유사하지만, vibe 코딩은 단순한 “실시간 실행”을 넘어서
    개발자 경험(Developer Experience, DX)을 중요시한다는 게 포인트

이런 경험을 제공하는 대표적인 도구들이 바로 Replit, Codespaces, Jupyter Notebook, CodeSandbox 같은 온라인/인터랙티브 개발 환경들이라고 말할 수 있어.
설치 없이 브라우저만 열면 코드를 바로 실행해보고, 피드백을 실시간으로 받을 수 있기때문이지

2. vibe 코딩의 핵심 기술 스택

  1. 브라우저 기반 실행 환경
    • Replit, CodeSandbox, GitHub Codespaces
    • 특징: 브라우저에서 VM 혹은 컨테이너를 띄워서 코드 실행
  2. 인터랙티브 노트북 환경
    • Jupyter Notebook, Google Colab
    • 특징: 코드+실행결과+문서화를 하나의 노트북 파일에서 관리
  3. AI 보조 도구
    • GitHub Copilot, ChatGPT 코드 인터프리터
    • 특징: 코드 작성 vibe를 끊지 않고 곧바로 제안/완성

 

바이브 코딩이 신입 개발자에게 왜 중요하냐면 

  1. 장벽이 낮다 – 설치/환경설정 지옥 탈출 가능
  2. 즉각적인 피드백 – 결과를 바로 보면서 배우니까 흥미 유지
  3. 실험정신 키우기 – “이거 해보면 어떨까?” 하는 curiosity를 바로 코드로 실행 가능
  4. 협업 훈련 – 요즘 회사들은 다 협업 툴 쓰니까, 미리 온라인 vibe 익히는 게 플러스

 


바이브 코딩의 한계점

  • 퍼포먼스 제약: 브라우저 기반 IDE는 대규모 빌드나 고성능 연산에 한계가 있다.
  • 보안 이슈: 클라우드 환경 특성상 민감한 소스코드나 데이터는 관리에 주의가 필요하다.
  • 네트워크 의존성: 인터넷 연결이 불안정할 경우 생산성이 저하된다.

따라서 바이브 코딩은 모든 프로젝트의 만능 해법이라기보다, 학습·프로토타이핑·경량 개발에 최적화된 도구로 이해하는 것이 바람직하다.

앞으로 바이브 코딩은 AI와의 결합을 통해 한층 발전할 것이다.

  • AI가 코드 초안을 제안하고, 개발자는 이를 빠르게 실행·수정하는 페어 프로그래밍 모델
  • Docker, Kubernetes 등과 연계된 클라우드 네이티브 개발 환경
  • Figma와 유사한 실시간 공동 개발 IDE

이러한 변화는 단순히 개발 방식을 바꾸는 것이 아니라, 소프트웨어 산업 전체의 생산성 패러다임을 바꾸는 핵심 축이 될 가능성이 크다.


결론

바이브 코딩은 더 이상 “가볍게 코드를 치는 새로운 유행”이 아니다.
이는 개발 환경 표준화, 빠른 프로토타이핑, 협업 효율성, 그리고 무엇보다 개발자 경험의 혁신을 가능하게 하는 새로운 개발 패러다임이다.

특히 학생이나 신입 개발자에게는 낮은 진입장벽과 높은 몰입도라는 장점을 제공하며, 기업에게는 생산성 향상과 협업 강화라는 가치를 안겨준다.

앞으로 개발의 미래는 AI와 클라우드 중심의 vibe 속에서 펼쳐질 것이다. 개발자는 이제 코드 작성 자체보다, 문제 해결을 위한 흐름(flow)을 어떻게 이어가느냐에 더 집중해야 한다. 바이브 코딩은 그 흐름을 만들어주는 가장 강력한 도구다.

 

이 링크를 통해 구매하시면 제가 수익을 받을 수 있어요. 🤗
인프런 - 비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE 강의와 함께합니다.
https://inf.run/PbTsb

728x90
반응형

 

 

 

JPA Repository

 


 

JPA는 "Java Persistence API"의 약자로, 자바 객체를 관계형 데이터 베이스에 영속적으로 저장하고 조회할 수 있는 ORM 기술에 대한 표준 명세를 의미합니다. JPA를 통해 개발자는 SQL쿼리를 작성하지 않고도 객체를 통해 데이터베이스를 조작할 수 있으며, 객체 지향적인 코드 작성과 유지 보수성이 향상됩니다.

기본적으로 Entity클래스를 작성한 후 Repository 인터페이스를 생성해야 하는데, Springboot에서 기본적인 작업을 도와주는 JPA Repository 인터페이스가 있습니다.

Spring Data JPA에서 제공하는 인터페이스 중 하나로, JPA를 사용하여 데이터베이스를 조작하기 위한 메서드들을 제공합니다. JPARepository 인터페이스를 상속받는 인터페이스를 정의하면, 해당 인터페이스를 구현하는 클래스는 JPA에서 제공하는 메서드들을 사용할 수 있습니다.

데이터베이스의 추가, 조회, 수정, 삭제의 findAll(), findById(), save() 등의 메서드들을 사용할 수 있습니다. 제공되는 메서드들 이용하여 쉽고 간편하게 CRUD 조작을 할 수 있습니다.
즉, JPA Repository를 사용 시, 복잡한 JDBC(Java DataBase Connectivity) 코드를 작성하지 않아도 간단하게 DB와의 데이터 접근 작업을 처리할 수 있습니다.

JPARepository 인터페이스는 제네릭 타입을 사용하여 Entity클래스와 복합키를 사용하고 있다면 해당 Entity의 ID클래스를 명시합니다. 이를 통해 해당 인터페이스를 상속받는 구현체는 Entity클래스와 ID클래스에 대한 정보를 알고 있어서, 런타임 시점에 적절한 쿼리를 생성하고 실행할 수 있습니다.

 

JPA Repository 사용법

 

먼저 데이터베이스에 저장하기 위해 유저가 정의한 클래스가 필요한데 그런 클래스를 Entity라고 한다. Domain이라고 생각하면 쉽게 이해가 가능합니다. 일반적으로 RDBMS에서 Table을 객체화 시킨 것으로 보면 되며, 그래서 Table의 이름이나 컬럼들에 대한 정보를 가지게 됩니다.

Table 및 컬럼을 설정하는 데 사용되는 어노테이션을 먼저 설명해드리겠습니다.

@Id
primary key를 가지는 변수를 선언하는 것을 뜻한다. @GeneratedValue 어노테이션은 해당 Id 값을 어떻게 자동으로 생성할지 전략을 선택할 수 있습니다. 여기서의 전략은 Auto로 설정해두었습니다.

@Table
별도의 이름을 가진 데이터베이스 테이블과 매핑되며, 기본적으로 @Entity로 선언된 클래스의 이름은 실제 데이터베이스의 테이블 명과 일치하는 것을 매핑합니다. 따라서 @Entity의 클래스명과 데이터베이스의 테이블명이 다를 경우에 @Table(name=" ")과 같은 형식을 사용해서 매핑이 가능합니다.


@Column
@Column 선언이 꼭 필요한 것은 아니지만 @Column에서 지정한 변수명과 데이터베이스의 컬럼명을 서로 다르게 주고 싶다면 @Column(name=" ") 같은 형식으로 작성하면 됩니다. 그렇지 않은 경우에는 기본적으로 멤버 변수명과 일치하는 데이터베이스 컬럼을 매핑합니다.

 

 

@Entity
public class Member {

    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private long id;

    @Column
    private String name;

    @Column
    private int age;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
728x90

'[EEEEEEETC]' 카테고리의 다른 글

[복 - 습] Module & Library & Framework  (0) 2024.03.11
반응형

 

모듈 , 라이브러리 그리고 프레임워크


 

프로그램은 작은 부분들이 모여서 크고 복잡한 부분으로 발전합니다. 그 과정에서 기존에 작성되었던 코드의 재활용과 손쉬운 유지보수를 위해 다양한 방법들이 사용됩니다.

하나의 복잡한 코드를 여러 개의 모듈로 나누어서 분리하는 방법이 그중 하나이며, 아래와 같은 장점을 가지고 있습니다.

자주 사용되는 코드를 별도의 파일로 만들게 되면 해당 코드가 필요할 때마다 사용할 수 있으며, 별도의 파일로 존재하기 때문에 해당 부분을 리팩토링하여 개선하게 되면 모든 코드에도 반영이 손쉬운 장점이 있습니다. 또한, 필요한 로직을 해당 위치에서 로드해 사용하기 때문에 메모리 낭비를 줄일 수 있습니다. 

이렇게 분리하는 방법을 학습해나가다보면 모듈, 라이브러리, 프레임워크라는 용어 들이 등장합니다. 해당 용어의 사전적 정의는 많이 나와 있으나, 실무에서 커뮤니케이션 할 때 사용시에는 각각의 개념을 정확히 알지 못하는 상태에서 사용하는 경우도 있습니다.

그래서 한번 정리하며 복습해보는 시간을 가져보도록 하겠습니다.

 

1. MODULE

 

 

Module은 별도의 파일로 독립도니 기능을 의미합니다. 순수한 javascript에서는 모듈이라는 개념이 분명하게 존재하지 않는다고도 합니다. javascript가 구동되는 호스트 환경에 따라 서로 다른 모듈화 방법이 제공됩니다. 
여기서 호스트 환경이란 ?  JavaScript가 구동되는 환경을 의미한다. 예를 들어, Node.js는 JavaScript의 문법을 따르지만 이 언어가 구동되는 환경은 브라우저가 아니라 시스템을 제어하는 서버 측 환경을 의미합니다.

모듈을 만들면 다른 파일에서 해당 모듈을 불러와서 선언한 후 사용할 수 있습니다.

 

 

2. LIBRARY

 

 

라이브러리는 모듈과 비슷한(거의 같은) 개념이다 생활 코딩에서는 설명하는 차이점은 다음과 같습니다. 모듈이 프로그램을 구성하는 작은 부품의 느낌이라면, 라이브러리는 자주 사용 되는 로직을 잘 정리한 집합 느낌입니다. 사전적 의미로는 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임으로 구성 데이터, 문서, 도움말 자료, 메시지 틀, 미리 작성된 코드, 서브루틴(함수), 클래스, 값, 자료형 사양을 포함할 수 있습니다. 

 

3. Framework

 

 

복잡한 문제를 해결하거나 서술하는 데에 사용 되는 기본 개념 구조, 즉 뼈대입니다. 애플리케이션 개발에 바탕이 되는 템플릿과 같은 역할을 하는 클래스들과 인터페이스의 집합으로 애플리케이션을 구축할 때 공통적인 부분을 제공합다.
개발자가 처음부터 모든 것을 개발을 할 수 있지만, 프레임워크를 사용하면 원하는 기능에만 집중하여 구현할 수 있습니다. 프레임워크 안에는 기본적으로 필요한 기능을 갖추고 있으므로 라이브러리(혹은 모듈)이 포함되어 있습니다.

728x90

'[EEEEEEETC]' 카테고리의 다른 글

[복 - 습] JPA Repository  (1) 2024.03.12
반응형

 

 

✅ Object 자료형이란?

 

자바스크립트에서 객체(object)는 여러 데이터를 담을 수 있는 자료형입니다. 객체는 이름과 값의 쌍으로 이루어진 속성(property)을 포함할 수 있습니다. 이러한 속성은 문자열 또는 심볼 값을 가질 수 있고, 객체, 함수, 배열 또는 기본 데이터 유형(숫자, 문자열, 불리언 등)의 값을 포함할 수 있습니다.

JavaScript 중괄호 { } 로 정의되며, 속성들은 쉼표로 구분됩니다. 각 속성-값 쌍은 쉼표로 구분되며, 속성 이름은 문자열이어야 하고, 값은 문자열, 숫자, 불리언, 객체, 배열, 또는 null일 수 있습니다.

 

예를 들어, 다음은 객체를 정의하는 예시입니다.

            const panda = {
              name: "푸바오",
              age: 17,
              hobbies: ["eating", "playing"]
            };

            name: 문자열 값 ("푸바오")
            age: 숫자 값 (17)
            hobbies: 배열 (문자열의 배열)

자바스크립트 객체는 동적으로 속성을 추가, 수정 또는 삭제할 수 있습니다. 객체 내의 속성은 해당 속성의 이름을 사용하여 접근할 수 있습니다. 예를 들어, panda.name은 "푸바오"를 반환합니다.

객체는 JavaScript 프로그래밍에서 중요한 개념이며, 데이터를 구조화하고 조작하는데 유용하게 사용됩니다. 객체는 프로그램의 다양한 부분에서 사용되며, 자바스크립트에서 매우 흔하게 쓰입니다.

 


React에서 라우팅 설계

React에서 라우팅이란, 다양한 화면(페이지) 간의 전환 및 네비게이션을 관리하는 기술을 의미합니다. React 애플리케이션에서 여러 페이지를 갖고 있을 때, 사용자가 각 페이지로 이동하고 애플리케이션의 상태를 변경하면서 화면이 동적으로 업데이트될 수 있도록 라우팅을 구현할 수 있습니다.

React에선 React-Router를 이용하여 라우팅을 구조화하고 설계합니다. 이 때 사용되는 항목들은 아래와 같습니다.

  1. Router (라우터) <BrowserRouter> : HTML5의 History API를 사용하여 브라우저의 URL을 관리하는 라우터입니다. 주로 브라우저 환경에서 사용됩니다. <HashRouter> : URL의 해시(fragment)를 사용하여 라우팅을 관리하는 라우터입니다. 주로 정적 파일 서버에서 사용되거나 브라우저 호환성을 고려할 때 유용합니다.

  2. Route (라우트) <Route path="/somepath" component={SomeComponent} /> : 특정 경로(path)에 대한 컴포넌트(component)를 렌더링합니다. 지정된 경로에 도달하면 해당 컴포넌트가 렌더링됩니다. 보통 나누어지는 페이지라고 생각하면 됩니다.

  3. Outlet (아웃렛) <Outlet /> : 중첩된 라우터에서 부모 라우터 컴포넌트 내에서 자식 라우터 컴포넌트를 렌더링하는 역할을 합니다. Outlet은 중첩된 라우터 사이에서 자식 라우터가 렌더링될 위치를 나타냅니다.

  4. Link (링크): <Link to="/somepath">Go to Some Path</Link> 다른 경로로 이동할 때 사용하는 컴포넌트입니다. 클릭 시, 지정된 경로로 이동하게 됩니다.

  5. Redirect (리다이렉트): <Redirect to="/newpath" /> : 특정 경로로 리다이렉트할 때 사용합니다. 사용자가 지정된 경로로 이동하려고 할 때, 자동으로 새로운 경로로 리다이렉션됩니다.

  6. Switch (스위치) <Switch>: 여러 <Route> 컴포넌트 중 첫 번째로 매치되는 라우트만 렌더링하도록 도와주는 컨테이너입니다. 중첩된 라우트에서 사용하여 중복된 경로를 방지할 수 있습니다.

라우팅 구조는 위의 컴포넌트들을 적절하게 조합하여 정의됩니다. 이러한 컴포넌트들을 사용하여 React 애플리케이션에서 다양한 화면 간의 전환을 관리하고 네비게이션을 구현할 수 있습니다.
일반적으로 React Router에서 라우팅을 구현할 때는 BrowserRouter를 루트 컴포넌트로 사용하고, Route, Link, Switch, Outlet, 그리고 Redirect 등을 조합하여 필요한 네비게이션 구조를 생성합니다.

 

✍️ Route 사용 예제

 

    이 예제에서는 / 경로는 Home 컴포넌트를, /about 경로는 About 컴포넌트를 렌더링합니다.


                import React from 'react';
                import { BrowserRouter, Router, Route, Link } from 'react-router-dom';

                const Home = () => <h2>홈 페이지</h2>;
                const About = () => <h2>소개 페이지</h2>;

                const App = () => (
                  <Router>
                    <nav>
                      <Link to="/">홈</Link>
                      <Link to="/about">소개</Link>
                    </nav>
                    <Route path="/" exact component={Home} />
                    <Route path="/about" component={About} />
                  </Router>
                );

                export default App;

 

 💡useNavigate( )

 

useNavigate는 함수 컴포넌트 내에서 라우팅을 수행하는 데 사용됩니다. 이 후크를 사용하면 함수 컴포넌트 내에서 라우팅을 쉽게 제어할 수 있습니다.

			const MyComponent = () => {
			  const navigate = useNavigate();
			
			  const handleClick = () => {
			    // 다른 경로로 이동
			    navigate('/another-page');
			  };
			
			  return (
			    <div>
			      <button onClick={handleClick}>다른 페이지로 이동</button>
			    </div>
			  );
			};

 

 

 

 

💡 Nested Routes (중첩 라우트)



Nested routes(중첩된 라우트)은 하나의 라우트가 다른 라우트에 중첩되어 있는 상황을 의미합니다. 중첩된 라우트를 구현하려면 Route 컴포넌트의 element 속성에 중첩된 컴포넌트를 지정하고, 중첩된 컴포넌트에서는 Outlet 컴포넌트를 사용하여 하위 라우트를 렌더링합니다.

보통 여러 페이지들이 필요한 경우에 사용 됩니다. 페이지 간 차이점이 크지 않을 때, 내부의 데이터가 조금씩 변경되는 경우 Nested Routes를 사용하면 일부분만 수정되어 페이지 렌더링을 할 수 있습니다.

 

✍️ 사용 예시

 

        import { Router, Route, Routes, Outlet } from 'react-router-dom';

                const App = () => (
                  <Router>
                    <Routes>
                      <Route
                        path="/dashboard"
                        element={<Dashboard />}>
                        <Route path="profile" element={<Profile />} />
                        <Route path="settings" element={<Settings />} />
                        <Route path="*" element={<NotFound />} />
                      </Route>
                      <Route path="*" element={<NotFound />} />
                    </Routes>
                  </Router>
                );


                const Dashboard = () => (
                  <div>
                    <h1>상단 메뉴</h1>
                    <nav>
                      <Link to="profile">프로필</Link>
                      <Link to="settings">설정</Link>
                    </nav>
                    <hr />
                    <Outlet /> {/* 중첩된 라우트를 렌더링할 위치 */}
                  </div>
                );

        /dashboard/profile 경로로 접근했을 시 함께 라우팅 되는 컴포넌트
                const Profile = () => (
                  <div>
                    <h2>프로필 페이지</h2>
                  </div>
                );


        /dashboard/settting 경로로 접근했을 시 함께 라우팅 되는 컴포넌트
                const Settings = () => (
                  <div>
                    <h2>설정 페이지</h2>
                  </div>
                );


        /dashboard/* //잘못된 경로로 접근했을 시 함께 라우팅 되는 컴포넌트 */
                const NotFound = () => (
                  <div>
                    <h2>페이지를 찾을 수 없습니다.</h2>
                  </div>
                );

 

이 예시에서 /dashboard 경로는 Dashboard 컴포넌트를 렌더링하고, /dashboard/profile과 /dashboard/settings 경로는 각각 Profile과 Settings 컴포넌트를 중첩된 라우트로 렌더링합니다.
중첩된 라우트를 렌더링하는 위치는 Outlet 컴포넌트로 지정됩니다.

이렇게 하면 /dashboard 경로로 접근했을 때 Dashboard 컴포넌트가 보이고, Dashboard 내부의 Outlet은 중첩된 라우트의 위치를 나타내며,
/dashboard/profile과 /dashboard/settings에 각각 매핑되는 컴포넌트가 렌더링됩니다. 이러한 방식으로 중첩된 라우트를 구성할 수 있습니다.

 

 


 

 

💡 URL 파라미터

 

URL 파라미터는 웹 페이지의 URL에 포함된 특정 정보를 나타내는 값입니다. 이러한 파라미터는 주로 웹 애플리케이션에서 동적으로 데이터를 전달하고 공유하는 데 사용됩니다. URL 파라미터는 물음표( ? ) 뒤에 키-값 쌍으로 이루어진 문자열로 표현되며, 여러 개의 파라미터는 앰퍼샌드( & )로 구분됩니다.

✅ useParams( ) : URL에서 파라미터 값을 추출하는 데 사용됩니다. 이 후크는 React 함수 컴포넌트 내에서 사용되며, 특정 URL 경로에서 동적으로 변하는 파라미터 값을 가져올 수 있습니다.

 

                    const Component = () => {
                      const { paramName } = useParams();

                      // paramName은 URL에서 추출한 동적 파라미터 값입니다.

                      return <div>{paramName}</div>;
                    };

            위의 예시에서 paramName은 URL에서 추출한 동적 파라미터의 값입니다. 
            예를 들어, URL이 /users/:id 형식으로 되어있고 현재 페이지의 URL이 /users/123이면, 
            paramName에는 "123"이 할당됩니다.

 

이러한 방식으로 useParams를 사용하면 URL에서 동적으로 변하는 파라미터 값을 컴포넌트 내에서 사용할 수 있습니다. 이를 통해 동적 라우팅을 처리하거나 특정 ID나 식별자를 기반으로 데이터를 불러오는 등의 상황에서 매우 유용합니다.

 

 

 

728x90

'[FRONTEND] > REACT' 카테고리의 다른 글

[REACT] 기본 문법_Props !  (1) 2023.10.20
[REACT] 기본 문법_컴포넌트 문법 & Map( ) 함수  (0) 2023.10.12
[REACT] 기본문법  (0) 2023.10.05
[REACT] 시작하기  (1) 2023.10.03
[REACT] REACT 시작하기  (0) 2023.10.03

+ Recent posts