https://github.com/gyoogle/tech-interview-for-developer
개발자들이 하는일
코딩, 프로그래밍, 개발
- 코딩 (Coding)
- 소스코드를 작성하는 단순 작업을 의미합니다.
- 프로그램의 구체적인 지시사항을 컴퓨터 언어로 변환하는 과정입니다.
- 구체적인 명령어를 작성하여 컴퓨터가 이해할 수 있는 형태로 만드는 것입니다.
- 프로그래밍 (Programming)
- 코드를 설계하는 것을 말합니다.
- 단순히 코드를 작성하는 것을 넘어서 프로그램의 구조를 구상하고, 문제를 해결하기 위한 알고리즘을 개발하는 과정을 포함합니다.
- 문제 해결 능력과 시스템적 사고를 필요로 하며, 효율적이고 효과적인 코드를 작성하기 위한 전략적 접근이 중요합니다.
- 개발 (Development)
- 소프트웨어를 만드는 모든 과정을 말합니다.
- 코딩과 프로그래밍뿐만 아니라 요구사항 분석, 설계, 테스팅, 유지보수 등 프로젝트의 전체 라이프사이클을 포함합니다.
- 개발은 기술적인 작업 뿐만 아니라 프로젝트 관리, 협업, 사용자 경험 디자인 등 다양한 요소들을 포괄하는 포괄적인 개념입니다.
고수준 언어 vs 저수준 언어
- 고수준 언어 (High-Level Language)
- 사람에 가까움: 고수준 언어는 사람이 이해하기 쉬운 언어에 가깝습니다.
- 자연어와 유사한 문법을 사용하여 프로그래머가 쉽게 이해하고 사용할 수 있도록 설계되었습니다.
- 예시: 자바(Java), 파이썬(Python), C++, 자바스크립트(JavaScript) 등. 이 언어들은 추상화 수준이 높아 기계가 직접 이해하기 어렵지만 프로그래머에게 친숙하고 직관적인 코딩 경험을 제공합니다.
- 컴파일러 또는 인터프리터 필요: 고수준 언어로 작성된 코드는 컴퓨터가 이해할 수 있는 기계어로 변환되기 위해 컴파일러나 인터프리터를 거쳐야 합니다.
- 저수준 언어 (Low-Level Language)
- 컴퓨터에 가까움: 저수준 언어는 컴퓨터의 구조와 더 밀접하게 연관되어 있습니다.
- 기계어 또는 그에 가까운 형태로, 컴퓨터의 하드웨어와 직접적으로 소통할 수 있는 언어입니다.
- 예시: 어셈블리 언어(Assembly Language)와 기계어(Machine Language)가 대표적입니다. 어셈블리 언어는 하드웨어에 특화되어 있어 특정 컴퓨터 아키텍처에 종속적입니다.
- 하드웨어에 직접적인 제어: 저수준 언어는 메모리 관리와 하드웨어의 직접적인 제어가 가능하며, 이를 통해 성능 최적화가 가능합니다. 하지만 이는 더 복잡한 코딩과 높은 오류 가능성을 수반합니다.
IDE vs 코드 에디터
- IDE (Integrated Development Environment, 통합 개발 환경)
- 통합된 환경: IDE는 코드 작성, 편집, 컴파일, 디버그, 그리고 때로는 테스팅과 배포를 포함한 소프트웨어 개발의 전 과정을 지원하는 통합된 환경입니다.
- 예시: Visual Studio, IntelliJ IDEA, Eclipse, NetBeans 등.
- 고급 기능 제공: 자동 완성, 코드 리팩토링, 버전 관리, 빌드 시스템 통합, 디버깅 도구 등 다양한 고급 기능을 제공합니다.
- 특정 프로그래밍 언어나 프레임워크에 최적화: 특정 언어나 프레임워크에 특화되어 있어 해당 언어나 플랫폼을 사용하는 개발자에게 편리함을 제공합니다.
- 코드 에디터 (Code Editor)
- 기본적인 편집 기능: 코드 에디터는 주로 코드를 작성하고 편집하는 데 사용되며, IDE보다 덜 복잡한 기능을 제공합니다.
- 예시: Notepad++, Sublime Text, Visual Studio Code, Atom 등이 있습니다.
- 경량화 및 유연성: 일반적으로 IDE보다 가볍고 빠르며, 다양한 언어를 지원하고 사용자 정의가 용이합니다.
- 플러그인을 통한 기능 확장 가능: 필요에 따라 플러그인을 추가하여 기능을 확장할 수 있지만, IDE만큼의 통합된 환경을 제공하지는 않습니다.
디버깅, 빌드, 배포
- 디버깅 (Debugging)
- 정의: 소프트웨어 개발에서 발생하는 버그(오류)나 문제점을 찾아내고 해결하는 과정입니다.
- 중요성: 프로그램이 예상대로 작동하지 않을 때, 디버깅을 통해 오류의 원인을 찾아내고 수정합니다. 이는 프로그램의 안정성과 신뢰성을 보장하는 데 중요합니다.
- 도구: 대부분의 IDE에는 디버깅을 위한 도구가 내장되어 있으며, 이를 통해 코드의 실행을 단계별로 추적하고 변수의 값을 검사할 수 있습니다.
- 빌드 (Build)
- 정의: 소스 코드를 컴파일하고, 필요한 리소스를 결합하여 실행 가능한 소프트웨어 제품(실행 파일, 라이브러리 등)을 만드는 과정입니다.
- 과정: 빌드 과정에는 소스 코드의 컴파일, 라이브러리의 연결, 자산(이미지, 데이터 파일 등)의 포함 등이 포함됩니다.
- 자동화: 대형 프로젝트에서는 자동화된 빌드 시스템(예: Jenkins, Maven, Gradle)을 사용하여 빌드 과정을 효율적으로 관리합니다.
- 배포 (Deployment)
- 정의: 완성된 소프트웨어를 사용자나 클라이언트에게 전달하고 실행할 수 있도록 만드는 과정입니다
- "지속적 배포: 현대적인 개발 방법론에서는 지속적 통합(CI) 및 지속적 배포(CD) 방식을 채택하여, 자동화된 테스트를 거쳐 소프트웨어를 지속적으로 배포합니다.
서버와 클라우드
서버와 클라이언트
"서버"와 "클라이언트"는 네트워크 환경에서 상호작용하는 두 주요 구성 요소를 나타내며, 이들 간의 관계는 소프트웨어 및 인터넷 서비스의 기본적인 구조를 형성합니다.