자동 seo 컨설팅 받으러가기

코드 스플리팅

by 넥스트티
2024-10-19

목차

 

코드 스플리팅 개요

코드 스플리팅의 정의

코드 스플리팅은 애플리케이션의 코드베이스를 여러 개의 작은 청크로 나누는 기술이다. 이는 사용자가 실제로 필요로 할 때만 해당 청크를 로드함으로써 초기 로딩 속도를 개선하고 전체 애플리케이션의 성능을 향상시키는 방식이다. 코드 스플리팅은 특히 대규모 애플리케이션에서 유용하며, 사용자가 페이지를 탐색할 때 필요한 코드만을 동적으로 로드하여 불필요한 리소스 낭비를 줄인다. 이를 통해 사용자 경험을 개선할 수 있으며, 로딩 시간이 단축되고 성능이 최적화된다. 코드 스플리팅은 일반적으로 두 가지 방법으로 구현된다. 하나는 동적 코드 스플리팅으로, 사용자가 특정 기능이나 페이지에 접근할 때 필요한 코드만을 로드하는 방식이다. 다른 하나는 정적 코드 스플리팅으로, 애플리케이션 빌드 단계에서 미리 정의된 청크로 나누는 방식이다. 이러한 방법들은 각각의 장단점이 있으며, 프로젝트의 요구사항에 따라 적절한 방법을 선택하는 것이 중요하다. 코드 스플리팅은 웹 최적화와 성능 향상의 핵심 요소로 자리잡고 있으며, 현대 웹 애플리케이션 개발에서 필수적으로 고려해야 할 사항 중 하나이다.

코드 스플리팅의 필요성

코드 스플리팅의 필요성은 웹 애플리케이션의 성능 최적화와 관련이 깊다. 현대 웹 애플리케이션은 다양한 기능과 복잡한 구조를 가지고 있으며, 이는 초기 로딩 시간과 사용자 경험에 직접적인 영향을 미친다. 사용자가 웹 페이지를 처음 접할 때, 전체 애플리케이션의 모든 코드를 한 번에 로드하는 것은 불필요한 리소스 낭비로 이어질 수 있다. 특히, 사용자 환경에 따라 필요한 기능이 다르기 때문에, 모든 코드를 미리 로드하는 것은 비효율적이다. 따라서 코드 스플리팅은 이러한 문제를 해결하기 위한 효과적인 방법으로 자리 잡았다.코드 스플리팅을 통해 개발자는 사용자가 실제로 필요로 할 때만 해당 청크를 로드함으로써 초기 로딩 속도를 개선할 수 있다. 이는 대규모 애플리케이션에서 더욱 두드러지며, 사용자가 특정 페이지나 기능에 접근할 때 필요한 코드만을 동적으로 로드하는 방식이 효과적이다. 이런 접근 방식은 불필요한 데이터 전송을 줄이고, 전체 애플리케이션의 성능을 향상시키는 데 기여한다.또한, 코드 스플리팅은 모바일 환경에서도 필수적이다. 모바일 기기는 성능과 대역폭의 제약이 있기 때문에, 필요한 코드만을 로드하는 것이 더욱 중요하다. 이를 통해 사용자에게 빠른 반응 속도와 부드러운 경험을 제공할 수 있으며, 이는 사용자 만족도를 높이는 데 중요한 요소로 작용한다. 결과적으로, 코드 스플리팅은 현대 웹 개발에서 필수적인 기술로 인식되고 있으며, 애플리케이션의 성능, 효율성 및 사용자 경험을 극대화하는 데 기여한다.

코드 스플리팅의 이점

코드 스플리팅의 이점은 현대 웹 애플리케이션 개발에 있어 매우 중요한 요소로 자리잡고 있다. 코드 스플리팅은 애플리케이션의 초기 로딩 속도를 개선하는 데 기여하는데, 사용자가 필요로 하는 코드만을 로드하여 불필요한 데이터 전송을 줄인다. 이는 사용자가 사이트에 접속했을 때 즉각적인 반응을 얻을 수 있도록 하여, 사용자 경험을 향상시키는 결과를 가져온다. 또한, 모바일 환경에서의 코드 스플리팅은 더욱 중요하다. 모바일 기기는 성능과 데이터 전송 속도에 제한이 있기 때문에, 필요한 코드만을 로드함으로써 빠른 반응 속도와 효율적인 자원 관리를 가능하게 한다. 코드 스플리팅을 통해 개발자는 특정 페이지나 기능에 필요한 코드만을 동적으로 로드할 수 있으며, 이는 대규모 애플리케이션에서 더욱 효과적이다. 결과적으로, 코드 스플리팅은 애플리케이션의 성능을 극대화하고, 사용자 만족도를 높이는 데 기여하는 필수적인 기술로 인식되고 있다. 이러한 이점 덕분에 많은 기업들이 코드 스플리팅을 도입하고 있으며, 이는 향후 웹 개발의 중요한 트렌드로 자리잡을 것으로 보인다.

코드 스플리팅 구현 방법

동적 코드 스플리팅

동적 코드 스플리팅은 애플리케이션이 실행되는 환경에 따라 필요할 때만 코드를 로드하도록 설계된 기술이다. 이를 통해 사용자는 초기 로딩 시 불필요한 코드가 포함되지 않도록 하여, 페이지의 응답 속도를 개선할 수 있다. 동적 코드 스플리팅은 주로 사용자가 특정 페이지나 기능에 접근할 때 필요한 코드만을 요청하는 방식으로 작동한다. 예를 들어, 사용자가 특정 버튼을 클릭했을 때 해당 버튼에 연결된 JavaScript 모듈이 로드되도록 설정할 수 있다. 이는 대규모 애플리케이션에서 특히 유용하며, 초기 로딩 시간 단축과 함께 메모리 소비를 줄이는 데 기여할 수 있다. 이러한 방식은 JavaScript의 Promise 객체와 함께 사용되어 비동기적으로 코드를 로드하는 메커니즘을 제공한다. 예를 들어, 아래와 같은 코드를 사용하여 동적 코드 스플리팅을 구현할 수 있다.

javascript
function loadComponent() {
return import(‘./MyComponent’).then(module => {
const MyComponent = module.default;
// MyComponent 사용
});
}

위의 코드 예제는 사용자가 특정 조건을 만족할 때만 MyComponent를 로드하게 하여, 초기 로딩 시점에서는 해당 컴포넌트가 포함되지 않도록 한다. 결과적으로, 동적 코드 스플리팅은 사용자 경험을 향상시키고 애플리케이션의 성능을 최적화하는 데 중요한 역할을 한다. 다양한 프레임워크에서 동적 코드 스플리팅을 지원하므로, 개발자는 필요에 따라 적절한 방법을 선택하여 적용할 수 있다.

정적 코드 스플리팅

정적 코드 스플리팅은 애플리케이션을 빌드하는 과정에서 코드의 일부를 미리 분리하여 여러 개의 파일로 나누는 기법이다. 이 방법은 특정 페이지나 기능이 필요할 때만 해당 코드 조각을 로드하게 하여 초기 로딩 시간을 줄이고, 사용자 경험을 개선하는 데 기여한다. 정적 코드 스플리팅은 일반적으로 컴파일 타임에 이루어지며, 주로 웹팩(Webpack)이나 롤업(Rollup)과 같은 모듈 번들러를 이용하여 구현된다. 정적 코드 스플리팅의 주요 장점은 코드의 의존성을 명확하게 관리할 수 있다는 점이다. 개발자는 각 모듈의 로딩 시점을 명시적으로 정의할 수 있으며, 필요에 따라 모듈을 추가하거나 제거할 수 있다. 이러한 과정은 대규모 애플리케이션에서 유지보수를 용이하게 하고, 코드의 가독성을 높인다. 예를 들어, 다음과 같은 HTML 코드에서 정적 코드 스플리팅을 적용할 수 있다. <script src=”path/to/your/chunk.js”></script> 위의 코드 예제는 특정 기능에 필요한 JavaScript 파일을 명시적으로 로드하는 모습을 보여준다. 이처럼 정적 코드 스플리팅을 통해 웹 애플리케이션의 성능을 최적화하고, 사용자가 요청하는 페이지나 기능에 필요한 자원만을 효율적으로 관리할 수 있다.

프레임워크별 코드 스플리팅 방법

프레임워크별로 코드 스플리팅을 구현하는 방법은 다양하다. React에서는 React.lazy와 Suspense를 활용하여 동적 코드 스플리팅을 손쉽게 구현할 수 있다. 예를 들어, 다음과 같이 특정 컴포넌트를 지연 로드할 수 있다. import React, { lazy, Suspense } from ‘react’; const LazyComponent = lazy(() => import(‘./LazyComponent’)); function App() { return ( Loading…}> ); } export default App; Vue.js에서는 Vue Router와 함께 route-based code splitting을 통해 각 라우트에 필요한 컴포넌트만 로드할 수 있다. 예를 들어, Vue Router의 lazy loading을 활용하면 다음과 같은 방식으로 구현할 수 있다. const routes = [ { path: ‘/home’, component: () => import(‘./Home.vue’) }, { path: ‘/about’, component: () => import(‘./About.vue’) } ]; const router = new VueRouter({ routes }); Angular에서는 Angular CLI를 통해 코드 스플리팅을 지원하며, loadChildren 속성을 사용하여 모듈을 동적으로 로드할 수 있다. 다음은 Angular에서의 예시 코드이다. const routes: Routes = [ { path: ‘home’, loadChildren: () => import(‘./home/home.module’).then(m => m.HomeModule) }, { path: ‘about’, loadChildren: () => import(‘./about/about.module’).then(m => m.AboutModule) } ]; 이러한 방식으로 각 프레임워크는 코드 스플리팅을 쉽게 구현할 수 있으며, 이를 통해 웹 애플리케이션의 성능을 최적화하고 사용자 경험을 향상시킬 수 있다.

코드 스플리팅의 성능 최적화

코드 스플리팅과 로딩 속도

코드 스플리팅은 웹 애플리케이션의 초기 로딩 속도를 향상시키는 중요한 기법이다. 사용자가 웹 애플리케이션을 처음 방문할 때, 전체 코드를 한 번에 다운로드하는 대신 필요한 코드만 먼저 로드하여 사용자에게 빠른 응답성을 제공하는 방식이다. 이 방식은 특히 대규모 애플리케이션에서 효과적이며, 초기 로딩 시간을 단축시켜 사용자 경험을 개선할 수 있다. 코드 스플리팅을 적용하면, 사용자는 필요한 기능이 있는 경우에만 해당 코드가 로드되므로, 불필요한 리소스를 줄일 수 있다. 예를 들어, 사용자가 특정 페이지로 이동할 때 그 페이지에 필요한 코드만 로드하게 되며, 이는 페이지 전환의 부드러움을 증가시킨다. 이러한 접근은 특히 모바일 환경에서 더욱 중요해지는데, 사용자가 느끼는 대기 시간은 이탈률에 큰 영향을 미치기 때문이다. 코드 스플리팅을 활용한 웹 애플리케이션은 사용자가 필요로 하는 기능에 대한 액세스를 빠르게 제공할 수 있으며, 이를 통해 전체적인 애플리케이션의 성능을 크게 개선할 수 있다. 또한, 이러한 속도 향상은 검색 엔진 최적화(SEO)에도 긍정적인 영향을 미친다. 빠른 로딩 속도는 검색 엔진의 순위 결정 요소 중 하나로, 사용자 경험을 고려한 웹 개발 전략으로서 코드 스플리팅은 필수적인 요소로 자리잡고 있다.

HTTP 요청 최적화

코드 스플리팅을 구현할 때, HTTP 요청 최적화는 성능 향상의 중요한 요소로 작용한다. 웹 애플리케이션에서 사용자가 페이지를 요청할 때, 서버와의 통신에서 발생하는 HTTP 요청은 로딩 속도에 직접적인 영향을 미친다. 따라서, 이러한 요청을 최소화하고 최적화하는 것이 필수적이다. 코드 스플리팅을 통해 필요한 코드만 동적으로 로드하게 되면, 불필요한 요청을 줄일 수 있다. 예를 들어, 사용자가 특정 기능을 사용할 때 해당 기능에 필요한 자원만 요청하도록 설계하면, 초기 로딩 시 불필요한 데이터를 전송하지 않을 수 있다. 또한, 이를 통해 서버의 부하를 줄이고, 사용자의 대기 시간을 최소화할 수 있다. HTTP/2 프로토콜을 활용하는 것도 중요한 방법이다. HTTP/2는 다중화 기능을 지원하여 여러 요청을 동시에 처리할 수 있도록 하며, 이는 페이지 로딩 속도를 더욱 향상시킨다. 또한, 서버 푸시 기능을 통해 미리 필요한 자원을 전송함으로써, 클라이언트에서 추가 요청을 줄일 수 있다. 이러한 접근은 특히 대규모 애플리케이션에서 성능을 극대화하는 데 효과적이다. 따라서, 코드 스플리팅과 HTTP 요청 최적화를 함께 고려하는 것은 현대 웹 개발에서 사용자 경험을 개선하는 데 필수적인 전략이다.

자원 관리 및 캐싱 전략

자원 관리 및 캐싱 전략은 코드 스플리팅의 성능 최적화에서 중요한 역할을 한다. 효율적인 자원 관리는 애플리케이션의 로딩 속도와 사용자 경험을 개선하는 데 기여한다. 코드 스플리팅을 통해 필요한 코드만 동적으로 로드하게 되면, 사용자가 필요로 하는 자원만을 요청할 수 있다. 이때, 효율적인 자원 관리를 위해서는 각 모듈이 의존하는 다른 모듈들을 명확히 정의하고, 불필요한 중복을 피해야 한다. 또한, 자원의 크기를 최소화하고, 필요한 경우에만 로드되도록 설정하는 것이 중요하다. 캐싱 전략 또한 성능 최적화에 있어 필수적이다. 웹 브라우저는 자원을 캐싱하여, 동일한 자원을 반복적으로 요청할 필요를 줄인다. 이를 통해 로딩 시간을 단축하고, 서버 부하를 줄일 수 있다. 캐싱 전략을 세울 때는 캐시의 만료 시간, 버전 관리, 그리고 변경 사항에 대한 처리 방식 등을 고려해야 한다. 예를 들어, 자원이 변경되었을 때 캐시를 무효화하는 방법을 통해 사용자가 최신 버전을 항상 사용할 수 있도록 해야 한다. 이를 위해 HTTP 헤더를 활용하여 캐시 제어를 설정할 수 있다. 아래는 HTTP 헤더를 통한 캐시 제어의 예시이다.Cache-Control: max-age=3600, public위 예시는 해당 자원을 1시간 동안 캐시할 수 있도록 설정하는 방법이다. 이러한 자원 관리와 캐싱 전략을 고려하여 코드 스플리팅을 구현하면, 전반적인 애플리케이션의 성능을 최적화할 수 있다.

코드 스플리팅의 도구와 라이브러리

Webpack을 이용한 코드 스플리팅

Webpack은 현대 웹 애플리케이션 개발에서 널리 사용되는 모듈 번들러이다. 코드 스플리팅을 지원하여, 애플리케이션의 초기 로딩 시간을 감소시키고 최적화된 성능을 제공한다. Webpack을 활용한 코드 스플리팅은 주로 두 가지 방식으로 이루어진다. 첫 번째는 동적 코드 스플리팅으로, 필요할 때만 특정 모듈을 로드하도록 설정할 수 있다. 이 방법은 사용자가 애플리케이션의 특정 기능을 요청할 때만 관련 자원을 불러오기 때문에, 초기 로딩 속도를 개선할 수 있다. 두 번째는 정적 코드 스플리팅으로, 이는 애플리케이션의 특정 부분을 예측하여 미리 로드하는 방식이다. 이러한 방식은 사용자가 자주 접근하는 페이지나 기능에 대해 빠른 접근성을 제공한다. Webpack의 코드 스플리팅 기능은 설정 파일인 webpack.config.js에서 간단하게 조정할 수 있다. 예를 들어, 다음과 같은 설정을 통해 동적 코드 스플리팅을 구현할 수 있다. module.exports = {   entry: ‘./src/index.js’,   output: {     filename: ‘bundle.js’,     path: path.resolve(__dirname, ‘dist’)   },   optimization: {     splitChunks: {       chunks: ‘all’     }     } }; 위의 설정은 Webpack이 모든 청크를 분리하여 최적의 로딩을 가능하게 한다. 이를 통해 사용자는 애플리케이션의 초기 로딩 시간을 줄이고, 더 나은 사용자 경험을 제공받을 수 있다. Webpack을 이용한 코드 스플리팅은 대규모 애플리케이션에서도 유용하며, 효율적인 자원 관리와 성능 최적화를 가능하게 한다.

React의 코드 스플리팅

React의 코드 스플리팅은 대규모 애플리케이션에서 성능을 최적화하는 중요한 기법이다. React는 사용자가 애플리케이션을 효과적으로 사용할 수 있도록 코드 스플리팅을 지원하는 여러 기능을 제공한다. 주로 React.lazy()와 Suspense를 활용하여 동적 로딩을 구현할 수 있다. 이러한 방법은 컴포넌트를 필요할 때만 로드함으로써 초기 로딩 시간을 단축시킨다. 이는 특히 사용자 인터페이스가 복잡한 애플리케이션에서 더욱 유용하다. 코드 스플리팅의 구현은 다음과 같이 진행된다. 우선 React.lazy()를 사용하여 동적으로 로드할 컴포넌트를 정의한다. 예를 들어, 다음과 같이 작성할 수 있다. const LazyComponent = React.lazy(() => import(‘./LazyComponent’)); 다음으로, Suspense 컴포넌트를 사용하여 로딩 상태를 관리할 수 있다. Loading…}> 위의 코드는 LazyComponent가 로드될 때까지 로딩 상태를 표시하게 된다. 이러한 방식으로 구현된 코드 스플리팅은 사용자가 애플리케이션을 사용하는 동안 불필요한 자원을 소비하지 않도록 도와준다. 따라서, 성능 향상은 물론 사용자 경험 또한 개선되는 효과를 가져온다. React의 코드 스플리팅은 특히 라우팅과 결합하여 사용될 때 더욱 강력한 성능을 발휘할 수 있다.

Vue.js에서의 코드 스플리팅

Vue.js에서의 코드 스플리팅은 애플리케이션 성능을 최적화하는 중요한 기법 중 하나이다. Vue.js는 코드 스플리팅을 지원하기 위해 다양한 방법을 제공하며, 이 과정은 크게 두 가지 방법으로 나뉜다. 첫 번째는 동적 코드 스플리팅으로, 필요한 컴포넌트를 동적으로 로드하는 방식이다. 이를 통해 초기 로딩 시간을 줄이고 사용자가 필요할 때만 자원을 로드하도록 하여 성능을 향상시킬 수 있다. Vue Router와 결합하여 특정 경로에 대한 컴포넌트를 동적으로 로드하는 것이 일반적이다. 예를 들어, 다음과 같은 방식으로 코드 스플리팅을 구현할 수 있다.

javascript
const User = () => import(‘./components/User.vue’);

위의 코드는 User.vue 컴포넌트를 필요할 때만 로드하는 예이다. 두 번째 방법은 정적 코드 스플리팅으로, 빌드 시점에 코드 스플리팅을 적용하여 여러 개의 번들 파일로 나누는 방식이다. 이 방법은 주로 Webpack과 같은 빌드 도구를 사용하여 구현된다. Vue CLI는 기본적으로 Webpack을 사용하므로, Vue 애플리케이션을 생성할 때 자동으로 코드 스플리팅을 지원한다.

이처럼 Vue.js에서의 코드 스플리팅은 초기 로딩 속도를 개선하고 사용자 경험을 향상시키기 위해 매우 유용한 기술이다. 또한, Vue의 생태계 내에서 다양한 라이브러리와 도구들이 이 기능을 쉽게 활용할 수 있도록 지원하고 있다. 이러한 점에서 Vue.js는 코드 스플리팅을 통한 성능 최적화에 있어 강력한 프레임워크로 자리 잡고 있다.

코드 스플리팅,성능 최적화,동적 코드 스플리팅,정적 코드 스플리팅,웹팩(Webpack),롤업(Rollup),React.lazy,Suspense,Vue Router,라우트 기반 코드 스플리팅,HTTP 요청 최적화,캐싱 전략,자원 관리,대규모 애플리케이션,프레임워크 성능,모바일 환경 최적화

자주 묻는 질문

코드 스플리팅이란 무엇인가요?

코드 스플리팅은 애플리케이션의 코드를 여러 개의 작은 청크로 나누어 필요한 시점에만 로드하는 기술입니다. 이를 통해 초기 로딩 시간을 단축하고 애플리케이션 성능을 개선할 수 있습니다.

동적 코드 스플리팅과 정적 코드 스플리팅의 차이점은 무엇인가요?

동적 코드 스플리팅은 사용자가 특정 기능에 접근할 때만 해당 코드를 로드하는 방식이며, 정적 코드 스플리팅은 애플리케이션 빌드 단계에서 코드가 미리 분리되는 방식입니다.

코드 스플리팅은 어떻게 성능을 최적화하나요?

코드 스플리팅은 초기 로딩 시 필요한 코드만 로드해 로딩 시간을 단축하고, 나중에 필요한 기능은 동적으로 로드하여 성능을 최적화합니다.

어떤 도구를 사용해 코드 스플리팅을 구현할 수 있나요?

Webpack, Rollup, 그리고 다양한 프레임워크 내장 도구들이 코드 스플리팅을 지원하며, React, Vue.js, Angular에서 쉽게 구현할 수 있습니다.

React에서 코드 스플리팅은 어떻게 구현하나요?

React에서는 React.lazy와 Suspense를 사용하여 동적 코드 스플리팅을 구현할 수 있으며, 필요할 때만 특정 컴포넌트를 로드할 수 있습니다.

Vue.js에서 코드 스플리팅은 어떻게 이루어지나요?

Vue.js에서는 Vue Router와 함께 동적 로딩을 사용하여 코드 스플리팅을 구현할 수 있으며, Webpack을 통해 정적 코드 스플리팅도 가능합니다.

HTTP 요청 최적화는 코드 스플리팅에서 어떤 역할을 하나요?

HTTP 요청 최적화는 필요한 코드만을 로드하여 불필요한 요청을 줄이고, 페이지 로딩 속도를 개선하는 데 기여합니다.

캐싱 전략은 코드 스플리팅에 어떻게 적용되나요?

코드 스플리팅에서 자원을 캐싱하면 동일한 코드를 반복적으로 요청하지 않도록 하여 로딩 시간을 단축하고 서버 부하를 줄일 수 있습니다.

참고자료

관련포스트

REST API

목차REST API란?REST API의 구조REST API 구현 방법REST API 활용 사례REST API란? REST의 개념 REST API는 Representational State Transfer의 약자로, 웹에서 자원의 상태를 전송하기 위한 아키텍처 스타일이다. REST는 클라이언트-서버 구조를 기반으로... more

EJS

목차EJS란?EJS의 설치 및 설정EJS 템플릿 문법EJS의 장점과 단점EJS란? EJS의 정의 EJS는 'Embedded JavaScript'의 약자로, JavaScript와 HTML을 결합하여 동적인 웹 페이지를 생성하는 템플릿 엔진이다. EJS를 사용하면 HTML 파일 내에 JavaScript... more

Pug

목차Pug이란?Pug 문법Pug 사용 방법Pug의 장점과 단점Pug이란? Pug의 개요 Pug는 웹 애플리케이션의 템플릿 엔진으로, HTML을 보다 간결하고 효율적으로 작성할 수 있도록 돕는 도구이다. Pug는 주로 Node.js 환경에서 사용되며, HTML... more

Less

목차Less란?Less 설치 및 설정Less 문법과 기능Less의 활용 사례Less란? Less의 정의 Less는 CSS(Cascading Style Sheets)의 전처리기로, CSS를 보다 효율적으로 작성할 수 있도록 도와주는 도구이다. Less를 사용하면 변수, 믹스인, 중첩 규칙 등의... more

Sass

목차Sass란?Sass의 설치 및 설정Sass의 주요 기능Sass와 CSS 비교Sass란? Sass의 정의 Sass는 스타일시트 작성의 효율성을 높이기 위해 설계된 CSS의 전처리기(preprocessor)이다. 즉, Sass는 CSS를 보다 체계적이고 관리하기 쉽게 만들기 위한... more

Foundation

목차Foundation 개요Foundation 설치 및 설정Foundation의 기능 및 장점Foundation 활용 사례Foundation 개요 Foundation의 정의 Foundation은 웹 개발을 위한 프론트엔드 프레임워크로, 사용자가 효율적이고 일관된 웹사이트와 웹 애플리케이션을... more

Bulma

목차Bulma란?Bulma 설치 방법Bulma의 구성 요소Bulma 활용 사례Bulma란? Bulma의 개요 Bulma는 현대적인 웹 디자인을 위한 CSS 프레임워크이다. 이 프레임워크는 모바일 우선 접근 방식을 기반으로 하여, 다양한 화면 크기에서 일관된... more

Bootstrap

목차Bootstrap이란?Bootstrap 설치 방법Bootstrap의 구성 요소Bootstrap 커스터마이징Bootstrap이란? Bootstrap의 역사 Bootstrap은 2011년 Twitter의 개발자 마크 오토와 Jacob Thornton에 의해 처음 개발되었다. 초기에는 웹 개발을 위한 일관된... more