💾 혼공학습단 12기
챕터 1. 개발자 이해하기: 개발과 개발자 용어 알기
01-3 프로그래밍 언어도 외국어인가요?
tmi. 세상에 프로그래밍 언어가 9,000개나 존재한다... 😶
1. 프로그래밍 언어
- 컴퓨터에 명령을 내릴 때 사용하는 언어
- 사람과 컴퓨터 사이에도 언어라 부릴 만큼 정교하고 풍성한 소통 수단이 필요. 그것이 프로그래밍 언어
2. 프로그래밍 언어가 다양한 이유
- 대표적인 프로그래밍 언어: C, 자바, 파이썬, 자바스크립트 등
- 좀 더 읽기 편한 언어, 짧은 코드로 더 많은 지시를 내릴 수 있는 언어, 보다 빨리 작동하는 언어, 오류로부터 안전한 언어를 원하는 사람들이 생김. 이처럼 다양한 요청과 수요에 따라 계속해서 새로운 프로그래밍 언어가 만들어짐
- 그 결과로 오늘날 널리 사용되는 프로그래밍 언어들은 과거에 비해 편리하면서도 오류 발생이 적고 더 강력한 기능들을 갖추게 되었음
3. 고수준 언어와 저수준 언어
- 고수준 언어: 사람의 언어나 표현 방식에 보다 가까운 것을 말함
- 저수준 언어: 0과 1만 나열되어 있는 기계어에 가까움
- 어셈블리어
- 고수준 언어와 기계어 사이에 있음. 기계어를 제외하고는 유일하게 저수준 언어에 속하는 프로그래밍 언어
- 하나의 명령에 한 가지 동작밖에 할 수 없음. 복잡한 프로그래밍을 해내기는 매우 어려움
- 하드웨어와 밀접한 개발을 하는 임베디드 개발자들이 많이 사용함
- 컴파일 언어 (고수준)
- 프로그래밍을 완료한 뒤 코드 전체를 미리 기계어 등으로 '번역'(컴파일)해 둔 다음에 실행하는 언어
- 컴파일일 과정으로 전체 개발 시간은 늘어나지만, 오류로부터 비교적 안전하고 프로그램 실행 속도 빠름
- 인터프리터 언어 (고수준)
- 사전에 번역하는 과정 없이 실행 시 바로 한 줄씩 '통역'되어 동작하는 언어
- 신속하고 유연한 개발 과정이 필요한 소프트웨어에 인터프리터 언어가 많이 사용됨
대표적인 컴파일 언어 | 대표적인 인터프리터 언어 |
C, C++, C#, 자바, 타입스크립트, 코틀린, 스위프트, 스칼라, Go, 러스트 | 자바스크립트, 파이썬, 루비, PHP, 펄, R |
4. IDE
- 통합 개발 환경 (IDE, Integrated Development Environment)
- 코드를 편리하게 실행할 수 있음
- 각 기능을 쉽게 테스트하고 오류가 나는 원인을 친절하게 알려 주어 개발을 빠르고 정확하게 할 수 있도록 도와줌
- 비효율적이거나 반복되는 부분을 스마트하게 재구성해 줌
- 다른 개발자와 온라인 협업을 도와주는 등 나날이 강력해지고 있음
- 종류
- 이클립스: 자바 프로그래밍에 많이 사용됨
- 인텔리제이: 강력한 기능을 가진 IDE. 모든 기능 사용을 위해서는 유료 정기 구독권 구입해야 함
- 파이참: 파이썬 개발에 특화된 IDE
- 안드로이드 스튜디오: 인텔리제이의 안드로이드 개발용 버전. 자바, 코틀린 사용
- 엑스코드: 맥에서만 사용 가능. 스위프트를 사용하여 아이폰 앱이나 맥용 프로그램 만드는 데 사용
- 비주얼 스튜디오: 윈도우 프로그램부터 온라인 서비스 등 다양한 소프트웨어 개발에 사용됨
- 비주얼 스튜디오 코드: 광범위한 종류의 개발에 사용되는 도구. IDE가 아닌 코드 에디터로 구분됨. 하지만 원하는 플러그인을 자유롭게 추가해서 용도에 맞는 IDE로 구성할 수 있음
01-4 디버깅 중인데, 빌드해 보고 이상 없으면 릴리스할게요
1. 디버깅
- 개발에서 20%는 코딩, 80%는 디버깅이라는 말이 있음
- 디버그
- 프로그램 개발 중 발생하는 오류나 비정상적인 작업을 분석하고 원인을 찾아 제거하는 작업을 의미함
- 주로 오류 수정 프로그램과 그 작업을 통칭하는 단어로 사용됨
- 디버깅: 오류를 찾아 제거하는 과정
2. 빌드
- 소스 코드를 비롯한 모든 프로그램 구성 요소를 모아 실행할 수 있는 파일 또는 파일 묶음을 만드는 과정
- 윈도우 프로그램이라면 exe 파일로, 모바일 앱이라면 앱스토어나 플레이스토어에 올릴 수 있는 apk 파일로 바꿔 주는 과정이 빌드임
3. 빌드 번호와 버전 번호
- 빌드 번호
- 출시되기 전의 프로그램 버전
- 제품 출시 직전에 진행되는 여러 가지 테스트 단계에서 수정 및 업데이트되는 내용을 빌드 번호로 구분
- 빌드 번호 종류
- 디버그 빌드: 개발자가 제품을 개발하는 동안 오류나 기능을 테스트하기 위해 빌드하는 것
- 릴리스 빌드: 제품의 모든 개발이 끝난 후 배포하기 직전에 점검한느 베타 버전임
- 버전 번호
- 제품 및 패키지를 출시하고 나면 수정이 불가능한 정식 버전
4. 배포
- 빌드를 마친 실행 가능 파일을 사용자가 접근할 수 있는 환경에 배치하는 것
- 웹사이트
- 코드를 서버에 업로드해서 사용자들이 컴퓨터나 모바일 장치에서 볼 수 있도록 함으로써 배포
- 모바일 앱
- 사용자가 다운로드할 수 있는 형태로 플레이스토어나 앱스토어 같은 앱 마켓에 업로드함으로써 배포가 이루어짐
- PC용 응용 프로그램은
- 설치 파일을 다운로드할 수 있도록 웹사이트를 통해 배포함
5. 유지보수
- 프로그램 배포 후 이어지는 버그 대응 및 기능 업데이트 등의 후속 작업들을 유지 보수라고 함
- 유지 보수는 프로그래밍보다 더 앞선 기획 단계부터 준비해야 할 요소임
6. 리팩토링
- 코드를 개선하여 읽기 쉽고 효율적인 좋은 코드로 만드는 작업
- '좋은 코드'는 단지 주어진 기능을 잘 해내는 코드가 아님
- 결과는 바꾸지 않으면서 코드를 더 아름답게 리모델링하는 것
7. 코드 리뷰
- 소스 코드에 반영할 때 동료 개발자들이 작성한 코드를 확인하고 의견을 주고받는데, 이를 코드리뷰라고 함
- 얻을 수 있는 이점
- 작성자가 발견하지 못한 오류를 동료가 발견하여 사전에 문제 방지
- 노련한 선임 개발자는 신입 개발자가 짠 코드에서 미숙한 부분을 찾아 지도해 주고, 신입 개발자는 선임 개발자가 짠 코드를 통해 실전 지식을 습득할 수 있음
- 띄어쓰기 방식이나 함수와 변수에 사용하는 용어를 통일해서 소스 코드를 좋은 가독성과 일관된 스타일로 유지할 수 있음
코딩 컨벤션
변수의 이름을 짓는 법, 코드의 줄을 맞추는 법과 같이 팀 또는 회사 내에서 정한 코딩 스타일 규약
코딩 컨벤션은 아니지만, 이전에 정리했던 git commit message convention을 추가함!
8. 문서화
- 코드를 전반적으로 요약해서 설명하고, 각 기능을 코드에서 어떻게 사용하면 되는지 등을 정리
- 워드 문서로 작성하기도 하고, 어느 정도 자동으로 작성해 주는 전문 도구를 사용하기도 함
챕터 2. 개발자 따라가기: 인공지능 기술 알기
02-1 인공지능의 발전
1. 인공지능
- 인공지능은 인간의 지능을 모방하여 작업을 수행하는 시스템
- 언어 번역, 음성 인식, 이미지 분석 등
- 규칙 기반, 학습 기반(머신러닝, 딥러닝)으로 구분
- 머신러닝: 컴퓨터가 스스로 학습하는 기술
- 딥러닝: 머신러닝의 한 방식으로, 인간의 뇌가 정보를 처리하는 방식을 본떠서, 컴퓨터가 사진이나 음성 같은 복잡한 데이터에서 스스로 중요한 특징을 찾아내게 해주는 것
2. 규칙 기반 인공지능
- 미리 정해진 규칙이나 조건들을 기반으로 작동하는 인공지능 시스템
- 개발자가 시스템에 특정 규칙이나 조건을 입력하면, 인공지능은 입력된 규칙에 따라 작동함
- 장점
- 규칙이 명확하고 이해하기 쉬움
- 특정 상황에 대한 반응을 정확히 예측할 수 있음
- 단점
- 규칙 외의 상황에 대해서는 대응하기 어려움
- 개발자가 규칙을 얼마나 잘 설정하느냐가 시스템의 성능을 좌우한다고 볼 수 있음
3. 머신러닝
- 인공지능의 한 분야, 컴퓨터가 데이터를 통해 학습하고 스스로 판단을 내릴 수 있게 하는 기술
- 컴퓨터에게 다양한 데이터를 제공하고, 그 데이터로부터 패턴을 찾아내어 학습하게 함
- 이 과정에서 컴퓨터는 데이터를 통해 '학습'하고, 그 학습을 바탕으로 새로운 문제를 해결하거나 예측하는 능력을 갖추게 됨
- 지도 학습, 비지도 학습, 강화 학습으로 나눌 수 있음
- 지도 학습
- 컴퓨터에게 입력 데이터와 그에 해당하는 정답을 함께 제공함
- 이 데이터를 바탕으로, 컴퓨터는 입력 데이터와 출력 데이터 간의 관계(규칙)를 학습함
* 레이블: 각 데이터 포인트에 붙은 정답이나 목표값
- 비지도 학습
- 컴퓨터에게 레이블이 없는 데이터만을 제공하고 스스로 제공된 데이터 내의 숨겨진 구조나 패턴을 찾아내는 방식
- 강화 학습
- '시핵착오' 방식을 따름
- 알고리즘이 특정 환경 내에서 시도와 오류를 통해 목표를 달성하는 방법을 학습함
- 보상 시스템을 기반으로 하는데, 알고리즘이 올바른 결정을 내리면 '보상'을 받고, 잘못된 결정을 내리면 '벌'을 받음
- '시핵착오' 방식을 따름
- 지도 학습
4. 빅데이터
- 머신러닝 모델을 훈련시키고 개선하기 위한 핵심 자원으로, 방대한 양의 데이터를 의미함
- 빅데이터는 인공지능에게 필요한 '학습 자료'를 제공하며, 인공지능은 이 자료를 사용해 학습하고, 그 결과를 실제 세계의 다양한 문제 해결에 적용함
- 특징
- 매우 다양한 형태로 존재함 (텍스트, 이미지, 오디오, 비디오 등)
- 데이터들은 구조화된 형태일 수도 있고, 구조화되지 않은 형태일 수도 있음
- 데이터가 매우 빠른 속도로 생성, 수집, 처리되어야 함
5. 딥러닝과 인공 신경망
- 딥러닝은 머신러닝의 한 형태, 인공 신경망이라는 구조를 사용하여 컴퓨터가 스스로 학습하고 판단을 내릴 수 있게 하는 기술
- 인공 신경망은 인간의 뇌를 모방한 컴퓨터 시스템을 말함
- 그물 형태의 여러 '층'으로 구성됨
- 가장 처음에 '입력 계층'이 있어서, 데이터를 받아들임
- 마지막에는 '출력 계층'이 있어서 결과를 내놓음
- 이 두 계층 사이에 존재하는 여러 '은닉 계층'에서 복잡한 연산들을 수행함
- 각 계층은 여러 '노드' 또는 '뉴런'으로 이루어져 있음
02-2 인공지능 더 깊이 알기
1. 인공지능의 구분
- 인공지능은 능력과 목적에 따라 약인공지능과 강인공지능으로 구분
- 인공지능 시스템이 수행할 수 있는 작업의 복잡성과 범위에 따라 이루어짐
- 약인공지능
- 좁은 인공지능
- 매우 특정한 작업을 수행하도록 설계되어 있음
- 이메일에서 스팸 메일을 필터링하거나 음성 인식을 통해 사용자의 명령을 이해하는 시스템과 같은 것들
- 주어진 작업에는 탁월하게 활용될 수 있지만, 그 범위를 벗어난 일에는 활용할 수 없음
- 강인공지능
- 인간과 유사한 수준의 지능을 가지고 있음
- 다양한 문제를 스스로 학습하고 해결할 수 있음
- 학습, 이해와 추론, 심지어 자기 인식 등 인간과 유사한 고차원적인 인지 능력을 가짐
2. 모델
- 인공지능에서 '모델'은 데이터로부터 학습된 패턴을 저장한 파일 또는 알고리즘을 의미하며, 입력된 데이터와 출력할 결과 사이의 관계를 나타내는 알고리즘
- 학습의 결과로 만들어짐
- OpenAI사의 챗GPT도 이 모델 중 하나임
3. 자연어 처리
- 컴퓨터가 인간의 언어를 이해하고 해석할 수 있도록 돕는 기술 분야로, 인간의 의사소통 능력을 컴퓨터에게 부여하려는 목적으로 사용함
- 자연어 처리는 크게 두 가지 작업으로 나눌 수 있음
- 이해: 컴퓨터가 인간의 언어를 인식하고 그 의미를 파악하는 과정
- 생성: 컴퓨터가 인간이 이해할 수 있는 언어로 응답하거나 새로운 텍스를 만들어 내는 과정
4. 생성형 인공지능
- 컴퓨터가 인간과 유사하게 창의적인 작업을 수행할 수 있도록 해주는 기술
- 예술 작품을 창작하거나 글을 작성하는 등 인간의 창조적인 능력을 모방하여 새로운 콘텐츠를 생성하는 데 중점을 두고 있음
5. 트랜스포머
- 인공지능 분야에서 매우 중요한 모델로, 데이터 처리뿐만 아니라 자연어 처리, 이미지 인식 등 다양한 분야에 활용됨
- 가장 큰 특징은 인코더-디코더 구조를 띄고 있으며, 어텐션 메커니즘, 그리고 피드 포워드 신경망을 사용함
- 인코더와 디코더
- 트랜스포머 모델은 인코더와 디코더로 구성됨
- 인코더는 입력 데이터를 처리하고 이해하는 데 사용됨
- 디코더는 인코더로부터의 정보를 받아 출력 데이터를 생성함
- 어텐션 메커니즘
- 트랜스포머의 핵심 기능 중 하나임
- 글에서 어느 정보에 '집중'해야 할지 판단하도록 도움
- 모델이 입력 데이터의 다양한 부분에 적절한 가중치를 부여하여, 중요한 요소에 주목하고 불필요한 부분은 무시할 수 있게 함
- 피드 포워드 신경망
- 인코더와 디코더 내부에는 피드 포워드 신경망이 존재함
- 이 신경망은 어텐션 메커니즘을 통해 얻은 정보를 사용하여 각 단어 또는 문장의 특징을 더욱 세밀하게 분석하고 변환하는 역할을 함
- 각 위치의 단어에 대해 독립적으로 동작하기 때문에 병렬 처리가 가능하여 매우 효율적임
02-3 생성형 인공지능 서비스 둘러보기
1. 대표적인 대화형 인공지능 서비스
- OpenAI - 챗GPT, 마이크로소프트 - 코파일럿, 구글 - 제미나이 등은 채팅을 하듯 텍스트로 문답을 주고받을 수 있는 대화형 인공지능임
- 챗GPT: 창의성을 바탕으로 한 생성 작업에 특화되어 있음
- 코파일럿: MS의 검색 엔진인 빙의 데이터와 정보를 기반으로 하여 보다 정확하고 신뢰할 수 있는 답변 제시
- 제미나이: 구글의 실시간 검색 데이터를 기반으로 역시 신뢰성 있는 답변을 제공
- 대화형 인공지능의 코딩 기능
- 코딩 기능 제공함
챗gpt: https://chatgpt.com/
코파일럿: https://www.microsoft.com/ko-kr/microsoft-copilot
제미나이: https://gemini.google.com/app?hl=ko
2. 생성형 인공지능 서비스
- 달리: OpenAI에서 개발한 이미지 생성형 인공지능 서비스, 텍스트 설명을 보고 그에 맞는 이미지를 만드는 인공지능
- 미드저니: 미드저니라는 연구실에서 개발한 인공지능 기반 이미지 생성 도구로, 주로 디스코드를 통해 사용됨. 사용자들은 디스코드의 특정 채널에서 직접 텍스트 명령으로 이미지를 요청하고 생성할 수 있음
- 드래그 겐: 사용자가 이미지의 특정 포인트를 마우스로 드래그하여 자세, 형태, 표정, 레이아웃 등을 정밀하게 조정할 수 있음
3. 기타 생성형 인공지능 서비스
- 동영상 관련 서비스
- 런웨이 젠2: 미국의 런웨이 리서치에서 개발함. 텍스트 입력이나 주어진 이미지를 바탕으로 동영상을 생성하고 편집하는 서비스임
- 신시시아: 주어진 대본으로 사람이 말하는 것 같은 동영상을 만들어 내는 서비스
- 작곡 서비스
- 뮤즈넷: OpenAI. 다양한 악기와 스타일로 음악을 작곡
- 마젠타 프로젝트: 구글. 인공지능을 통한 음악과 예술 창작에 중점을 둠. MIDI 생성을 용이하게 함
- Soundraw: 사용자가 원하는 장르, 기분, 템포에 따라 고유한 음악을 생성해 냄
- Soundful: 인공지능으로 비디오, 스트림, 팟캐스트 등을 위한 로열티 프리 배경 음악을 만들어 냄
- 설치형 코딩 지원 서비스
- 개발자들이 IDE 및 코드 에디터에서 사용할 수 있는 플러그인 형태의 인공지능 코딩 지원 서비스
- 마이크로소프트 - 깃허브 코파일럿, AWS - 위스퍼러, 탭나인, 코디움
- 코딩하지 않고 개발하기
- 노크드(No code)
- 이마지카 인공지능
프롬프트
우리가 인공지능에게 말을 걸 때 쓰는 특별한 종류의 '시작 신호'
- 형태
- 텍스트 프롬프트: 질문, 설명, 배경지식, 제약 조건 또는 명령의 형태일 수 있음
- 이미지 프롬프트: 이미지를 사용하여 시각적인 정보 제공
- 오디오 프롬프트: 음성 인식, 음악 생성 등 오디오 관련 작업을 위해 사용
- 효과적인 프롬프트 작성 방법
- 명확하고 간결하게
- 구체적인 정보 제공
- 목적을 분명히 하기
- 반복과 수정을 통해 개선하기
기본 숙제(필수)
Ch.01(01-3, 01-4) 확인 문제 풀고 인증하기 (p.68~69 & p.82~83)
01-3 확인 문제
1. 다음 중 각각의 IDE와 가장 적합한 용도에 맞게 짝지으세요.
- 이클립스 - ㄴ.자바 프로그래밍 연습
- 엑스코드 - ㄹ.iOS용 카메라 앱 개발
- 비주얼 스튜디오 - ㄱ. 윈도우용 화면 캡처 프로그램 개발
- 안드로이드 스튜디오 - ㄷ. 안드로이드용 건강 관리 앱 개발
2. 다음 항목들을 저수준부터 사람의 언어에 가까운 순으로 나열하세요.
어셈블리어, 파이썬, 기계어, 영어 -> ( 기계어 -> 어셈블리어 -> 파이썬 -> 영어 )
3. 다음 중 틀린 것을 고르세요.
- 기계어도 프로그래밍 언어에 속합니다.
- 사람에게 낯설고 어려울수록 고수준 언어에 가깝습니다.
- IDE는 소스 코드에서 오류를 쉽게 찾을 수 있도록 도와줍니다.
- 널리 사용되는 언어는 시간이 지남에 따라 바뀔 수 있습니다.
- 사람의 언어에 비해 프로그래밍 언어는 언어마다 차이가 크지 않습니다.
4. 다음 문장 중 괄호 안에 알맞은 내용을 보기에서 찾아 작성해 보세요.
보기 1. 0 / 2. 1 / 3. 어셈블리어
- 저수준 언어이면서 기계어가 아닌 언어에는 ( 어셈블리어 )이/가 있습니다.
- 기계어는 ( 0 )(와)과 ( 1 )(으)로 이루어져 있습니다.
5. 다음 문장 중 괄호 안에 알맞은 단어를 보기에서 찾아 작성해 보세요.
보기 1. 컴파일 / 2. 인터프리터
- 코드를 읽으면서 해석하고 실행하는 것은 ( 인터프리터 ), 코드를 기계어로 바꾸는 과정을 거치는 것은 ( 컴파일 ) 언어입니다.
01-4 확인 문제
1. 다음 중 틀린 것을 고르세요.
- 디버깅은 프로그램을 실행하며 동작을 확인한다는 의미로도 사용됩니다.
- 빌드는 배포 이후 이뤄지는 작업입니다.
- 안드로이드 앱을 플리이스토어에 업로드하는 것은 배포에 해당합니다.
- 빌드는 개발자들이 프로그램을 테스트해 보기 위해서도 이뤄집니다.
2. 다음 문장 중 괄호 안에 알맞은 내용을 보기에서 찾아 작성해 보세요.
보기 1. 주석 / 2. 버전 번호 / 3. 빌드 번호
- 개발자가 소프트웨어를 보다 쉽게 파악할 수 있도록 코드 중간에 포함된 설명을 (1. 주석)(이)라고 합니다.
- 개발자가 프로그램의 동작을 확인하는 빌드에는 (3. 빌드 번호)(이)가, 테스트를 마치고 고객에게 최종 전달되는 빌드에는 (2. 버전번호)(이)가 올라갑니다.
3. 다음 중 틀린 것을 고르세요.
- 유지 보수는 소프트웨어가 출시되기 전부터 고려할 사항입니다.
- 리팩토링한 프로그램은 이전과 다르게 동작합니다.
- 코드 리뷰는 구성원 개발자의 실력 향상에 도움이 됩니다.
- 문서화는 소프트웨어를 사용할 사람들을 위한 내용도 포함할 수 있습니다.
4. 다음 중 각 문장에 해당하는 작업을 작성해 보세요.
- 윈도우용 프로그램을 프로그래밍한 뒤 EXE 파일로 내보내기 ( 빌드 )
- 동료가 작성한 코드에서 수정할 부분 찾기 ( 코드 리뷰 )
- 게임일 실행되는 동안 일어나는 오류를 찾아 원인 파악 후 해결하기 ( 디버깅 )
- 모바일 앱을 앱 마켓에 업로드하기 ( 배포 )
- 교통 정보 앱의 코드를 더 알아보기 쉽게 수정하기 ( 리팩토링 )
2주 차 후기
챕터 2부터가 개정판부터 새로 추가된 AI와 관련된 내용이 시작되었다.
나 또한 챗GPT를 많이 사용하는 편이지만?
막상 AI나 LLM과 같은 단어나 관련된 정보 같은 것을 접할 때면 혼란스러웠다.
어디선가 들어본 단어인 것 같기도 하고, 알 것 같은데 알지 못했던 것...
물론 한 번 읽는다고, 다 이해가 되는 것은 아니겠지만!
얼핏 들었던 것들에 대해 다시 정리해 볼 수 있는 시간이었다.
또한 인공지능 서비스의 종류도 꽤나 다양하다는 걸 알게 되었다.
나중에 써먹을 일이 있지 않을까?
한빛미디어 <혼자 공부하는 얄팍한 코딩 지식> 책 참고
'ETC > LEARN' 카테고리의 다른 글
[혼공얄코] 요청 메소드와 응답코드, 리눅스에 대한 학습 (4주 차) (0) | 2024.07.23 |
---|---|
[혼공얄코] 다양한 IT 용어 학습하기 (3주 차) (0) | 2024.07.16 |
[혼공얄코] 혼자 공부하는 얄팍한 코딩 지식 시작! 다시 혼공학습단! (0) | 2024.07.02 |
SQL 실습 따라하기 01 (0) | 2024.05.06 |
IT 입문자를 위한 전반적인 개념 정리 - 더코딩클럽 (0) | 2024.05.01 |