🐯
경민민 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
  • SPA(Single Page Application)
  • MPA(Multi Page Application)
  • MPA 와 SPA 비교
  • MPA
  • SPA
  • 정리
  1. 프론트
  2. React

SPA 와 MPA

SPA와 MPA의 개념들에 대해 다룰 페이지

Previous개요NextSEO(작성예정)

Last updated 10 months ago

SPA(Single Page Application)

어플리케이션을 구동하는데 필요한 페이지가 1개(Single Page)만 존재하는 어플리케이션을 의미한다. SPA어플리케이션들은 하나의 HTML페이지안에서 새로고침(refresh)없이 Component만 교체하여 변경된 내용을 즉각적으로 반영한다. 마치 모바일 앱(페이스북)처럼 작동하기 때문에 웹과 모바일앱을 동시에 개발해야하는 하이브리드 앱을 개발하고자 할 때 적절한 구현방식이 SPA이다.

또한 SPA는 서버와의 통신 없이 클라이언트측에서 응답화면을 만들기 때문에 서버와 통신하여 응답화면을 얻어 오는 방식의 어플리케이션과 비교하여 보다 빠르고 즉각적인 응답화면을 제공한다.

전문용어로 클라이언트측에서 응답화면을 찾는 과정을 CSR, 서버측에서 찾는과정을 SSR이라고 부른다.

하이브리드앱(Hybrid App)

HTML,CSS,JS를 통해 앱을 만든 후 일반 웹에서는 구글이나, 크롬같은 브라우저를 이용하여 앱을 실행시키고, 모바일 환경에서는 웹뷰(WebView)라는 특수한 브라우저를 활용하여 앱을 실행시키고 플랫폼 별 네이티브 기능을 사용할 수 있게 해주는 앱 개발 방식.

하나의 코드로 웹과 앱을 동시에 동작가능하게 하므로 개발비용을 절감시킬 수 있다.

MPA(Multi Page Application)

애플리케이션을 구동하는데 필요한 페이지가 여러개(Multi Page) 존재하는 어플리케이션을 의미한다. MPA어플리케이션들은 응답화면들을 URL별로 준비해두고 클라이언트가 요청할 때 마다 서버에서 URL에 맞는 응답화면전체를 동적으로 생성하여 만들어준다.

즉 매 요청마다 페이지 전체를 새로 생성하므로 새로고침(refresh)이 발생한다. 따라서 새로고침 없이 변경된 부분만찾아 업데이트하는 SPA방식에 비하여 렌더링 시간이 더 오래 걸린다.

그럼 MPA 왜 씀?

MPA어플리케이션도 나름의 장점이 있다. SPA도 장점만 존재하는건 아니고 단점이 존재하며, SPA의 단점을 보충해 줄 수 있는게 MPA이다.

즉 SPA의 단점을 MPA가 보완해 줄 수 있고, MAP의 단점을 SPA가 보완하는 것이다.

MPA 와 SPA 비교

아래 특징에서 단점은 빨간색, 장점은 파랑색으로 표기하도록 하겠다.

MPA

  1. 렌더링( 화면을 만드는 작업)이 Server측에서 이루어진다.(Server Side Rendering)

  2. URL마다 응답해줘야할 페이지를 미리 지정해둔다.

  3. 매 요청시 응답화면을 새로 생성하여 반환 한다.즉 새로고침이 발생하며 응답시간이 길다.

  4. URL마다 응답해줘야 할 페이지가 정해져 있기 때문에 검색엔진최적화(SEO)에 좋다.

  5. 응답화면에 넣어줄 데이터를 Server가 관리하기 때문에 보안이 강화된다.

SPA

  1. 렌더링이 Client측에서 이루어진다.(Client Side Rendering)

  2. URL이 존재하긴 하지만 응답해줘야할 페이지는 애초에 1개 이다.

  3. 매 요청시마다 변경점만 교체한다. 즉 새로고침이 없고, 응답 반응이 즉각적으로 이루어진다.

  4. URL마다 응답해줘야할 페이지가 1개뿐이므로 검색엔진최적화(SEO)에 나쁘다.

  5. Component에 넣어줄 데이터를 Client측에서 관리하기 때문에 보안이 취약하다.

정리

SPA와 MPA 방식 모두 상대적으로 장점과 단점이 혼재 한다. 그럼 대체 어떤 방식으로 개발해야 하나?

별거없고 한 가지 방식으로만 개발하려는 생각을 고치면 된다.

만들고자 하는 어플리케이션이 SPA친화적 이라면 SPA로 , MPA친화적 이라면 MPA로 개발하면 될 뿐이고 두 방법을 섞어도 무방하다.

요즘에는 기술이 좋아서 SPA어플리케이션에 SSR기능을 끼워 넣는 다던지, 보안관련 기능을 추가한다던지가 다 가능해서 SPA와 MPA의 장점을 섞은 어플리케이션 개발이 가능하다.

따라서 어플리케이션이 SPA친화적이라면 SPA로시작, MPA친화적이라면 MPA방식으로 개발을 시작 한 후 단점들은 최신 기술에 맞춰서 보완해주면 된다.

React의 단점을 보완해주는 FrameWork

React는 SPA방식 어플리케이션을 제작할 때 유용한 라이브러리다. SPA는 구조상 검색엔진최적화에 나쁜 점수를 받는데 이를 보완해 주는 FrameWork로 Next.js와 Remix가 있다. 두 프레임워크는 SPA의장점을 유지하면서 SSR기능을 제공하여 SEO성능을 강화시키고 다양한 보안기법을 통해 사용자 데이터를 보호할 수 있는 방법들을 제공한다.

spa와 mpa의 차이점