웹 개발

**웹 개발**(web development)은 인터넷(월드 와이드 웹) 또는 인트라넷(사설 네트워크)을 위한 웹사이트를 개발하는 작업이다. 웹 개발은 플레인 텍스트의 단순한 단일 정적 페이지 개발부터 복잡한 웹 애플리케이션, 전자 비즈니스, 소셜 네트워크 서비스에 이르기까지 다양하다. 웹 개발이 일반적으로 지칭하는 작업의 보다 포괄적인 목록에는 웹 공학, 웹 디자인, 웹 콘텐츠 개발, 클라이언트 연결, 클라이언트 사이드/서버 사이드 스크립팅, 웹 서버 및 네트워크 보안 구성, 전자 상거래 개발 등이 포함될 수 있다.

웹 전문가들 사이에서 "웹 개발"은 일반적으로 웹사이트 구축의 주요 비디자인 측면, 즉 마크업 작성 및 코딩을 의미한다. 웹 개발은 저작물 관리 시스템(CMS)을 사용하여 기본적인 기술로 콘텐츠 변경을 더 쉽게 할 수 있다.

더 큰 조직 및 기업의 경우, 웹 개발 팀은 수백 명의 사람(웹 개발자)으로 구성될 수 있으며 웹사이트를 개발하는 동안 애자일 방법론과 같은 표준 방법을 따를 수 있다. 소규모 조직은 단일 상주 또는 계약 개발자만 필요하거나, 그래픽 디자이너 또는 정보 시스템 기술자와 같은 관련 직무에 보조적으로 할당될 수 있다. 웹 개발은 지정된 부서의 영역이 아니라 부서 간의 협력적인 노력이 될 수 있다. 웹 개발 전문화에는 프론트엔드 개발자, 백엔드 개발자, 풀스택 개발자의 세 가지 종류가 있다. 프론트엔드 개발자는 사용자 브라우저에서 실행되는 동작과 시각적 요소를 담당하고, 백엔드 개발자는 서버를 다룬다. 웹의 상용화 이후 이 산업은 폭발적으로 성장하여 역사상 가장 많이 사용되는 기술 중 하나가 되었다.

## 월드 와이드 웹 및 웹 개발의 진화

### 기원/웹 1.0
팀 버너스리는 1989년 CERN에서 월드 와이드 웹을 만들었다.

웹 개발의 주요 목표는 기관 및 다양한 글로벌 조직과 제휴한 학계의 자동화된 정보 공유 요구를 충족시키는 것이었다. 결과적으로 1993년에 HTML이 개발되었다.

웹 1.0은 사용자가 자료를 보고 적은 양의 정보만 제공할 수 있었던 첫 번째 패러다임으로 설명된다. 웹 1.0의 핵심 프로토콜은 HTTP, HTML 및 URI였다.

### 웹 2.0
2004년 미디어 라이브와 함께한 회의에서 오라일리 부사장 데일 도허티가 대중화한 용어인 웹 2.0은 인터넷 사용의 변화를 나타내며 상호작용성을 강조한다.

웹 2.0은 사용자 참여와 통신을 증가시켰다. 이는 웹 1.0의 정적이고 읽기 전용 특성에서 진화하여 참여 및 통신을 위한 통합 네트워크가 되었다. 종종 사용자 중심의 읽기-쓰기 온라인 네트워크로 지칭된다.

웹 2.0 환경에서는 사용자가 음악, 파일, 이미지, 동영상 제작과 같은 공유 활동을 장려하는 플랫폼에 접근할 수 있게 되었다. 웹 2.0의 아키텍처는 종종 "인터넷의 백본"으로 간주되며, 표준화된 XML (확장 가능한 마크업 언어) 태그를 사용하여 독립적인 플랫폼과 온라인 데이터베이스에서 정보 흐름을 승인한다.

### 웹 3.0
웹 3.0은 웹의 세 번째이자 현재 버전으로 간주되며 2014년에 도입되었다. 이 개념은 웹의 완전한 재설계를 상상한다. 주요 기능에는 메타데이터 통합, 정확한 정보 전달, 선호도, 기록 및 관심사를 기반으로 한 향상된 사용자 경험이 포함된다.

웹 3.0은 웹을 방대한 조직화된 데이터베이스로 전환하여 기존 검색 엔진보다 더 많은 기능을 제공하는 것을 목표로 한다. 사용자는 자신의 선호도에 따라 탐색을 사용자 정의할 수 있으며, 핵심 아이디어는 데이터 소스를 식별하고, 효율성을 위해 연결하며, 사용자 프로필을 생성하는 것을 포함한다.

이 버전은 때때로 시맨틱 웹으로도 알려져 있다.

### 웹 개발 기술의 진화
웹 개발 기술의 여정은 인터넷 초기에 간단한 HTML 페이지로 시작되었다. 시간이 지남에 따라 스타일링을 위한 CSS와 상호작용성을 위한 자바스크립트가 통합되었다. 이러한 진화는 정적 웹사이트를 동적이고 반응적인 플랫폼으로 변화시켰고, 오늘날 우리가 가지고 있는 복잡하고 기능이 풍부한 웹 애플리케이션을 위한 발판을 마련했다.

* 정적 HTML 페이지 (1990년대)
* CSS 도입 (1990년대 후반)
* 자바스크립트 및 동적 HTML (1990년대 - 2000년대 초반)
* Ajax (1998)
* 저작물 관리 시스템(CMS)의 부상 (2000년대 중반)
* 모바일 웹 (2000년대 후반 - 2010년대)
* 싱글 페이지 애플리케이션(SPA) 및 프론트엔드 프레임워크 (2010년대)
* 서버 사이드 자바스크립트 (2010년대)
* 마이크로서비스 및 API 기반 개발 (2010년대 - 현재)
* 프로그레시브 웹 애플리케이션(PWA) (2010년대 - 현재)
* JAMstack 아키텍처 (2010년대 - 현재)
* 웹어셈블리(Wasm) (2010년대 - 현재)
* 서버리스 컴퓨팅 (2010년대 - 현재)
* AI 및 기계 학습 통합 (2010년대 - 현재)

미래의 웹 개발은 브라우저 기술, 웹 인터넷 인프라, 프로토콜 표준, 소프트웨어 공학 방법 및 애플리케이션 동향의 발전에 의해 주도될 것이다.

## 웹 개발 수명 주기

웹 개발 수명 주기는 웹사이트 및 웹 애플리케이션 구축에 관련된 단계를 설명하는 방법이다. 이는 개발 프로세스 전반에 걸쳐 최적의 결과를 보장하는 구조화된 접근 방식을 제공한다.

일반적인 웹 개발 프로세스는 7단계로 나눌 수 있다.

### 분석
데브라 하우크래프트(Debra Howcraft)와 존 캐롤(John Carroll)은 웹 개발 프로세스를 순차적인 단계로 나눌 수 있는 방법론을 제안했다. 그들은 분석의 여러 측면을 언급했다.

1단계는 웹 전략을 수립하고 웹사이트가 목표를 효과적으로 달성하는 방법을 분석하는 것을 포함한다. 케일(Keil) 등의 연구는 소프트웨어 프로젝트 실패의 주요 원인으로 최고 경영진의 의지 부족과 시스템 요구 사항에 대한 오해를 지적한다. 이러한 위험을 완화하기 위해 1단계에서는 전략적 목표를 설정하고 이를 달성하기 위한 시스템을 설계한다. 웹 존재를 구축하기로 한 결정은 이상적으로 조직의 기업 정보 전략과 일치해야 한다.

분석 단계는 다음 3단계로 나눌 수 있다.
* 웹 전략 개발
* 목표 정의
* 목표 분석

이 단계에서는 이전에 개요를 설명한 목표와 가용 자원을 분석하여 타당성을 결정한다. 이 분석은 다음과 같이 여섯 가지 작업으로 나뉜다.

* **기술 분석:** 사이트 구축, 호스팅 및 지원에 필요한 모든 기술 구성 요소 및 도구 식별.
* **정보 분석:** 사용자에게 필요한 정보(정적 웹 페이지 또는 데이터베이스 서버에서 "실시간"으로 가져오는 동적 정보) 식별.
* **기술 분석:** 프로젝트 완료에 필요한 다양한 기술 세트 식별.
* **사용자 분석:** 사이트의 모든 대상 사용자 식별, 다양한 사용자 및 그들이 사용할 수 있는 기술로 인해 더 복잡한 프로세스.
* **비용 분석:** 사이트 개발 비용 추정 또는 미리 정의된 예산 내에서 달성 가능한 것 평가.
* **위험 분석:** 사이트 개발과 관련된 주요 위험 검토.

이 분석에 따라 더 정제된 목표 세트가 문서화된다. 현재 달성할 수 없는 목표는 목표 문서의 일부를 구성하는 희망 목록에 기록된다. 이 문서는 방법론의 다음 주기 동안 반복 프로세스의 필수적인 부분이 된다.

### 기획: 사이트맵 및 와이어프레임
웹 개발자가 계획을 수립하고 최적의 아키텍처를 결정하며 프레임워크를 선택하는 데 참여하는 것이 중요하다. 또한 개발자/컨설턴트는 초기 개발 비용을 초과할 수 있는 웹사이트 지원과 관련된 총 소유 비용을 설명하는 역할을 한다.

이 단계의 주요 측면은 다음과 같다.
* 사이트맵 생성
* 와이어프레임 생성
* 기술 스택

### 디자인 및 레이아웃
분석 단계에 이어 개발 프로세스는 목표 문서를 지침으로 삼아 디자인 단계로 넘어간다. 웹사이트의 점진적인 성장과 좋은 디자인 아키텍처의 잠재적인 부족을 인식하여, 이 방법론은 사이트 수명 동안의 변경 및 추가 사항을 설명하기 위한 반복을 포함한다. 정보 디자인과 그래픽 디자인으로 나뉘는 디자인 단계는 웹사이트의 구조, 데이터베이스 자료 구조 및 CGI 스크립트를 상세히 기술하는 상세한 디자인 문서를 생성한다.

다음 단계인 디자인 테스트는 디자인의 불일치 또는 결함을 식별하기 위한 초기 저비용 테스트에 중점을 둔다. 여기에는 웹사이트의 디자인을 처음 세 단계에서 개략적으로 설명한 목표와 비교하는 것이 포함된다. 1단계와 2단계는 목표 문서의 목표가 디자인과 일치하는지 확인하기 위해 재검토되는 반복 루프를 포함한다. 제거된 모든 목표는 향후 고려를 위해 희망 목록에 추가된다.

이 단계의 주요 측면은 다음과 같다.
* 페이지 레이아웃
* 검토
* 승인

### 콘텐츠 제작
아무리 시각적으로 매력적인 웹사이트라도 고객과의 좋은 소통은 중요하다. 콘텐츠 제작의 주요 목적은 사용자 인터페이스를 통해 회사에 대한 관련 정보를 매력적이고 이해하기 쉬운 방식으로 제공하여 소통 채널을 만드는 것이다. 여기에는 다음이 포함된다.

* 매력적인 클릭 유도 문안 개발
* 창의적인 헤드라인 작성
* 가독성을 위한 콘텐츠 서식 지정
* 줄 편집 수행
* 사이트 개발 프로세스 전반에 걸친 텍스트 업데이트.

콘텐츠 제작 단계는 웹사이트 또는 웹 애플리케이션의 브랜딩 및 마케팅을 구축하는 데 중요하다. 이는 설득력 있고 설득력 있는 콘텐츠를 통해 온라인 존재의 목적과 목표를 정의하는 플랫폼 역할을 한다.

### 개발
이 중요한 단계에서 웹사이트는 기본 목표를 염두에 두고 구축되며, 완전히 작동하는 사이트의 구축을 보장하기 위해 모든 그래픽 구성 요소에 세심한 주의를 기울인다.

이 절차는 메인 페이지 개발로 시작하여 내부 페이지 제작으로 이어진다. 특히 사이트의 탐색 구조가 개선된다.

이 개발 단계에서는 저작물 관리 시스템, 대화형 연락처 양식 및 장바구니와 같은 주요 기능이 활성화된다.

코딩 프로세스에는 사이트의 모든 소프트웨어를 생성하고 적절한 웹 서버에 설치하는 것이 포함된다. 이는 웹 서버에 게시하는 것과 같은 간단한 작업부터 데이터베이스 연결 설정과 같은 더 복잡한 작업에 이르기까지 다양할 수 있다.

### 테스트, 검토 및 출시
모든 웹 프로젝트에서 테스트 단계는 놀랍도록 복잡하고 어렵다. 웹 애플리케이션은 다양한 기술 환경에서 실행되는 다양하고 종종 알 수 없는 사용자 기반을 위해 자주 설계되므로 그 복잡성은 전통적인 정보 시스템(IS)의 복잡성을 초과한다. 최대 도달 범위와 효율성을 보장하기 위해 웹사이트는 다양한 상황과 기술에서 테스트되어야 한다. 웹사이트는 디자이너의 최종 승인을 받은 후 전달 단계로 넘어간다. 출시 준비를 보장하기 위해 품질 보증 팀은 기능, 호환성 및 성능에 대해 엄격한 테스트를 수행한다.

통합, 스트레스, 확장성, 로드, 해상도 및 크로스 브라우저 호환성을 포함한 추가 테스트가 수행된다. 승인이 완료되면 웹사이트는 FTP를 통해 서버로 푸시되어 개발 프로세스를 완료한다.

이 단계의 주요 측면은 다음과 같다.
* 끊어진 링크 테스트
* 코드 유효성 검사기 사용
* 브라우저 확인

### 유지보수 및 업데이트
웹 개발 프로세스는 배포를 넘어 다양한 배포 후 작업을 포함한다.

예를 들어 웹사이트는 종종 지속적인 유지보수 상태에 있으며, 매일 새로운 항목이 업로드된다. 사이트 규모가 커질수록 유지보수 비용은 엄청나게 증가한다. 웹사이트 콘텐츠의 정확성은 매우 중요하며, 정보와 링크, 특히 외부 링크가 업데이트되는지 지속적으로 모니터링해야 한다. 사용자 피드백에 따라 조정이 이루어지고, 웹사이트의 장기적인 효율성을 유지하기 위해 정기적인 지원 및 유지보수 작업이 수행된다.

## 전통적인 개발 방법론
데브라 하우크래프트(Debra Howcroft)와 존 캐롤(John Carroll)은 그들의 연구 논문에서 몇 가지 전통적인 웹 개발 방법론을 논의했다.

* **[[폭포수 모델|폭포수]]:** 폭포수 방법론은 일련의 연속적인 단계로 구성되며, 각 단계 사이의 반복을 최소화하여 개발 프로세스를 다룬다. 그러나 웹사이트 개발(정보 시스템 개발도 마찬가지)에 폭포수 방법론을 적용할 때의 중요한 단점은 인접 단계 이상으로 반복이 부족한 경직된 구조에 있다. 웹사이트 개발에 사용되는 모든 방법론은 변화에 대처할 수 있을 만큼 유연해야 한다.
* **[[SSADM]]:** SSADM(Structured Systems Analysis and Design Method)은 정보 시스템 및 소프트웨어 공학에서 시스템 분석 및 설계를 위해 널리 사용되는 방법론이다. 개발 프로젝트의 전체 수명 주기를 다루지는 않지만, 나중에 발생할 수 있는 비싼 오류 및 누락을 최소화하기 위해 분석 및 설계 단계를 강력히 강조한다.
* **[[소프트웨어 프로토타이핑|프로토타이핑]]:** 프로토타이핑은 시스템 또는 애플리케이션의 초기 버전을 구축하여 주요 기능을 시각화하고 테스트하는 소프트웨어 개발 접근 방식이다. 프로토타입은 최종 제품의 유형적 표현으로, 사용자 및 개발자를 포함한 이해 관계자가 상호 작용하고 피드백을 제공할 수 있도록 한다.
* **[[고속 응용 프로그램 개발]]:** RAD(Rapid Application Development)는 개발 프로세스에서 속도와 유연성을 우선시하는 소프트웨어 개발 방법론이다. 주로 반복적인 프로토타이핑과 최종 사용자 참여를 통해 고품질 시스템을 빠르게 생산하도록 설계되었다. RAD는 시스템 개발에 걸리는 시간을 줄이고 변화하는 요구 사항에 대한 적응성을 높이는 것을 목표로 한다.
* **점진적 프로토타이핑:** 점진적 프로토타이핑은 프로토타이핑과 점진적 개발의 원칙을 결합한 소프트웨어 개발 접근 방식이다. 이 방법론에서는 개발 프로세스가 작은 증분으로 나뉘며, 각 증분은 이전 증분의 기능 위에 구축된다. 동시에, 사용자 요구 사항 및 기대치를 더 잘 충족시키기 위해 각 증분에서 프로토타입이 생성되고 개선된다.

## 웹 개발의 핵심 기술
클라이언트 사이드 및 서버 사이드 역학에 대한 기본적인 지식을 개발하는 것이 중요하다.

프론트엔드 개발의 목표는 사용자가 직접 상호 작용할 수 있는 웹사이트의 사용자 인터페이스 및 시각적 구성 요소를 만드는 것이다. 반면, 백엔드 개발은 데이터베이스, 서버 측 로직 및 애플리케이션 기능과 함께 작동한다. 안정적이고 사용자 친화적인 온라인 애플리케이션을 구축하려면 프론트엔드 및 백엔드 엔지니어 간의 협업이 보장되는 포괄적인 접근 방식이 필요하다.

### 프론트엔드 개발
프론트엔드 개발은 웹 애플리케이션의 사용자 인터페이스(UI) 및 사용자 경험(UX)을 설계하고 구현하는 프로세스이다. 여기에는 사용자가 직접 상호 작용하는 시각적으로 매력적이고 상호 작용적인 요소를 만드는 것이 포함된다. 프론트엔드 개발과 관련된 주요 기술 및 개념은 다음과 같다.

#### 기술
프론트엔드 개발을 위한 3가지 핵심 기술은 다음과 같다.
* **[[HTML]](하이퍼텍스트 마크업 언어):** HTML은 웹 페이지의 콘텐츠 구조와 구성을 제공한다.
* **[[CSS]](캐스케이딩 스타일 시트):** 스타일링 및 레이아웃을 담당하는 CSS는 HTML 요소의 표시를 향상시켜 애플리케이션을 시각적으로 매력적으로 만든다.
* **[[자바스크립트]]:** 웹 페이지에 상호작용을 추가하는 데 사용된다. 자바스크립트의 발전은 리액트(React), 앵귤러(Angular), 뷰.js(Vue.js) 등 많은 인기 있는 프론트엔드 프레임워크를 탄생시켰다.

#### 사용자 인터페이스 디자인
사용자 경험 디자인은 사용자에게 직관적이고 접근 가능하며 즐거운 인터페이스를 만드는 데 중점을 둔다. 여기에는 사용자 행동 이해, 사용성 연구 수행 및 디자인 원칙 구현을 통해 웹사이트 또는 애플리케이션과 상호 작용하는 사용자의 전반적인 만족도를 높이는 것이 포함된다. 여기에는 와이어프레이밍, 프로토타이핑 및 디자인 원칙 구현을 통한 사용자 상호작용 향상이 포함된다. UI 와이어프레이밍에 사용되는 인기 있는 도구 중 일부는 다음과 같다.

* 상세한 벡터 기반 디자인을 위한 스케치
* 초보자를 위한 모쿠업
* 무료 와이어프레임 앱을 위한 피그마
* 개발자에게 디자인 문서를 전달하기 위한 UXPin
* 프로젝트 구성을 위한 MockFlow
* 대화형 와이어프레임을 위한 저스틴마인드
* AI 지원 와이어프레이밍을 위한 Uizard

디자인할 때 염두에 두어야 할 또 다른 핵심 측면은 웹 접근성이다. 웹 접근성은 모든 능력의 사람들이 디지털 콘텐츠에 접근하고 사용할 수 있도록 보장한다. 여기에는 웹 콘텐츠 접근성 가이드라인(WCAG)과 같은 표준을 준수하고, 이미지에 대한 대체 텍스트와 같은 기능을 구현하며, 장애가 있는 사람들을 포함한 다양한 사용자 요구 사항을 고려하여 디자인하는 것이 포함된다.

#### 반응형 디자인
웹 애플리케이션이 다양한 장치 및 화면 크기에서 접근 가능하고 시각적으로 매력적인지 확인하는 것이 중요하다. 반응형 웹 디자인은 CSS 미디어 쿼리 및 유연한 레이아웃을 사용하여 다양한 보기 환경에 적응한다.

#### 프론트엔드 프레임워크
프레임워크는 소프트웨어 조각의 재사용을 위한 고급 솔루션으로, 일반적인 기능과 도메인 애플리케이션의 일반적인 로직을 공유할 수 있도록 하는 단순한 라이브러리 기반 재사용의 한 단계 앞선다.

프레임워크와 라이브러리는 개발 프로세스를 가속화하는 필수 도구이다. 이러한 도구는 개발자 생산성을 향상시키고 대규모 애플리케이션의 유지보수성에 기여한다. 인기 있는 프론트엔드 프레임워크 중 일부는 다음과 같다.

* **[[리액트 (소프트웨어)|리액트]]:** 페이스북에서 유지보수하는 사용자 인터페이스 구축을 위한 자바스크립트 라이브러리이다. 개발자가 재사용 가능한 UI 구성 요소를 만들 수 있도록 한다.
* **[[앵귤러 (애플리케이션 플랫폼)|앵귤러]]:** 구글에서 개발 및 유지보수하는 타입스크립트 기반 프론트엔드 프레임워크이다. 동적 싱글 페이지 애플리케이션 구축을 위한 포괄적인 솔루션을 제공한다.
* **[[Vue.js]]:** 접근하기 쉽지만 강력한 프로그레시브 자바스크립트 프레임워크로, 다른 라이브러리나 기존 프로젝트와 쉽게 통합할 수 있다.

#### 상태 관리
데이터 일관성 및 반응성을 보장하기 위해 웹 애플리케이션의 상태를 관리한다. 리액트용 리덕스 또는 Vue.js용 Vuex와 같은 상태 관리 라이브러리는 복잡한 애플리케이션에서 중요한 역할을 한다.

### 백엔드 개발
백엔드 개발은 웹 애플리케이션의 서버 측 로직과 데이터베이스 구성 요소를 구축하는 것을 포함한다. 사용자 요청 처리, 데이터 관리 및 애플리케이션의 전반적인 기능을 보장하는 역할을 한다. 백엔드 개발의 주요 측면은 다음과 같다.

#### 서버/클라우드 인스턴스
웹 애플리케이션 아키텍처의 필수 구성 요소는 서버 또는 클라우드 인스턴스이다. 클라우드 인스턴스는 인터넷을 통해 액세스할 수 있으며 공용 또는 사설 클라우드에 생성, 제공 및 호스팅되는 가상 서버 인스턴스이다. 이는 다양한 장치 간에 쉽게 원활하게 이동하거나 하나의 서버에 여러 인스턴스를 설정할 수 있는 물리적 서버 역할을 한다. 따라서 매우 동적이고 확장 가능하며 경제적이다.

#### 데이터베이스
데이터베이스 관리는 웹 애플리케이션에서 데이터 저장, 검색 및 관리에 매우 중요하다. MySQL, PostgreSQL, 몽고DB와 같은 다양한 데이터베이스 시스템은 데이터를 구성하고 구조화하는 데 각기 다른 역할을 한다. 효과적인 데이터베이스 관리는 데이터 기반 웹 애플리케이션의 반응성과 효율성을 보장한다. 데이터베이스는 3가지 유형이 있다.

* **[[관계형 데이터베이스]]:** 테이블을 사용하여 데이터를 구성하고 연결하는 구조화된 데이터베이스. 일반적인 예로는 MySQL, PostgreSQL 등이 있다.
* **[[NoSQL]] 데이터베이스:** NoSQL 데이터베이스는 비정형 또는 반정형 데이터를 처리하도록 설계되었으며 관계형 데이터베이스보다 더 유연할 수 있다. 문서 지향, 키-값 저장소, 컬럼 패밀리 저장소, 그래프 데이터베이스와 같은 다양한 유형이 있다. 예: 몽고DB, 카산드라, ScyllaDB, 아파치 카우치DB, 레디스.
* **문서 저장소:** 문서 저장소는 일반적으로 JSON 또는 XML 문서를 사용하여 데이터를 반정형 형식으로 저장한다. 각 문서는 다른 구조를 가질 수 있어 유연성을 제공한다. 예**:** 몽고DB, 카우치DB.
* **키-값 저장소:** 키-값 저장소는 데이터를 키와 값의 쌍으로 저장한다. 특정 유형의 작업, 예를 들어 캐싱에 간단하고 효율적이다. 예: 레디스, 다이나모DB.
* **컬럼 패밀리 저장소:** 컬럼 패밀리 저장소는 데이터를 행 대신 열로 구성하여 대규모 분산 시스템 및 분석 워크로드에 적합하다. 예**:** 아파치 카산드라, HBase.
* **그래프 데이터베이스:** 그래프 데이터베이스는 데이터를 그래프 형태로 표현하고 쿼리하도록 설계되었다. 관계 및 네트워크 유형 데이터를 처리하는 데 효과적이다. 예: Neo4j, 아마존 넵튠.
* **[[인메모리 데이터베이스]]:** 인메모리 데이터베이스는 데이터를 디스크가 아닌 시스템의 메인 메모리(RAM)에 저장한다. 이를 통해 더 빠른 데이터 액세스 및 검색이 가능하다. 예: 레디스, Memcached.
* **[[시계열 데이터베이스]]:** 시계열 데이터베이스는 타임스탬프가 찍힌 데이터를 처리하도록 최적화되어 시간 경과에 따른 변경 사항 추적과 관련된 애플리케이션에 적합하다. 예: InfluxDB, OpenTSDB.
* **[[NewSQL]] 데이터베이스:** NewSQL 데이터베이스는 전통적인 관계형 데이터베이스의 ACID 속성(원자성, 일관성, 고립성, 지속성)을 유지하면서 NoSQL 데이터베이스의 확장성을 제공하는 것을 목표로 한다. 예: 구글 스패너, CockroachDB.
* **객체 지향 데이터베이스:** 객체 지향 데이터베이스는 자료와 메서드를 모두 포함할 수 있는 객체 형태로 데이터를 저장한다. 객체 지향 프로그래밍 언어와 원활하게 작동하도록 설계되었다. 예: db4o, ObjectDB.

데이터베이스 선택은 데이터의 특성, 확장성 요구 사항, 성능 고려 사항 및 개발 중인 애플리케이션의 특정 사용 사례와 같은 다양한 요인에 따라 달라진다. 각 유형의 데이터베이스에는 장단점이 있으며, 올바른 데이터베이스를 선택하는 것은 프로젝트의 특정 요구 사항을 고려하는 것을 포함한다.

#### [[API|애플리케이션 프로그래밍 인터페이스]] (API)
애플리케이션 프로그래밍 인터페이스는 서로 다른 소프트웨어 애플리케이션이 통신할 수 있도록 하는 규칙 및 프로토콜 집합이다. API는 애플리케이션이 정보를 요청하고 교환하는 데 사용할 수 있는 메서드 및 데이터 형식을 정의한다.

* RESTful API와 GraphQL은 웹 서비스 정의 및 상호 작용을 위한 일반적인 접근 방식이다.

##### API 유형
* **[[웹 API]]:** HTTP와 같은 표준 웹 프로토콜을 사용하여 인터넷을 통해 액세스할 수 있는 API이다. RESTful API는 일반적인 웹 API 유형이다.
* **라이브러리 API:** 이러한 API는 개발자가 코드 내에서 사용할 수 있는 미리 빌드된 함수 및 절차를 제공한다.
* **[[운영체제]] API:** 이러한 API는 애플리케이션이 기본 운영 체제와 상호 작용하여 파일 시스템, 하드웨어 및 시스템 서비스와 같은 기능에 액세스할 수 있도록 한다.

#### 서버 측 언어
클라이언트 브라우저 실행과 달리 서버 실행을 목표로 하는 프로그래밍 언어를 서버 측 언어라고 한다. 이러한 프로그래밍 언어는 데이터 처리, 데이터베이스 상호 작용 및 클라이언트 브라우저로 전달되는 동적 콘텐츠 생성과 같은 작업을 수행하기 위해 웹 개발에서 사용된다. 서버 측 프로그래밍의 핵심 요소는 서버가 실시간으로 클라이언트 요청에 반응할 수 있도록 하는 서버 측 스크립팅이다.

인기 있는 서버 측 언어 중 일부는 다음과 같다.

# **[[PHP]]:** PHP는 널리 사용되는 오픈 소스 서버 측 스크립팅 언어이다. HTML 코드에 내장되어 있으며 웹 개발에 특히 적합하다.
# **[[파이썬]]:** 파이썬은 서버 측 웹 개발을 포함한 다양한 목적으로 사용되는 다목적 고급 프로그래밍 언어이다. 장고 및 플라스크와 같은 프레임워크를 사용하면 파이썬으로 웹 애플리케이션을 쉽게 구축할 수 있다.
# **[[루비 (프로그래밍 언어)|루비]]:** 루비는 객체 지향 프로그래밍 언어이며 웹 개발에 일반적으로 사용된다. 루비 온 레일즈는 웹 애플리케이션 구축 프로세스를 간소화하는 인기 있는 웹 프레임워크이다.
# **[[자바 (프로그래밍 언어)|자바]]:** 자바는 범용 객체 지향 프로그래밍 언어이다. 스프링과 같은 자바 기반 프레임워크는 엔터프라이즈급 웹 애플리케이션 구축에 일반적으로 사용된다.
# **[[Node.js|노드.js]] (자바스크립트):** 자바스크립트는 전통적으로 클라이언트 측 언어이지만, Node.js는 개발자가 서버 측에서 자바스크립트를 실행할 수 있도록 한다. 이벤트 기반의 비차단 I/O 모델로 알려져 있으며, 확장 가능하고 고성능 애플리케이션 구축에 적합하다.
# **[[C 샤프|C#]] (C 샤프):** C#은 마이크로소프트에서 개발한 프로그래밍 언어이며, 마이크로소프트 스택에서 웹 애플리케이션을 구축하기 위해 .NET 프레임워크와 함께 일반적으로 사용된다.
# **[[ASP.NET]]:** ASP.NET은 마이크로소프트에서 개발한 웹 프레임워크이며, C# 및 VB.NET과 같은 언어를 지원한다. 동적 웹 애플리케이션 구축 프로세스를 간소화한다.
# **[[Go (프로그래밍 언어)|Go]] (골랭):** Go는 구글에서 개발한 정적 타입 언어이다. 단순성과 효율성으로 알려져 있으며, 확장 가능하고 고성능 웹 애플리케이션 구축에 점점 더 많이 사용되고 있다.
# **[[펄]]:** 펄은 웹 개발에 자주 사용되는 다목적 스크립팅 언어이다. 강력한 텍스트 처리 기능으로 알려져 있다.
# **[[스위프트 (프로그래밍 언어)|스위프트]]:** 애플에서 개발한 스위프트는 iOS 및 macOS 앱 개발 외에도 서버 측 개발에 사용된다.
# **[[루아 (프로그래밍 언어)|루아]]:** 루아는 일부 임베디드 웹 서버, 예를 들어 라우터의 구성 페이지( OpenWRT 포함)에 사용된다.

#### 보안 대책
SQL 삽입, 사이트 간 스크립팅(XSS) 및 사이트 간 요청 위조(CSRF)를 포함한 일반적인 취약점으로부터 보호하기 위한 보안 조치를 구현한다. 인증 및 권한 부여 메커니즘은 데이터 및 사용자 접근을 보호하는 데 중요하다.

#### 테스트, 디버그 및 배포
철저한 테스트 및 디버그 프로세스는 웹 애플리케이션에서 문제를 식별하고 해결하는 데 필수적이다. 테스트에는 유닛 테스트, 통합 시험 및 사용자 인수 테스트가 포함될 수 있다. 디버깅은 코드의 오류를 찾아 수정하여 애플리케이션의 신뢰성과 안정성을 보장하는 것을 포함한다.

* **[[유닛 테스트]]:** 개별 구성 요소 또는 함수가 예상대로 작동하는지 확인하기 위해 테스트한다.
* **[[통합 시험|통합 테스트]]:** 서로 다른 구성 요소 또는 모듈 간의 상호 작용을 테스트하여 함께 올바르게 작동하는지 확인한다.
* **[[CI/CD|지속적 통합 및 배포 (CI/CD)]]:** CI/CD 파이프라인은 테스트, 배포 및 전달 프로세스를 자동화하여 더 빠르고 안정적인 릴리스를 가능하게 한다.

### 풀스택 개발
풀스택 개발은 웹 애플리케이션의 전체 소프트웨어 스택을 설계, 구축 및 유지보수하는 관행을 의미한다. 여기에는 프론트엔드 (클라이언트 측) 및 백엔드 (서버 측) 구성 요소뿐만 아니라 데이터베이스 및 기타 필요한 인프라가 포함된다. 풀스택 개발자는 프론트엔드 및 백엔드 기술을 모두 다루는 전문 지식을 갖춘 사람으로, 웹 애플리케이션 개발의 모든 측면을 처리할 수 있다.

* **[[MEAN]]** (몽고DB, Express.js, 앵귤러, 노드.js) 및 **[[MEAN|MERN]]** (몽고DB, Express.js, 리액트, 노드.js)은 응집력 있는 기술 집합을 제공하여 개발 프로세스를 간소화하는 인기 있는 풀스택 개발 스택이다.

### 웹 개발 도구 및 환경
효율적인 웹 개발은 코딩 및 협업 프로세스를 간소화하는 일련의 도구 및 환경에 의존한다.

# **[[통합 개발 환경]](IDE):** 비주얼 스튜디오 코드, 아톰 및 서브라임 텍스트와 같은 도구는 코드 강조, 자동 완성, 버전 관리 통합과 같은 기능을 제공하여 개발 경험을 향상시킨다.
# **[[버전 관리]]:** 깃은 개발자가 변경 사항을 추적하고, 원활하게 협업하며, 필요한 경우 이전 버전으로 되돌릴 수 있도록 하는 널리 사용되는 버전 관리 시스템이다.
# **[[협업 도구]]:** 슬랙과 같은 통신 플랫폼, 프로젝트 관리 도구인 지라, 협업 플랫폼인 깃허브는 효과적인 팀워크 및 프로젝트 관리를 촉진한다.

## 웹 개발의 보안 관행
보안은 사이버 위협으로부터 보호하고 사용자 데이터의 기밀성과 무결성을 보장하기 위해 웹 개발에서 가장 중요하다. 모범 사례에는 암호화, 안전한 코딩 관행, 정기적인 보안 감사 및 최신 보안 취약점 및 패치에 대한 정보 유지가 포함된다.

* **일반적인 위협:** 개발자는 SQL 삽입, 사이트 간 스크립팅(XSS) 및 사이트 간 요청 위조(CSRF)를 포함한 일반적인 보안 위협을 인지해야 한다.
* **안전한 코딩 관행:** 안전한 코딩 관행을 준수하는 것은 입력 유효성 검사, 적절한 데이터 소독 및 민감한 정보가 안전하게 저장되고 전송되도록 하는 것을 포함한다.
* **[[인증]] 및 [[허가 (컴퓨터 과학)|권한 부여]]:** OAuth 또는 JWT와 같은 강력한 인증 메커니즘을 구현하면 승인된 사용자만 애플리케이션 내의 특정 리소스에 접근할 수 있다.

## 웹 개발의 애자일 방법론

### 애자일 선언문 및 원칙
애자일은 유연성, 협업 및 고객 만족을 우선시하는 소프트웨어 개발을 위한 원칙 및 가치 집합이다. 네 가지 핵심 가치는 다음과 같다.

* 프로세스 및 도구보다 개인 및 상호작용.
* 포괄적인 문서보다 작동하는 소프트웨어.
* 계약 협상보다 고객 협력.
* 계획을 따르는 것보다 변화에 대응.

### 웹 개발의 애자일 개념

# **[[반복적 점진적 개발|반복적이고 점진적인 개발]]:** 작고 반복 가능한 주기를 통해 웹 애플리케이션을 구축하고 개선하며, 각 반복마다 기능을 점진적으로 향상시킨다.
# **[[스크럼 (소프트웨어 개발)|스크럼]] 및 [[간반 (소프트웨어 개발)|칸반]]:** 구조화된 스프린트를 위한 스크럼 또는 연속적인 흐름을 위한 칸반과 같은 애자일 프레임워크를 사용하여 작업을 관리하고 팀 효율성을 향상시킨다.
# **교차 기능 팀:** 다양한 기술을 가진 협업 팀을 구성하여 포괄적인 웹 개발에 필요한 모든 전문 지식이 존재하도록 보장한다.
# **고객 협력:** 개발 프로세스 전반에 걸쳐 고객과 협력하여 피드백을 수집하고 요구 사항을 검증하며, 제공된 제품이 기대치와 일치하도록 보장한다.
# **변화에 대한 적응성:** 개발 프로세스 후반에도 요구 사항 또는 우선순위 변경을 수용하여 진화하는 요구에 대한 제품의 반응성을 향상시킨다.
# **사용자 스토리 및 백로그:** 사용자 스토리를 통해 기능적 요구 사항을 캡처하고, 우선순위가 지정된 작업의 백로그를 유지하여 개발 노력을 안내한다.
# **[[CI/CD|지속적 통합 및 지속적 배포 (CI/CD)]]:** 코드 변경 사항을 지속적으로 통합하고 업데이트된 버전을 제공하는 자동화된 프로세스를 구현하여 효율적이고 간소화된 개발 파이프라인을 보장한다.

섬네일|right|300x300px

## 같이 보기

* 크로스 브라우저
* 웹 디자인

## 각주