Follow my blog with Bloglovin FraisGout: 코딩
Showing posts with label 코딩. Show all posts
Showing posts with label 코딩. Show all posts

프로그래밍 언어 (Python, Java, JavaScript, C/C++, Ruby, Swift, Go) 공부 방법 및 무료 사이트 모음

 프로그래밍 언어는 다양하며, 각각의 언어는 특정 목적과 환경에 적합하게 설계되었습니다. 주요 프로그래밍 언어와 그 특징을 간략하게 소개하고, 효과적인 공부 방법에 대해 설명하겠습니다.

주요 프로그래밍 언어

  1. Python

    • 특징: 문법이 간단하고 직관적이며, 다양한 분야에서 사용됩니다. 데이터 분석, 인공지능, 웹 개발 등에 널리 사용됩니다.
    • 장점: 배울 때 진입 장벽이 낮고, 방대한 라이브러리와 커뮤니티 지원이 있습니다.
  2. Java

    • 특징: 객체 지향 프로그래밍 언어로, 안정적이고 확장 가능한 대규모 시스템을 개발하는 데 자주 사용됩니다.
    • 장점: 플랫폼 독립성을 가지며, 강력한 성능과 보안 기능을 제공합니다.
  3. JavaScript

    • 특징: 주로 웹 개발에서 사용되며, 클라이언트 및 서버 측 모두에서 실행될 수 있습니다. 프론트엔드 개발에 필수적입니다.
    • 장점: HTML, CSS와 결합하여 동적인 웹 페이지를 쉽게 만들 수 있습니다.
  4. C/C++

    • 특징: 시스템 프로그래밍 및 고성능 애플리케이션 개발에 사용됩니다. 하드웨어와 밀접한 저수준 프로그래밍이 가능합니다.
    • 장점: 강력한 성능과 메모리 제어를 제공하며, 게임 개발, 임베디드 시스템 등에 자주 사용됩니다.
  5. Ruby

    • 특징: 간결하고 읽기 쉬운 문법을 가지고 있으며, 주로 웹 애플리케이션 개발에 사용됩니다.
    • 장점: Ruby on Rails 프레임워크를 사용하여 빠르게 웹 애플리케이션을 개발할 수 있습니다.
  6. Swift

    • 특징: Apple의 iOS 및 macOS 애플리케이션 개발에 주로 사용됩니다.
    • 장점: 안전성과 성능이 뛰어나며, 최신 Apple 생태계에 적합합니다.
  7. Go

    • 특징: 구글에서 개발한 언어로, 간결하고 효율적인 동시성을 지원합니다. 클라우드 및 서버 애플리케이션 개발에 자주 사용됩니다.
    • 장점: 컴파일 속도가 빠르고, 높은 성능을 제공합니다.

코딩 공부 방법

  1. 목표 설정

    • 어떤 분야(웹 개발, 데이터 과학, 인공지능 등)에 관심이 있는지 먼저 정하고, 해당 분야에 적합한 언어를 선택합니다.
  2. 기초 문법 학습

    • 선택한 언어의 기초 문법을 먼저 학습합니다. 온라인 강의, 책, 공식 문서 등을 활용해 문법을 이해하고 기본적인 프로그램을 작성해보세요.
  3. 실습

    • 이론 학습만으로는 한계가 있으므로, 직접 코드를 작성하면서 실습을 합니다. 간단한 프로그램부터 시작해 점차 복잡한 프로젝트로 확장해 나갑니다.
  4. 오픈 소스 프로젝트 참여

    • GitHub와 같은 플랫폼에서 오픈 소스 프로젝트에 기여해보세요. 실전 경험을 쌓을 수 있고, 다른 개발자들과 협업하는 방법도 익힐 수 있습니다.
  5. 문제 해결 능력 향상

    • 알고리즘 문제를 풀며 문제 해결 능력을 키워보세요. LeetCode, Codeforces, HackerRank 등의 사이트에서 다양한 문제를 풀 수 있습니다.
  6. 커뮤니티 참여

    • 프로그래밍 커뮤니티에 참여해 질문하고 답변을 주고받으며 배우는 것도 큰 도움이 됩니다. Stack Overflow, Reddit, 프로그래밍 관련 포럼 등을 활용하세요.
  7. 프로젝트 완성

    • 실무에 가까운 프로젝트를 스스로 기획하고 완성해보세요. 이를 통해 전반적인 개발 프로세스를 경험할 수 있습니다.

프로그래밍 언어는 학습의 시작일 뿐, 실제로 무엇을 만들고 문제를 해결하는 능력이 중요합니다. 꾸준한 학습과 실습이 가장 효과적인 방법입니다.


Python은 초보자부터 전문가까지 모두에게 유용한 프로그래밍 언어로, 다양한 학습 자원들이 온라인에 무료로 제공되고 있습니다. Python 공부 방법과 무료 학습 사이트들을 소개하겠습니다.

Python 공부 방법

  1. 기초 문법 학습

    • Python의 문법은 다른 언어에 비해 비교적 간단합니다. 기본적인 자료형, 변수, 조건문, 반복문, 함수 등을 먼저 학습합니다.
    • 추천: 간단한 계산기 프로그램, 문자열 조작 등을 직접 구현해 보세요.
  2. 실습 프로젝트

    • 기초 문법을 익힌 후, 간단한 프로젝트를 통해 Python의 활용 방법을 익힙니다. 예를 들어, 간단한 웹 크롤러, 데이터 분석, 간단한 게임 등을 만들어 볼 수 있습니다.
  3. 문제 해결 능력 강화

    • 알고리즘과 데이터 구조를 공부하면서 Python으로 문제를 해결하는 연습을 합니다.
    • 추천: 다양한 알고리즘 문제 풀이 사이트에서 Python으로 문제를 풀어보세요.
  4. 심화 학습

    • Python의 고급 기능, 예를 들어 객체 지향 프로그래밍(OOP), 파일 처리, 예외 처리, 라이브러리 사용 등을 학습합니다.
    • 추천: 실무에서 사용되는 Python 라이브러리(Numpy, Pandas, Flask 등)를 학습하고, 실제 프로젝트에 적용해보세요.
  5. 오픈 소스 프로젝트 참여

    • GitHub와 같은 플랫폼에서 오픈 소스 프로젝트에 기여해보세요. 코드를 읽고, 문제를 해결하고, 커뮤니티에 기여하는 과정에서 많은 것을 배울 수 있습니다.

무료 Python 학습 사이트

  1. Python 공식 문서

    • Python의 모든 문법과 기능을 공식 문서에서 확인할 수 있습니다. 기본적인 문법부터 고급 기능까지 자세히 설명되어 있습니다.
  2. Codecademy

    • Python을 비롯한 다양한 프로그래밍 언어를 무료로 학습할 수 있는 플랫폼입니다. 상호작용적인 학습 환경을 제공하여, 실습을 통해 Python을 배울 수 있습니다.
  3. Sololearn

    • Python 기초부터 심화까지 다양한 과정을 제공하며, 모바일 앱을 통해 언제 어디서나 학습할 수 있습니다. 간단한 퀴즈와 실습을 통해 개념을 이해할 수 있습니다.
  4. Real Python

    • 초보자와 중급자를 위한 다양한 Python 튜토리얼이 제공됩니다. 글뿐만 아니라, 동영상 강좌와 코딩 연습을 통해 Python을 효과적으로 학습할 수 있습니다.
  5. LeetCode

    • 알고리즘 문제를 풀면서 Python 실력을 향상시킬 수 있는 사이트입니다. 다양한 난이도의 문제가 제공되며, 문제 풀이를 통해 Python의 다양한 기능을 활용하는 방법을 배울 수 있습니다.
  6. Kaggle

    • 데이터 과학에 특화된 학습 플랫폼으로, Python 기초부터 데이터 분석 및 머신러닝까지 다양한 과정을 제공합니다. 실습을 통해 Python을 배울 수 있습니다.
  7. W3Schools Python Tutorial

    • 간단한 설명과 예제로 Python의 기본 개념을 익힐 수 있는 사이트입니다. 초보자에게 적합하며, 코드 예제를 통해 개념을 쉽게 이해할 수 있습니다.

이러한 사이트들을 활용하여 꾸준히 학습하고, 실제 프로젝트에 Python을 적용해보세요. 학습을 실습과 병행하는 것이 가장 효과적입니다.


Java는 안정성과 확장성이 뛰어나 많은 기업 애플리케이션과 대규모 시스템에서 사용되는 대표적인 객체 지향 프로그래밍 언어입니다. Java를 효과적으로 공부하는 방법과 무료로 학습할 수 있는 사이트들을 소개하겠습니다.

Java 공부 방법

  1. 기초 문법 학습

    • Java의 기본 문법(자료형, 변수, 조건문, 반복문, 함수 등)을 학습합니다. 객체 지향 프로그래밍의 기본 개념(클래스, 객체, 상속, 다형성 등)도 익혀야 합니다.
    • 추천: 간단한 콘솔 애플리케이션(예: 계산기, 은행 계좌 관리 프로그램)을 직접 만들어 보세요.
  2. 객체 지향 프로그래밍 (OOP) 이해

    • Java는 객체 지향 언어이므로, 객체 지향 프로그래밍의 개념을 잘 이해하는 것이 중요합니다. 클래스, 상속, 인터페이스, 다형성 등을 실습을 통해 깊이 있게 학습합니다.
    • 추천: 상속과 인터페이스를 활용한 간단한 게임, 도서 관리 시스템 등을 구현해보세요.
  3. 자료 구조와 알고리즘

    • Java에서 제공하는 컬렉션 프레임워크(ArrayList, HashMap, HashSet 등)를 학습하고, 다양한 알고리즘 문제를 풀어봅니다. 자료 구조와 알고리즘을 이해하면 효율적인 코드를 작성할 수 있습니다.
    • 추천: LeetCode, Codeforces 등에서 알고리즘 문제를 풀어보세요.
  4. 실습 프로젝트

    • Java로 웹 애플리케이션(Spring, Spring Boot), 모바일 애플리케이션(Android), 데스크톱 애플리케이션(JavaFX) 등 다양한 프로젝트를 실습해보세요.
    • 추천: 간단한 블로그 사이트, 채팅 애플리케이션, Android 앱 등을 개발해보세요.
  5. 라이브러리와 프레임워크 학습

    • Java의 생태계는 매우 풍부하며, 다양한 라이브러리와 프레임워크가 존재합니다. Spring, Hibernate, Maven, Gradle 등 자주 사용되는 기술을 학습하세요.
    • 추천: Spring Boot를 사용하여 RESTful API 서버를 구축하거나, Hibernate를 사용해 데이터베이스를 관리하는 프로젝트를 진행해보세요.
  6. 오픈 소스 프로젝트 참여

    • GitHub와 같은 플랫폼에서 Java 오픈 소스 프로젝트에 기여하면서 실무 경험을 쌓고, 다른 개발자들과 협업하는 방법을 익힙니다.

무료 Java 학습 사이트

  1. Java 공식 문서

    • Java의 모든 기능과 API에 대한 공식 문서입니다. Java SE, EE, ME 등 다양한 플랫폼에 대한 자세한 설명을 확인할 수 있습니다.
  2. Codecademy

    • Java의 기본 문법을 상호작용적인 환경에서 배울 수 있는 플랫폼입니다. 초보자에게 적합한 학습 과정이 제공됩니다.
  3. SoloLearn

    • Java 기초부터 심화까지 다양한 과정을 제공합니다. 모바일 앱을 통해 언제 어디서나 학습할 수 있으며, 퀴즈와 실습으로 학습한 내용을 바로 적용할 수 있습니다.
  4. Coursera

    • 다양한 대학교와 기관에서 제공하는 Java 관련 무료 강좌를 수강할 수 있습니다. 기초 문법부터 심화 과정까지 다양한 강의가 제공됩니다.
  5. Udemy 무료 Java 강좌

    • Udemy에서 제공하는 무료 Java 강좌들을 통해 Java 기초를 학습할 수 있습니다. 다양한 강좌 중 본인에게 맞는 것을 선택해 학습하세요.
  6. Java Programming and Software Engineering Fundamentals (Coursera)

    • Duke University에서 제공하는 Java 프로그래밍 기초와 소프트웨어 공학 원칙을 배울 수 있는 무료 과정입니다. 프로젝트 기반 학습이 특징입니다.
  7. GeeksforGeeks Java Tutorial

    • Java의 기본 문법부터 고급 주제까지 다루는 튜토리얼이 제공됩니다. 실습 예제와 함께 제공되므로 코드를 따라 하며 학습할 수 있습니다.
  8. W3Schools Java Tutorial

    • W3Schools는 간단하고 명료한 튜토리얼로 유명하며, Java의 기본 개념과 예제를 통해 초보자도 쉽게 따라 할 수 있습니다.
  9. EdX

    • 다양한 대학과 기관에서 제공하는 Java 무료 강의를 수강할 수 있습니다. 기초부터 심화 과정까지 다양한 수준의 강의가 제공됩니다.

이러한 무료 자원을 활용해 꾸준히 학습하면서 실습 프로젝트를 진행하는 것이 Java를 효과적으로 익히는 데 큰 도움이 될 것입니다.


JavaScript는 웹 개발의 핵심 언어로, 프론트엔드부터 백엔드까지 다양한 영역에서 사용됩니다. JavaScript를 효과적으로 공부하는 방법과 무료 학습 사이트들을 소개하겠습니다.

JavaScript 공부 방법

  1. 기초 문법 학습

    • JavaScript의 기본 문법(변수, 자료형, 조건문, 반복문, 함수 등)을 먼저 익힙니다. 웹 브라우저 콘솔을 사용해 간단한 코드 실습을 진행할 수 있습니다.
    • 추천: 간단한 웹 페이지에 JavaScript를 추가하여, 클릭 이벤트를 처리하거나, 동적인 콘텐츠를 생성해 보세요.
  2. DOM 조작과 이벤트 핸들링

    • JavaScript를 사용해 HTML 요소를 조작하고, 사용자 입력에 반응하는 방법을 학습합니다. DOM(Document Object Model)과 이벤트 핸들링은 웹 개발에서 매우 중요합니다.
    • 추천: 간단한 TODO 리스트나 이미지 슬라이더를 만들어 보세요.
  3. ES6+ 문법과 최신 기능 학습

    • ES6(ECMAScript 2015) 이후의 최신 JavaScript 기능(화살표 함수, 클래스, 템플릿 리터럴, 비동기 처리 등)을 학습합니다. 최신 문법을 사용하면 코드가 더욱 간결하고 효율적입니다.
    • 추천: ES6 문법을 활용해 기존 코드를 리팩토링하거나, 모듈 시스템을 적용해보세요.
  4. 비동기 프로그래밍

    • JavaScript의 비동기 처리 방법(콜백, 프로미스, async/await)을 학습합니다. 비동기 프로그래밍은 API 호출, 데이터 로딩 등에서 필수적입니다.
    • 추천: 외부 API를 호출하여 데이터를 가져오고, 이를 웹 페이지에 표시하는 작은 프로젝트를 만들어 보세요.
  5. 프레임워크와 라이브러리 학습

    • JavaScript 프레임워크(React, Vue, Angular 등)와 라이브러리(jQuery, Lodash 등)를 학습합니다. 프레임워크를 사용하면 대규모 웹 애플리케이션을 보다 효율적으로 개발할 수 있습니다.
    • 추천: React로 간단한 SPA(Single Page Application)를 만들어 보세요.
  6. 프로젝트 기반 학습

    • 실전 프로젝트를 통해 학습한 내용을 적용해보세요. 포트폴리오 사이트, 블로그, 간단한 게임 등 다양한 프로젝트를 직접 만들어 보는 것이 좋습니다.
    • 추천: JavaScript로 개인 포트폴리오 웹사이트나 간단한 웹 애플리케이션을 제작해보세요.
  7. 오픈 소스 프로젝트 참여

    • GitHub에서 JavaScript 오픈 소스 프로젝트에 기여해 보세요. 실제 코드베이스에서 실무적인 경험을 쌓을 수 있습니다.

무료 JavaScript 학습 사이트

  1. MDN Web Docs (JavaScript)

    • Mozilla에서 제공하는 JavaScript 공식 문서로, 기본 문법부터 고급 기능까지 상세히 설명되어 있습니다. 실습 예제와 함께 제공되며, 웹 개발에 필요한 모든 정보가 포함되어 있습니다.
  2. freeCodeCamp

    • JavaScript와 관련된 다양한 과정을 제공하는 무료 교육 플랫폼입니다. 기본 문법, 알고리즘, 데이터 구조부터 심화 과정까지 단계적으로 학습할 수 있습니다.
  3. Codecademy

    • 상호작용적인 환경에서 JavaScript를 배울 수 있는 플랫폼입니다. 기본 문법부터 실습을 통해 학습할 수 있으며, 초보자에게 적합합니다.
  4. SoloLearn

    • JavaScript 기초를 다루는 무료 학습 플랫폼입니다. 모바일 앱을 통해 언제 어디서나 학습할 수 있으며, 퀴즈와 실습으로 학습한 내용을 확인할 수 있습니다.
  5. JavaScript.info

    • JavaScript에 대한 종합적인 학습 사이트로, 초보자부터 전문가까지 모두에게 유용한 자료를 제공합니다. 실습 예제와 개념 설명이 잘 되어 있어 체계적으로 학습할 수 있습니다.
  6. The Odin Project

    • 웹 개발에 필요한 JavaScript 기술을 포함한 풀스택 개발 과정을 무료로 제공합니다. 프로젝트 기반 학습이 특징이며, 실습을 통해 학습한 내용을 직접 적용할 수 있습니다.
  7. W3Schools JavaScript Tutorial

    • JavaScript 기초 개념을 배우기에 좋은 사이트로, 간단한 예제와 함께 설명이 제공됩니다. 초보자가 접근하기에 적합하며, 실습용 코드 에디터도 제공합니다.
  8. EdX

    • 다양한 대학과 기관에서 제공하는 JavaScript 강좌를 무료로 수강할 수 있습니다. 기초부터 심화 과정까지 다양한 강좌가 제공됩니다.
  9. Coursera

    • JavaScript와 관련된 다양한 무료 강좌가 제공되며, 기초부터 고급까지 다양한 학습 과정을 선택할 수 있습니다. 일부 과정은 무료 수강이 가능합니다.

이러한 무료 자원을 활용해 JavaScript를 학습하면서, 실습을 통해 얻은 지식을 실제 프로젝트에 적용해보세요. 실습을 통해 학습한 내용을 반복적으로 사용하면서 자신만의 프로젝트를 만드는 것이 중요합니다.


C와 C++은 시스템 프로그래밍, 게임 개발, 임베디드 시스템 등에서 널리 사용되는 강력한 프로그래밍 언어입니다. 두 언어 모두 저수준 메모리 관리와 고성능이 요구되는 프로젝트에 적합하며, C++은 객체 지향 프로그래밍(OOP) 기능도 포함하고 있습니다. 이 언어들을 효과적으로 학습하는 방법과 무료 학습 사이트들을 소개하겠습니다.

C/C++ 공부 방법

  1. 기초 문법 학습

    • C와 C++의 기본 문법을 학습합니다. 변수, 자료형, 연산자, 조건문, 반복문, 함수 등을 먼저 익힙니다. C++의 경우, 클래스와 객체, 상속, 다형성 등 객체 지향 개념도 함께 학습해야 합니다.
    • 추천: 간단한 콘솔 프로그램(예: 계산기, 문자열 처리 프로그램)을 만들어 보세요.
  2. 포인터와 메모리 관리

    • C/C++의 핵심 개념인 포인터와 메모리 관리(동적 할당, 해제)를 깊이 있게 이해해야 합니다. 메모리 누수, 포인터 오류 등을 방지하는 방법도 함께 익히세요.
    • 추천: 동적 메모리 할당을 사용해 링크드 리스트, 스택, 큐와 같은 자료 구조를 직접 구현해 보세요.
  3. C++ 객체 지향 프로그래밍(OOP)

    • C++에서는 객체 지향 프로그래밍을 학습합니다. 클래스, 객체, 상속, 다형성, 추상 클래스, 인터페이스 등을 이해하고, 이를 이용해 구조화된 프로그램을 작성해보세요.
    • 추천: 상속과 다형성을 활용해 간단한 게임이나 애플리케이션을 만들어 보세요.
  4. 표준 라이브러리(STL) 학습 (C++)

    • C++의 표준 라이브러리(STL, Standard Template Library)를 학습합니다. 벡터, 리스트, 맵, 스택, 큐, 알고리즘 등을 활용해 효율적인 코드 작성 방법을 익히세요.
    • 추천: STL을 사용해 다양한 자료 구조와 알고리즘 문제를 해결해보세요.
  5. 프로젝트 기반 학습

    • C/C++을 활용해 실습 프로젝트를 진행해보세요. 예를 들어, 간단한 게임, 파일 처리 프로그램, 네트워크 애플리케이션 등을 만들어 보면서 실력을 향상시킬 수 있습니다.
    • 추천: C++로 텍스트 기반의 게임, 파일 압축 프로그램 등을 구현해보세요.
  6. 알고리즘과 데이터 구조 학습

    • C/C++의 성능을 극대화하려면 효율적인 알고리즘과 데이터 구조를 이해해야 합니다. 다양한 알고리즘 문제를 풀며 실력을 쌓아보세요.
    • 추천: LeetCode, Codeforces 등의 플랫폼에서 C++로 알고리즘 문제를 풀어보세요.
  7. 오픈 소스 프로젝트 참여

    • GitHub와 같은 플랫폼에서 C/C++ 오픈 소스 프로젝트에 기여하면서 실제 코드를 작성하고 실무 경험을 쌓아보세요.

무료 C/C++ 학습 사이트

  1. Cplusplus.com

    • C++의 기초 문법과 표준 라이브러리(STL)를 학습할 수 있는 튜토리얼이 제공됩니다. 다양한 예제 코드와 함께 설명이 잘 되어 있어 C++ 학습에 유용합니다.
  2. Learn-C.org

    • C 언어를 학습할 수 있는 무료 웹사이트로, 기초부터 심화 개념까지 다룹니다. 각 주제별로 실습할 수 있는 코드를 제공해 즉시 연습할 수 있습니다.
  3. LearnCpp.com

    • C++를 배우기 위한 종합적인 학습 사이트로, 초보자부터 고급 사용자까지 모두에게 유용한 자료를 제공합니다. 객체 지향 프로그래밍, 메모리 관리, 템플릿 등 심화 주제도 다룹니다.
  4. freeCodeCamp (C/C++ 관련 기사 및 튜토리얼)

    • freeCodeCamp에서는 C와 C++에 관한 다양한 학습 자료와 튜토리얼을 제공하며, 초보자에게 친숙한 방식으로 개념을 설명합니다.
  5. Codecademy (C++)

    • C++ 기초 문법을 상호작용적인 환경에서 학습할 수 있는 플랫폼입니다. 단계별로 학습할 수 있으며, 초보자에게 적합합니다.
  6. SoloLearn (C, C++)

    • C와 C++의 기본을 다루는 무료 학습 플랫폼입니다. 모바일 앱을 통해 언제 어디서나 학습할 수 있으며, 퀴즈와 실습을 통해 학습한 내용을 확인할 수 있습니다.
  7. GeeksforGeeks (C, C++)

    • C와 C++의 기초부터 고급 주제까지 다양한 튜토리얼이 제공됩니다. 알고리즘, 데이터 구조, 문제 해결 방법도 함께 다루고 있어 학습에 유용합니다.
  8. W3Schools C++ Tutorial

    • C++의 기본 개념을 배우기에 좋은 사이트로, 간단한 예제와 함께 설명이 제공됩니다. 초보자가 접근하기에 적합하며, 실습용 코드 에디터도 포함되어 있습니다.
  9. EdX (C/C++)

    • 다양한 대학과 기관에서 제공하는 C/C++ 강좌를 무료로 수강할 수 있습니다. 기초부터 심화 과정까지 다양한 강좌가 제공됩니다.
  10. Coursera (C/C++)

    • C/C++와 관련된 다양한 무료 강좌가 제공되며, 기초부터 고급까지 다양한 학습 과정을 선택할 수 있습니다. 일부 과정은 무료 수강이 가능합니다.

이러한 무료 자원을 활용해 C와 C++을 학습하면서, 실습 프로젝트를 통해 실력을 쌓아보세요. 실습을 통해 학습한 내용을 반복적으로 사용하면서 자신만의 프로젝트를 만드는 것이 중요합니다.


Ruby는 간결하고 읽기 쉬운 문법을 가진 객체 지향 프로그래밍 언어로, 특히 웹 애플리케이션 개발에 강점을 가지고 있습니다. Ruby를 효과적으로 학습하기 위한 방법과 무료 학습 사이트들을 소개하겠습니다.

Ruby 공부 방법

  1. 기초 문법 학습

    • Ruby의 기본 문법을 학습합니다. 변수, 자료형, 조건문, 반복문, 메소드 정의 등 기본적인 문법을 익히는 것이 중요합니다.
    • 추천: 간단한 Ruby 스크립트를 작성해 보세요. 예를 들어, 텍스트 파일에서 데이터를 읽고 처리하는 스크립트를 만들어 볼 수 있습니다.
  2. 객체 지향 프로그래밍(OOP)

    • Ruby는 객체 지향 언어이므로 클래스, 객체, 상속, 모듈, 믹스인(믹스인)을 학습합니다. Ruby의 OOP 기능을 활용하여 구조화된 코드를 작성할 수 있습니다.
    • 추천: 클래스와 메소드를 사용하여 간단한 도서 관리 시스템이나 은행 계좌 관리 프로그램을 만들어 보세요.
  3. Ruby on Rails 학습

    • Ruby의 대표적인 프레임워크인 Ruby on Rails(Rails)를 학습합니다. Rails는 웹 애플리케이션 개발을 빠르고 효율적으로 할 수 있도록 돕는 강력한 도구입니다.
    • 추천: Rails를 사용해 간단한 웹 애플리케이션(예: 블로그, 간단한 CRM 시스템)을 만들어 보세요.
  4. 문제 해결과 알고리즘 연습

    • Ruby를 사용하여 알고리즘 문제를 해결하며 문제 해결 능력을 기릅니다. 다양한 알고리즘 문제를 풀면서 Ruby의 다양한 기능을 익힐 수 있습니다.
    • 추천: LeetCode, HackerRank와 같은 플랫폼에서 Ruby로 문제를 풀어보세요.
  5. 실습 프로젝트 진행

    • Ruby를 활용해 실무에 가까운 프로젝트를 진행합니다. 실전 프로젝트를 통해 실력을 쌓고, 개발 경험을 쌓을 수 있습니다.
    • 추천: 개인 포트폴리오 웹사이트, 간단한 e-commerce 사이트, 또는 웹 기반 애플리케이션을 개발해 보세요.
  6. 오픈 소스 프로젝트 참여

    • GitHub와 같은 플랫폼에서 Ruby 오픈 소스 프로젝트에 기여하여 실무 경험을 쌓고, 다른 개발자들과 협업하는 방법을 익힙니다.

무료 Ruby 학습 사이트

  1. Ruby 공식 문서

    • Ruby의 공식 문서로, 기본 문법부터 고급 기능까지 자세히 설명되어 있습니다. Ruby의 API 문서와 튜토리얼도 포함되어 있습니다.
  2. Learn Ruby the Hard Way

    • Ruby를 기초부터 체계적으로 배울 수 있는 무료 학습 자료입니다. 단계별로 진행되는 실습을 통해 Ruby의 핵심 개념을 익힐 수 있습니다.
  3. Codecademy (Ruby)

    • Ruby의 기초 문법을 상호작용적인 환경에서 배울 수 있는 플랫폼입니다. 단계별로 학습할 수 있으며, 퀴즈와 실습이 제공됩니다.
  4. RubyMonk

    • Ruby의 기초부터 고급 주제까지 다루는 무료 학습 사이트입니다. 상호작용적인 튜토리얼을 통해 Ruby의 기본 개념을 쉽게 익힐 수 있습니다.
  5. RailsBridge

    • Rails를 사용하여 Ruby on Rails를 배우기 위한 무료 자료와 튜토리얼을 제공합니다. 다양한 예제와 실습을 통해 웹 애플리케이션 개발을 익힐 수 있습니다.
  6. The Odin Project (Ruby)

    • Ruby와 Rails를 배우기 위한 포괄적인 무료 교육 과정입니다. 프로젝트 기반 학습을 통해 실력을 쌓을 수 있습니다.
  7. Ruby Warrior

    • Ruby를 배우면서 게임을 통해 연습할 수 있는 재미있는 플랫폼입니다. 기본적인 Ruby 문법을 게임을 통해 익힐 수 있습니다.
  8. GeeksforGeeks (Ruby)

    • Ruby의 기본 개념과 예제 코드가 포함된 튜토리얼을 제공합니다. 다양한 문제 해결 방법과 개념을 학습할 수 있습니다.
  9. W3Schools Ruby Tutorial

    • Ruby의 기본 문법을 배우기 좋은 사이트로, 간단한 예제와 함께 설명이 제공됩니다. 초보자가 접근하기에 적합하며, 실습용 코드 에디터도 포함되어 있습니다.

이러한 무료 자원을 활용하여 Ruby를 체계적으로 학습하고, 실습 프로젝트를 통해 실력을 쌓아보세요. 실습을 통해 얻은 지식을 프로젝트에 적용하는 것이 중요합니다.


Swift는 Apple의 iOS 및 macOS 애플리케이션 개발에 사용되는 프로그래밍 언어로, 간결하고 안전하며 성능이 뛰어난 언어입니다. Swift를 효과적으로 학습하기 위한 방법과 무료 학습 사이트들을 소개하겠습니다.

Swift 공부 방법

  1. 기초 문법 학습

    • Swift의 기본 문법(변수, 상수, 자료형, 조건문, 반복문, 함수 등)을 학습합니다. Swift의 문법은 간결하고 직관적이어서 쉽게 익힐 수 있습니다.
    • 추천: 간단한 계산기, 문자열 처리 등의 콘솔 프로그램을 만들어 보세요.
  2. 객체 지향 및 함수형 프로그래밍

    • Swift는 객체 지향과 함수형 프로그래밍을 지원합니다. 클래스, 구조체, 열거형, 프로토콜 등 OOP의 기본 개념과 함수형 프로그래밍의 고차 함수(맵, 필터, 리듀스 등)를 학습합니다.
    • 추천: 클래스와 구조체를 사용하여 간단한 객체 모델을 구현해 보세요.
  3. iOS 개발 기초

    • Swift를 사용하여 iOS 애플리케이션을 개발하는 기본 개념을 학습합니다. UIKit, SwiftUI, Storyboards, Xcode 등의 도구와 프레임워크를 익히는 것이 중요합니다.
    • 추천: Xcode를 사용해 간단한 iOS 앱(예: 할 일 목록, 계산기)을 만들어 보세요.
  4. SwiftUI 학습

    • SwiftUI는 최신 iOS 애플리케이션 개발을 위한 선언형 프레임워크입니다. SwiftUI의 기본 문법, 레이아웃, 상태 관리 등을 학습합니다.
    • 추천: SwiftUI를 사용하여 기본 UI 구성요소(버튼, 텍스트, 이미지 등)를 포함한 간단한 앱을 만들어 보세요.
  5. 비동기 프로그래밍

    • Swift의 비동기 처리(코루틴, async/await, Combine 등)를 학습하여 네트워크 요청이나 데이터베이스 작업 등을 효율적으로 처리할 수 있습니다.
    • 추천: 네트워크 요청을 처리하는 간단한 앱을 만들어 비동기 프로그래밍을 연습해 보세요.
  6. 실습 프로젝트

    • Swift를 사용하여 실전 프로젝트를 진행합니다. 프로젝트를 통해 실제 애플리케이션 개발 과정을 경험하고 실력을 향상시킬 수 있습니다.
    • 추천: 개인 포트폴리오 앱, 간단한 게임, 메모 앱 등을 개발해 보세요.
  7. 오픈 소스 프로젝트 참여

    • GitHub와 같은 플랫폼에서 Swift 오픈 소스 프로젝트에 기여하여 실무 경험을 쌓고, 코드 리뷰 및 협업을 통해 학습할 수 있습니다.

무료 Swift 학습 사이트

  1. Swift 공식 문서

    • Swift의 공식 문서로, 기본 문법부터 고급 기능까지 자세히 설명되어 있습니다. 최신 Swift 버전에 대한 정보와 예제가 포함되어 있습니다.
  2. Swift Playgrounds

    • Apple에서 제공하는 iPad 및 Mac용 앱으로, Swift를 재미있게 배우고 실습할 수 있는 환경을 제공합니다. 인터랙티브한 학습 도구와 과제가 포함되어 있습니다.
  3. Hacking with Swift

    • Swift 및 iOS 개발에 대한 무료 튜토리얼과 코스가 제공됩니다. 다양한 실습 프로젝트와 문제 해결 방법을 통해 실력을 키울 수 있습니다.
  4. Ray Wenderlich

    • iOS 및 Swift 개발에 관한 다양한 무료 튜토리얼과 비디오 강좌를 제공합니다. 기본부터 심화 과정까지 폭넓은 자료가 제공됩니다.
  5. Codecademy (Learn Swift)

    • Swift 기초 문법을 상호작용적인 환경에서 배울 수 있는 플랫폼입니다. 단계별로 학습할 수 있으며, 실습과 퀴즈가 포함되어 있습니다.
  6. FreeCodeCamp (Swift)

    • Swift와 관련된 다양한 학습 자료와 튜토리얼을 제공합니다. 기초부터 심화까지 폭넓은 내용을 다룹니다.
  7. Udacity (Swift)

    • Swift와 iOS 개발을 위한 무료 강좌를 제공합니다. 기초부터 시작하여 실습을 통해 학습할 수 있는 과정이 포함되어 있습니다.
  8. [YouTube (Swift)]

    • 다양한 YouTube 채널에서 Swift 및 iOS 개발에 대한 무료 비디오 강좌를 제공합니다. Sean Allen와 같은 채널에서 유용한 자료를 찾아볼 수 있습니다.
  9. The Odin Project (Ruby on Rails)

    • Swift와 관련된 과정도 제공되며, 포괄적인 학습 자료와 프로젝트 기반 학습을 통해 실력을 쌓을 수 있습니다.

이러한 무료 자원을 활용하여 Swift를 체계적으로 학습하고, 실습을 통해 얻은 지식을 실제 프로젝트에 적용해보세요. 실전 프로젝트를 통해 학습한 내용을 반복적으로 사용하면서 자신의 실력을 더욱 강화할 수 있습니다.


Go (또는 Golang)은 Google에서 개발한 프로그래밍 언어로, 간결한 문법과 뛰어난 성능, 병렬 처리 지원으로 많은 개발자들에게 사랑받고 있습니다. Go를 효과적으로 학습하는 방법과 무료 학습 사이트들을 소개하겠습니다.

Go 공부 방법

  1. 기초 문법 학습

    • Go의 기본 문법(변수, 자료형, 연산자, 제어문, 함수 등)을 학습합니다. Go는 문법이 간결하고 읽기 쉬워서 초보자도 쉽게 접근할 수 있습니다.
    • 추천: 간단한 Go 스크립트(예: 계산기, 문자열 처리)를 작성해 보세요.
  2. Go의 독특한 기능 학습

    • Go의 고유 기능인 고루틴과 채널을 학습합니다. 이러한 기능은 Go의 병렬 처리 및 동시성 처리를 지원합니다.
    • 추천: 고루틴을 사용해 동시에 실행되는 간단한 작업을 구현해 보세요. 예를 들어, 여러 웹 페이지에서 데이터를 동시에 다운로드하는 프로그램을 작성해 보세요.
  3. 패키지와 모듈 관리

    • Go의 패키지 시스템과 모듈 관리를 이해합니다. Go는 표준 라이브러리와 외부 패키지를 효율적으로 관리할 수 있는 도구를 제공합니다.
    • 추천: Go의 표준 라이브러리를 활용하여 파일 입출력, 네트워크 작업 등을 구현해 보세요.
  4. 인터페이스와 타입 시스템

    • Go의 인터페이스와 타입 시스템을 학습합니다. Go는 명시적 타입 선언 없이 인터페이스를 통해 유연한 프로그래밍을 지원합니다.
    • 추천: 인터페이스를 활용해 다양한 데이터 구조를 처리하는 프로그램을 작성해 보세요.
  5. 실습 프로젝트

    • Go를 사용하여 실제 애플리케이션을 개발해 봅니다. 예를 들어, 웹 서버, CLI 도구, RESTful API 서버 등을 만들 수 있습니다.
    • 추천: 간단한 웹 애플리케이션 또는 RESTful API 서버를 Go로 개발해 보세요.
  6. 오픈 소스 프로젝트 참여

    • GitHub와 같은 플랫폼에서 Go로 작성된 오픈 소스 프로젝트에 기여하여 실제 코드를 읽고 작성하는 경험을 쌓습니다.

무료 Go 학습 사이트

  1. Go 공식 문서

    • Go의 공식 문서로, 기본 문법부터 고급 기능까지 자세히 설명되어 있습니다. "A Tour of Go"라는 튜토리얼을 통해 기초부터 심화까지 단계적으로 학습할 수 있습니다.
  2. A Tour of Go

    • Go 언어의 기본을 체계적으로 배울 수 있는 공식 튜토리얼입니다. 인터랙티브한 환경에서 직접 코드를 작성하며 학습할 수 있습니다.
  3. Go by Example

    • Go의 주요 개념과 기능을 코드 예제를 통해 배울 수 있는 사이트입니다. 각 예제는 간단하고 명확하게 설명되어 있어 실습에 좋습니다.
  4. The Go Programming Language

    • Go의 기초부터 고급 개념까지 다루는 무료 온라인 책입니다. Go의 핵심 개념을 깊이 있게 학습할 수 있습니다.
  5. Learn Go with Tests

    • 테스트 주도 개발(TDD) 방식으로 Go를 배우는 무료 자료입니다. 각 장은 Go의 주요 개념과 테스트를 활용한 실습을 포함하고 있습니다.
  6. Go Wiki (GitHub)

    • Go의 다양한 주제에 대한 문서와 튜토리얼을 제공하는 GitHub 위키입니다. Go의 다양한 기능과 모범 사례를 배울 수 있습니다.
  7. Exercism (Go)

    • Go 언어를 학습하며 다양한 문제를 해결할 수 있는 플랫폼입니다. 각 문제에 대한 멘토링과 피드백을 받을 수 있습니다.
  8. Udemy (Go)

    • Udemy에서 제공하는 무료 Go 관련 강좌입니다. 다양한 주제와 난이도의 강좌가 제공되며, 초보자부터 고급자까지 학습할 수 있습니다.
  9. Coursera (Go)

    • Coursera에서 제공하는 Go 관련 강좌입니다. 일부 강좌는 무료로 수강할 수 있으며, 기초부터 심화 과정까지 다양한 강좌가 제공됩니다.
  10. Go Code Review Comments

    • Go 코드 리뷰의 모범 사례와 코드 스타일에 대한 정보를 제공하는 문서입니다. Go 코드의 품질을 높이는 데 유용합니다.

이러한 무료 자원을 활용하여 Go를 체계적으로 학습하고, 실습을 통해 학습한 내용을 실제 프로젝트에 적용해보세요. 실전 경험을 통해 Go의 다양한 기능과 활용 방법을 익힐 수 있습니다.


무료로 오픈 소스 프로젝트를 공유하거나 검색할 수 있는 사이트는 다양한 오픈 소스 개발자와 커뮤니티를 위한 자원을 제공합니다. 이들 사이트는 코드 저장소를 호스팅하고, 개발자들이 협업할 수 있는 플랫폼을 제공하며, 코드 리뷰와 이슈 트래킹 등 다양한 기능을 지원합니다.

여기 무료로 오픈 소스를 공유할 수 있는 주요 사이트를 소개합니다:

1. GitHub

  • 설명: 세계에서 가장 널리 사용되는 오픈 소스 코드 호스팅 플랫폼입니다. Git 저장소를 호스팅하며, 협업 도구, 버전 관리, 코드 리뷰, 이슈 트래킹 등을 지원합니다.
  • 특징: GitHub Actions를 통한 CI/CD, 프로젝트 관리 도구, GitHub Pages를 통한 웹사이트 호스팅, 대규모 오픈 소스 프로젝트와 개인 프로젝트 모두 지원.

2. GitLab

  • 설명: Git 저장소 호스팅 서비스로, CI/CD 기능이 내장되어 있으며, 코드 리뷰, 이슈 트래킹, 버전 관리, 배포 자동화 등의 기능을 제공합니다.
  • 특징: 무료 및 유료 버전 제공, 자체 호스팅 옵션, 통합된 DevOps 도구, 오픈 소스 프로젝트를 위한 다양한 기능 지원.

3. Bitbucket

  • 설명: Atlassian에서 제공하는 Git 및 Mercurial 저장소 호스팅 서비스입니다. 협업 도구와 CI/CD 파이프라인을 지원합니다.
  • 특징: 비공식 Git 및 Mercurial 지원, Jira와의 통합, 기본적인 CI/CD 기능 제공.

4. SourceForge

  • 설명: 오래된 오픈 소스 프로젝트 호스팅 플랫폼으로, Git, Mercurial, Subversion(SVN) 등의 버전 관리 시스템을 지원합니다.
  • 특징: 프로젝트 웹사이트 생성, 다운로드 통계 제공, 사용자 리뷰 및 피드백 지원.

5. Codeberg

  • 설명: 독일에 기반을 둔 비영리 오픈 소스 호스팅 플랫폼으로, Git 저장소를 호스팅하며, 사용자 친화적인 UI와 데이터 보호를 강조합니다.
  • 특징: Git 호스팅, 오픈 소스 소프트웨어에 대한 지원, 개인정보 보호 및 투명성 강조.

6. Gitea

  • 설명: 경량화된 Git 호스팅 솔루션으로, 자체 호스팅을 위한 오픈 소스 프로젝트입니다. GitHub, GitLab과 유사한 기능을 제공하며, 간단하고 빠르게 배포할 수 있습니다.
  • 특징: 자체 호스팅 가능, 경량화 및 빠른 속도, 다양한 사용자 관리 기능.

7. CodePlex (아카이브)

  • 설명: Microsoft에서 제공하던 오픈 소스 프로젝트 호스팅 플랫폼으로, 현재는 아카이브 상태로 유지됩니다. 기존의 오픈 소스 프로젝트를 검색할 수 있습니다.
  • 특징: 역사적인 오픈 소스 프로젝트 접근 가능, Microsoft 관련 프로젝트 다수 포함.

8. FOSSHub

  • 설명: 오픈 소스 소프트웨어 다운로드를 위한 플랫폼으로, 다양한 오픈 소스 프로젝트의 배포를 지원합니다.
  • 특징: 소프트웨어 다운로드 및 배포 지원, 사용자 리뷰와 평가 제공.

9. Savannah

  • 설명: GNU 프로젝트와 관련된 오픈 소스 소프트웨어를 호스팅하는 플랫폼입니다. 자유 소프트웨어를 위한 리포지토리 및 개발 도구를 제공합니다.
  • 특징: GNU 프로젝트와의 통합, 자유 소프트웨어 개발에 중점.

10. Launchpad

  • 설명: Ubuntu 및 기타 오픈 소스 프로젝트를 위한 개발 및 호스팅 플랫폼입니다. 버그 추적, 코드 호스팅, 번역 도구 등을 제공합니다.
  • 특징: 버그 추적 시스템, 프로젝트 관리 도구, 사용자 커뮤니티와의 통합.

이러한 사이트들은 각각의 특징과 강점을 가지고 있으며, 다양한 오픈 소스 프로젝트를 호스팅하고 관리하는 데 유용합니다. 오픈 소스 프로젝트를 공유하거나 협업할 때, 이러한 플랫폼들을 활용하여 개발자와 커뮤니티와 소통할 수 있습니다.


무료로 오픈 소스 코드를 공유하고 협업할 수 있는 사이트들은 개발자들이 프로젝트를 호스팅하고 관리하는 데 필요한 다양한 기능을 제공합니다. 이러한 사이트들은 코드 저장소, 버전 관리, 협업 도구, 코드 리뷰, 이슈 추적 등을 지원하여 개발자들이 효과적으로 프로젝트를 진행할 수 있게 도와줍니다. 다음은 무료로 오픈 소스 코드를 공유할 수 있는 주요 사이트들입니다:

1. GitHub

  • 설명: 가장 널리 사용되는 오픈 소스 코드 호스팅 플랫폼입니다. Git 저장소를 호스팅하며, 협업 도구, 코드 리뷰, 이슈 추적, CI/CD 파이프라인 등의 기능을 제공합니다.
  • 특징: 대규모 오픈 소스 프로젝트, 개인 및 팀 프로젝트 모두 지원, GitHub Actions를 통한 자동화, GitHub Pages를 통한 웹사이트 호스팅.

2. GitLab

  • 설명: Git 저장소 호스팅 및 DevOps 도구를 제공하는 플랫폼입니다. CI/CD, 코드 리뷰, 이슈 추적, 프로젝트 관리 등 다양한 기능을 지원합니다.
  • 특징: 무료 및 유료 플랜 제공, 자체 호스팅 가능, 통합된 DevOps 도구, 고급 CI/CD 기능.

3. Bitbucket

  • 설명: Atlassian에서 제공하는 Git 및 Mercurial 저장소 호스팅 서비스입니다. 코드 리뷰, 이슈 추적, CI/CD 파이프라인 등의 기능을 제공합니다.
  • 특징: Jira와 통합, 비공식 Git 및 Mercurial 지원, 기본적인 CI/CD 기능.

4. SourceForge

  • 설명: 오래된 오픈 소스 프로젝트 호스팅 플랫폼으로, Git, Mercurial, Subversion(SVN) 등을 지원합니다. 다양한 오픈 소스 프로젝트를 찾고 다운로드할 수 있습니다.
  • 특징: 프로젝트 웹사이트 생성, 다운로드 통계 제공, 사용자 리뷰 및 피드백 지원.

5. Codeberg

  • 설명: 비영리 오픈 소스 호스팅 플랫폼으로, Git 저장소를 호스팅하며, 사용자 친화적인 인터페이스와 데이터 보호를 강조합니다.
  • 특징: Git 호스팅, 오픈 소스 소프트웨어에 대한 지원, 개인정보 보호 및 투명성 강조.

6. Gitea

  • 설명: 경량화된 Git 호스팅 솔루션으로, 자체 호스팅을 위한 오픈 소스 프로젝트입니다. GitHub, GitLab과 유사한 기능을 제공하며, 설치 및 사용이 간편합니다.
  • 특징: 자체 호스팅 가능, 경량화 및 빠른 속도, 다양한 사용자 관리 기능.

7. FOSSHub

  • 설명: 오픈 소스 소프트웨어 다운로드를 위한 플랫폼으로, 다양한 오픈 소스 프로젝트의 배포를 지원합니다.
  • 특징: 소프트웨어 다운로드 및 배포 지원, 사용자 리뷰와 평가 제공.

8. Savannah

  • 설명: GNU 프로젝트와 관련된 오픈 소스 소프트웨어를 호스팅하는 플랫폼입니다. 자유 소프트웨어를 위한 리포지토리 및 개발 도구를 제공합니다.
  • 특징: GNU 프로젝트와의 통합, 자유 소프트웨어 개발에 중점.

9. Launchpad

  • 설명: Ubuntu 및 기타 오픈 소스 프로젝트를 위한 개발 및 호스팅 플랫폼입니다. 버그 추적, 코드 호스팅, 번역 도구 등을 제공합니다.
  • 특징: 버그 추적 시스템, 프로젝트 관리 도구, 사용자 커뮤니티와의 통합.

10. Gogs

  • 설명: 간단하고 빠르게 설치할 수 있는 Git 호스팅 솔루션으로, Gitea와 유사한 기능을 제공합니다. 자체 호스팅 환경을 제공하며, Git 저장소를 효율적으로 관리할 수 있습니다.
  • 특징: 경량화, 빠른 설치, 기본적인 Git 호스팅 기능.

이러한 플랫폼들은 각기 다른 특징과 강점을 가지고 있으며, 오픈 소스 프로젝트를 효과적으로 관리하고 공유할 수 있는 다양한 도구를 제공합니다. 자신의 프로젝트에 적합한 플랫폼을 선택하여 개발자들과 협업하고, 오픈 소스 커뮤니티와 소통해 보세요.

HTML 태그 사전

 
 

<!-- --> 주석(comment)을 정의함.
 
<!DOCTYPE> 해당 문서(document)의 타입을 정의함.
 
<a> 다른 콘텐츠와 연결되는 하이퍼링크(hyperlink)를 정의함.
 
<abbr> 축약형(abbreviation)이나 머리글자로만 된 단어(acronym)를 정의함.
 
<acronym> 머리글자로만 된 단어(acronym)를 정의함.
 
<address> 문서나 글의 저자 또는 회사와 연락할 수 있는 정보를 명시함.
 
<applet> 문서에 포함되는 애플릿(웹 페이지에 포함되어 작은 기능을 수행하는 프로그램)을 정의함.
 
<area> 이미지 맵(image-map)에서 하이퍼링크가 연결될 영역을 정의함.
 
<article> 해당 문서나 페이지 또는 사이트와는 완전히 독립적으로 구성할 수 있는 요소를 정의함.
 
<aside> 페이지의 다른 콘텐츠들과 약간의 연관성을 가지고 있지만 해당 콘텐츠들로부터 분리시킬 수 있는 콘텐츠로 구성된 페이지 영역을 정의함.
 
<audio> 음악이나 오디오 스트림과 같은 사운드를 정의함.
 
<base> 해당 문서의 모든 상대 주소(relative URL)에 대한 기본 URLtarget 속성값을 정의함.
 
<basefont> 해당 문서의 모든 텍스트에 대한 색상, 크기 및 폰트의 기본값을 정의함.
 
<bdi> 주위의 텍스트들과는 다른 방향으로 써지는 텍스트 영역을 정의함.
 
<bdo> 자식 요소의 텍스트 방향성(text directionality)을 정의함.
 
<big> 글자 크기가 큰 텍스트를 정의함.
 
<blockquote> 다른 출처로부터 인용된 영역을 정의함.
 
<body> 해당 문서의 콘텐츠 영역을 정의함.
 
<br> 행 바꿈(line-break)을 정의함.
 
<button> 클릭할 수 있는 버튼을 정의함.
 
<canvas> 자바스크립트와 같은 스크립트를 이용하여 그래픽 콘텐츠를 그릴 때 사용함.
 
<caption> 테이블의 캡션(caption)을 정의함.
 
<center> 가운데로 정렬되는 텍스트를 정의함.
 
<cite> 예술 작품과 같은 창작물의 제목을 정의함.
 
<code> 컴퓨터 코드(code)의 일부분을 나타냄.
 
<col> <colgroup> 요소에 속하는 각 열(column)의 속성을 정의함.
 
<colgroup> 테이블에서 서식 지정을 위해 하나 이상의 열을 그룹으로 묶을 때 사용함.
 
<data> 특정 콘텐츠에 기계가 읽을 수 있는(machine-readable) 형태의 값(value)을 덧붙여 나타낼 때 사용함.
 
<datalist> <input> 요소에서 사용하기 위한 옵션들의 리스트를 미리 정의함.
 
<dd> 용어와 그에 대한 설명을 리스트 형식으로 보여주는 <dl> 요소에서 설명(description) 부분을 정의함.
 
<del> 텍스트 한가운데 라인을 추가하여 문서에서 삭제된 텍스트를 표현함.
 
<details> 사용자가 직접 조작하여 보거나 숨길 수 있는 부가적인 세부사항(additional details)을 명시함.
 
<dfn> HTML에서 용어(term)의 정의를 나타냄.
 
<dialog> 대화 상자(dialog box)나 대화 윈도우(dialog window)를 정의함.
 
<dir> HTML 리스트(list)를 정의함.
 
<div> HTML 문서에서 특정 영역이나 구획을 정의함.
 
<dl> 용어와 그에 대한 설명을 리스트 형식으로 정의함.
 
<dt> 용어와 그에 대한 설명을 리스트 형식으로 보여주는 <dl> 요소에서 용어(term) 부분을 정의함.
 
<em> 강조된 텍스트를 표현함.
 
<embed> 외부 애플리케이션이나 대화형 콘텐츠를 포함시킬 수 있는 컨테이너를 정의함.
 
<fieldset> <form> 요소에서 연관된 요소들을 하나의 그룹으로 묶을 때 사용함.
 
<figcaption> <figure> 요소의 캡션(caption)을 정의함.
 
<figure> 삽화나 다이어그램, 사진 등과 같이 문서의 주요 흐름과는 독립적인 콘텐츠를 정의함.
 
<font> 텍스트의 폰트, 색상 그리고 크기를 정의함.
 
<footer> 문서나 특정 섹션의 푸터(footer)를 정의함.
 
<form> 사용자로부터 입력을 받을 수 있는 HTLM 입력 폼(form)을 정의함.
 
<frame> <frameset> 요소에 포함되는 하나의 프레임(frame)을 정의함.

<frameset> 문서의 레이아웃을 구성하기 위해 사용되는 프레임(frame)들의 집합을 정의함.
 
<h1> ~ <h6> HTML 문서에서 제목(headings)을 정의함.
 
<head> 해당 문서에 대한 정보인 메타데이터(metadata)의 집합을 정의함.
 
<header> 문서나 특정 섹션의 헤더(header)를 정의함.
 
<hr> 콘텐츠 내용에서 주제가 바뀔 때 사용할 수 있는 수평 가로선을 정의함.
 
<html> HTML 문서의 루트 요소(root element)를 정의함.
 
<i> 기본 텍스트와는 다른 분위기나 음성을 위한 텍스트 영역을 정의함.
 
<iframe> 인라인 프레임(inline frame)을 정의함.
 
<img> 이미지(image)를 정의함.
 
<input> 사용자로부터 입력을 받을 수 있는 입력 필드(input filed)를 정의함.
 
<ins> 텍스트 아래쪽에 라인을 추가하여 문서에 추가된 텍스트를 표현함.
 
<kbd> 키보드 입력을 나타냄.
 
<label> 사용자 인터페이스(UI) 요소의 라벨(label)을 정의함.
 
<legend> <fieldset> 요소의 캡션(caption)을 정의함.
 
<li> HTML 리스트(list)에 포함되는 아이템(item)을 정의함.
 
<link> 해당 문서와 외부 소스(external resource) 사이의 관계를 정의함.
 
<main> 해당 문서의 <body> 요소의 주 콘텐츠(main content)를 정의함.
 
<map> 클라이언트 사이드 이미지맵(client-side image-map)을 정의함.
 
<mark> 형광펜으로 칠한 것처럼 하이라이트된(highlighted) 텍스트를 정의함.
 
<meta> 해당 문서에 대한 정보인 메타데이터(metadata)를 정의함.
 
<meter> 분수 값이나 범위(gauge) 내에서 특정 스칼라 값이 어느 정도인지를 표현함.
 
<nav> 다른 페이지 또는 현재 페이지의 다른 부분과 연결되는 네비게이션 링크(navigation links)들의 집합을 정의함.
 
<noframes> 프레임(frame) 기능을 사용하지 않도록 설정했거나, 프레임 기능을 지원하지 않는 브라우저를 위한 별도의 콘텐츠를 정의함.
 
<noscript> 클라이언트 사이드 스크립트(client-side scripts)를 사용하지 않도록 설정했거나, 스크립트를 지원하지 않는 브라우저를 위한 별도의 콘텐츠를 정의함.
 
<object> 외부 리소스의 종류에 따라 문서 내에서 처리하는 방식을 변경할 수 있는 임베디드 객체(embedded object)를 정의함.
 
<ol> 순서가 있는 HTML 리스트(list)를 정의함.
 
<optgroup> 옵션 메뉴를 제공하는 드롭다운 리스트(drop-down list)에서 사용되는 옵션들의 그룹을 정의함.
 
<option> 옵션 메뉴를 제공하는 드롭다운 리스트(drop-down list)에서 사용되는 하나의 옵션을 정의함.
 
<output> 스크립트 등에 의해 수행된 계산의 결과나 사용자의 액션에 의한 결과를 나타냄.
 
<p> 문단(paragraph)을 정의함.
 
<param> <object> 요소에 의해 호출되는 플러그인의 매개변수(parameter)를 정의함.
 
<picture> <img> 요소의 다중 이미지 리소스(multiple image resources)를 위한 컨테이너를 정의함.
 
<pre> 미리 정의된 형식(preformatted)의 텍스트를 정의함.
 
<progress> 작업의 진행률을 나타냄.
 
<q> 짧은 인용구를 정의함.
 
<rp> 루비 주석을 지원하지 않는 브라우저를 위한 대체 내용을 정의함.
 
<rt> 루비 주석에서 발음이나 설명을 나타내는 윗첨자를 정의함.
 
<ruby> 해당 문자의 발음이나 설명을 작은 크기의 윗첨자로 알려주는 루비 주석(ruby annotation)을 정의함.
 
<s> 텍스트 한가운데 라인을 추가하여 더 이상 정확하지 않거나 관련이 없는 텍스트를 표현함.
 
<samp> 컴퓨터 프로그램의 샘플 또는 인용 출력(output)을 나타냄.
 
<script> 자바스크립트와 같은 클라이언트 사이드 스크립트(client-side scripts)를 정의함.
 
<section> HTML 문서에 포함된 독립적인 섹션(section)을 정의함.
 
<select> 옵션 메뉴를 제공하는 드롭다운 리스트(drop-down list)를 정의함.
 
<small> 글자 크기가 작은 텍스트를 정의함.
 
<source> <audio> 요소나 <video> 요소에서 사용할 수 있는 다중 미디어 자원(multiple media resources)을 정의함.
 
<span> HTML 문서에서 인라인 요소(inline-element)들을 하나로 묶을 때 사용함.
 
<strike> 텍스트 한가운데 라인을 추가할 때 사용함.
 
<strong> 해당 콘텐츠의 중요성이나 심각함, 긴급함 등을 강조함.
 
<style> 해당 HTML 문서의 스타일 정보를 정의함.
 
<sub> 아랫첨자(subscript) 텍스트를 표현함.
 
<summary> <details> 요소에 의해 생성되는 대화형 위젯에서 기본적으로 보이는 제목을 정의함.
 
<sup> 윗첨자(superscript) 텍스트를 표현함.
 
<svg> SVG 그래픽을 위한 컨테이너를 정의함.
 
<table> 데이터를 포함하는 셀(cell)들의 행과 열로 구성된 2차원 테이블을 정의함.
 
<tbody> 테이블에서 내용 콘텐츠(body content)들을 하나의 그룹으로 묶을 때 사용함.
 
<td> 테이블에서 하나의 셀(cell)을 정의함.
 
<template> 추가되거나 복사될 수 있는 HTML 요소들을 정의함.
 
<textarea> 사용자가 여러 줄의 텍스트를 입력할 수 있는 텍스트 입력 영역을 정의함.
 
<tfoot> 테이블에서 푸터 콘텐츠(footer content)들을 하나의 그룹으로 묶을 때 사용함.
 
<th> 테이블에서 제목이 되는 헤더 셀(header cell)들을 정의함.
 
<thead> 테이블에서 헤더 콘텐츠(header content)들을 하나의 그룹으로 묶을 때 사용함.
 
<time> 사람이 읽을 수 있는(human-readable) 형태의 날짜와 시간 데이터를 정의함.
 
<title> 해당 문서의 제목(title)을 정의함.
 
<tr> 테이블에서 셀들로 이루어진 하나의 행(row)을 정의함.
 
<track> <audio><video> 요소와 같은 미디어 요소를 위한 텍스트 트랙(track)을 정의함.
 
<tt> 텔레타이프 텍스트(teletype text)를 나타냄.
 
<u> 철자가 틀린 단어나 중국어의 고유 명사처럼 문체상 일반적인 텍스트와는 달라야만 하는 텍스트를 표현함.
 
<ul> 순서가 없는 HTML 리스트(list)를 정의함.
 
<var> 변수(variable)를 정의함.
 
<video> 무비 클립(movie clip)이나 비디오 스트림(video stream)과 같은 비디오를 정의함.
 
<wbr> 단어 중간에서 행바꿈될 수 있는(line-break) 위치를 정의함.
 
 

HTML5 요소


멀티미디어 파일 형식

HTML5 이전까지는 웹 브라우저마다 어떤 종류의 멀티미디어 파일을 지원할지 각자 다른 방식으로 처리해 왔습니다. 하지만 HTML5에서는 플래시와 같은 외부 플러그인의 도움 없이도 멀티미디어 파일을 간단히 사용할 수 있게 되었습니다. 웹 브라우저는 파일의 타입(type)을 파일의 확장자로 판단합니다. 만약에 확장자가 .html인 파일을 보면, 웹 브라우저는 이 파일을 HTML 파일로써 다루게 될 것입니다. 비디오(video)나 사운드(sound)와 같은 멀티미디어 요소들은 멀티미디어 파일에 저장됩니다.
HTML5 표준이 공식적으로 지원하는 비디오 파일 형식은 MP4, WebM, OGV 뿐입니다.
 

오디오(audio) 파일 형식

HTML5 표준이 공식적으로 지원하는 오디오 파일 형식은 MP3, WAV, Ogg 뿐입니다.
 

비디오(video) 요소

HTML5 이전에는 웹 페이지에서 비디오(video)를 보여주기 위한 표준안이 없었습니다. 따라서 비디오를 삽입하기 위해서는 플래시(flash)와 같은 외부 플러그인(plug-in)에 의존해야만 했습니다. 하지만 HTML5에서는 <video>태그를 이용하여 웹 페이지에 비디오를 삽입하는 표준화된 방식을 제공합니다.
 

비디오 요소의 속성

<video style="width:576; height:360" controls>
<source src="/examples/media/sample_video_mp4.mp4" type="video/mp4">
<source src="/examples/media/sample_video_ogg.ogg" type="video/ogg">
이 문장은 사용자의 웹 브라우저가 video 요소를 지원하지 않을 때 나타납니다!
</video>

control 속성은 재생, 정지 및 소리의 조절 등 비디오의 기본적인 동작을 조절할 수 있는 패널을 생성합니다. 또한, heightwidth 속성을 이용하여 웹 브라우저에 삽입되는 비디오의 크기를 명시할 수 있습니다. 웹 브라우저는 여러 개의 <source>태그 중 위쪽에서부터 순서대로 가장 먼저 인식되는 파일의 타입과 주소를 사용합니다. <video>태그 사이에 존재하는 텍스트는 해당 웹 브라우저가 <video>태그를 지원하지 않을 때만 화면에 표시됩니다.

 

autoplay 속성은 웹 페이지가 로드(load) 될 때 비디오를 자동으로 재생시켜 줄지 않을지를 설정합니다.

<video style="width:576; height:360" controls autoplay>
<source src="/examples/media/sample_video_mp4.mp4" type="video/mp4">
<source src="/examples/media/sample_video_ogg.ogg" type="video/ogg">
이 문장은 사용자의 웹 브라우저가 video 요소를 지원하지 않을 때 나타납니다!
</video>
 

loop 속성을 설정하면, 비디오의 재생이 끝나도 계속적으로 반복해서 비디오를 재생합니다.

<video style="width:576; height:360" controls loop>
<source src="/examples/media/sample_video_mp4.mp4" type="video/mp4">
<source src="/examples/media/sample_video_ogg.ogg" type="video/ogg">
이 문장은 사용자의 웹 브라우저가 video 요소를 지원하지 않을 때 나타납니다!
</video>
 

<track>태그는 비디오가 재생될 때 보일 자막이나 캡션 파일을 명시할 때 사용합니다.

<video style="width:576; height:360" controls>
<source src="/examples/media/sample_video_mp4.mp4" type="video/mp4">
<source src="/examples/media/sample_video_ogg.ogg" type="video/ogg">
<track kind="subtitles" src="sample_subtitle_en.vtt" srclang="en" label="English">
<track kind="subtitles" src="sample_subtitle_fr.vtt" srclang="fr" label="Francais">
이 문장은 사용자의 웹 브라우저가 video 요소를 지원하지 않을 때 나타납니다!
</video>
 

kind 속성은 자막 문자열의 타입을 명시하며, srclang 속성은 해당 문자열의 언어 설정을 명시합니다.label 속성은 사용자가 보게 될 라벨을 명시합니다.

 

HTML5 비디오 파일 형식

HTML5 표준이 공식적으로 지원하는 비디오 파일 형식은 MP4, WebM, OGV 뿐입니다.

 
- MP4 : Moving Picture Experts Group에 의해 개발되었으며, 비디오 코덱으로는 H.268, 오디오 코덱으로는 ACC를 사용합니다. 적은 용량으로도 고품질의 영상 및 음성을 구현할 수 있어 인터넷을 통한 스트리밍에 많이 활용되는 파일 형식입니다.
- WebM : 구글의 지원으로 개발된 개방형 공개 멀티미디어 파일 형식이며, 비디오 코덱으로는 VP8, 오디오 코덱으로는 Vorbis를 사용합니다.
- OGV : Theora Ogg라고도 불리며, Xiph 재단에 의해 MP3의 대안으로 개발된 특허권으로 보호되지 않는 개방형 공개 멀티미디어 파일 형식입니다. 비디오 코덱으로는 Theora, 오디오 코덱으로는 Vorbis를 사용합니다.
 

오디오(audio) 요소

HTML5 이전에는 웹 페이지에서 오디오(audio)를 들려주기 위한 표준안이 없었습니다. 따라서 비디오를 삽입하기 위해서는 플래시(flash)와 같은 외부 플러그인(plug-in)에 의존해야만 했습니다. 하지만 HTML5에서는 <audio>태그를 이용하여 웹 페이지에 오디오를 삽입하는 표준화된 방식을 제공합니다.
 

오디오 요소의 속성

<audio controls>
<source src="/examples/media/sample_audio_ogg.ogg" type="audio/ogg">
<source src="/examples/media/sample_audio_mp3.mp3" type="audio/mp3">
이 문장은 사용자의 웹 브라우저가 audio 요소를 지원하지 않을 때 나타납니다!
</audio>

control 속성은 재생, 정지 및 소리의 조절 등 오디오의 기본적인 동작을 조절할 수 있는 패널을 생성합니다. 웹 브라우저는 여러 개의 <source>태그 중 위쪽에서부터 순서대로 가장 먼저 인식되는 파일의 타입과 주소를 사용합니다 <audio>태그 사이에 존재하는 텍스트는 해당 웹 브라우저가 <audio>태그를 지원하지 않을 때만 화면에 표시됩니다.

 

autoplay 속성은 웹 페이지가 로드(load) 될 때 음악을 자동으로 재생시켜 줄지 않을지를 설정합니다.

<audio controls autoplay>
<source src="/examples/media/sample_audio_ogg.ogg" type="audio/ogg">
<source src="/examples/media/sample_audio_mp3.mp3" type="audio/mp3">
이 문장은 사용자의 웹 브라우저가 audio 요소를 지원하지 않을 때 나타납니다!
</audio>
 

loop 속성을 설정하면 오디오의 재생이 끝나도 계속적으로 반복해서 오디오를 재생합니다.

<audio controls loop>
<source src="/examples/media/sample_audio_ogg.ogg" type="audio/ogg">
<source src="/examples/media/sample_audio_mp3.mp3" type="audio/mp3">
이 문장은 사용자의 웹 브라우저가 audio 요소를 지원하지 않을 때 나타납니다!
</audio>
 

HTML5 오디오 파일 형식

HTML5 표준이 공식적으로 지원하는 오디오 파일 형식은 MP3, WAV, Ogg 뿐입니다.

 
- MP3 : Moving Picture Experts Group에 의해 개발되었으며, MPEG-1의 오디오 규격으로 개발된 손실 압축형 파일 형식입니다.
- WAV : IBMMicrosoft에 의해 개발되었으며, 개인용 PC에서 오디오를 재생하기 위한 IBMMicrosoft의 표준 오디오 파일 형식입니다.
- Ogg : Xiph 재단에 의해 개발되었으며, MP3의 대안으로 개발된 특허권으로 보호되지 않는 개방형 공개 멀티미디어 파일 형식입니다.
 

플러그인(Plug-in)

HTML 플러그인이란 웹 브라우저의 표준 기능을 확장해 주는 프로그램을 의미합니다. 가장 널리 알려진 플러그인으로는 Java Applet, Flash Player, Pdf Reader 등이 있습니다. 이러한 플러그인은 object 요소나 embed 요소를 사용하여 HTML 문서에 추가할 수 있습니다.

 

object 요소

object 요소는 HTML 문서에 삽입할 객체(object)를 명시하는데 사용합니다.이 요소는 모든 웹 브라우저에서 동작하며, 객체뿐만 아니라 또 다른 HTML 문서를 삽입할 수도 있습니다.

<object data="/examples/media/sample_plugins_pdf.pdf" style="width:100%; height:700px"></object>

또한, object 요소는 이미지를 삽입할 때에도 사용할 수 있습니다.

<object data="/examples/images/img_flower.png"></object>
 

embed 요소

embed 요소는 HTML 문서에 삽입할 객체(object)를 명시하는데 사용합니다. embed 요소는 오래전부터 사용되어 왔지만, HTML5 이전까지는 HTML 표준이 아니었습니다.이 요소는 모든 웹 브라우저에서 동작하며, 객체뿐만 아니라 HTML 문서를 삽입할 수도 있습니다.

<embed src="/examples/media/sample_plugins_pdf.pdf" style="width:100%; height:700px">

또한, embed 요소는 이미지를 삽입할 때에도 사용할 수 있습니다.

<embed src="/examples/images/img_flower.jpg" style="width:350px; height:263px">

embed 요소는 HTML5 이전까지는 HTML 표준이 아니었으므로, HTML5에서는 유효하지만, HTML4에서는 유효하지 않습니다.

 

canvas 요소

canvas 요소는 웹 페이지에 그래픽을 그려주는 쉽고 강력한 방법을 제공합니다.이 요소는 그래픽을 위한 컨테이너(container) 역할만을 수행합니다.따라서 실제로 그래픽을 그리기 위해서는 자바스크립트(JavaScript) 등의 스크립트 언어를 이용해야 합니다.

 

canvas 요소의 속성

canvas 요소는 테두리(border)도 콘텐츠(content)도 없는 웹 페이지 내의 단순한 사각형의 공간입니다. 그러므로 반드시 style 속성을 이용하여 캔버스의 크기를 설정해 주어야 합니다canvas 요소를 스크립트(script)에서 접근하기 위해서는 해당 요소의 id 속성을 이용하면 됩니다.

<canvas id="drawCanvas" style="width:300px; height:200px; border: 1px solid #993300;">
이 문장은 사용자의 웹 브라우저가 canvas 요소를 지원하지 않을 때 나타납니다!
</canvas>
 

CSS 좌표 체계

HTML 그래픽 요소에서 사용하는 x, y, z좌표는 다음 그림과 같은 좌표 체계를 따릅니다.CSS 좌표 체계에서 기준점은 브라우저의 왼쪽 상단이 됩니다. 또한, 각 좌표축의 화살표 방향이 양의 방향이며, 반대쪽이 음의 방향을 가리킵니다.

 

사각형 그리기

캔버스를 정의한 후에는 스크립트를 이용하여 canvas 요소에 그래픽을 그릴 수 있습니다.다음 예제는 스크립트를 이용하여 canvas 요소에 사각형을 그리는 예제입니다.

context.strokeRect(10, 10, 250, 130);
context.fillStyle = "rgba(255,0,0,1)";
context.fillRect(20, 20, 200, 100);
context.clearRect(30, 30, 150, 50);
 

위의 예제에서 사각형을 그리는 데 사용된 함수들은 다음 순서대로 인수를 전달받습니다.

1. 사각형의 왼쪽 위 꼭짓점의 x좌표
2. 사각형의 왼쪽 위 꼭짓점의 y좌표
3. 사각형의 너비
4. 사각형의 높이
 

선 그리기

다음 예제는 스크립트를 이용하여 canvas 요소에 선을 그리는 예제입니다.

context.moveTo(0, 0);
context.lineTo(300, 100);
context.lineTo(150, 150);
context.stroke();

이러한 선 그리기를 이용하면 도형을 만들 수도 있으며, 만든 도형에 색을 채울 수도 있습니다.

context.moveTo(0, 0);
context.lineTo(300, 200);
context.lineTo(150, 0);
context.lineTo(0, 0);
context.fillStyle = "#0099FF";
context.fill();
context.stroke();

위의 예제에서는 우선 moveTo() 함수와 lineTo() 함수를 이용하여 선 그리기로 도형을 만듭니다. 그 후 fillStyle() 함수로 원하는 색상을 지정하고나서, fill() 함수를 사용하여 만든 도형에 색상을 칠하게 됩니다.

 

원 그리기

다음 예제는 스크립트를 이용하여 canvas 요소에 원을 그리는 예제입니다.

context.beginPath();
context.arc(150, 100, 50, 0, 2 * Math.PI);
context.stroke();

위의 예제에서 사용된 arc() 함수는 다음 순서대로 인수를 전달받습니다.1. 원의 중심 x좌표
2. 원의 중심 y좌표
3. 원의 반지름
4. 원호를 그리기 시작할 각도
5. 원호 그리기를 마칠 각도
이러한 원 그리기를 이용하면 원호 또한 간단히 만들 수 있습니다.

context.beginPath();
context.moveTo(100, 100);
context.arc(100, 100, 120, 0, 45 * Math.PI / 180);
context.closePath();
context.stroke();

Math.PI는 원의 원주를 지름으로 나눈 비율(원주율) 값으로 대략 3.14159를 나타냅니다.

 

텍스트(text) 그리기

다음 예제는 스크립트를 이용하여 canvas 요소에 텍스트를 그리는 예제입니다.

context.font = "40px Arial";
context.fillText("CANVAS", 50, 90);
context.strokeText("HTML5", 80, 150);

위의 예제에서 텍스트를 그리는 데 사용된 함수들은 다음 순서대로 인수를 전달받습니다.1. canvas 요소에 그릴 텍스트의 내용
2. 텍스트의 왼쪽 위 꼭짓점의 x좌표
3. 텍스트의 왼쪽 위 꼭짓점의 y좌표

 

그래디언트(gradient) 그리기

다음 예제는 스크립트를 이용하여 canvas 요소에 선형 그래디언트를 그리는 예제입니다.

 
var gradient = context.createLinearGradient(0, 0, 200, 0);
gradient.addColorStop(0, "#FFCC00");
gradient.addColorStop(1, "#FFCCCC");
context.fillStyle = gradient;
context.font = "45px Arial black";
context.fillText("CANVAS", 15, 120);
 

위의 예제에서 사용된 createLinearGradient() 함수는 다음 순서대로 인수를 전달받습니다.1. 선형 그래디언트가 시작하는 점의 x좌표
2. 선형 그래디언트가 시작하는 점의 y좌표
3. 선형 그래디언트가 끝나는 점의 x좌표
4. 선형 그래디언트가 끝나는 점의 y좌표

이렇게 createLinearGradient() 함수를 사용하여 선형 그래디언트를 생성합니다. 이때 addColorStop() 함수를 사용하여 그래디언트에 사용될 색상을 명시할 수 있습니다. 또한, 이렇게 생성된 그래디언트는 fillStyle이나 strokeStyle 속성을 이용하여 그릴 수 있습니다.

 

다음 예제는 스크립트를 이용하여 canvas 요소에 원형 그래디언트를 그리는 예제입니다.

var gradient = context.createRadialGradient(100, 100, 200, 150, 150, 30);
gradient.addColorStop(0, "black");
gradient.addColorStop(1, "white");
context.fillStyle = gradient;
context.fillRect(0, 0, 300, 300);

위의 예제에서 사용된 createRadialGradient() 함수는 다음 순서대로 인수를 전달받습니다.1. 원형 그래디언트가 시작하는 원의 중심 x좌표
2. 원형 그래디언트가 시작하는 원의 중심 y좌표
3. 원형 그래디언트가 시작하는 원의 반지름
4. 원형 그래디언트가 끝나는 원의 중심 x좌표
5. 원형 그래디언트가 끝나는 원의 중심 y좌표
6. 원형 그래디언트가 끝나는 원의 반지름

createLinearGradient() 함수와 createRadialGradient() 함수는 익스플로러 8과 그 이전 버전에서 지원하지 않습니다.

 

이미지 그리기

다음 예제는 스크립트를 이용하여 canvas 요소에 이미지를 그리는 예제입니다.

<p><button onclick="drawImage()">이미지 그리기</button></p>
...
<script>
function drawImage() {
var srcImg = document.getElementById("Monalisa");
context.drawImage(srcImg, 10, 10);
}
</script>

위의 예제에서 사용된 drawImage() 함수는 다음 순서대로 인수를 전달받습니다.1. canvas 요소에 그릴 이미지의 주소
2. 이미지의 왼쪽 위 꼭짓점의 x좌표
3. 이미지의 왼쪽 위 꼭짓점의 y좌표

 

svg 요소

svg 요소는 Scalable Vector Graphics를 의미하며, XML 기반의 W3C 그래픽 표준 권고안입니다. 기존에 사용해 왔던 canvas 요소로는 벡터(vector) 이미지를 표현할 수 없었습니다. 하지만 svg 요소는 픽셀 기반인 웹 페이지에서 픽셀의 영향을 받지 않는 벡터 이미지를 표현할 수 있게 해줍니다. 따라서 이 요소는 도표나 그래프 등 벡터 기반의 다이어그램(diagram)를 표현하는 데 매우 효과적입니다.

 

사각형 그리기

다음 예제는 rect 요소를 사용하여 사각형을 그리는 예제입니다.

<svg width="200" height="150">
<rect width="200" height="150" stroke="orange" stroke-width="5" fill="yellow"/>
이 문장은 사용자의 웹 브라우저가 svg 요소를 지원하지 않을 때 나타납니다!
</svg>

위와 같이 각각의 속성을 사용하여 설정할 수도 있으며, 다음 예제와 같이 style 속성을 사용하여 한 번에 설정할 수도 있습니다.

<svg width="200" height="150">
<rect width="200" height="150" style="stroke:orange; stroke-width:5; fill:yellow; opacity:1;"/>
</svg>
rect 요소에 x, y, rx, ry 속성을 추가하여 모서리가 둥근 사각형을 그릴 수 있습니다.
<svg width="250" height="200">
<rect width="200" height="150" x="20" y="20" rx="20" ry="20"
stroke="orange" stroke-width="5" fill="yellow"/>
</svg>
 

선 그리기

다음 예제는 line 요소를 사용하여 선을 그리는 예제입니다.

<svg width="250" height="200">
<line x1="50" y1="50" x2="200" y2="150" stroke="orange" stroke-width="5"/>
</svg>
 

원 그리기

다음 예제는 circle 요소를 사용하여 원을 그리는 예제입니다.

<svg width="300" height="300">
<circle cx="150" cy="120" r="100" stroke="orange" stroke-width="5" fill="yellow"/>
</svg>
 

타원 그리기

다음 예제는 ellipse 요소를 사용하여 타원을 그리는 예제입니다.

<svg width="300" height="300">
<ellipse cx="150" cy="100" rx="120" ry="70" stroke="orange" stroke-width="5" fill="yellow"/>
</svg>
 

다각형 그리기

다음 예제는 polygon 요소를 사용하여 별모양의 다각형을 그리는 예제입니다.

<svg width="300" height="300">
<polygon points="10,100 190,100 30,200 100,40 170,200"
stroke="orange" stroke-width="5" fill="yellow"/>
</svg>

points 속성은 다각형을 이루는 각 꼭짓점의 x좌표와 y좌표를 명시합니다. 이때 첫 번째 꼭짓점부터 시작하여 마지막 꼭짓점까지 차례대로 선으로 연결되어 다각형을 표현하게 됩니다.

 

Canvas vs SVG

canvas 요소와 svg 요소는 거의 같은 결과물을 얻을 수 있는 비슷한 동작을 하는 요소입니다.어떤 경우에는 canvas 요소를 사용하는 것이 더 나으며, 어떤 경우에는 svg 요소를 사용하는 것이 더 나은 경우가 있습니다.

 

렌더링(rendering)이란 프로그램을 사용하여 모델로부터 영상이나 화면을 만들어내는 과정을 가리킵니다. 따라서 렌더링 시간이란 코드를 실행하여 그 결과가 화면에 표시되는 시간을 의미합니다.

- canvas 요소의 성능은 화면이 작거나, 픽셀 수가 많을 경우(>10k)에 좋습니다.- svg 요소의 성능은 화면이 크거나, 픽셀 수가 적을 경우(<10k)에 좋습니다.따라서 각 작업 환경에 맞는 그래픽 요소를 선택하여 사용하는 것이 가장 좋습니다.

 

작업 종류에 따른 선택의 기준

- canvas 요소는 복잡하고 고성능의 애니메이션(animation) 작업이나 동영상 조작 등의 작업에 잘 어울립니다.- svg 요소는 고품질의 문서 작업이나 정적 이미지의 조작 작업 등에 잘 어울립니다.따라서 각 작업 종류에 맞는 그래픽 요소를 선택하여 사용하는 것이 가장 좋습니다.

 

geolocation API

geolocation API는 사용자의 현재 위치 정보를 가져올 때 사용하는 자바스크립트 API입니다.
사용자의 위도 및 경도에 관한 정보는 자바스크립트를 이용해 웹 서버로 전송됩니다. 이것을 이용하면 사용자의 위치를 지도에 표시하거나, 사용자 근처의 상점을 찾아주는 등의 위치기반 서비스를 할 수 있습니다. 하지만 이러한 정보는 사용자의 사생활을 침해할 가능성이 높으므로, 사용자의 동의 없이는 사용할 수 없도록 하고 있습니다.
크롬 50.0 버전부터는 https와 같은 보안 프로토콜에서만 geolocation API가 동작하도록 허용하고 있습니다.
 

getCurrentPosition() 메소드

getCurrentPosition() 메소드를 이용하면 사용자의 위치에 대한 위도와 경도값을 얻을 수 있습니다.이 메소드의 첫 번째 인수로는 가져온 사용자의 위치 정보를 출력하는 함수가 들어갑니다.

function findLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showYourLocation);
} else {
loc.innerHTML = "이 문장은 사용자의 웹 브라우저가 Geolocation API를 지원하지 않을 때 나타납니다!";
}
}

이 메소드의 두 번째 인수로는 위치 정보에 관한 오류를 처리하는 함수가 들어갑니다.

function showErrorMsg(error) {
switch(error.code) {
case error.PERMISSION_DENIED:
loc.innerHTML = "이 문장은 사용자가 Geolocation API의 사용 요청을 거부했을 때 나타납니다!"
break;
case error.POSITION_UNAVAILABLE:
loc.innerHTML = "이 문장은 가져온 위치 정보를 사용할 수 없을 때 나타납니다!"
break;
case error.TIMEOUT:
loc.innerHTML = "이 문장은 위치 정보를 가져오기 위한 요청이 허용 시간을 초과했을 때 나타납니다!"
break;
case error.UNKNOWN_ERROR:
loc.innerHTML = "이 문장은 알 수 없는 오류가 발생했을 때 나타납니다!"
break;
}
}

이처럼 가져온 사용자의 위치 정보를 구글 맵을 통해 표시할 수 있습니다.

function showYourLocation(position) {
var userLat = position.coords.latitude;
var userLng = position.coords.longitude;
var imgUrl = "http://maps.googleapis.com/maps/api/staticmap?center=" + userLat + "," + userLng + "&zoom=15&size=500x400&sensor=false";
document.getElementById("mapLocation").innerHTML = "<img src='"+imgUrl+"'>";
}

위의 예제처럼 단순한 이미지로 표시하는 것이 아닌 구글 맵 스크립트를 이용한 연동도 가능합니다.

function showYourLocation(position) {
var userLat = position.coords.latitude;
var userLng = position.coords.longitude;
var userLocation = new google.maps.LatLng(userLat, userLng);
loc = document.getElementById("mapLocation");
loc.style.width = '500px';
loc.style.height = '400px';
var mapOptions = {
center: userLocation,
zoom: 15,
mapTypeId: google.maps.MapTypeId.ROADMAP,
mapTypeControl: false,
navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL}
}
var map = new google.maps.Map(loc, mapOptions);
var marker = new google.maps.Marker({position:userLocation,map:map,title:"여기가 현재 위치입니다!"});
}
 

드래그 앤 드롭(drag and drop) API

드래그 앤 드롭 API는 웹 페이지 내의 요소를 사용자가 자유롭게 드래그할 수 있도록 설정해줍니다. HTML5 이전에 이와 같은 기능을 구현하기 위해서는 엄청나게 많고 복잡한 스크립트를 작성해야 했습니다. 하지만 HTML5에서는 드래그 앤 드롭(drag and drop) 기능이 표준 권고안에 포함되어 간단하게 사용할 수 있게 되었습니다. 현재 주요 웹 브라우저들은 모두 이 기능을 지원하며, 따라서 웹 페이지 내의 모든 요소는 드래그될 수 있습니다.

 

드래그 앤 드롭 이벤트

마우스로 객체(object)를 드래그해서 놓을 때까지 여러 단계의 이벤트가 순차적으로 발생하게 됩니다.
 

DataTransfer 객체

드래그 앤 드롭 이벤트를 위한 모든 이벤트 리스너 메소드(event listener method)DataTransfer 객체를 반환합니다. 이렇게 반환된 DataTransfer 객체는 드래그 앤 드롭 동작에 관한 정보를 가지고 있게 됩니다.
 

draggable 속성

웹 페이지 내의 모든 요소는 draggable 속성을 사용하여 드래그될 수 있는 객체(draggable object)로 변환될 수 있습니다.

 

ondragstart 속성

드래그될 수 있는 객체로 만든 후에는 ondragstart 속성을 통해 DataTransfer 객체의 setData() 메소드를 호출합니다. setData() 메소드는 드래그되는 대상 객체의 데이터(data)와 타입(data type)을 설정합니다.
 

ondragover 속성

ondragover 속성은 드래그되는 대상 객체가 어느 요소 위에 놓일 수 있는지를 설정합니다.
기본적으로 HTML 요소는 다른 요소의 위에 위치할 수 없습니다. 따라서 다른 요소 위에 위치할 수 있도록 만들기 위해서는 놓일 장소에 있는 요소의 기본 동작을 막아야만 합니다. 이 작업을 event.preventDefault() 메소드를 호출하는 것만으로 간단히 설정할 수 있습니다.
 

ondrop 속성

드래그하던 객체를 놓으면 drop 이벤트가 발생합니다.ondrop 속성을 이용하여 drop 이벤트에 대한 동작을 설정할 수 있습니다.

function dragEnter(ev) { ev.preventDefault(); }
function drag(ev) { ev.dataTransfer.setData("text", ev.target.id); }
function drop(ev) {
ev.preventDefault();
var data = ev.dataTransfer.getData("text");
ev.target.appendChild(document.getElementById(data));
}
 

웹 스토리지(web storage) API

웹 스토리지 API는 기존 쿠키(cookie)의 문제점을 극복하기 위해 웹 브라우저가 직접 데이터(data)를 저장할 수 있게 해줍니다.HTML5 이전에는 응용 프로그램이 데이터를 서버에게 요청할 때마다 매번 쿠키(cookie)라는 곳에 그 정보를 저장합니다. 하지만 웹 스토리지는 사용자 측에서 좀 더 많은 양의 정보를 안전하게 저장할 수 있도록 해줍니다. 웹 스토리지는 최소 5MB 이상의 많은 공간을 가지고 있으며, 이 정보는 절대 서버로 전송되지 않습니다. 이러한 웹 스토리지는 오리진(origin)마다 단 하나씩만 존재합니다. 오리진(origin)이란 도메인(domain)과 프로토콜(protocol)의 한 쌍으로 이루어진 식별자입니다. 따라서 하나의 오리진에 속하는 모든 웹 페이지는 같은 데이터(data)를 저장하며 또한 같은 데이터에 접근할 수 있습니다.

 

웹 스토리지 지원 여부 확인

웹 스토리지를 사용하기 전에, 우선 사용자의 웹 브라우저가 이를 지원하는지 안 하는지 확인해야 합니다.

if (typeof(Storage) !== "undefined") {
// web storage를 위한 코드 부분
} else {
// web storage를 지원하지 않는 브라우저를 위한 안내 부분
}
 

웹 스토리지 객체

웹 스토리지 API는 사용자가 데이터를 저장할 수 있도록 두 가지 객체를 제공합니다.

- sessionStorage 객체 : 하나의 세션(session)만을 위한 데이터를 저장하는 객체
- localStorage 객체 : 보관 기한이 없는 데이터를 저장할 수 있는 객체
 

sessionStorage 객체

sessionStorage 객체는 하나의 세션(session)만을 위한 데이터를 저장합니다.따라서 사용자가 브라우저 탭이나 창을 닫으면 이 객체에 저장된 데이터는 사라집니다.

function clickCounter() {
if(typeof(Storage) !== "undefined") {
if (sessionStorage.clickcount) {
sessionStorage.clickcount = Number(sessionStorage.clickcount) + 1;
} else {
sessionStorage.clickcount = 1;
}
document.getElementById("counter").innerHTML = "카운터의 현재 횟수는 " + sessionStorage.clickcount + "입니다!";
}
}
 

localStorage 객체

localStorage 객체는 보관 기한이 없는 데이터를 저장합니다.따라서 브라우저 탭이나 창이 닫히거나, 컴퓨터를 재부팅 해도 저장된 데이터는 없어지지 않습니다.

function clickCounter() {
if(typeof(Storage) !== "undefined") {
if (localStorage.clickcount) {
localStorage.clickcount = Number(localStorage.clickcount) + 1;
} else {
localStorage.clickcount = 1;
}
document.getElementById("counter").innerHTML = "카운터의 현재 횟수는 " + localStorage.clickcount + "입니다!";
}
}
 

application cache API

application cache API는 웹 응용 프로그램을 캐시(cache) 하여, 인터넷 접속 없이 사용자가 접근할 수 있게 해줍니다. 따라서 application cache를 사용하면 웹 응용 프로그램의 오프라인 버전을 쉽게 만들 수 있습니다.application cache를 사용해서 생기는 장점은 다음과 같습니다.

- 오프라인 접속 : 사용자가 웹 응용 프로그램을 오프라인(off-line)으로도 사용할 수 있습니다.
- 속도 : 캐시(cache)된 자원은 빠르게 로드(load)할 수 있습니다.
- 서버의 부하 감소 : 웹 브라우저는 서버의 자원에 변동이 있을 때만 자원을 갱신하면 됩니다.
 

cache manifest 파일

application cache를 사용하기 위해서는 먼저 cache manifest 파일을 작성해야 합니다.cache manifest 파일은 웹 브라우저에 캐시(cache) 해야 할 파일과 캐시하지 말아야 할 파일을 알려줍니다.이러한 mainfest 파일은 다음과 같이 세 개의 세션(session)으로 이루어집니다.

- CACHE MANIFEST : 처음 다운로드한 이후에 계속 캐시할 파일들을 기록합니다.
- NETWORK : 서버와의 접속이 필요한 파일들을 기록하며, 이 파일들은 절대로 캐시되지 않습니다.
- FALLBACK : 파일에 접속할 수 없을 때에 대체할 파일들을 기록합니다.
 

캐시(cache)의 갱신

웹 브라우저는 다음과 같은 경우가 발생하면 캐시(cache)의 정보를 갱신하게 됩니다.- 사용자가 웹 브라우저의 캐시를 강제로 지웠을 경우
- application cache가 프로그램 때문에 갱신됐을 경우
- cache manifest 파일이 수정됐을 경우

CACHE MANIFEST
# 2016-03-22 v1.0.1
test.html
test.css
test.js
 
NETWORK:
test.jpg
 
FALLBACK:
/ offline.html

한 번 캐시 되면 서버상의 파일을 수정해도, 웹 브라우저는 사용자 측에 캐시 되어 있는 버전의 파일만을 보여줍니다. 따라서 서버상의 파일을 수정한 후에는 반드시 웹 브라우저가 캐시를 갱신하도록 만들어야 합니다. 이때 가장 많이 사용되는 방법이 cache manifest 파일 내의 주석 부분을 수정하는 것입니다. 일반적으로 갱신 날짜 및 버전 정보를 주석으로 표시하고, 이 부분을 수정하여 웹 브라우저가 캐시를 갱신하도록 유도합니다.

 

web worker API

웹 페이지에서 스크립트가 실행되면, 해당 웹 페이지는 실행 중인 스크립트가 종료될 때까지 응답 불가 상태가 됩니다. web worker는 스크립트가 웹 페이지의 성능에 영향을 미치지 않도록 백그라운드에서 동작하게 해주는 자바스크립트입니다. , web worker는 스크립트의 다중 스레드(multi-thread)를 지원합니다. 따라서 사용자가 웹 페이지를 이용하면서도, 동시에 시간이 오래 걸리는 자바스크립트 작업도 병행할 수 있도록 해줍니다.

 

web worker 지원 여부 확인

web worker를 사용하기 전에, 우선 사용자의 웹 브라우저가 이를 지원하는지 안 하는지 확인해야 합니다.

if (typeof(Worker) !== "undefined") {
// web worker를 위한 코드 부분 }
else {
// web worker를 지원하지 않는 브라우저를 위한 안내 부분
}
 

web worker 파일 생성

web worker의 동작을 확인하기 위해 소수를 찾는 외부 자바스크립트 파일을 만듭니다.

var n = 1;
search: while (true) {
n += 1;
for (var i = 2; i <= Math.sqrt(n); i += 1)
if (n % i == 0)
continue search;
postMessage(n);
}

위의 예제에서 postMessage() 메소드는 HTML 문서에 결과를 전달하기 위해 사용합니다.web worker 객체 생성
위에서 만든 web worker 파일을 불러올 HTML 파일을 만듭니다.

if(typeof(webworker) == "undefined") {
webworker = new Worker("/examples/web_worker.js");
}

위의 예제는 web worker 파일이 존재하지 않으면, 새로운 web worker 객체를 만들어 줍니다.

 

worker 객체와의 연결

onmessage 이벤트 리스너(event listener)를 통해 web worker 파일과 메시지를 주고받을 수 있습니다.

webworker.onmessage = function(event) {
document.getElementById("result").innerHTML = event.data;
};

위의 예제에서 web worker 파일이 메시지를 보내면 해당 이벤트 리스너(event listener)가 실행됩니다. 이 때 web worker 파일이 보낸 정보는 event.data에 저장됩니다.

 

web worker 객체의 실행 종료

web worker 객체는 생성되고 나서 종료될 때까지 계속해서 메시지를 받을 준비를 합니다. 따라서 웹 브라우저나 컴퓨터의 자원을 돌려주기 위해서는 terminate() 메소드를 사용하여 web worker를 반드시 종료해줘야 합니다.

webworker.terminate();
 

web worker 객체의 재사용

web worker 객체가 종료된 후에는 web worker의 값을 undefined로 설정해야만 web worker 객체를 재사용할 수 있습니다.

webworker = undefined;
 

web worker 예제

다음 예제는 앞에서 살펴본 web worker의 동작을 하나의 예제로 보여주는 예제입니다.

var webworker;
function startWorker() {
if(typeof(Worker) !== "undefined") {
if(typeof(webworker) == "undefined") { webworker = new Worker("/examples/web_worker.js"); }
webworker.onmessage = function(event) { document.getElementById("result").innerHTML = event.data; };
}
}
function stopWorker() {
webworker.terminate();
webworker = undefined;
}
 

Server Sent Events API

server sent events API는 웹 페이지가 서버로부터 갱신된 정보를 자동으로 받을 수 있도록 설정합니다.

 

server sent events 지원 여부 확인

server sent events를 사용하기 전에, 우선 사용자의 웹 브라우저가 이를 지원하는지 안 하는지 확인해야 합니다.

if (typeof(EventSource) !== "undefined") {
// server sent events를 위한 코드 부분
} else {
// server sent events를 지원하지 않는 브라우저를 위한 안내 부분
}
 

다음 예제는 server sent events를 이용해 5초마다 웹 페이지를 갱신하는 예제입니다.

if(typeof(EventSource) !== "undefined") {
var source = new EventSource("/examples/media/sse.php");
source.onmessage = function(event) {
document.getElementById("result").innerHTML += event.data + "<br>";
};
}
 

위의 예제에서 사용한 서버 측 PHP 파일인 sse.php 파일은 다음과 같습니다.

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
 
$time = date('r');
echo "data: The server time is: {$time}\n\n";
flush();
?>