소프트웨어의 기능을 확장하거나 특정 기능을 추가하기 위해 설치할 수 있는 작은 프로그램이나 모듈
주 프로그램(호스트 애플리케이션)이 제공하는 기능 외에 추가적인 기능을 제공하거나, 특정 작업을 수행할 수 있도록 합니다.
Interface
인터페이스는 두 애플리케이션 간의 서비스 계약
인터페이스는 2개 이상의 장치나 소프트웨어 사이에서 정보나 신호를 주고받을 때 그 사이를 연결하는 연결장치나 경계면 또는 연결하는 경계에서 상호 접속하기 위한 하드웨어, 소프트웨어, 조건, 규약 등을 말한다. 컴퓨터와 사용자 간의 통신이 가능하도록 하는 장치나 프로그램을 의미하기도 한다.
API
Application Programming Interface(애플리케이션 프로그램 인터페이스)의 줄임말
이 계약은 요청과 응답을 사용하여 두 애플리케이션이 서로 통신하는 방법을 정의
API 문서에는 개발자가 이러한 요청과 응답을 구성하는 방법에 대한 정보가 들어 있음
API는 정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘
framework
코드를 작성하는 기본적인 틀을 제공해서 보다 효율적으로 어플리케이션을 만들 수 있도록 하는 소프트웨어 환경
응용 프로그램은 프레임워크에 의해 사용 됨
ex. next.js(react.js의 렌더링 프레임워크)
library
어플리케이션을 만들 때 필요한 자원의 모임
응용 프로그램이 라이브러리를 사용 함
ex. react.js
컴파일타임과 런타임
런타임(Runtime)과 컴파일타임(Compiletime)은 소프트웨어 프로그램개발의 서로 다른 두 계층의 차이를 설명하기 위한 용어
컴파일타임 오류
프로그램이 성공적으로 컴파일링되는 것을 방해하는 신택스에러(Syntax error)나 파일참조 오류와 같은 문제
컴파일러가 컴파일 타임 에러 발생시킴
e.g. 신택스 오류, 타입체크 오류
런타임 오류
프로그램이 실행중에 발생하는 형태의 오류
e.g. 0나누기 오류, 널(Null)참조 오류, 메모리 부족 오류
컴파일
사람이 이해하는 언어를 컴퓨터가 이해할 수 있는 언어로 바꿔주는 과정
컴파일러 = ( 컴파일 = 원시코드 -> 목적코드 + 링크 = 목적파일 -> 실행파일 ) 기능을 하는 것
scss 파일이 전처리 과정을 통해 css로 변경된 뒤 생성된 css 파일이 브라우저에 적용 됨
컴파일타임(Compiletime)
프로그램을 생성하기 위해 개발자는 첫째로 소스코드를 작성하고 컴파일이라는 과정을 통해 기계어코드로 변환 되어 실행 가능한 프로그램이 되며, 이러한 편집 과정을 컴파일타임(Compiletime) 이라고 부른다.
런타임(Runtime)
컴파일과정을 마친 프로그램은 사용자에 의해 실행되어 지며, 이러한 응용프로그램이 동작되어지는 때를 런타임(Runtime)이라고 부른다.
웹프로그래밍에서는 프론트엔드(Front End)와 백엔드(Back End) 또는 클라이언트 사이드(Client Side)와 서버 사이드(Server Side)로 더욱 세분화 되는데, 프론트엔드는 사용자의 브라우저에서 해석되는 소스코드를 의미하며, 서버사이드는 웹서버에서 해석되는 소스코드를 의미합니다.
마이그레이션(migration)
컴퓨터에서, 한 운영 체계에서 더 나은 운영 체계나 새로운 운영 체계로 옮아가는 과정
포팅(proting)
실행 가능한 프로그램이 원래 설계된 바와 다른 컴퓨터 환경(e.g. CPU, 운영 체제, 서드 파티 라이브러리 등)에서 동작할 수 있도록 하는 과정
컨버팅(converting)
개발된 프로그램을 언어만 변경해 같은 플랫폼에서 같은 동작이 가능하도록 수정하는 작업
'바꿔준다'는 점에서 포팅(porting)과 구분하기 어려울 수 있다. 같은 플랫폼 상에서 개발 언어만 다르게 변경한다면 컨버팅, A 플랫폼에 맞게 만들어진 프로그램을 B 플랫폼에 맞게 변경하는 과정을 포팅 이라고 한다.
dispatch
이벤트를 발생(fire) 시킴
제이쿼리의 trigger와 비슷한 역할
alia 경로(path) 설정
단축 경로 설정
tree-shaking
프로그램의 불필요한 부분을 잘라내어 최적화된 코드를 생성하는 기술로 애플리케이션의 성능과 효율성을 향상시키는데 도움을 줌
라우팅, 라우트, 라우터
라우팅(Routing)
: 클라이언트가 보낸 요청에 대해 어떤 처리르 할지 결정하는 것
: 다른 경로(url주소)에 따라 다른 뷰(화면)을 보여주는 것
라우트(Route)
: 이 처리를 위해 실행될 코드 정의
: 경로, 서로 다른 네트워크 간 데이터를 전송하고 받는 경로
라우터(Router)
: 이러한 라우트들을 그룹화하여 구조화 함
: 라우팅 기능을 처리해주는 장치?
번들링, 청크
Vite와 같은 번들러는 웹 애플리케이션의 구동에 필요한 여러 모듈이나 라이브러리를 하나로 묶어서 사용자가 웹 앱을 로드할 때 필요한 자원을 제공한다. 이러한 과정을 '번들링'이라고 부르며, 이 때 생성되는 작은 조각들을 '청크'라고 함
레포 관리 전략
모노 레포
여러 프로젝트(혹은 모듈)가 하나의 저장소(repository)에 모두 포함되는 방식
즉, 하나의 Git 저장소에서 여러 애플리케이션, 라이브러리, 서비스 등을 함께 관리하는 방법
장점
여러 프로젝트 간의 코드 재사용과 협력이 쉬움.
코드 변경 사항을 한꺼번에 관리할 수 있어 동기화가 용이.
버전 관리를 일관되게 적용 가능.
일관된 도구와 워크플로우를 사용해 개발 환경을 통일할 수 있음.
단점
저장소가 커지면, 빌드 속도나 배포 과정이 복잡해질 수 있음.
특정 서비스만 필요한 개발자들에게는 과도한 코드가 포함될 수 있음.
멀티 레포
각 프로젝트나 서비스가 각각 독립된 저장소를 가지는 방식
각 애플리케이션 또는 서비스마다 별도의 Git 저장소를 운영하는 방법
장점
각 프로젝트가 독립적으로 관리되므로 빌드와 배포가 가벼움.
팀이나 서비스별로 분리된 코드 관리가 용이하여, 각각 독립적인 워크플로우와 도구를 사용할 수 있음.