디버그, 디버깅: 소프트웨어에 발생한 문제의 원인을 찾는 것
기능이 많으면 코드도 복잡하여 개발 과정 중 오류가 발생. (의도대로 한번에 작동하지 않기 때문)새 기능 개발, 기존 기능 수정역시 많은 디버깅 과정을 거친다.
(완성 후 오류 발생때도 디버깅 과정을 거쳐야함.)
디버깅 <-> 배포 = 개발중 <-> 개발완료초창기 컴퓨터는 기계 내부에 벌레가 들어가 오류가 발생하여
de+bug
로 시작
원인은 단순 오타, 문법적 오류. 논리적 설계 오류로 발생할 수 있음.
코드 실행시 컴퓨터와 안맞을 수도 있으며 입력을 받는 코드의 경우 예상과 다른 값을 입력받아 에러를 발생할 수도 있음.프로그램이 복잡해지면 디버깅 방식도 달라진다.
프로그램 코드도 동일
모든 코드를 돌려볼 수 없으니 특정 단계마다 상태를 확인하여 어느 지점에 오류를 발생시키는 요소가 있는지 확인.
이 작업은 많은 시간과 에너지를 소모하기 때문에 디버깅을 돕는 코딩 툴도 진화, VSCode와 같은 IDE에 디버깅을 위한 기능을 갖추고 있다.
코드 중간마다 값을 살펴보거나 원하는 결과물이 아닐 때 디버깅 툴을 활용하여 어느 지점에 어느 문제가 있는지 찾아봄.
빌드: 작업하는 프로젝트 파일을 출시하기 전 적합한 형태로 변환하는 작업
소프트웨어는 여러 폴더, 파일로 이루어져있다. (개발자의 편의를 위함)
파일 내부에는 코드, 라이브러리, 소스파일이 포함됨.
일반적으로 이를 다른 형태로 변형 또는 압축하는 것을 빌드라고 부름.exe 파일처럼 사용자가 바로 실행할 수 있는 파일 하나로 제공하기 위함
혹은 전체 크기를 줄이기 위한 압축과정.
가능한 코드를 못알아 보도록 난독화 하는 경우도 있다.
컴파일 언어의 경우 컴파일을 하여 내보내는 것과 같음. (컴파일 작업이 빌드에 포함)언어마다, 종류마다 결과물 형태는 다양
파일 하나로 압축되기도 하며 많은 파일에 걸친 코드가 더 적은 수의 파일로 정리도 하며 형식과 내용만 변경되기도 한다.
배포: 코딩하여 빌드한 결과물을 사용자에게 전달하는 과정.
데스크탑 프로그램의 경우 다운로드 받을 수 있는곳에 업로드.
모바일 앱이라면 앱스토어에 등록하는 것
웹사이트는 서버에 올린 뒤 실행하여 사람들이 해당 사이트를 도메인으로 접근하여 볼 수 있도록 하는 작업.웹 개발에서 배포의 의미?
사람들이 보는 웹사이트에 작업한 내용물을 반영하는 의미.
웹사이트에 코드 수정등으로 변화가 발생하였다면 새 버전이 배포된 결과.
프로그래밍 언어
컴퓨터에 명령을 내릴 때 사용하는 언어
사람과 컴퓨터 사이의 언어라 불리며 정교하고 풍성한 소통 수단으로 이용된다.
프로그래밍 언어가 다양한 이유
다양한 요구사항, 수요에 따라 새로운 언어가 만들어지며, 오늘날 널리 사용되는 프로그래밍 언어는 과거에 비해 편리하면서 오류발생이 적고 더 다양하고 강력한 기능을 갖추게 되었다.
대표적인 프로그래밍 언어
C, Java, Python, JavaScript
언어는 세부적인 내용은 다르나 서로 비슷한 부분이 많다. (문법, 구문등을 대다수 공유중) 비슷한 요소들이 많아 하나를 배우면 다른 언어로 작성된 코드도 웬만하면 어려움 없이 읽을 수 있다.
언어마다 설계 목적, 철학, 강점이 다르기 때문에 목적에 따라 사용하게 된다.
프로그래밍 언어는 9천여개에 달하지만 실제 사용 언어는 다르다. -> 언어의 발전에 따라 낡고 오래된 언어는 새로운 언어에 대체되며 꾸준한 업데이트로 지속적인 사용이 되는 언어도 있다.
고수준 언어와 저수준 언어
컴퓨터는 이진법으로 이뤄져있다.
실제 컴퓨터는 CPU에서 명령을 처리할 때 0과 1로 이뤄진 기계어로 수행된다.
C, Java의 경우 소스코드를 번역하여 기계어로 변환하여 컴퓨터가 변환된 기계어를 읽고 명령을 수행한다.
고수준 언어: 사람의 언어, 표현방식과 유사한 언어
저수준 언어: 0과 1로 나열된 기계어와 유사한 언어
* 일반적인 프로그래밍 언어는 고수준 언어에 속한다.
어셈블리어: 기계어를 제외한 유일한 저수준 언어에 속하는 프로그래밍 언어. 하나의 명령에 한가지 동작을 수행하는 단순한 언어.
세부적인 명령 수행에 유용하여 임베디드 개발자가 많이 사용한다.
고수준 프로그래밍 언어
컴파일 언어: 프로그래밍 이후 전체 코드를 기계어로 변역하는 컴파일 과정을 수행한다. (실행 파일을 생성, 실행)
컴파일 과정으로 전체 개발 시간은 증가하지만 오류로 부터 안전하며 실행 속도가 빠르다.
인터프리터 언어: 작성 코드를 한줄씩 번역하여 실행한다.
신속하고 유연한 개발 과정이 필요한 소프트웨어에 사용
대표적 컴파일 언어: C, C++, Java, TypeScript, Kotlin, Swift, Scala, Go, Rust
대표적 인터프리터 언어: JavaScript, Python, Ruby, PHP, Perl, R
IDE - 통합 개발 환경
잘못된 코드를 작성하지 않도록 돕는 프로그램.
코드를 편리하게 실행할 수 있으며 각 기능을 쉽게 테스트하며 오류의 원인을 알려주어 개발을 쉽고 빠르게 할 수 있도록 도와준다.
최근 비효율적이고 반복되는 부분을 쉽게 구성, 협업을 돕는 기능 역시 추가되고 있다.
대표적인 IDE
이클립스 : 자바 프로그래밍에 자주 사용되는 도구. 다양한 기능, 준수한 성능으로 업계에 사랑받는다
인텔리제이: 이클립스와 비슷한 용도, 강력한 기능을 가짐.(부분 유료)
파이참: 파이썬 개발에 특화되었다. (부분 유료)
안드로이드 스튜디오: 안드로이드 개발용 IDE 자바나 코틀린을 사용한다. (인텔리제이의 안드로이드 버전)
엑스코드: 애플이 개발하여 맥에서만 사용가능. 스위프트로 iOS 개발에 사용
비주얼 스튜디오: 무겁지만 강력한 기능을 자랑하며 다양한 소프트웨어 개발에 사용
비주얼 스튜디오 코드: 가벼운 코드 편집 위주의 기능을 포함. 원하는 플러그인으로 자유롭게 구성할 수 있다.
디버그: 오류 수정 프로그램과 그 작업을 통칭하는 단어.
과거 컴퓨터 오작동이 실제로 벌레가 끼어 죽어 발생한 것에서 유래
디버깅: 오류를 찾는 행동. 실무에서는 코드 작성 내내 프로그램을 돌려보는 것도 디버깅이라 지칭.
개발에 많은 부분을 차지하는 중요한 작업. 코드 작성 시작부터 출시 이전까지 반복된다.
빌드: 소스코드를 프로그램으로 포장하기
소스코드를 비롯한 모든 프로그램 요소를 모아 실행 가능한 파일로 만드는 과정.
여러개의 파일로 구성된 코드를 기능 추가, 디버깅시 바로 돌려볼 수 있도록 해야한다.
PC, 모바일에서 사용할 수 있도록 파일 확장자 역시 변환해야한다. .exe, .apk 형식으로 바꾸는 과정 역시 빌드의 과정이다.
빌드 번호와 버전 번호
빌드 번호: 출시 전 프로그램 버전.
디버그 빌드: 개발기간 동안 오류나 기능 테스트를 위해 빌드하는 것. 설정 파일을 다같이 돌리기 때문에 무겁고 느리다.
릴리스 빌드: 배포 직전 점검하는 베타 버전. 출시 준비가 끝났음을 의미한다. 디버그 빌드보다 가볍고 빠르게 돌아간다.
버전 정보: 제품 출시 후 수정이 불가능한 정식 버전.
출시 버전을 변경하려면 새로운 버전을 만들어 배포해야한다.
배포: 빌드를 마친 실행가능 파일을 사용자가 접근할 수 있는 환경에 배치하는 것. 과거에는 CD, 플로피 디스크를 사용하여 배포하였으나 최근에는 모두 온라인으로 이뤄진다. 모바일은 앱스토어, PC는 웹사이트로 이뤄짐
유지보수: 서비스 출시 이후 버그 대응, 업데이트 등 후속 조치를 취하는 과정. 코드를 어떻게 고쳐야 할지, 설계 변경시 최소한의 수정이 진행되며 원인을 쉽게 파악할 수 있어야 한다.
리팩토링: 문제 해결, 코드 개선, 쉽고 효율적인 코드로 만드는 작업.
코드리뷰: 개발자끼리 코드를 확인하고 의견을 주고받는 일.
코드리뷰로 얻는 이점
1. 작성자가 발견하지 못한 오류를 발견할 수 있다.
2. 선임 개발자는 신입 개발자의 미숙한 부분을 지도할 수 있으며 신입 개발자는 선임 개발자의 코드로 실전 지식 습득이 가능하다.
3. 띄어쓰기, 함수, 변수 용어를 통일하여 소스코드 가독성과 일관성 유지가 가능하다. (코드 컨벤션 확인)
문서화: 사용자, 유지보수에 유리하도록 작성하는 전문 문서.
주석: 코드 중간에 작성하는 설명, 단 코드에 영향을 미치지 않음.