{"content_id":"zkrgx4ojs2","slug":"vibe-coding-programming-language-basics","locale":"ko","schema_type":"TechArticle","category":"knowledge_base","category_name":"지식 베이스","title":"바이브코딩 입문자 프로그래밍 언어 개념 정리","summary":"바이브코딩에서는 언어의 이름보다 실행 위치와 데이터 처리 방식을 이해하는 편이 유용합니다. 프로그래밍 기초와 언어별 선택 기준, AI 생성 코드의 검증 범위를 확인할 수 있습니다.","sponsorship_disclosure":null,"affiliate_disclosure":null,"commerce_disclosure":null,"author":{"name":"인조이스 편집팀","url":"https://injoys.com/ko/about"},"key_points":["웹 개발은 HTML·CSS·JavaScript의 역할을 구분하는 데서 시작합니다.","TypeScript는 실행 전 타입 검사를 제공하지만 외부 입력을 자동으로 검증하지는 않습니다.","Rust의 소유권은 메모리 관리 규칙이며 모든 보안 오류를 막는 장치는 아닙니다.","Mojo는 CPU와 GPU의 고성능 연산을 겨냥한 언어입니다.","AI가 생성한 코드는 요구사항에 맞는지 실행과 테스트로 확인해야 합니다."],"content_markdown":"바이브코딩에는 언어의 역할과 실행 위치를 구분하는 기초가 필요합니다. 웹은 JavaScript와 TypeScript가 출발점입니다. 데이터 처리에는 Python을 검토하세요. Rust와 Mojo는 시스템 개발과 고성능 연산에 쓰입니다.\n\n성능 수치는 Microsoft의 2025년 3월 11일 발표 기준입니다.\n\n## 바이브코딩에서 언어 기초가 필요한 이유\n\n바이브코딩은 자연어 요청을 중심으로 AI와 코드를 만드는 개발 방식입니다. 생성한 프로그램의 실행 결과를 보며 요청을 수정합니다. 자연어 요청도 실제로 실행할 코드로 구현되어야 합니다.\n\n언어 기초는 원하는 기능을 구체적으로 설명하는 데 쓰입니다. 오류가 난 위치를 파악할 때도 도움이 됩니다. 입문 단계에서는 모든 언어의 문법을 외우기보다 역할부터 구분하세요.\n\n- 실행 위치: 브라우저, 서버, 스마트폰, 운영체제 내부\n- 입력: 사용자가 넣는 값이나 외부에서 받는 데이터\n- 처리: 계산, 검색, 분류처럼 프로그램이 수행할 작업\n- 출력: 화면 표시, 파일 생성, 데이터 저장\n- 실패 조건: 빈 입력, 잘못된 형식, 연결 끊김\n\n## 변수와 타입부터 알아야 할 기본 개념\n\n변수와 타입은 프로그램이 어떤 데이터를 다루는지 설명하는 기초입니다. 조건문과 반복문은 처리 순서를 정합니다. 함수는 관련 작업을 묶어 다시 사용할 수 있게 합니다.\n\n| 개념 | 쉬운 정의 | 기능을 설명할 때의 예 |\n| --- | --- | --- |\n| 변수 | 값에 이름을 붙여 참조하는 수단 | 검색어를 저장하는 이름 |\n| 타입 | 값의 종류와 허용되는 연산에 관한 규칙 | 수량은 숫자, 제목은 문자열 |\n| 조건문 | 조건에 따라 실행할 작업을 고르는 구문 | 제목이 비어 있으면 저장 거절 |\n| 반복문 | 같은 작업을 여러 대상에 적용하는 구문 | 목록의 각 항목을 화면에 표시 |\n| 함수 | 특정 작업을 수행하도록 묶은 코드 | 입력을 검사하는 함수 |\n| 자료구조 | 데이터를 조직하는 방식 | 순서가 있는 목록, 이름으로 찾는 값 |\n| 객체 | 관련 상태와 동작을 묶어 표현하는 단위 | 게시글의 제목과 수정 기능 |\n| 예외 처리 | 실행 중 발생한 오류에 대응하는 방식 | 파일을 읽지 못했을 때 오류 안내 |\n| API | 프로그램끼리 기능이나 데이터를 주고받는 약속 | 서버에 검색 결과 요청 |\n| 의존성 | 프로그램이 이용하는 외부 코드나 도구 | 날짜 처리 라이브러리 |\n\n정적 타입 검사는 실행 전에 타입 사용을 확인하는 방식입니다. 동적 타입 언어도 값의 타입을 구분합니다. 동적 타입이라는 말이 데이터 종류가 없다는 뜻은 아닙니다.\n\n## 기계어에서 고급 언어로 바뀐 이유\n\n언어의 발전은 사람이 표현해야 할 세부 작업을 줄여 온 과정입니다. 기계어는 프로세서가 실행하는 명령의 표현입니다. 어셈블리 언어는 그 명령에 사람이 읽을 기호를 붙입니다.\n\n어셈블리는 프로세서의 명령어 체계에 밀접하게 연결됩니다. 부품이 바뀐다고 모든 코드를 다시 쓰는 것은 아닙니다. 호환되지 않는 명령어 체계로 옮길 때 수정 부담이 커집니다.\n\n| 언어 또는 흐름 | 해결하려던 문제 | 기억할 개념 |\n| --- | --- | --- |\n| 기계어·어셈블리 | 하드웨어에 수행할 작업 전달 | 명령어 체계와 직접적인 연결 |\n| Fortran | 과학 계산을 수식에 가깝게 표현 | 수치 계산과 컴파일러 |\n| COBOL | 기업의 업무 데이터를 읽기 쉬운 형식으로 처리 | 장부·거래 처리 중심의 표현 |\n| Lisp | 기호와 목록을 이용한 계산 | 초기 AI 연구와 함수 중심 표현 |\n| C | 시스템 소프트웨어를 효율적으로 작성 | 메모리 제어와 이식성 |\n| SQL | 관계형 데이터베이스의 데이터 처리 | 원하는 결과를 선언하는 질의 |\n| C++ | 큰 프로그램의 구조화와 자원 관리 | 클래스와 여러 프로그래밍 방식 |\n| Java | 실행 환경이 다른 시스템 사이의 이식 | JVM과 바이트코드 |\n\nFortran은 1957년 IBM에서 등장했습니다. Lisp는 1950년대 후반 AI 연구와 함께 발전했습니다. COBOL은 1959년 시작된 공동 설계 작업에서 나왔습니다.\n\nC는 Unix 개발과 함께 발전한 언어입니다. 다른 기종으로 소프트웨어를 옮기는 데 기여했습니다. 다만 운영체제와 하드웨어에 의존하는 코드는 별도 수정이 필요합니다.\n\n객체지향은 관련 데이터와 동작을 객체로 조직하는 방식입니다. C++는 객체지향을 지원하는 언어입니다. 객체지향이라는 개념 자체를 C++가 만든 것은 아닙니다.\n\n## 컴파일러와 인터프리터의 차이\n\n컴파일러는 코드를 다른 표현으로 변환하는 프로그램입니다. 변환 결과는 기계어일 수도 있습니다. 바이트코드처럼 중간 실행 형식이 될 수도 있습니다.\n\n인터프리터는 코드나 중간 표현을 해석하며 실행합니다. 실제 언어 구현은 컴파일과 해석을 함께 쓰기도 합니다. 언어를 빠른 컴파일형과 느린 해석형으로만 나누면 부정확합니다.\n\n| 실행 관련 개념 | 역할 | 대표 사례 |\n| --- | --- | --- |\n| 사전 컴파일 | 실행 전에 대상 코드를 생성 | C·Rust의 일반적인 실행 파일 빌드 |\n| 바이트코드 | 실행 환경이 처리하는 중간 명령 형식 | Java 바이트코드, CPython 바이트코드 |\n| 인터프리터 | 코드나 중간 명령을 해석하며 실행 | CPython의 바이트코드 실행 |\n| JIT 컴파일 | 실행 중 필요한 코드를 기계어로 변환 | 여러 JVM과 JavaScript 엔진 |\n| 런타임 | 프로그램 실행에 필요한 기능 제공 | JVM, Node.js |\n\nCPython은 널리 쓰이는 Python 구현체입니다. 소스 코드를 바이트코드로 컴파일해 실행합니다. Python을 매번 소스 한 줄씩 번역하는 언어로만 설명하면 틀립니다.\n\nJava의 JVM은 바이트코드를 실행하는 환경입니다. 이 구조는 운영체제가 달라도 코드를 실행하는 데 도움이 됩니다. 실제 호환성은 JVM 버전과 외부 라이브러리의 영향도 받습니다.\n\n## 웹의 화면과 서버는 무엇이 다른가요?\n\n프론트엔드는 사용자가 접하는 화면과 상호작용을 담당합니다. 백엔드는 서버에서 요청을 처리합니다. 데이터베이스는 필요한 데이터를 저장하고 조회하는 역할을 합니다.\n\nHTML은 문서 구조를 표현하는 마크업 언어입니다. CSS는 화면의 스타일과 배치를 지정합니다. JavaScript는 조건 판단과 사용자 동작 처리를 구현합니다.\n\n| 이름 | 분류 | 주된 역할 |\n| --- | --- | --- |\n| HTML | 마크업 언어 | 제목, 문단, 입력창 등 문서 구조 |\n| CSS | 스타일시트 언어 | 색상, 간격, 화면 배치 |\n| JavaScript | 프로그래밍 언어 | 브라우저 상호작용과 서버 처리 |\n| TypeScript | JavaScript에 타입 체계를 더한 언어 | 실행 전 오류 확인과 코드 관리 |\n| React | 사용자 인터페이스 라이브러리 | 화면을 재사용 가능한 구성요소로 작성 |\n| Node.js | JavaScript 런타임 | 브라우저 밖에서 JavaScript 실행 |\n| Next.js | React 기반 프레임워크 | 웹앱의 페이지 구성과 서버 기능 |\n| PHP | 프로그래밍 언어 | 서버에서 동적인 웹 응답 생성 |\n| SQL | 데이터베이스 언어 | 데이터 조회·추가·수정·삭제 |\n\nReact, Node.js, Next.js는 같은 종류의 도구가 아닙니다. 라이브러리는 필요한 기능을 가져다 쓰는 코드 모음입니다. 프레임워크는 애플리케이션 구성 방식까지 제공합니다. 런타임은 코드가 실행되는 환경입니다.\n\n## 목적별 언어 비교\n\n언어는 만들 결과물과 기존 실행 환경을 기준으로 고르세요. 아래 표는 각 언어의 대표적인 검토 출발점입니다. 하나의 언어가 표에 적힌 작업만 수행하는 것은 아닙니다.\n\n| 만들려는 결과물 | 먼저 검토할 언어 | 선택 전에 확인할 점 |\n| --- | --- | --- |\n| 브라우저에서 사용하는 웹앱 | JavaScript·TypeScript | HTML·CSS 기초와 화면 구성 도구 |\n| 파일 정리·업무 자동화 | Python | 입력 파일 형식과 배포 환경 |\n| 데이터 분석·AI 모델 활용 | Python | 필요한 분석·모델 라이브러리 |\n| 네트워크 서버·운영 도구 | Go | 동시 처리 구조와 기존 시스템 연동 |\n| JVM 기반 업무 시스템 | Java·Kotlin | 기존 코드와 라이브러리 호환성 |\n| iOS 중심 앱 | Swift | Apple 개발 도구와 플랫폼 기능 |\n| Android 중심 앱 | Kotlin | Android 개발 도구와 기존 앱 구조 |\n| 메모리 제어가 필요한 시스템 | C·C++·Rust | 성능 요구와 안전성 검증 역량 |\n| CPU·GPU 연산 최적화 | Mojo | 지원 하드웨어와 필요한 연산 기능 |\n| 관계형 데이터 처리 | SQL | 데이터베이스 제품별 문법 차이 |\n\nPython의 활용도는 라이브러리 생태계와도 관련이 있습니다. NumPy는 속도를 위해 컴파일된 코드를 사용합니다. Python으로 작성한 모든 계산이 Python 코드만으로 실행되지는 않습니다.\n\nGo는 동시성 지원을 언어 설계에 포함합니다. 동시성은 여러 작업을 함께 진행하도록 구성하는 개념입니다. 병렬성은 여러 작업이 실제로 동시에 실행되는 상태입니다. 동시성 코드를 썼다고 계산 속도가 자동으로 빨라지지는 않습니다.\n\n## TypeScript·Rust·Mojo의 차이\n\nTypeScript, Rust, Mojo는 해결하려는 문제가 다릅니다. TypeScript는 JavaScript 코드의 타입 확인을 돕습니다. Rust는 메모리 관리에 강한 규칙을 둡니다. Mojo는 고성능 연산과 하드웨어 활용을 겨냥합니다.\n\n| 비교 기준 | TypeScript | Rust | Mojo |\n| --- | --- | --- | --- |\n| 핵심 관심사 | 타입 검사와 코드 관리 | 메모리 안전성과 시스템 제어 | CPU·GPU 고성능 연산 |\n| 대표 활용 | 웹앱·서버 애플리케이션 | 시스템 도구·성능 중심 구성요소 | AI 기반 시설·계산 커널 |\n| 먼저 이해할 개념 | JavaScript와 데이터 타입 | 소유권·빌림·수명 | 타입·메모리·병렬 연산 |\n| 별도로 확인할 부분 | 외부 입력과 업무 규칙 | unsafe 코드와 논리 오류 | Python 연동과 하드웨어 지원 |\n\n### TypeScript의 타입 검사\n\nTypeScript는 JavaScript에 정적 타입 검사를 더합니다. 타입을 잘못 사용한 코드를 실행 전에 찾는 데 도움이 됩니다. 타입 추론을 통해 일부 선언은 자동으로 판단합니다.\n\n모든 변수에 타입을 직접 적을 필요는 없습니다. 타입 주석은 일반적인 JavaScript 변환 과정에서 제거됩니다. 타입 선언만으로 실행 중 입력 검사가 생기지는 않습니다.\n\n### Rust의 소유권과 메모리 안전성\n\n소유권은 값의 메모리를 누가 관리하는지 정하는 규칙입니다. 빌림은 소유권을 옮기지 않고 값을 참조하는 방식입니다. 컴파일러는 관련 규칙을 검사해 메모리 오류를 예방합니다.\n\nRust의 안전성 보장은 올바른 구현이라는 전제를 가집니다. unsafe 코드에서는 일부 안전 조건을 작성자가 책임집니다. 계산식이나 접근 권한의 오류까지 언어가 자동으로 막지는 않습니다.\n\n### Mojo와 Python의 관계\n\nMojo는 Python과 닮은 문법을 사용하는 별도의 언어입니다. CPU와 GPU의 고성능 코드 작성을 지원합니다. Python 코드와 연결하는 상호운용 기능도 제공합니다.\n\n기존 Python 코드를 그대로 옮겨도 된다고 가정하면 안 됩니다. 필요한 기능은 설치할 Mojo 버전의 문서에서 확인하세요. GPU를 사용하려면 지원 장치와 드라이버 조건도 맞아야 합니다.\n\n## 언어 설명에서 흔한 실수\n\n짧은 언어 소개에서는 적용 조건이 빠지기 쉽습니다. 역사적 사실과 현재 기능도 구분해야 합니다. 아래 항목은 언어를 선택할 때 판단을 흐릴 수 있는 오해입니다.\n\n| 흔한 설명 | 정확하게 이해할 내용 |\n| --- | --- |\n| JavaScript는 Java의 웹 버전 | 서로 다른 언어 |\n| HTML과 CSS가 모두 1991년에 등장 | CSS1의 W3C 권고는 1996년 12월 17일 |\n| Kotlin은 Google이 만든 언어 | 개발 주체는 JetBrains, Google은 Android에서 지원 |\n| C 코드는 다시 컴파일하면 어디서나 실행 | 운영체제·하드웨어 의존 부분은 수정 가능성 존재 |\n| Python은 현재 인기 순위 1위 | 조사 기관·시점·집계 방식이 있어야 판단 가능 |\n| Rust를 쓰면 모든 보안 문제 해결 | 메모리 안전성과 접근 권한 검증은 다른 문제 |\n| Mojo를 쓰면 모든 Python 작업이 빨라짐 | 작업·구현·하드웨어에 따른 측정 필요 |\n| 벌레 사건에서 bug라는 말이 탄생 | 해당 사건은 이미 쓰이던 용어가 널리 알려진 사례 |\n\n벌레가 발견된 유명한 기록은 1947년 Harvard Mark II의 사례입니다. Smithsonian은 이 사건이 관련 용어의 대중화에 기여했다고 설명합니다. ENIAC의 사례나 용어의 최초 탄생으로 소개하면 부정확합니다.\n\n## 성능 수치는 어떻게 읽어야 하나요?\n\n성능 수치는 측정한 작업에 한정해서 해석해야 합니다. 컴파일 시간과 완성된 앱의 실행 속도는 다른 지표입니다. 개발 도구가 빨라졌다고 웹페이지도 같은 비율로 빨라지지는 않습니다.\n\nMicrosoft는 TypeScript 도구의 네이티브 전환을 발표했습니다. 2025년 3월 11일 발표에는 프로젝트별 측정값이 있습니다. 아래는 그 발표의 VS Code 코드베이스 사례입니다.\n\n| 측정 대상 | 기존 구현 | 네이티브 구현 | 발표된 속도 향상 |\n| --- | --- | --- | --- |\n| VS Code 코드베이스의 TypeScript 컴파일 처리 | 77.8초 | 7.5초 | 10.4배 |\n\n발표 조건에서 처리 시간은 **7.5초**로 줄었습니다. 차이를 계산하면 한 번의 처리에 70.3초가 줄어든 사례입니다. 모든 프로젝트에서 같은 결과가 나온다는 뜻은 아닙니다.\n\nPython과 C의 속도 비교에도 같은 원칙을 적용하세요. 동일한 입력과 알고리즘으로 실행했는지 확인해야 합니다. 컴파일 옵션과 사용 라이브러리도 비교 조건입니다. 실행 환경이 없는 숫자는 일반적인 속도 배율로 쓰기 어렵습니다.\n\n## 타입 검사와 외부 입력 검증\n\n타입 검사를 통과해도 외부 데이터의 내용은 따로 확인해야 합니다. AI 생성 코드를 검토할 때는 이 차이를 자주 놓칩니다. 타입 선언은 프로그램이 기대하는 값의 형태를 표현합니다.\n\n수량을 숫자 타입으로 선언한 웹앱을 생각해 보세요. 외부 API가 실제로는 문자열을 보낼 수도 있습니다. 타입 이름을 붙이거나 타입 단언을 해도 값은 검증되지 않습니다. 실행 중 데이터를 검사하는 코드가 필요합니다.\n\n| 확인 단계 | 확인할 내용 | 통과해도 남는 문제 |\n| --- | --- | --- |\n| 타입 검사 | 코드 내부의 타입 사용 | 외부에서 실제로 들어오는 값 |\n| 입력 검증 | 데이터 형식과 허용 범위 | 사용자에게 허용된 작업인지 |\n| 권한 검사 | 요청자의 접근 권한 | 업무 규칙에 맞는 결과인지 |\n| 기능 테스트 | 예상 입력에 대한 실제 결과 | 테스트하지 않은 조건 |\n\n이 표는 타입 제거와 메모리 안전성의 범위를 적용한 검토 틀입니다. 언어가 보장하는 부분과 서비스가 확인할 부분을 나눈 것입니다. AI에는 각 단계의 검증을 구분해 요청하세요.\n\n## AI에게 기능을 설명하는 방법\n\n기능 요청에는 입력과 기대 결과를 함께 적으세요. 프로그램 이름만 정하면 동작 조건이 빠지기 쉽습니다. 기존 프로젝트가 있다면 사용 중인 언어와 버전도 전달하세요.\n\n1. 사용할 환경을 적으세요.\n2. 처리할 입력의 형태를 설명하세요.\n3. 정상 입력에 대한 결과를 정하세요.\n4. 빈 값과 잘못된 입력의 처리 방법을 정하세요.\n5. 변경 이유와 확인 방법을 함께 요청하세요.\n\n다음은 요구사항을 나누는 프롬프트 예시입니다. 실제 파일 내용은 프로젝트에 맞게 바꾸세요. 생성 결과는 직접 실행해 확인해야 합니다.\n\n```text\n기존 프로젝트의 언어와 실행 환경을 먼저 확인하세요.\nCSV 파일에서 제목이 있는 행을 읽어 목록으로 보여 주세요.\n필수 열이 없으면 오류 메시지를 표시하세요.\n제목이 비어 있는 행은 별도로 안내하세요.\n외부 입력 검증과 화면 표시 코드를 구분하세요.\n기존 의존성으로 구현 가능한지 먼저 확인하세요.\n변경한 부분과 테스트 방법을 설명하세요.\n```\n\n오류가 나면 재현 조건을 함께 전달하세요. 오류 메시지에는 발생 위치를 좁힐 단서가 있습니다. GitHub의 Copilot 문서도 생성 코드의 검토를 요구합니다. 코드를 채택하기 전에는 실행 결과를 확인하는 과정이 필요합니다.\n\n## 입문 학습과 교육 선택 기준\n\n입문 학습은 만들려는 작업에 맞춰 좁게 시작할 수 있습니다. 웹 개발이라면 화면 구조와 동작을 먼저 연결해 보세요. 자동화라면 파일 입력과 결과 저장부터 확인하는 편이 좋습니다.\n\n1. 만들 결과물에 맞는 언어를 하나 고르세요.\n2. 변수·타입·조건문·반복문·함수를 익히세요.\n3. 작은 기능을 작성하고 실행 결과를 비교하세요.\n4. 잘못된 입력을 넣어 실패 동작을 확인하세요.\n5. 코드를 수정한 이유를 자신의 말로 설명해 보세요.\n\n교육 과정은 결과 화면 외에 검증 내용을 확인하세요. 오류를 재현하고 고치는 실습이 있는지 볼 수 있습니다. 사용하는 버전과 실행 환경이 명시되어 있는지도 확인할 항목입니다.\n\n- 코드 설명: 생성한 함수의 입력과 출력을 설명하는 과정\n- 오류 대응: 오류 메시지를 읽고 원인을 좁히는 실습\n- 데이터 검증: 외부 입력과 실패 조건을 처리하는 예제\n- 재현성: 같은 환경에서 다시 실행할 수 있는 안내\n\n언어의 정의는 각 프로젝트의 공식 문서에서 확인할 수 있습니다. TypeScript Handbook에는 타입 제거에 대한 설명이 있습니다. Rust 공식 책은 소유권과 unsafe를 나누어 설명합니다. Mojo Manual에서는 언어 기능과 Python 연동 범위를 확인하세요.","content_html":"\u003cp\u003e바이브코딩에는 언어의 역할과 실행 위치를 구분하는 기초가 필요합니다. 웹은 JavaScript와 TypeScript가 출발점입니다. 데이터 처리에는 Python을 검토하세요. Rust와 Mojo는 시스템 개발과 고성능 연산에 쓰입니다.\u003c/p\u003e\n\u003cp\u003e성능 수치는 Microsoft의 2025년 3월 11일 발표 기준입니다.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#%EB%B0%94%EC%9D%B4%EB%B8%8C%EC%BD%94%EB%94%A9%EC%97%90%EC%84%9C-%EC%96%B8%EC%96%B4-%EA%B8%B0%EC%B4%88%EA%B0%80-%ED%95%84%EC%9A%94%ED%95%9C-%EC%9D%B4%EC%9C%A0\" class=\"anchor\" id=\"바이브코딩에서-언어-기초가-필요한-이유\"\u003e\u003c/a\u003e바이브코딩에서 언어 기초가 필요한 이유\u003c/h2\u003e\n\u003cp\u003e바이브코딩은 자연어 요청을 중심으로 AI와 코드를 만드는 개발 방식입니다. 생성한 프로그램의 실행 결과를 보며 요청을 수정합니다. 자연어 요청도 실제로 실행할 코드로 구현되어야 합니다.\u003c/p\u003e\n\u003cp\u003e언어 기초는 원하는 기능을 구체적으로 설명하는 데 쓰입니다. 오류가 난 위치를 파악할 때도 도움이 됩니다. 입문 단계에서는 모든 언어의 문법을 외우기보다 역할부터 구분하세요.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e실행 위치: 브라우저, 서버, 스마트폰, 운영체제 내부\u003c/li\u003e\n\u003cli\u003e입력: 사용자가 넣는 값이나 외부에서 받는 데이터\u003c/li\u003e\n\u003cli\u003e처리: 계산, 검색, 분류처럼 프로그램이 수행할 작업\u003c/li\u003e\n\u003cli\u003e출력: 화면 표시, 파일 생성, 데이터 저장\u003c/li\u003e\n\u003cli\u003e실패 조건: 빈 입력, 잘못된 형식, 연결 끊김\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\n\u003ca href=\"#%EB%B3%80%EC%88%98%EC%99%80-%ED%83%80%EC%9E%85%EB%B6%80%ED%84%B0-%EC%95%8C%EC%95%84%EC%95%BC-%ED%95%A0-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90\" class=\"anchor\" id=\"변수와-타입부터-알아야-할-기본-개념\"\u003e\u003c/a\u003e변수와 타입부터 알아야 할 기본 개념\u003c/h2\u003e\n\u003cp\u003e변수와 타입은 프로그램이 어떤 데이터를 다루는지 설명하는 기초입니다. 조건문과 반복문은 처리 순서를 정합니다. 함수는 관련 작업을 묶어 다시 사용할 수 있게 합니다.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e개념\u003c/th\u003e\n\u003cth\u003e쉬운 정의\u003c/th\u003e\n\u003cth\u003e기능을 설명할 때의 예\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"개념\"\u003e변수\u003c/td\u003e\n\u003ctd data-label=\"쉬운 정의\"\u003e값에 이름을 붙여 참조하는 수단\u003c/td\u003e\n\u003ctd data-label=\"기능을 설명할 때의 예\"\u003e검색어를 저장하는 이름\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"개념\"\u003e타입\u003c/td\u003e\n\u003ctd data-label=\"쉬운 정의\"\u003e값의 종류와 허용되는 연산에 관한 규칙\u003c/td\u003e\n\u003ctd data-label=\"기능을 설명할 때의 예\"\u003e수량은 숫자, 제목은 문자열\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"개념\"\u003e조건문\u003c/td\u003e\n\u003ctd data-label=\"쉬운 정의\"\u003e조건에 따라 실행할 작업을 고르는 구문\u003c/td\u003e\n\u003ctd data-label=\"기능을 설명할 때의 예\"\u003e제목이 비어 있으면 저장 거절\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"개념\"\u003e반복문\u003c/td\u003e\n\u003ctd data-label=\"쉬운 정의\"\u003e같은 작업을 여러 대상에 적용하는 구문\u003c/td\u003e\n\u003ctd data-label=\"기능을 설명할 때의 예\"\u003e목록의 각 항목을 화면에 표시\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"개념\"\u003e함수\u003c/td\u003e\n\u003ctd data-label=\"쉬운 정의\"\u003e특정 작업을 수행하도록 묶은 코드\u003c/td\u003e\n\u003ctd data-label=\"기능을 설명할 때의 예\"\u003e입력을 검사하는 함수\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"개념\"\u003e자료구조\u003c/td\u003e\n\u003ctd data-label=\"쉬운 정의\"\u003e데이터를 조직하는 방식\u003c/td\u003e\n\u003ctd data-label=\"기능을 설명할 때의 예\"\u003e순서가 있는 목록, 이름으로 찾는 값\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"개념\"\u003e객체\u003c/td\u003e\n\u003ctd data-label=\"쉬운 정의\"\u003e관련 상태와 동작을 묶어 표현하는 단위\u003c/td\u003e\n\u003ctd data-label=\"기능을 설명할 때의 예\"\u003e게시글의 제목과 수정 기능\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"개념\"\u003e예외 처리\u003c/td\u003e\n\u003ctd data-label=\"쉬운 정의\"\u003e실행 중 발생한 오류에 대응하는 방식\u003c/td\u003e\n\u003ctd data-label=\"기능을 설명할 때의 예\"\u003e파일을 읽지 못했을 때 오류 안내\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"개념\"\u003eAPI\u003c/td\u003e\n\u003ctd data-label=\"쉬운 정의\"\u003e프로그램끼리 기능이나 데이터를 주고받는 약속\u003c/td\u003e\n\u003ctd data-label=\"기능을 설명할 때의 예\"\u003e서버에 검색 결과 요청\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"개념\"\u003e의존성\u003c/td\u003e\n\u003ctd data-label=\"쉬운 정의\"\u003e프로그램이 이용하는 외부 코드나 도구\u003c/td\u003e\n\u003ctd data-label=\"기능을 설명할 때의 예\"\u003e날짜 처리 라이브러리\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003e정적 타입 검사는 실행 전에 타입 사용을 확인하는 방식입니다. 동적 타입 언어도 값의 타입을 구분합니다. 동적 타입이라는 말이 데이터 종류가 없다는 뜻은 아닙니다.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#%EA%B8%B0%EA%B3%84%EC%96%B4%EC%97%90%EC%84%9C-%EA%B3%A0%EA%B8%89-%EC%96%B8%EC%96%B4%EB%A1%9C-%EB%B0%94%EB%80%90-%EC%9D%B4%EC%9C%A0\" class=\"anchor\" id=\"기계어에서-고급-언어로-바뀐-이유\"\u003e\u003c/a\u003e기계어에서 고급 언어로 바뀐 이유\u003c/h2\u003e\n\u003cp\u003e언어의 발전은 사람이 표현해야 할 세부 작업을 줄여 온 과정입니다. 기계어는 프로세서가 실행하는 명령의 표현입니다. 어셈블리 언어는 그 명령에 사람이 읽을 기호를 붙입니다.\u003c/p\u003e\n\u003cp\u003e어셈블리는 프로세서의 명령어 체계에 밀접하게 연결됩니다. 부품이 바뀐다고 모든 코드를 다시 쓰는 것은 아닙니다. 호환되지 않는 명령어 체계로 옮길 때 수정 부담이 커집니다.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e언어 또는 흐름\u003c/th\u003e\n\u003cth\u003e해결하려던 문제\u003c/th\u003e\n\u003cth\u003e기억할 개념\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"언어 또는 흐름\"\u003e기계어·어셈블리\u003c/td\u003e\n\u003ctd data-label=\"해결하려던 문제\"\u003e하드웨어에 수행할 작업 전달\u003c/td\u003e\n\u003ctd data-label=\"기억할 개념\"\u003e명령어 체계와 직접적인 연결\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"언어 또는 흐름\"\u003eFortran\u003c/td\u003e\n\u003ctd data-label=\"해결하려던 문제\"\u003e과학 계산을 수식에 가깝게 표현\u003c/td\u003e\n\u003ctd data-label=\"기억할 개념\"\u003e수치 계산과 컴파일러\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"언어 또는 흐름\"\u003eCOBOL\u003c/td\u003e\n\u003ctd data-label=\"해결하려던 문제\"\u003e기업의 업무 데이터를 읽기 쉬운 형식으로 처리\u003c/td\u003e\n\u003ctd data-label=\"기억할 개념\"\u003e장부·거래 처리 중심의 표현\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"언어 또는 흐름\"\u003eLisp\u003c/td\u003e\n\u003ctd data-label=\"해결하려던 문제\"\u003e기호와 목록을 이용한 계산\u003c/td\u003e\n\u003ctd data-label=\"기억할 개념\"\u003e초기 AI 연구와 함수 중심 표현\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"언어 또는 흐름\"\u003eC\u003c/td\u003e\n\u003ctd data-label=\"해결하려던 문제\"\u003e시스템 소프트웨어를 효율적으로 작성\u003c/td\u003e\n\u003ctd data-label=\"기억할 개념\"\u003e메모리 제어와 이식성\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"언어 또는 흐름\"\u003eSQL\u003c/td\u003e\n\u003ctd data-label=\"해결하려던 문제\"\u003e관계형 데이터베이스의 데이터 처리\u003c/td\u003e\n\u003ctd data-label=\"기억할 개념\"\u003e원하는 결과를 선언하는 질의\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"언어 또는 흐름\"\u003eC++\u003c/td\u003e\n\u003ctd data-label=\"해결하려던 문제\"\u003e큰 프로그램의 구조화와 자원 관리\u003c/td\u003e\n\u003ctd data-label=\"기억할 개념\"\u003e클래스와 여러 프로그래밍 방식\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"언어 또는 흐름\"\u003eJava\u003c/td\u003e\n\u003ctd data-label=\"해결하려던 문제\"\u003e실행 환경이 다른 시스템 사이의 이식\u003c/td\u003e\n\u003ctd data-label=\"기억할 개념\"\u003eJVM과 바이트코드\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eFortran은 1957년 IBM에서 등장했습니다. Lisp는 1950년대 후반 AI 연구와 함께 발전했습니다. COBOL은 1959년 시작된 공동 설계 작업에서 나왔습니다.\u003c/p\u003e\n\u003cp\u003eC는 Unix 개발과 함께 발전한 언어입니다. 다른 기종으로 소프트웨어를 옮기는 데 기여했습니다. 다만 운영체제와 하드웨어에 의존하는 코드는 별도 수정이 필요합니다.\u003c/p\u003e\n\u003cp\u003e객체지향은 관련 데이터와 동작을 객체로 조직하는 방식입니다. C++는 객체지향을 지원하는 언어입니다. 객체지향이라는 개념 자체를 C++가 만든 것은 아닙니다.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC%EC%99%80-%EC%9D%B8%ED%84%B0%ED%94%84%EB%A6%AC%ED%84%B0%EC%9D%98-%EC%B0%A8%EC%9D%B4\" class=\"anchor\" id=\"컴파일러와-인터프리터의-차이\"\u003e\u003c/a\u003e컴파일러와 인터프리터의 차이\u003c/h2\u003e\n\u003cp\u003e컴파일러는 코드를 다른 표현으로 변환하는 프로그램입니다. 변환 결과는 기계어일 수도 있습니다. 바이트코드처럼 중간 실행 형식이 될 수도 있습니다.\u003c/p\u003e\n\u003cp\u003e인터프리터는 코드나 중간 표현을 해석하며 실행합니다. 실제 언어 구현은 컴파일과 해석을 함께 쓰기도 합니다. 언어를 빠른 컴파일형과 느린 해석형으로만 나누면 부정확합니다.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e실행 관련 개념\u003c/th\u003e\n\u003cth\u003e역할\u003c/th\u003e\n\u003cth\u003e대표 사례\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"실행 관련 개념\"\u003e사전 컴파일\u003c/td\u003e\n\u003ctd data-label=\"역할\"\u003e실행 전에 대상 코드를 생성\u003c/td\u003e\n\u003ctd data-label=\"대표 사례\"\u003eC·Rust의 일반적인 실행 파일 빌드\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"실행 관련 개념\"\u003e바이트코드\u003c/td\u003e\n\u003ctd data-label=\"역할\"\u003e실행 환경이 처리하는 중간 명령 형식\u003c/td\u003e\n\u003ctd data-label=\"대표 사례\"\u003eJava 바이트코드, CPython 바이트코드\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"실행 관련 개념\"\u003e인터프리터\u003c/td\u003e\n\u003ctd data-label=\"역할\"\u003e코드나 중간 명령을 해석하며 실행\u003c/td\u003e\n\u003ctd data-label=\"대표 사례\"\u003eCPython의 바이트코드 실행\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"실행 관련 개념\"\u003eJIT 컴파일\u003c/td\u003e\n\u003ctd data-label=\"역할\"\u003e실행 중 필요한 코드를 기계어로 변환\u003c/td\u003e\n\u003ctd data-label=\"대표 사례\"\u003e여러 JVM과 JavaScript 엔진\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"실행 관련 개념\"\u003e런타임\u003c/td\u003e\n\u003ctd data-label=\"역할\"\u003e프로그램 실행에 필요한 기능 제공\u003c/td\u003e\n\u003ctd data-label=\"대표 사례\"\u003eJVM, Node.js\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eCPython은 널리 쓰이는 Python 구현체입니다. 소스 코드를 바이트코드로 컴파일해 실행합니다. Python을 매번 소스 한 줄씩 번역하는 언어로만 설명하면 틀립니다.\u003c/p\u003e\n\u003cp\u003eJava의 JVM은 바이트코드를 실행하는 환경입니다. 이 구조는 운영체제가 달라도 코드를 실행하는 데 도움이 됩니다. 실제 호환성은 JVM 버전과 외부 라이브러리의 영향도 받습니다.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#%EC%9B%B9%EC%9D%98-%ED%99%94%EB%A9%B4%EA%B3%BC-%EC%84%9C%EB%B2%84%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B4-%EB%8B%A4%EB%A5%B8%EA%B0%80%EC%9A%94\" class=\"anchor\" id=\"웹의-화면과-서버는-무엇이-다른가요\"\u003e\u003c/a\u003e웹의 화면과 서버는 무엇이 다른가요?\u003c/h2\u003e\n\u003cp\u003e프론트엔드는 사용자가 접하는 화면과 상호작용을 담당합니다. 백엔드는 서버에서 요청을 처리합니다. 데이터베이스는 필요한 데이터를 저장하고 조회하는 역할을 합니다.\u003c/p\u003e\n\u003cp\u003eHTML은 문서 구조를 표현하는 마크업 언어입니다. CSS는 화면의 스타일과 배치를 지정합니다. JavaScript는 조건 판단과 사용자 동작 처리를 구현합니다.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e이름\u003c/th\u003e\n\u003cth\u003e분류\u003c/th\u003e\n\u003cth\u003e주된 역할\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"이름\"\u003eHTML\u003c/td\u003e\n\u003ctd data-label=\"분류\"\u003e마크업 언어\u003c/td\u003e\n\u003ctd data-label=\"주된 역할\"\u003e제목, 문단, 입력창 등 문서 구조\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"이름\"\u003eCSS\u003c/td\u003e\n\u003ctd data-label=\"분류\"\u003e스타일시트 언어\u003c/td\u003e\n\u003ctd data-label=\"주된 역할\"\u003e색상, 간격, 화면 배치\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"이름\"\u003eJavaScript\u003c/td\u003e\n\u003ctd data-label=\"분류\"\u003e프로그래밍 언어\u003c/td\u003e\n\u003ctd data-label=\"주된 역할\"\u003e브라우저 상호작용과 서버 처리\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"이름\"\u003eTypeScript\u003c/td\u003e\n\u003ctd data-label=\"분류\"\u003eJavaScript에 타입 체계를 더한 언어\u003c/td\u003e\n\u003ctd data-label=\"주된 역할\"\u003e실행 전 오류 확인과 코드 관리\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"이름\"\u003eReact\u003c/td\u003e\n\u003ctd data-label=\"분류\"\u003e사용자 인터페이스 라이브러리\u003c/td\u003e\n\u003ctd data-label=\"주된 역할\"\u003e화면을 재사용 가능한 구성요소로 작성\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"이름\"\u003eNode.js\u003c/td\u003e\n\u003ctd data-label=\"분류\"\u003eJavaScript 런타임\u003c/td\u003e\n\u003ctd data-label=\"주된 역할\"\u003e브라우저 밖에서 JavaScript 실행\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"이름\"\u003eNext.js\u003c/td\u003e\n\u003ctd data-label=\"분류\"\u003eReact 기반 프레임워크\u003c/td\u003e\n\u003ctd data-label=\"주된 역할\"\u003e웹앱의 페이지 구성과 서버 기능\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"이름\"\u003ePHP\u003c/td\u003e\n\u003ctd data-label=\"분류\"\u003e프로그래밍 언어\u003c/td\u003e\n\u003ctd data-label=\"주된 역할\"\u003e서버에서 동적인 웹 응답 생성\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"이름\"\u003eSQL\u003c/td\u003e\n\u003ctd data-label=\"분류\"\u003e데이터베이스 언어\u003c/td\u003e\n\u003ctd data-label=\"주된 역할\"\u003e데이터 조회·추가·수정·삭제\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eReact, Node.js, Next.js는 같은 종류의 도구가 아닙니다. 라이브러리는 필요한 기능을 가져다 쓰는 코드 모음입니다. 프레임워크는 애플리케이션 구성 방식까지 제공합니다. 런타임은 코드가 실행되는 환경입니다.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#%EB%AA%A9%EC%A0%81%EB%B3%84-%EC%96%B8%EC%96%B4-%EB%B9%84%EA%B5%90\" class=\"anchor\" id=\"목적별-언어-비교\"\u003e\u003c/a\u003e목적별 언어 비교\u003c/h2\u003e\n\u003cp\u003e언어는 만들 결과물과 기존 실행 환경을 기준으로 고르세요. 아래 표는 각 언어의 대표적인 검토 출발점입니다. 하나의 언어가 표에 적힌 작업만 수행하는 것은 아닙니다.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e만들려는 결과물\u003c/th\u003e\n\u003cth\u003e먼저 검토할 언어\u003c/th\u003e\n\u003cth\u003e선택 전에 확인할 점\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"만들려는 결과물\"\u003e브라우저에서 사용하는 웹앱\u003c/td\u003e\n\u003ctd data-label=\"먼저 검토할 언어\"\u003eJavaScript·TypeScript\u003c/td\u003e\n\u003ctd data-label=\"선택 전에 확인할 점\"\u003eHTML·CSS 기초와 화면 구성 도구\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"만들려는 결과물\"\u003e파일 정리·업무 자동화\u003c/td\u003e\n\u003ctd data-label=\"먼저 검토할 언어\"\u003ePython\u003c/td\u003e\n\u003ctd data-label=\"선택 전에 확인할 점\"\u003e입력 파일 형식과 배포 환경\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"만들려는 결과물\"\u003e데이터 분석·AI 모델 활용\u003c/td\u003e\n\u003ctd data-label=\"먼저 검토할 언어\"\u003ePython\u003c/td\u003e\n\u003ctd data-label=\"선택 전에 확인할 점\"\u003e필요한 분석·모델 라이브러리\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"만들려는 결과물\"\u003e네트워크 서버·운영 도구\u003c/td\u003e\n\u003ctd data-label=\"먼저 검토할 언어\"\u003eGo\u003c/td\u003e\n\u003ctd data-label=\"선택 전에 확인할 점\"\u003e동시 처리 구조와 기존 시스템 연동\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"만들려는 결과물\"\u003eJVM 기반 업무 시스템\u003c/td\u003e\n\u003ctd data-label=\"먼저 검토할 언어\"\u003eJava·Kotlin\u003c/td\u003e\n\u003ctd data-label=\"선택 전에 확인할 점\"\u003e기존 코드와 라이브러리 호환성\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"만들려는 결과물\"\u003eiOS 중심 앱\u003c/td\u003e\n\u003ctd data-label=\"먼저 검토할 언어\"\u003eSwift\u003c/td\u003e\n\u003ctd data-label=\"선택 전에 확인할 점\"\u003eApple 개발 도구와 플랫폼 기능\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"만들려는 결과물\"\u003eAndroid 중심 앱\u003c/td\u003e\n\u003ctd data-label=\"먼저 검토할 언어\"\u003eKotlin\u003c/td\u003e\n\u003ctd data-label=\"선택 전에 확인할 점\"\u003eAndroid 개발 도구와 기존 앱 구조\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"만들려는 결과물\"\u003e메모리 제어가 필요한 시스템\u003c/td\u003e\n\u003ctd data-label=\"먼저 검토할 언어\"\u003eC·C++·Rust\u003c/td\u003e\n\u003ctd data-label=\"선택 전에 확인할 점\"\u003e성능 요구와 안전성 검증 역량\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"만들려는 결과물\"\u003eCPU·GPU 연산 최적화\u003c/td\u003e\n\u003ctd data-label=\"먼저 검토할 언어\"\u003eMojo\u003c/td\u003e\n\u003ctd data-label=\"선택 전에 확인할 점\"\u003e지원 하드웨어와 필요한 연산 기능\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"만들려는 결과물\"\u003e관계형 데이터 처리\u003c/td\u003e\n\u003ctd data-label=\"먼저 검토할 언어\"\u003eSQL\u003c/td\u003e\n\u003ctd data-label=\"선택 전에 확인할 점\"\u003e데이터베이스 제품별 문법 차이\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003ePython의 활용도는 라이브러리 생태계와도 관련이 있습니다. NumPy는 속도를 위해 컴파일된 코드를 사용합니다. Python으로 작성한 모든 계산이 Python 코드만으로 실행되지는 않습니다.\u003c/p\u003e\n\u003cp\u003eGo는 동시성 지원을 언어 설계에 포함합니다. 동시성은 여러 작업을 함께 진행하도록 구성하는 개념입니다. 병렬성은 여러 작업이 실제로 동시에 실행되는 상태입니다. 동시성 코드를 썼다고 계산 속도가 자동으로 빨라지지는 않습니다.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#typescriptrustmojo%EC%9D%98-%EC%B0%A8%EC%9D%B4\" class=\"anchor\" id=\"typescriptrustmojo의-차이\"\u003e\u003c/a\u003eTypeScript·Rust·Mojo의 차이\u003c/h2\u003e\n\u003cp\u003eTypeScript, Rust, Mojo는 해결하려는 문제가 다릅니다. TypeScript는 JavaScript 코드의 타입 확인을 돕습니다. Rust는 메모리 관리에 강한 규칙을 둡니다. Mojo는 고성능 연산과 하드웨어 활용을 겨냥합니다.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e비교 기준\u003c/th\u003e\n\u003cth\u003eTypeScript\u003c/th\u003e\n\u003cth\u003eRust\u003c/th\u003e\n\u003cth\u003eMojo\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"비교 기준\"\u003e핵심 관심사\u003c/td\u003e\n\u003ctd data-label=\"TypeScript\"\u003e타입 검사와 코드 관리\u003c/td\u003e\n\u003ctd data-label=\"Rust\"\u003e메모리 안전성과 시스템 제어\u003c/td\u003e\n\u003ctd data-label=\"Mojo\"\u003eCPU·GPU 고성능 연산\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"비교 기준\"\u003e대표 활용\u003c/td\u003e\n\u003ctd data-label=\"TypeScript\"\u003e웹앱·서버 애플리케이션\u003c/td\u003e\n\u003ctd data-label=\"Rust\"\u003e시스템 도구·성능 중심 구성요소\u003c/td\u003e\n\u003ctd data-label=\"Mojo\"\u003eAI 기반 시설·계산 커널\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"비교 기준\"\u003e먼저 이해할 개념\u003c/td\u003e\n\u003ctd data-label=\"TypeScript\"\u003eJavaScript와 데이터 타입\u003c/td\u003e\n\u003ctd data-label=\"Rust\"\u003e소유권·빌림·수명\u003c/td\u003e\n\u003ctd data-label=\"Mojo\"\u003e타입·메모리·병렬 연산\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"비교 기준\"\u003e별도로 확인할 부분\u003c/td\u003e\n\u003ctd data-label=\"TypeScript\"\u003e외부 입력과 업무 규칙\u003c/td\u003e\n\u003ctd data-label=\"Rust\"\u003eunsafe 코드와 논리 오류\u003c/td\u003e\n\u003ctd data-label=\"Mojo\"\u003ePython 연동과 하드웨어 지원\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003ch3\u003e\n\u003ca href=\"#typescript%EC%9D%98-%ED%83%80%EC%9E%85-%EA%B2%80%EC%82%AC\" class=\"anchor\" id=\"typescript의-타입-검사\"\u003e\u003c/a\u003eTypeScript의 타입 검사\u003c/h3\u003e\n\u003cp\u003eTypeScript는 JavaScript에 정적 타입 검사를 더합니다. 타입을 잘못 사용한 코드를 실행 전에 찾는 데 도움이 됩니다. 타입 추론을 통해 일부 선언은 자동으로 판단합니다.\u003c/p\u003e\n\u003cp\u003e모든 변수에 타입을 직접 적을 필요는 없습니다. 타입 주석은 일반적인 JavaScript 변환 과정에서 제거됩니다. 타입 선언만으로 실행 중 입력 검사가 생기지는 않습니다.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#rust%EC%9D%98-%EC%86%8C%EC%9C%A0%EA%B6%8C%EA%B3%BC-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%95%88%EC%A0%84%EC%84%B1\" class=\"anchor\" id=\"rust의-소유권과-메모리-안전성\"\u003e\u003c/a\u003eRust의 소유권과 메모리 안전성\u003c/h3\u003e\n\u003cp\u003e소유권은 값의 메모리를 누가 관리하는지 정하는 규칙입니다. 빌림은 소유권을 옮기지 않고 값을 참조하는 방식입니다. 컴파일러는 관련 규칙을 검사해 메모리 오류를 예방합니다.\u003c/p\u003e\n\u003cp\u003eRust의 안전성 보장은 올바른 구현이라는 전제를 가집니다. unsafe 코드에서는 일부 안전 조건을 작성자가 책임집니다. 계산식이나 접근 권한의 오류까지 언어가 자동으로 막지는 않습니다.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#mojo%EC%99%80-python%EC%9D%98-%EA%B4%80%EA%B3%84\" class=\"anchor\" id=\"mojo와-python의-관계\"\u003e\u003c/a\u003eMojo와 Python의 관계\u003c/h3\u003e\n\u003cp\u003eMojo는 Python과 닮은 문법을 사용하는 별도의 언어입니다. CPU와 GPU의 고성능 코드 작성을 지원합니다. Python 코드와 연결하는 상호운용 기능도 제공합니다.\u003c/p\u003e\n\u003cp\u003e기존 Python 코드를 그대로 옮겨도 된다고 가정하면 안 됩니다. 필요한 기능은 설치할 Mojo 버전의 문서에서 확인하세요. GPU를 사용하려면 지원 장치와 드라이버 조건도 맞아야 합니다.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#%EC%96%B8%EC%96%B4-%EC%84%A4%EB%AA%85%EC%97%90%EC%84%9C-%ED%9D%94%ED%95%9C-%EC%8B%A4%EC%88%98\" class=\"anchor\" id=\"언어-설명에서-흔한-실수\"\u003e\u003c/a\u003e언어 설명에서 흔한 실수\u003c/h2\u003e\n\u003cp\u003e짧은 언어 소개에서는 적용 조건이 빠지기 쉽습니다. 역사적 사실과 현재 기능도 구분해야 합니다. 아래 항목은 언어를 선택할 때 판단을 흐릴 수 있는 오해입니다.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e흔한 설명\u003c/th\u003e\n\u003cth\u003e정확하게 이해할 내용\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"흔한 설명\"\u003eJavaScript는 Java의 웹 버전\u003c/td\u003e\n\u003ctd data-label=\"정확하게 이해할 내용\"\u003e서로 다른 언어\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"흔한 설명\"\u003eHTML과 CSS가 모두 1991년에 등장\u003c/td\u003e\n\u003ctd data-label=\"정확하게 이해할 내용\"\u003eCSS1의 W3C 권고는 1996년 12월 17일\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"흔한 설명\"\u003eKotlin은 Google이 만든 언어\u003c/td\u003e\n\u003ctd data-label=\"정확하게 이해할 내용\"\u003e개발 주체는 JetBrains, Google은 Android에서 지원\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"흔한 설명\"\u003eC 코드는 다시 컴파일하면 어디서나 실행\u003c/td\u003e\n\u003ctd data-label=\"정확하게 이해할 내용\"\u003e운영체제·하드웨어 의존 부분은 수정 가능성 존재\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"흔한 설명\"\u003ePython은 현재 인기 순위 1위\u003c/td\u003e\n\u003ctd data-label=\"정확하게 이해할 내용\"\u003e조사 기관·시점·집계 방식이 있어야 판단 가능\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"흔한 설명\"\u003eRust를 쓰면 모든 보안 문제 해결\u003c/td\u003e\n\u003ctd data-label=\"정확하게 이해할 내용\"\u003e메모리 안전성과 접근 권한 검증은 다른 문제\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"흔한 설명\"\u003eMojo를 쓰면 모든 Python 작업이 빨라짐\u003c/td\u003e\n\u003ctd data-label=\"정확하게 이해할 내용\"\u003e작업·구현·하드웨어에 따른 측정 필요\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"흔한 설명\"\u003e벌레 사건에서 bug라는 말이 탄생\u003c/td\u003e\n\u003ctd data-label=\"정확하게 이해할 내용\"\u003e해당 사건은 이미 쓰이던 용어가 널리 알려진 사례\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003e벌레가 발견된 유명한 기록은 1947년 Harvard Mark II의 사례입니다. Smithsonian은 이 사건이 관련 용어의 대중화에 기여했다고 설명합니다. ENIAC의 사례나 용어의 최초 탄생으로 소개하면 부정확합니다.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#%EC%84%B1%EB%8A%A5-%EC%88%98%EC%B9%98%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%9D%BD%EC%96%B4%EC%95%BC-%ED%95%98%EB%82%98%EC%9A%94\" class=\"anchor\" id=\"성능-수치는-어떻게-읽어야-하나요\"\u003e\u003c/a\u003e성능 수치는 어떻게 읽어야 하나요?\u003c/h2\u003e\n\u003cp\u003e성능 수치는 측정한 작업에 한정해서 해석해야 합니다. 컴파일 시간과 완성된 앱의 실행 속도는 다른 지표입니다. 개발 도구가 빨라졌다고 웹페이지도 같은 비율로 빨라지지는 않습니다.\u003c/p\u003e\n\u003cp\u003eMicrosoft는 TypeScript 도구의 네이티브 전환을 발표했습니다. 2025년 3월 11일 발표에는 프로젝트별 측정값이 있습니다. 아래는 그 발표의 VS Code 코드베이스 사례입니다.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e측정 대상\u003c/th\u003e\n\u003cth\u003e기존 구현\u003c/th\u003e\n\u003cth\u003e네이티브 구현\u003c/th\u003e\n\u003cth\u003e발표된 속도 향상\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"측정 대상\"\u003eVS Code 코드베이스의 TypeScript 컴파일 처리\u003c/td\u003e\n\u003ctd data-label=\"기존 구현\"\u003e77.8초\u003c/td\u003e\n\u003ctd data-label=\"네이티브 구현\"\u003e7.5초\u003c/td\u003e\n\u003ctd data-label=\"발표된 속도 향상\"\u003e10.4배\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003e발표 조건에서 처리 시간은 \u003cstrong\u003e7.5초\u003c/strong\u003e로 줄었습니다. 차이를 계산하면 한 번의 처리에 70.3초가 줄어든 사례입니다. 모든 프로젝트에서 같은 결과가 나온다는 뜻은 아닙니다.\u003c/p\u003e\n\u003cp\u003ePython과 C의 속도 비교에도 같은 원칙을 적용하세요. 동일한 입력과 알고리즘으로 실행했는지 확인해야 합니다. 컴파일 옵션과 사용 라이브러리도 비교 조건입니다. 실행 환경이 없는 숫자는 일반적인 속도 배율로 쓰기 어렵습니다.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#%ED%83%80%EC%9E%85-%EA%B2%80%EC%82%AC%EC%99%80-%EC%99%B8%EB%B6%80-%EC%9E%85%EB%A0%A5-%EA%B2%80%EC%A6%9D\" class=\"anchor\" id=\"타입-검사와-외부-입력-검증\"\u003e\u003c/a\u003e타입 검사와 외부 입력 검증\u003c/h2\u003e\n\u003cp\u003e타입 검사를 통과해도 외부 데이터의 내용은 따로 확인해야 합니다. AI 생성 코드를 검토할 때는 이 차이를 자주 놓칩니다. 타입 선언은 프로그램이 기대하는 값의 형태를 표현합니다.\u003c/p\u003e\n\u003cp\u003e수량을 숫자 타입으로 선언한 웹앱을 생각해 보세요. 외부 API가 실제로는 문자열을 보낼 수도 있습니다. 타입 이름을 붙이거나 타입 단언을 해도 값은 검증되지 않습니다. 실행 중 데이터를 검사하는 코드가 필요합니다.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e확인 단계\u003c/th\u003e\n\u003cth\u003e확인할 내용\u003c/th\u003e\n\u003cth\u003e통과해도 남는 문제\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"확인 단계\"\u003e타입 검사\u003c/td\u003e\n\u003ctd data-label=\"확인할 내용\"\u003e코드 내부의 타입 사용\u003c/td\u003e\n\u003ctd data-label=\"통과해도 남는 문제\"\u003e외부에서 실제로 들어오는 값\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"확인 단계\"\u003e입력 검증\u003c/td\u003e\n\u003ctd data-label=\"확인할 내용\"\u003e데이터 형식과 허용 범위\u003c/td\u003e\n\u003ctd data-label=\"통과해도 남는 문제\"\u003e사용자에게 허용된 작업인지\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"확인 단계\"\u003e권한 검사\u003c/td\u003e\n\u003ctd data-label=\"확인할 내용\"\u003e요청자의 접근 권한\u003c/td\u003e\n\u003ctd data-label=\"통과해도 남는 문제\"\u003e업무 규칙에 맞는 결과인지\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"확인 단계\"\u003e기능 테스트\u003c/td\u003e\n\u003ctd data-label=\"확인할 내용\"\u003e예상 입력에 대한 실제 결과\u003c/td\u003e\n\u003ctd data-label=\"통과해도 남는 문제\"\u003e테스트하지 않은 조건\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003e이 표는 타입 제거와 메모리 안전성의 범위를 적용한 검토 틀입니다. 언어가 보장하는 부분과 서비스가 확인할 부분을 나눈 것입니다. AI에는 각 단계의 검증을 구분해 요청하세요.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#ai%EC%97%90%EA%B2%8C-%EA%B8%B0%EB%8A%A5%EC%9D%84-%EC%84%A4%EB%AA%85%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95\" class=\"anchor\" id=\"ai에게-기능을-설명하는-방법\"\u003e\u003c/a\u003eAI에게 기능을 설명하는 방법\u003c/h2\u003e\n\u003cp\u003e기능 요청에는 입력과 기대 결과를 함께 적으세요. 프로그램 이름만 정하면 동작 조건이 빠지기 쉽습니다. 기존 프로젝트가 있다면 사용 중인 언어와 버전도 전달하세요.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e사용할 환경을 적으세요.\u003c/li\u003e\n\u003cli\u003e처리할 입력의 형태를 설명하세요.\u003c/li\u003e\n\u003cli\u003e정상 입력에 대한 결과를 정하세요.\u003c/li\u003e\n\u003cli\u003e빈 값과 잘못된 입력의 처리 방법을 정하세요.\u003c/li\u003e\n\u003cli\u003e변경 이유와 확인 방법을 함께 요청하세요.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e다음은 요구사항을 나누는 프롬프트 예시입니다. 실제 파일 내용은 프로젝트에 맞게 바꾸세요. 생성 결과는 직접 실행해 확인해야 합니다.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\u003cspan\u003e기존 프로젝트의 언어와 실행 환경을 먼저 확인하세요.\n\u003c/span\u003e\u003cspan\u003eCSV 파일에서 제목이 있는 행을 읽어 목록으로 보여 주세요.\n\u003c/span\u003e\u003cspan\u003e필수 열이 없으면 오류 메시지를 표시하세요.\n\u003c/span\u003e\u003cspan\u003e제목이 비어 있는 행은 별도로 안내하세요.\n\u003c/span\u003e\u003cspan\u003e외부 입력 검증과 화면 표시 코드를 구분하세요.\n\u003c/span\u003e\u003cspan\u003e기존 의존성으로 구현 가능한지 먼저 확인하세요.\n\u003c/span\u003e\u003cspan\u003e변경한 부분과 테스트 방법을 설명하세요.\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e오류가 나면 재현 조건을 함께 전달하세요. 오류 메시지에는 발생 위치를 좁힐 단서가 있습니다. GitHub의 Copilot 문서도 생성 코드의 검토를 요구합니다. 코드를 채택하기 전에는 실행 결과를 확인하는 과정이 필요합니다.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#%EC%9E%85%EB%AC%B8-%ED%95%99%EC%8A%B5%EA%B3%BC-%EA%B5%90%EC%9C%A1-%EC%84%A0%ED%83%9D-%EA%B8%B0%EC%A4%80\" class=\"anchor\" id=\"입문-학습과-교육-선택-기준\"\u003e\u003c/a\u003e입문 학습과 교육 선택 기준\u003c/h2\u003e\n\u003cp\u003e입문 학습은 만들려는 작업에 맞춰 좁게 시작할 수 있습니다. 웹 개발이라면 화면 구조와 동작을 먼저 연결해 보세요. 자동화라면 파일 입력과 결과 저장부터 확인하는 편이 좋습니다.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e만들 결과물에 맞는 언어를 하나 고르세요.\u003c/li\u003e\n\u003cli\u003e변수·타입·조건문·반복문·함수를 익히세요.\u003c/li\u003e\n\u003cli\u003e작은 기능을 작성하고 실행 결과를 비교하세요.\u003c/li\u003e\n\u003cli\u003e잘못된 입력을 넣어 실패 동작을 확인하세요.\u003c/li\u003e\n\u003cli\u003e코드를 수정한 이유를 자신의 말로 설명해 보세요.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e교육 과정은 결과 화면 외에 검증 내용을 확인하세요. 오류를 재현하고 고치는 실습이 있는지 볼 수 있습니다. 사용하는 버전과 실행 환경이 명시되어 있는지도 확인할 항목입니다.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e코드 설명: 생성한 함수의 입력과 출력을 설명하는 과정\u003c/li\u003e\n\u003cli\u003e오류 대응: 오류 메시지를 읽고 원인을 좁히는 실습\u003c/li\u003e\n\u003cli\u003e데이터 검증: 외부 입력과 실패 조건을 처리하는 예제\u003c/li\u003e\n\u003cli\u003e재현성: 같은 환경에서 다시 실행할 수 있는 안내\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e언어의 정의는 각 프로젝트의 공식 문서에서 확인할 수 있습니다. TypeScript Handbook에는 타입 제거에 대한 설명이 있습니다. Rust 공식 책은 소유권과 unsafe를 나누어 설명합니다. Mojo Manual에서는 언어 기능과 Python 연동 범위를 확인하세요.\u003c/p\u003e\n","tags":["생성형 AI","프롬프트 엔지니어링","AI 개발","AI 코딩","개발 도구"],"faqs":[{"question":"바이브코딩을 시작하기 전에 모든 언어를 배워야 하나요?","answer":"모든 언어를 배울 필요는 없습니다. 만들 결과물에 맞는 언어를 먼저 고르세요. 변수·타입·함수와 실행 위치를 이해하면 요청을 구체화할 수 있습니다."},{"question":"웹 개발은 JavaScript와 Python 중 무엇부터 시작하나요?","answer":"브라우저 화면의 동작을 만들려면 JavaScript가 출발점입니다. HTML과 CSS의 역할도 함께 익히세요. Python은 파일 자동화와 데이터 처리의 출발점으로 검토할 수 있습니다."},{"question":"TypeScript를 쓰면 JavaScript를 몰라도 되나요?","answer":"TypeScript의 실행 동작을 이해하려면 JavaScript 기초가 필요합니다. TypeScript는 JavaScript에 타입 체계를 더합니다. 타입 검사와 실제 실행은 구분해서 이해하세요."},{"question":"TypeScript는 모든 변수에 타입을 적어야 하나요?","answer":"타입 추론이 가능한 곳에서는 직접 적지 않아도 됩니다. 도구가 할당된 값과 문맥을 바탕으로 타입을 판단합니다. 명시적인 타입이 필요한지는 코드의 역할에 따라 정하세요."},{"question":"React와 Node.js도 프로그래밍 언어인가요?","answer":"React는 사용자 인터페이스 라이브러리입니다. Node.js는 JavaScript 실행 환경입니다. Next.js는 React 기반 프레임워크로 분류합니다."},{"question":"Python은 소스 코드를 한 줄씩 번역해서 실행하나요?","answer":"대표 구현체인 CPython은 소스 코드를 바이트코드로 컴파일합니다. 이후 바이트코드를 실행합니다. 소스를 한 줄씩 번역한다는 설명만으로는 이 과정을 설명하기 어렵습니다."},{"question":"Rust를 사용하면 보안 검토가 필요 없나요?","answer":"Rust의 메모리 안전성은 서비스 전체의 안전성을 뜻하지 않습니다. 접근 권한과 업무 규칙은 따로 확인해야 합니다. unsafe 코드의 안전 조건도 검토 대상입니다."},{"question":"Mojo는 Python의 새 버전인가요?","answer":"Mojo는 Python과 닮은 문법을 가진 별도의 언어입니다. Python 연동 기능을 제공합니다. 기존 코드의 호환성은 사용할 버전의 공식 문서에서 확인하세요."},{"question":"Mojo를 사용하려면 GPU가 꼭 필요한가요?","answer":"Mojo는 CPU용 코드도 작성할 수 있습니다. GPU가 모든 프로그램의 필수 조건은 아닙니다. GPU 기능을 사용한다면 장치와 드라이버 지원 범위를 확인하세요."},{"question":"Go의 동시성은 병렬 처리와 같은 뜻인가요?","answer":"동시성은 여러 작업을 함께 진행하도록 구성하는 개념입니다. 병렬성은 여러 작업이 실제로 동시에 실행되는 상태입니다. 동시성만으로 실행 속도 향상을 보장하지는 않습니다."},{"question":"Kotlin은 Google이 개발했나요?","answer":"Kotlin의 개발 주체는 JetBrains입니다. Google은 Android 개발에서 Kotlin을 지원합니다. 언어를 만든 주체와 플랫폼에서 지원하는 주체를 구분해야 합니다."},{"question":"TypeScript 컴파일러가 빨라지면 앱도 같은 비율로 빨라지나요?","answer":"컴파일 시간과 앱의 실행 시간은 다른 지표입니다. Microsoft의 성능 사례는 개발 도구의 처리 시간에 관한 것입니다. 앱의 응답 속도는 별도로 측정해야 합니다."},{"question":"AI가 만든 코드의 타입 검사가 통과하면 완성인가요?","answer":"타입 검사만으로 기능 완성을 판단할 수는 없습니다. 외부 입력과 접근 권한을 확인해야 합니다. 정상 조건과 실패 조건에서 기대한 결과가 나오는지 테스트하세요."},{"question":"바이브코딩 교육은 어떤 기준으로 고르나요?","answer":"생성한 코드를 설명하고 수정하는 실습이 있는지 확인하세요. 오류 재현과 입력 검증을 다루는지도 볼 수 있습니다. 사용 버전과 실행 환경이 명시된 과정은 재현 조건을 확인하기 쉽습니다."}],"sources":[{"url":"https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html","title":"TypeScript 공식 문서: TypeScript for JavaScript Programmers","type":"source"},{"url":"https://www.typescriptlang.org/docs/handbook/2/basic-types","title":"TypeScript Handbook: The Basics, 타입 검사와 타입 제거","type":"source"},{"url":"https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html","title":"The Rust Programming Language: What Is Ownership?","type":"source"},{"url":"https://doc.rust-lang.org/book/ch20-01-unsafe-rust.html","title":"The Rust Programming Language: Unsafe Rust","type":"source"},{"url":"https://docs.modular.com/mojo/manual/","title":"Mojo Manual: 언어 개요와 Python 연동","type":"source"},{"url":"https://docs.modular.com/mojo/requirements/","title":"Mojo System Requirements: CPU·GPU 지원 조건","type":"source"},{"url":"https://docs.python.org/3/glossary.html","title":"Python 공식 용어집: 바이트코드와 실행 관련 개념","type":"source"},{"url":"https://numpy.org/doc/2.0/building/index.html","title":"NumPy 2.0 Manual: Building from source","type":"source"},{"url":"https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Scripting/What_is_JavaScript","title":"MDN: What is JavaScript?","type":"source"},{"url":"https://nodejs.org/learn/getting-started/introduction-to-nodejs","title":"Node.js 공식 문서: Introduction to Node.js","type":"source"},{"url":"https://react.dev/","title":"React 공식 문서: 사용자 인터페이스 라이브러리","type":"source"},{"url":"https://nextjs.org/docs","title":"Next.js 공식 문서","type":"source"},{"url":"https://www.php.net/manual/en/introduction.php","title":"PHP Manual: Introduction","type":"source"},{"url":"https://go.dev/doc/faq","title":"Go 공식 FAQ: 설계 목적과 실행 특성","type":"source"},{"url":"https://go.dev/blog/waza-talk","title":"Go 공식 블로그: Concurrency is not parallelism","type":"source"},{"url":"https://kotlinlang.org/docs/faq.html","title":"Kotlin 공식 FAQ: 개발 주체와 대상 플랫폼","type":"source"},{"url":"https://developer.android.com/kotlin","title":"Android Developers: Kotlin and Android","type":"source"},{"url":"https://www.swift.org/about/","title":"Swift.org: About Swift","type":"source"},{"url":"https://docs.oracle.com/javase/tutorial/getStarted/intro/definition.html","title":"Oracle Java Tutorials: About the Java Technology","type":"source"},{"url":"https://www.ibm.com/history/fortran","title":"IBM History: Fortran","type":"source"},{"url":"https://www-formal.stanford.edu/jmc/history/lisp/node2.html","title":"John McCarthy: LISP prehistory","type":"source"},{"url":"https://bitsavers.computerhistory.org/magazines/Datamation/196703.pdf","title":"Howard Bromberg: The COBOL Conclusion, Datamation 1967년 3월","type":"source"},{"url":"https://www.nokia.com/bell-labs/about/dennis-m-ritchie/chist.html","title":"Dennis Ritchie: The Development of the C Language","type":"source"},{"url":"https://www.stroustrup.com/bs_faq.html","title":"Bjarne Stroustrup FAQ: C++와 객체지향","type":"source"},{"url":"https://www.ibm.com/think/topics/structured-query-language","title":"IBM: What Is Structured Query Language?","type":"source"},{"url":"https://www.w3.org/standards/history/CSS1/","title":"W3C: Cascading Style Sheets, level 1 publication history","type":"data_point"},{"url":"https://americanhistory.si.edu/collections/object/nmah_334663","title":"Smithsonian National Museum of American History: Log Book With Computer Bug","type":"source"},{"url":"https://devblogs.microsoft.com/typescript/typescript-native-port/","title":"Microsoft: A 10x Faster TypeScript, 2025년 3월 11일","type":"data_point"},{"url":"https://docs.github.com/en/copilot/responsible-use/inline-suggestions","title":"GitHub Docs: Copilot inline suggestions의 한계와 검증 책임","type":"source"}],"images":[{"id":2241,"url":"https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzQ0NjEsInB1ciI6ImJsb2JfaWQifX0=--aa435b9d954b7e3cf19dca343a0d0fc5333fe68f/ai-73cc4d9e.webp","is_representative":true,"generation_method":"ai_photo","license":"ai_generated","mime_type":"image/webp","width":1536,"height":1024,"translations":{"ko":{"alt":"실습 교실에서 중년 남성이 노트북을 사용하고 옆의 여성이 탁자 위 스마트폰을 가리키고 있다.","caption":"AI가 생성한 코드는 실행과 테스트로 요구사항에 맞는지 확인해야 합니다.","description":null},"en":{"alt":"A middle-aged man uses a laptop in a classroom while a woman beside him points to a smartphone on the table.","caption":"AI-generated code must be run and tested to verify that it meets the requirements.","description":null},"ja":{"alt":"実習教室で中年の男性がノートパソコンを操作し、隣の女性が机の上のスマートフォンを指さしている。","caption":"AIが生成したコードは、実行とテストで要件を満たしているか確認する必要があります。","description":null},"es":{"alt":"Un hombre de mediana edad usa un portátil en clase mientras una mujer señala un móvil sobre la mesa.","caption":"El código generado por IA debe ejecutarse y probarse para comprobar que cumple los requisitos.","description":null},"id":{"alt":"Pria paruh baya menggunakan laptop di kelas, sementara perempuan di sebelahnya menunjuk ponsel di meja.","caption":"Kode buatan AI harus dijalankan dan diuji untuk memastikan kesesuaiannya dengan kebutuhan.","description":null},"pt":{"alt":"Um homem de meia-idade usa um notebook em aula enquanto uma mulher aponta para um celular sobre a mesa.","caption":"O código gerado por IA deve ser executado e testado para verificar se atende aos requisitos.","description":null},"zh-hant":{"alt":"實作教室裡，一名中年男子操作筆記型電腦，身旁的女子指著桌上的智慧型手機。","caption":"AI 生成的程式碼必須透過執行與測試，確認是否符合需求。","description":null},"de":{"alt":"Ein Mann mittleren Alters nutzt im Kurs einen Laptop, während eine Frau neben ihm auf ein Smartphone zeigt.","caption":"KI-generierter Code muss ausgeführt und getestet werden, um zu prüfen, ob er die Anforderungen erfüllt.","description":null}}},{"id":2242,"url":"https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzQ0NjcsInB1ciI6ImJsb2JfaWQifX0=--0a47db349b5b04ebfcd192a40d156aec0886d68c/ai-3af1935f.webp","is_representative":false,"generation_method":"ai_semi","license":"ai_generated","mime_type":"image/webp","width":1536,"height":1024,"translations":{"ko":{"alt":"서버실에서 CPU 방열판과 GPU 카드가 드러난 서버 내부를 살펴보는 여성","caption":"Mojo는 CPU와 GPU의 고성능 연산을 겨냥한 언어입니다.","description":null},"en":{"alt":"A woman inspects an open server with exposed CPU heatsinks and a GPU card in a server room.","caption":"Mojo targets high-performance computing on CPUs and GPUs.","description":null},"ja":{"alt":"サーバールームで、CPUヒートシンクとGPUカードが見えるサーバー内部を確認する女性","caption":"MojoはCPUとGPUでの高性能な演算を目指した言語です。","description":null},"es":{"alt":"Una mujer revisa un servidor abierto con disipadores de CPU y una tarjeta GPU en una sala de servidores.","caption":"Mojo está orientado a la computación de alto rendimiento en CPU y GPU.","description":null},"id":{"alt":"Seorang perempuan memeriksa server terbuka dengan heatsink CPU dan kartu GPU di ruang server.","caption":"Mojo ditujukan untuk komputasi berkinerja tinggi pada CPU dan GPU.","description":null},"pt":{"alt":"Uma mulher examina um servidor aberto com dissipadores de CPU e uma placa GPU em uma sala de servidores.","caption":"Mojo é voltada à computação de alto desempenho em CPUs e GPUs.","description":null},"zh-hant":{"alt":"一名女性在伺服器機房檢查打開的伺服器，內部可見 CPU 散熱器與 GPU 卡","caption":"Mojo 是以 CPU 與 GPU 高效能運算為目標的程式語言。","description":null},"de":{"alt":"Eine Frau prüft einen geöffneten Server mit CPU-Kühlkörpern und GPU-Karte im Serverraum.","caption":"Mojo ist auf Hochleistungsberechnungen mit CPUs und GPUs ausgerichtet.","description":null}}},{"id":2243,"url":"https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MzQ0NzMsInB1ciI6ImJsb2JfaWQifX0=--47192b2aea313b116670ff123c0e9547fdd1490d/ai-e3494410.webp","is_representative":false,"generation_method":"ai_infographic","license":"ai_generated","mime_type":"image/webp","width":1024,"height":1536,"visible_locales":["ko"],"translations":{"ko":{"alt":"브라우저·서버 흐름, 웹 언어의 역할, 언어별 주의점과 생성 코드 검증 절차를 정리한 인포그래픽","caption":"바이브코딩에서는 언어 이름보다 실행 위치와 데이터 처리 방식을 이해하는 것이 중요합니다.","description":null},"en":{"alt":"Programming language guide with browser–server flow, web roles, language checks and a code-testing cycle.","caption":"In vibe coding, understanding where code runs and how it handles data matters more than language names.","description":null},"ja":{"alt":"ブラウザーとサーバーの流れ、Web言語の役割、言語別の注意点、生成コードの検証手順をまとめた図解","caption":"バイブコーディングでは、言語名よりも実行場所とデータの処理方法を理解することが重要です。","description":null},"es":{"alt":"Guía de lenguajes con flujo navegador-servidor, funciones web, precauciones y ciclo de pruebas de código.","caption":"En vibe coding, importa más entender dónde se ejecuta el código y cómo procesa los datos que conocer nombres de lenguajes.","description":null},"id":{"alt":"Panduan bahasa pemrograman: alur browser-server, peran web, catatan tiap bahasa, dan siklus pengujian kode.","caption":"Dalam vibe coding, memahami tempat kode berjalan dan cara data diproses lebih penting daripada nama bahasanya.","description":null},"pt":{"alt":"Guia de linguagens com fluxo navegador-servidor, funções web, cuidados e ciclo de testes de código.","caption":"No vibe coding, entender onde o código é executado e como processa os dados importa mais do que os nomes das linguagens.","description":null},"zh-hant":{"alt":"程式語言入門資訊圖，整理瀏覽器與伺服器流程、網頁語言分工、各語言注意事項及生成程式碼的驗證步驟","caption":"在氛圍編程中，理解程式的執行位置與資料處理方式，比記住語言名稱更重要。","description":null},"de":{"alt":"Programmiersprachen im Überblick: Browser-Server-Ablauf, Webaufgaben, Sprachhinweise und Code-Testzyklus.","caption":"Beim Vibe Coding ist es wichtiger zu verstehen, wo Code läuft und wie er Daten verarbeitet, als Sprachnamen zu kennen.","description":null}}}],"published_at":"2026-10-29T14:25:12+09:00","updated_at":"2026-10-29T14:25:12+09:00","license":"cc_by","translation_status":"original","available_locales":["ko","en","ja","es"],"data_locales":["ko","en","ja","es","id","pt","zh-hant","de"],"url":"https://injoys.com/ko/articles/vibe-coding-programming-language-basics"}