Web development
|
웹 개발(web development)은 인터넷(월드 와이드 웹)이나 인트라넷(사설망)을 위한 웹사이트 개발과 관련된 일을 가리킨다. 웹 개발은 가장 단순한 단일 정적 문서의 플레인 텍스트에서부터 가장 복잡한 웹 기반 인터넷 애플리케이션, 전자 비즈니스, 소셜 네트워크 서비스에 이르기까지 개발 범위가 다양하다. 일반적으로 웹 개발이라 부를 때는 웹 프로그래밍뿐만 아니라 더 포괄적인 작업인 웹 디자인, 웹 콘텐츠 개발, 클라이언트 사이드/서버 사이드 스크립트 작업, 웹 서버 및 네트워크 보안 구성, 전자 상업 개발을 아우른다.
더 큰 조직과 사업 공간에서 웹 개발 팀은 수백 명의 사람(웹 개발자)들을 이룰 수 있다. 크기가 작은 조직은 하나의 영구적인 웹마스터라든지 그래픽 디자이너 및 정보 시스템 기술자 등을 필요로 할 수 있다. 웹 개발은 특정 부서의 분야라기 보다는 부서 간 협업의 노력으로 볼 수 있다.
Category
- Node.js
- WebProgramming:Libraries (Frontend:Libraries)
- WebProgramming:Beginner - 초보자를 위한 웹 프로그래밍 기초.
- WebProgramming:PerformanceTunning - 웹 최적화 방법.
- 사이트 이동 경로 (Breadcrumb navigation)
- 랜딩 페이지 (Landing page)
Concepts
Frontend
Scaffolding
- Yeoman
Parser
Bundler
- Webpack (Module bundler)
- Browserify
- RequireJS
Task Runner
Package Manager
Headless
단위 테스트 (Unit Tests)
최소 단위의 util 함수, 커스텀 리액트 hook, 아니면 하나의 컴포넌트를 테스트합니다
Test Launchers
테스트를 실행하면 실행할 수 있는 툴이 있어야겠죠? Test Launcher들은 CLI나 Node.js를 통해 테스트 수행하고, jsdom이나 브라우저상에 테스트실행할 수 있게 합니다
- jest , mocha , karma , TestCafe , jasmine
Structure Providers
테스트 작성할 때 가득성 좋게 테스트 케이스 조합, 순서를 맞출 수 있도록 global 함수를 제공해 줍니다 (describe(), test(), it())
- jest , mocha , TestCafe , jasmine
Assertion Libraries
위에 설명한대로 어떤 테스트가 원하는 결과를 받고 있는지 util 함수를 제공해 주는 라이브러리들 입니다.(expect())
- jest, chai , TestCafe , jasmine
Mocks, Spies, Stubs
- sinon, jest , jasmine
컴포넌트 렌더링 라이브러리
리액트에서 컴포넌트 렌더하고, 렌더링된 컴포넌트에서 원하는 element를 찾을 수 있도록 selector 제공해 주고, element에서 다양한 이벤트 (onChange, click, 등)를 호출할 수 있습니다 (testing-library는 리액트뿐만 아니라 여러 프레이워크를 지원합니다)
- enzyme, react-test-renderer, @testing-library, @vue/test-utils
Coverage Reporting
테스트가 총 코드베이스의 얼마 만큼 커버하고 있는지 리포팅하는 것입니다
- istanbul + (mocha || jest || karma || jasmine)
통합 테스트 (Integration Tests)
어떤 어플리케이션에서 여러개의 요소들이 같이 돌렸을 때 어떻게 동작하는지 확인하는 테스트합니다
End-to-end Tests (E2E)
어떤 사용자가 웹앱을 사용하는 것처럼 시뮬레이션 돌린다 (이때 서버, 인프라, 웹앱 모두 테스트하게 된다)
Load Testing (부하 테스트)
- 실전 Web Application 부하 테스트 - 2편
- JMeter
- Load Runner
- nGrinder
- Gatling
End to End Testing (UI Testing)
CSS extension
Syntax lint
Transfiler
File Minimize
Multimedia
Toolkits
- Frontend Toolkit
- https://www.fetoolkit.io/
- 프론트엔드 개발자를 위한 간편한 도구들 모음
- SVG to TSX/JSX, CSS
- SVG Optimizer
- Image Optimizer
- Format CSS, JS/TS, JSON
- Colors Converter
- CSS & SVG Symbols
- npm Package Size 확인
- Code Beautify
- JSON Beautifier, XML Viewer, JSON Converters, Hex Converters and More...
- https://codebeautify.org/
- Tiny Helpers
- https://tiny-helpers.dev/
- 웹 개발자용 단일목적 간단한 도구들 모음
- Rows To Columns
- Base64 변환기
- Carbon - 소스코드 to 이미지
- CSS 툴 : 커서,그리드 생성기,추출기 등
- Favicon 생성기
- 웹폰트 생성기
- JWT 디버거
- 메타태그 에디터
- 정규식 편집기
- 이미지/SVG 최적화
- Unicode 및 특수문자 검색/변환기
- Offline Toolbox for Developers
- DevUtil - 개발자용 도구 모음 for macOS
- https://devutils.app/
- https://github.com/DevUtilsApp/DevUtils-app
- 종종 웹에서 검색해서 사용하는 도구들을 모아놓은 오프라인 앱
- 클립보드 내용에 따라 알아서 맞는 도구를 자동 선택
- 글로벌 단축키 지원
- Unix Time 변환
- URL Encode/Decode
- JSON Formatter/Validator
- JWT Debugger
- Base64 Encode/Decode
- Query String Parser
- HTML Entity Encode/Decode
- Backslash Escape/Unescape
- CyberChef - The Cyber Swiss Army Knife
- https://gchq.github.io/CyberChef/
- https://github.com/gchq/CyberChef
- The Cyber Swiss Army Knife - a web app for encryption, encoding, compression and data analysis
웹 프로그래밍 언어
웹 프로그래밍 언어는 WWW에서 사용되는 프로그래밍 언어들을 통틀어 말한다. 일부는 웹 프로그래밍 언어에 마크업 언어를 텍스트 언어라는 이유로 포함시키지 않지만, 일부는 TeX같이 프로그래밍이 가능한 마크업 언어가 있기 때문에, 마크업 언어를 포함시키기도 한다.
List of web programming languages
Client-side rendering vs Server-sde rendering
Web Fundamentals
full-stack developer Curriculum
SolutionStack:FullStackDeveloper:Curriculum 항목 참조.
웹사이트 크기가 14kB 미만이어야 하는 이유
다음과 같은 이유가 있다:
- 15kB 페이지와 16kB 페이지의 로딩 속도 차이는 그리 크지 않는 반면 15kB와 14kB 차이는 특정 상황하에 612ms나 차이가 남
- 이는 TCP Slow start라는 혼잡 제어 전략 때문
- 기본적으로 브라우저와 서버가 맨 처음 통신할 때는 그 대역폭을 알 수 없음
- 10개의 TCP 패킷을 보내보고 그 수를 20개, 40개, 80개로 늘려나감
- TCP 패킷의 최대 크기는 1500 bytes인데 이 중 40 bytes를 헤더에 사용하므로 남은 1460 bytes * 10 = 약 14.25 kB를 사용 가능
- 위성 인터넷을 사용하는 경우 1번의 왕복에 612ms나 소요됨
- 그러니 더 빠른 페이지 로딩을 위해 처음 주고받는 14 kB 데이터에 중요한 리소스를 제공하길 권장
- HTML 데이터는 압축되어 제공되니 이를 고려하면 약 50 kB라고 고려할 수 있음
HTTP 헤더나 TLS 핸드셰이킹 등을 고려한다면 항상 이 규칙이 들어맞진 않지만 그럼에도 유용한 기준일 것
로딩을 위한 UX 디자인 패턴
로딩 화면은 시스템이 하는 일에 대한 가시성을 제공하여 사용자 경험을 향상 시킬수 있음.
- 적절한 로딩 화면을 만들기 위해 고려해야 할 사항이 몇 가지 있음.
- 디자인에 앞서 로딩 시스템을 확인해야 함.
- 로딩이 사용자의 입력을 차단하는지, 진행률을 알 수 있는지, 얼마나 많은 정보를 불러오는지, 모바일 경험은 어떤지 등.
- 패시브 로딩(시스템이 미리 불러오는 것)인지, 티브 로딩(사용자의 행동에 따라 불러오는 것)인지 등.
- 복잡한 구성 요소의 경우 하나씩 보여주는 게 좋을 수 있음.
- 비교적 간단한 구성 요소의 경우 로드가 완료된 후 한 번에 표시하는 게 좋음.
- 구성 요소의 수가 많으면 지연 로딩이 필요함.
- 무한 스크롤, 더 보기 버튼, 페이징 등의 접근 방식 활용.
- 계속 변경되는 경우, 로딩을 보여주는 UI를 최소화해야 함.
- 구글 드라이브가 실시간 저장되는 UI를 참고.
- 가끔 변경되는 경우 즉시 사용자에게 보여주는게 좋음.
- 보고 있는 콘텐츠가 업데이트 되었으니, 화면을 새로고침 하라는 팝업 등.
- 진행률을 명확하게 알 수 있는지, 아니면 불확실한지 먼저 검토해야 함.
- 0.1초 이하인 경우
- 즉시 결과를 보여주면 됨.
- 몇몇 경우에는 가짜 로딩 화면을 보여주는 게 더 좋을 수 있음.
- 사용자가 느끼기에 중요한 작업이거나 (저장 등), 사용자가 액션을 취할 수 있는 지연 시간이 필요한 경우 (메일 전송의 되돌리기 버튼 등).
- 0.1초 ~ 1초 사이인 경우
- 아주 흔한 지연 시간이고, 사용자의 눈에 띄지 않으므로 로딩 화면을 추가하지 않는 게 좋음.
- 1초 이상인 경우
- 1초를 넘기는 순간 사용자가 대기 시간을 인지하게 되므로, 적합한 로딩 화면을 추가하는 게 좋음.
- 로딩되는 구성 요소가 작은 경우 로딩 스피너가 좋은 선택. (파일 업로드 등)
- 화면이 바뀌는 경우 스켈레톤 로딩 화면이 좋음.
- 이미지가 핵심 콘텐츠인 경우 주요 색상을 추출하여 흐리게 처리하면 아주 좋음.
- 2초 ~ 10초 사이인 경우
- "5초 가량 소요됩니다" 와 같은 시간표시기가 효과적일 수 있음.
- 진행 표시줄은 항상 좋은 선택임.
- 몇 가지 단계로 구성된 경우, 해당 단계를 보여주는 것도 방법.
- 명확한 단계가 없는 경우에도 일반적인 메시지를 사용할 수 있음. (서버 연결 중 등)
- 10초 이상 걸리는 경우
- 진행률을 명확하게 알 수 있는 경우 퍼센트와 남은 시간 등을 표시해주는 게 좋음. (파일 업로드의 50% 등)
- 단 99%에서 멈추는 것은 매우 치명적이므로 이런 경우가 발생할 수 있으면 다른 방법을 사용해야 함.
- 더 오래 걸리는데 진행률을 명확하게 알 수 없으면, 작업이 완료되면 이메일 등으로 알려주겠다고 하고 사용자가 제어할 수 있도록 하면 좋음.
- 아예 백그라운드에서 작업이 되면서 사용자의 모든 행동을 방해하지 않는 것도 좋음. (구글 드라이브의 업로드 진행 상태 등)
- 진행률을 명확하게 알 수 있는 경우 퍼센트와 남은 시간 등을 표시해주는 게 좋음. (파일 업로드의 50% 등)
Documentation
- [추천] Learning Patterns - 웹 앱 설계를 위한 패턴들 - (잘못된 정보도 간혹 있는 듯 ... - 확인 필요)
-
Learning-patterns-by-lydia_hallie_and_addy_osmani-v1.1.pdf - 디자인 패턴 및 웹 컴포넌트 패턴 설명을 웹 사이트 및 무료 e북으로 제공 (435p PDF)
- 바닐라 자바스크립트 & React
- CodeSandbox를 이용한 실전 예제
- 애니메이션으로 패턴 설명
- 패턴들
- Design Patterns : Singleton, Proxy, Provider, Prototype, Observer, Module, Mixin, Hooks, Factory, Compound, Command,..
- Rendering Patterns : CSR, SSR, Static, Incremental Static Generation, Progressive Hydration, Streaming SSR, Islands Architecture,..
- Performance Patterns : Static/Dynamic Import, Import on Visibility/Interaction, Route Based Splitting, Bundle Splitting, RPRL, Tree Shaking, Preloadk, Prefetch, List Virtualization,..
See also
Favorite site
- Wikipedia (en) Web development
- Wikipedia (ko) 웹 프로그래밍 언어에 대한 설명
- [추천] Wikipedia (en) Programming languages used in most popular websites
- [추천] CSS 역사로 알아보는 CSS가 어려워진 이유 2
- [추천] 홈피디자인 닷컴 (웹개발 스터디 자료)
- [추천] Openbase web site - 수백만 개의 오픈 소스 패키지를 리뷰, 확인, 비교.
- Unsplash Image API | Free HD Photo API - 개발용 무료 이미지
MDN (Mozilla Developer Network)
Guide
- 프론트엔드 체크리스트
- [추천] Naver D2 - 네이버 메인 페이지의 트래픽 처리 3
- Frontend Fundamentals
- 토스 프론트엔드 챕터에서 생각하는 좋은 프론트엔드 코드의 기준에 대해서 소개하는 사이트를 게시했습니다.
- 프론트엔드 개발자들이 주로 사용하는 TypeScript를 기반으로 설명
- 가독성/예측 가능성/응집도/결합도의 4가지 관점에서 best practice를 제시함
- 실제 프론트엔드에서 자주 사용하는 라이브러리를 활용하는 예시 제공
- 4가지 기준
- 가독성(Readability)은 코드가 읽기 쉬운 정도를 말해요. 코드가 변경하기 쉬우려면 먼저 코드가 어떤 동작을 하는지 이해할 수 있어야 해요.
- 예측 가능성(Predictability)이란, 함께 협업하는 동료들이 함수나 컴포넌트의 동작을 얼마나 예측할 수 있는지를 말해요. 예측 가능성이 높은 코드는 일관적인 규칙을 따르고, 함수나 컴포넌트의 이름과 파라미터, 반환 값만 보고도 어떤 동작을 하는지 알 수 있어요.
- 응집도(Cohesion)란, 수정되어야 할 코드가 항상 같이 수정되는지를 말해요. 응집도가 높은 코드는 코드의 한 부분을 수정해도 의도치 않게 다른 부분에서 오류가 발생하지 않아요. 함께 수정되어야 할 부분이 반드시 함께 수정되도록 구조적으로 뒷받침되기 때문이죠.
- 결합도(Coupling)란, 코드를 수정했을 때의 영향범위를 말해요. 코드를 수정했을 때 영향범위가 적어서, 변경에 따른 범위를 예측할 수 있는 코드가 수정하기 쉬운 코드예요.
Tutorials
- [추천] Front End Web Development Tutorial - PoiemaWeb (Beginner’s Guide to Web Development)
- [추천] 웹 프로그래밍 튜토리얼 | PoiemaWeb - https://github.com/ungmo2/ungmo2.github.io
- Local-First Web Development - 오프라인에서 동작하며, 클라이언트간에 동기화되고, 사용자가 자신의 데이터를 소유하는 "로컬 우선 웹앱"을 만드는 방법과 기술들 정리
- 읽을 글과 영상들: Local-First, Data-Centric, E2E, CRDT,..
- 데이터 저장 : PouchDB, RxDB, VLCN, TinyBase, ElectricSQL, Evolu,..
- 데이터 동기화 : Yjs, Automerge, REplicache, Hocuspocus, Amplify DataStore
Article
- 40 Essential Cheatsheets for Web Designers and Developers (웹 디자이너와 개발자를 위한 필수 치트시트 40선)
- 흔한 2017년의 Front-end 기술 스택
- Github - Roadmap to becoming a web developer in 2017 (2017년도판 웹 개발자 로드맵)
- 신규 Web 서비스시 고려해 볼 사항
- (번역) 초보 프론트엔드 개발자들을 위한 Pub-Sub(Publish-Subscribe) 패턴을 알아보기
- 2022년 웹 개발에서 고려해야 할 환경 - LINE ENGINEERING