🐯
경민민 IT 핸드북
  • Orientation
    • 전달사항
    • 복습방법
    • 수료한 선배의 한마디
    • 간단 자기소개
    • 스터디
  • 백엔드
    • Java
      • 1장 프로그래밍 기초
      • 2장 자바 메모리구조
        • 1. Stack
        • 2. Heap
      • 6장 객체
      • 8장 상속
      • 9장 다형성
      • 10장 추상클래스와 인터페이스
      • 13장 Generic
      • 14장 Thread
      • 15장 Network
      • 16장 Lamda
        • 1. 내부 클래스 (Inner Class)
          • DTO , VO, Builder Pattern
        • 2. 람다 표현식 (Lambda Expression)
        • 3. 스트림 API (Stream API)
          • Optional
      • 17장 Enum
  • 프론트
    • Node.js
    • Java Script
      • ES6+
        • Node.js로 자바스크립트 실행
        • let , const , var
        • Destructuring문법
          • Rest(...) 문법
        • Arrow Function
        • 모듈
        • ETC
    • Type Script
      • 개요
      • TS설치 및 환경설정
      • 타입스크립트 기본
        • 기본 자료형들과 타입추론
        • Object, Array , Tuple
        • Any, Unknown, Union Type
        • Function Type
          • Type Assertion && Narrowing
          • Never type
        • Type Aliases와 Interface
        • 리터럴 타입
        • 함수 추가 문법
        • Class문법
        • 객체 타입 추가 문법
        • 실습문제 1차
        • 실습문제 2차
        • 실습문제 3차
    • React
      • 개요
      • SPA 와 MPA
        • SEO(작성예정)
      • 리액트 프로젝트 생성(18.3.1.ver)
        • HTML + react 샘플
        • CRA 와 Vite 비교
      • 리액트 개념들
        • Component
          • 클래스 컴포넌트(작성예정)
          • 함수형 컴포넌트(작성예정)
        • JSX
        • React Virtual Dom
          • Reconciliation
        • hook
          • useState
        • 리액트 데이터 전달
          • FLUX
      • 백엔드 서버 연동
        • 비동기요청
        • 웹소켓
        • Promise(작성예정)
      • 실습문제 1
      • 실습문제 2
      • 실습문제3
      • 실습문제4
  • 프레임워크
    • Spring
      • Spring 개발환경 구축
        • 프로젝트 환경설정
        • 프로젝트 생성
          • MVC Project 생성이슈
        • Maven 설정
        • web.xml 설정
        • Spring Bean Configuration.xml 설정
      • Spring Legacy Project
        • Spring 요청 및 응답 흐름
        • Spring 주요 Annotation
          • 의존성 주입방식의 차이점
          • @ModelAttribute와 유효성검사
          • 비동기처리
          • 스프링 예외처리
        • Logging
        • Pagination
        • Spring File 업로드 및 다운로드
        • Spring WebSocket
        • Spring AOP
      • Spring 라이브러리들(작성예정)
        • Lombok
        • Maven
        • MyBatis
      • Spring 구성 모듈(작성예정)
      • 스프링 과제
    • Spring Boot
      • Spring Boot 개발환경 구축
      • 스프링 부트 프로젝트 생성방법들
        • 프로젝트에서 사용하는 의존성들
      • 스프링 프로젝트 구조
        • SpringBootApplication
      • application.properties
      • Cross Origin
        • CORS
      • WebSocket
        • Stomp(작성중)
      • 로그인(작성중)
      • Spring Security(작성중)
      • 실습문제 Select
      • 실습문제 Update
      • 실습문제 Delete
  • 형상관리(Git)
    • GitHub설정
    • SourceTree를 활용한 깃허브 연동
      • 소스트리 설치
      • Clone
      • Branch
        • Branch Protection rules
          • Branch Protection Rules 상세규칙
        • Rebase 와 Squash (작성예정)
      • Team Project 설정
        • 팀장 프로젝트 셋팅
          • Collaborator
          • .gitignore 설정
        • 팀원 프로젝트 셋팅
        • 공통 프로젝트 진행
  • 프로젝트
    • 진행순서
      • 요구사항 분석 단계
        • 유용한 사이트
      • 프로그램 설계 단계
        • 유용한 사이트
      • 프로그램 구현단계
        • SourceTree를 활용한 Team Project설정
      • 테스트 단계
  • 배포
    • AWS-EC2 배포 연습
    • DevOps
      • IT시스템의 변화와 DevOps
      • DevOps 라이프사이클
    • 젠킨스
      • 도커
        • 도커 설치 방법
        • 도커 기본 명령어들
      • 젠킨스 설치
      • 젠킨스 프로젝트 생성
      • 젠킨스 소스코드 통합 - Github
      • 젠킨스 빌드 설정 - Maven
      • 배포 서버 구축하기
      • 파이프라인 구축
      • AWS 서버 생성
        • AWS 인스턴스 생성
        • AWS - Zenkins 연동
        • AWS - 배포서버 연동
        • AWS - Jenkins CI/CD파이프라인 구축
  • 유용한 사이트 모음
  • SQL
    • SQLD
      • 데이터 모델링의 이해 - 스키마
      • 데이터 모델링의 이해 - ERD
      • 데이터 모델링의 이해 - 정규화
      • 데이터 모델링의 이해 - NULL
      • SQL 기본 및 활용 - WINDOW FUNCTION
    • Oracle
      • 1장 개요
      • 2장 SQL
  • LLM 서비스
    • 1장 LLM에 대한 이해
    • 2장 프롬프트 엔지니어링
      • 프롬프트와 프롬프트 엔지니어링
      • GPT PlayGround
      • 프롬프트 작문 유형
      • 기본 프롬프트 엔지니어링 태크닉
      • 고급 프롬프트 엔지니어링 태크닉
        • ReAct Prompting
        • Active-Prompt
        • Reflexion
        • Graph Prompt
      • OpenAI API설정
      • OpenAI를 활용한 프롬프트 엔지니어링 실습
        • 실습 프롬프트
    • 3장 Lang Chain 프레임워크
      • LangSmith 프레임워크
        • LangSmith를 활용한 LangChain 모니터링 설정
      • LangChain 실습 1 - Prompt
        • 실습 코드
      • LangChain 실습 2 - LLM 캐시와 메모리
    • 4장 RAG
      • Document Loader - 문서 로더
      • Text Splitter - 텍스트 분할
      • Embedding - 임베딩
      • Vector Store - 벡터 저장소
      • Retriever - 검색기
      • ReRanker - 재평가자
      • RAG
Powered by GitBook
On this page
  • 모듈단위 개발의 장점
  • 모듈 문법
  • export / import
  • import
  • as 문법
  • default 문법
  1. 프론트
  2. Java Script
  3. ES6+

모듈

PreviousArrow FunctionNextETC

Last updated 10 months ago

es5에서 자바스크립트를 사용하여 개발을 진행할 때 하나의 서비스에 필요한 모든 기능은 하나의 js파일로 작성하였습니다. 즉 해당 서비스를 담당하는 js파일은 하나 였습니다.

하지만 es6에서는 모듈이란 시스템이 도입되어 각 js파일을 하나의 모듈(부품) 단위로 작성하고 관리할 수 있게 되었습니다. 즉 여러개의 모듈(부품)단위로 개발을 하고 이 모듈들을 모아 결합시켜 하나의 서비스를 담당할 수 있게 된것입니다.

이렇게 모듈 단위로 작성된 코드(함수,변수등)는 필요한 다른 모듈에서 import 해오거나 현재 코드를 export시켜서 내보낼 수 있습니다. 또한 모듈단위로 개발된 js파일은 의존성파일이라고도 불립니다.

뭔가 좋아보이긴 하는데... 좋아 보인다고 무작정 따라 쓰는 건 좋지 못하겠죠. 그럼 모듈 단위로 코드를 관리할 때의 장점은 뭐가 있을까요?

모듈단위 개발의 장점

모듈로 관리 했을 때의 장점을 이해하려면 모듈로 관리하지 않았을 때의 단점이 무엇인가를 생각해보시면 됩니다.

es5방식으로 개발을 했을때의 가장 큰 문제점은 의 중복입니다. 모든 변수와 함수가 하나의 글로벌 네임스페이스 내부에 존재하여 변수명이나 함수명 간의 충돌이 발생할 수 있는 것이죠.

이를 모듈단위로 변경하게 되면 각 모듈별로 네임스페이스를 가지므로 이를 방지할 수 있습니다.

다음으로는 코드의 재사용성이 es5방식에 비해 크게 상승했습니다 . es5방식에서 필요한 모든 코드를 하나의 js에 몰아두고 사용해야 했던 반면, 코드를 조각 내어 필요한 위치에 추가하는 모듈방식의 개발은 유지보수성 및 재사용성을 크게 증가시킬 수 있습니다.

하지만 모듈단위 설계가 필요없는 간단한 어플리케이션에서는 필요 없는 개념일 수 있습니다.

모듈 문법

모듈은 플랫폼별 가져오기/내보내기 방법이 상이할 수 있습니다. 이번 장에서는 es표준모듈(esm) 사용방법에 대해서 알아보도록 하겠습니다.

export / import

모듈에서 export는 내보내기의 기능을 가집니다. 즉 내가 만든 기능을 외부 모듈로 내보내기 할때 사용합니다. export 문법은 다음과 같습니다. export {함수명/변수명}

//현재 파일(sayHi.js)에서 sayHi함수 내보내기
function sayHi(){

}
const abc = "aaaa";
export {sayHi}
export {abc}

혹은 함수나 변수를 선언과 동시에 export 시킬 수 있습니다.

export const fn1 = a => console.log(a);
export function fn2(b) {
    console.log(b);
}

import

모듈에서 import 지시어는 다른 외부 모듈의 기능을 가져오겠다 라는 의미를 가집니다. import 문법은 다음과 같이 사용합니다. import {이름} from '모듈파일경로'

아래 코드예씨를 확인해 봅시다.

//main.html
<script type='module' src='./sayHi.js'></script>
<script type='module'>
import {sayHi} from './sayHi.js' 
sayHi();
</script>

import해올 기능들이 많은 경우 {}안에 이어서 제시하시면 됩니다.

import {sayHi, abc, fn1, fn2} from './sayHi.js'

as 문법

만약 다른 모듈에서 동일한 변수명으로 export한 기능을 겹치지 않게 가져오려면 어떻게 해야할까요? 정답은 as문법을 통해 가져올 변수명을 변경해주시면 됩니다. 다음과 같이요.

import {fn1 as renamed} from './sayHi.js'

default 문법

모듈당 한 개의 변수를 default 내보내기 시킬 수 있습니다. default문법을 사용한 export/default에는 {}를 생략 가능합니다.

// js
export default abc;

// html
import abc from 'sayHi.js';

import aaaaaa from 'sayHi.js'

// abc와 aaaaaa는 같음.

위 예시처럼 사용해도 되고, default문법은 파일당 1개씩 만 사용 가능하므로 import시 정확한 변수명을 입력할 필요 없이 내 마음대로 변경해도 상관 없습니다.

참고사이트

모듈 소개iliakan
JavaScript modules - JavaScript | MDN
Logo
Logo