1. 프로그래밍 오버뷰 강의를 시작하며
이번에는 코드잇(Codeit)의 「01_프로그래밍 오버뷰」 강의를 수강했다.
그동안 Python, FastAPI, 데이터베이스, API 등을 학습하면서 실제 서비스를 개발하는 경험을 쌓았지만, 이번 강의에서는 개별 기술보다 프로그래밍이라는 분야의 전체적인 구조를 다시 살펴볼 수 있었다.
코딩이 무엇인지부터 웹과 모바일 앱이 동작하는 원리, 개발자의 다양한 직무, 프로그래밍 언어 선택 방법, 좋은 코드를 작성하기 위해 필요한 역량까지 폭넓게 다루는 입문 과정이었다.
이미 접해 본 개념도 있었지만, 각각의 기술이 어떤 역할을 하고 서로 어떻게 연결되는지 정리하는 데 초점을 맞췄다.
2. 코딩이란 무엇인가?
코딩의 기본 개념
코딩(Coding)은 컴퓨터가 특정 작업을 수행할 수 있도록 프로그래밍 언어로 명령을 작성하는 과정이다.
컴퓨터는 사람이 일상적으로 사용하는 언어를 그대로 이해하지 못하기 때문에 Python, JavaScript, Java 등의 프로그래밍 언어를 사용한다.
강의에서는 Python의 max() 함수를 예시로 소개했다.
max(27, 45, 36)
이 코드는 세 숫자 중 가장 큰 숫자인 45를 반환한다.
간단한 예제지만, 프로그래밍의 기본적인 흐름을 보여준다.
사람이 명령을 작성하면 컴퓨터가 이를 처리하고 결과를 반환하는 것이다.
코딩을 배우는 이유
코딩은 개발자가 되기 위해서만 배우는 기술이 아니다.
강의에서는 코딩을 활용하는 방향을 크게 세 가지로 설명했다.
- 기술의 흐름과 프로그래밍의 기본 원리를 이해하기
- 일상생활이나 업무에서 필요한 프로그램을 직접 만들기
- 전문적인 소프트웨어 개발자로 진출하기
특히 반복적인 업무를 자동화하거나 자신의 아이디어를 실제 서비스로 구현할 수 있다는 점이 인상적인 활용 사례였다.
3. 프로그램을 구성하는 기본 문법
프로그래밍에서는 복잡한 기능도 여러 기본 개념을 조합해 구현한다.
이번 강의에서는 변수, 함수, 조건문, 반복문을 핵심 요소로 소개했다.
변수와 함수
변수(Variable)는 프로그램에서 데이터를 저장하거나 참조하기 위해 사용하는 이름이다.
함수(Function)는 특정 작업을 수행하는 코드를 묶어 재사용할 수 있도록 만든 것이다.
예를 들어 Python에서는 다음과 같이 사용할 수 있다.
price = 20000
def discount(price):
return price * 0.9
print(discount(price))
변수에 상품 가격을 저장하고, 함수를 이용해 할인된 가격을 계산하는 예제다.
조건문과 반복문
조건문은 조건에 따라 실행할 코드를 결정하고, 반복문은 같은 작업을 여러 번 실행할 때 사용한다.
for i in range(3):
print("HELLO WORLD")
위 코드는 HELLO WORLD를 세 번 출력한다.
country = "한국"
if country == "한국":
print("안녕하세요")
else:
print("HELLO")
이 코드는 조건에 따라 서로 다른 인사말을 출력한다.
실제 서비스에서는 이러한 기본 문법을 조합해 로그인, 회원가입, 상품 조회, 결제 등의 기능을 구현한다.
위 Python 코드는 강의 개념을 복습하기 위해 재구성한 예제다.
4. 웹 서비스는 어떻게 동작할까?
이번 강의에서 중요한 부분 중 하나는 클라이언트, 서버, 데이터베이스의 관계였다.
클라이언트와 서버
웹 서비스는 기본적으로 클라이언트가 서버에 요청을 보내고, 서버가 이를 처리한 뒤 결과를 응답하는 방식으로 동작한다.
- 클라이언트(Client): 사용자가 직접 이용하는 웹 브라우저나 앱
- 서버(Server): 사용자의 요청을 받아 처리하는 시스템
- 데이터베이스(Database): 서비스에 필요한 데이터를 저장하고 관리하는 시스템
예를 들어 사용자가 쇼핑몰에서 상품 목록을 조회한다면 다음과 같은 과정이 진행된다.
- 사용자가 상품 조회 버튼을 클릭한다.
- 클라이언트가 서버에 상품 목록을 요청한다.
- 서버가 데이터베이스에서 상품 정보를 조회한다.
- 서버가 조회 결과를 클라이언트에 전달한다.
- 클라이언트가 상품 목록을 화면에 표시한다.
이러한 구조는 대부분의 웹 서비스에서 공통적으로 활용된다.
프론트엔드와 백엔드
웹 개발은 크게 프론트엔드와 백엔드로 나뉜다.
구분프론트엔드백엔드
| 역할 |
사용자 화면 구현 |
서버 로직과 데이터 처리 |
| 주요 기술 |
HTML, CSS, JavaScript |
Python, Java, JavaScript 등 |
| 주요 작업 |
화면 구성, 사용자 입력 |
API, 인증, 데이터 관리 |
프론트엔드는 사용자가 보는 화면을 구현하고, 백엔드는 화면 뒤에서 필요한 데이터를 처리한다.
두 영역은 API를 통해 통신할 수 있다.
API와 DNS
API(Application Programming Interface)는 서로 다른 프로그램이 기능이나 데이터를 주고받을 수 있도록 정의한 인터페이스다.
예를 들어 상품 조회 API는 다음과 같이 표현할 수 있다.
GET /products
클라이언트가 요청을 보내면 서버는 상품 정보를 JSON 형식으로 반환할 수 있다.
DNS(Domain Name System)는 youtube.com처럼 사람이 기억하기 쉬운 도메인 이름을 서버 접속에 필요한 IP 주소로 변환하는 역할을 한다.
즉, 웹사이트에 접속하는 과정에는 화면을 보여주는 기술뿐 아니라 네트워크 통신과 서버 처리 과정도 포함되어 있다.
5. 웹 개발과 모바일 앱 개발의 차이
웹사이트와 모바일 앱은 사용자에게 서비스를 제공한다는 점에서는 비슷하지만, 화면을 구현하는 기술에는 차이가 있다.
웹 개발에서는 주로 HTML, CSS, JavaScript를 사용한다.
반면 모바일 앱은 운영체제에 따라 다른 기술을 사용할 수 있다.
- iOS 앱: Swift
- Android 앱: Kotlin
- 크로스 플랫폼 앱: React Native, Flutter
크로스 플랫폼 개발
iOS와 Android 앱을 각각 개발하면 서로 다른 코드와 개발 환경을 관리해야 할 수 있다.
이러한 부담을 줄이기 위해 사용하는 방식이 크로스 플랫폼 개발이다.
대표적인 기술은 React Native와 Flutter다.
React Native는 JavaScript나 TypeScript를 활용하고, Flutter는 Dart 언어를 사용한다.
하나의 코드베이스를 여러 운영체제에서 활용할 수 있다는 장점이 있지만, 운영체제별 기능을 구현할 때는 추가 작업이 필요할 수 있다.
이번 내용을 통해 같은 서비스를 만들더라도 웹으로 제공할지, 모바일 앱으로 제공할지에 따라 기술 선택이 달라진다는 점을 정리할 수 있었다.
6. 데이터와 인공지능 분야의 다양한 직무
이번 강의에서는 데이터 관련 개발 직무도 자세히 소개했다.
처음에는 모두 데이터를 다루는 직업처럼 보일 수 있지만, 실제로는 담당하는 역할이 다르다.
직무주요 역할
| 데이터 엔지니어 |
데이터 수집·저장·처리 환경 구축 |
| 데이터 애널리스트 |
데이터 분석 및 시각화 |
| 데이터 사이언티스트 |
통계 분석과 예측 모델 개발 |
| 머신러닝 엔지니어 |
머신러닝 모델의 서비스 적용 및 운영 |
| 머신러닝 리서처 |
새로운 머신러닝 알고리즘 연구 |
데이터 엔지니어와 데이터 애널리스트
데이터 엔지니어는 데이터를 안정적으로 수집하고 저장할 수 있는 환경을 구축한다.
데이터 애널리스트는 이렇게 준비된 데이터를 분석해 의미 있는 정보를 찾아낸다.
예를 들어 서비스의 사용자 수가 감소했다면 데이터 애널리스트는 이용 기록을 분석해 변화가 발생한 시점과 원인을 파악하는 데 도움을 줄 수 있다.
데이터 사이언티스트와 머신러닝 엔지니어
데이터 사이언티스트는 통계와 머신러닝을 활용해 데이터를 분석하고 예측 모델을 개발할 수 있다.
머신러닝 엔지니어는 이러한 모델을 실제 서비스에서 사용할 수 있도록 구현하고 운영한다.
머신러닝 리서처는 기존 모델을 개선하거나 새로운 알고리즘을 연구하는 역할을 맡는다.
같은 AI 분야라도 데이터를 준비하는 일부터 분석, 모델 개발, 서비스 적용, 연구까지 다양한 전문 영역이 존재한다는 점을 알 수 있었다.
7. 게임, 블록체인, 임베디드, IoT 개발
소프트웨어 개발은 웹과 모바일 앱, AI 분야에만 한정되지 않는다.
이번 강의에서는 다른 개발 분야도 소개했다.
게임 개발
게임 개발에서는 Unity와 Unreal Engine 같은 게임 엔진을 사용한다.
- Unity: 주로 C# 사용
- Unreal Engine: 주로 C++과 블루프린트 사용
게임 엔진은 그래픽, 물리 처리, 애니메이션 등 게임 개발에 필요한 기능을 제공한다.
블록체인 개발
블록체인은 여러 참여자가 데이터를 공유하고 검증하는 분산원장 기술이다.
대표적인 개념은 탈중앙화(Decentralization)이며, 블록체인을 활용한 애플리케이션을 DApp이라고 한다.
스마트 계약 개발에는 Solidity 같은 프로그래밍 언어를 사용할 수 있다.
임베디드 시스템과 IoT
임베디드 시스템은 냉장고, 세탁기, 자동차처럼 특정 기기 내부에서 동작하는 컴퓨터 시스템이다.
IoT(Internet of Things)는 이러한 기기나 센서 등을 네트워크로 연결해 데이터를 주고받도록 하는 기술이다.
예를 들어 온도 센서가 측정한 데이터를 서버에 전달하고, 그 결과에 따라 에어컨을 제어하는 시스템을 생각할 수 있다.
이러한 분야에서는 C와 C++ 같은 언어가 자주 활용된다.
8. 개발 분야별 프로그래밍 언어와 학습 로드맵
이번 강의에서는 개발 분야에 따라 학습해야 하는 기술이 달라진다는 점을 강조했다.
대표적인 학습 경로를 정리하면 다음과 같다.
개발 분야주요 학습 기술
| 프론트엔드 |
HTML → CSS → JavaScript → React |
| Python 백엔드 |
Python → Django → SQL → API |
| Java 백엔드 |
Java → Spring → SQL |
| 데이터 분석 |
Python → pandas → SQL → 시각화 |
| 데이터 사이언스 |
Python → NumPy → 통계 → 머신러닝 |
| 모바일 앱 |
Swift, Kotlin 또는 크로스 플랫폼 기술 |
SQL과 NoSQL
백엔드 개발에서는 데이터베이스를 이해하는 것도 중요하다.
SQL 기반 관계형 데이터베이스에는 PostgreSQL과 MySQL 등이 있다.
NoSQL 데이터베이스에는 MongoDB처럼 문서 형태로 데이터를 저장하는 방식도 있다.
두 방식은 데이터 구조와 활용 목적이 다르므로 서비스의 요구사항에 따라 선택해야 한다.
기술 선택에서 중요한 것
강의에서는 모든 프로그래밍 언어를 배우려고 하기보다 자신이 원하는 개발 분야를 먼저 정하는 것이 중요하다고 설명했다.
또한 희망하는 기업의 채용 공고를 살펴보면 실제로 어떤 언어와 프레임워크를 사용하는지 파악하는 데 도움이 된다.
특히 국내 백엔드 개발에서는 Java와 Spring을 사용하는 기업이 많다는 점도 소개했다.
다만 처음 학습한 언어와 실제 취업 후 사용하는 언어가 반드시 같을 필요는 없다.
프로그래밍의 기본 원리를 이해하면 다른 언어와 기술을 배우는 데에도 도움이 되기 때문이다.
9. 개발자가 아니어도 코딩을 활용할 수 있다
이번 강의에서는 개발자 외의 직무에서도 코딩이 유용하게 사용된다는 점을 소개했다.
대표적인 사례는 업무 자동화와 데이터 분석이다.
Python을 활용한 업무 자동화
반복적으로 수행하는 업무를 Python으로 자동화할 수 있다.
예를 들어 다음과 같은 작업이다.
- 엑셀 파일에서 데이터 가져오기
- 필요한 정보만 추출하고 정리하기
- 결과를 새로운 파일로 저장하기
- 이메일로 결과 전달하기
매일 같은 작업을 반복해야 한다면 자동화를 통해 시간을 절약할 수 있다.
A/B 테스트와 데이터 분석
A/B 테스트는 서로 다른 두 가지 디자인이나 기능을 사용자에게 보여주고 결과를 비교하는 방법이다.
강의에서는 구독 버튼의 디자인을 변경했을 때 클릭 비율이 달라지는 사례를 소개했다.
이러한 실험은 사용자의 행동 데이터를 바탕으로 서비스를 개선하는 데 활용할 수 있다.
다만 실제 결과를 판단할 때는 표본 크기와 통계적 유의성도 고려해야 한다.
개발자와 비개발자의 협업
소프트웨어 서비스는 개발자 혼자 만드는 것이 아니다.
프로젝트 매니저(PM), 프로덕트 매니저, UX/UI 디자이너 등 다양한 직무가 함께 참여한다.
기획자나 디자이너도 API, 데이터베이스, 프론트엔드와 백엔드의 기본 구조를 이해하면 개발자와 더 구체적으로 소통할 수 있다.
코딩 지식은 직접 개발할 때뿐 아니라 협업 과정에서도 도움이 되는 역량이다.
10. 좋은 개발자가 되기 위해 필요한 능력
강의 마지막 부분에서는 코딩 문법을 배우는 것과 좋은 프로그램을 만드는 것은 다르다고 설명했다.
문제 해결 능력
프로그래밍에서 중요한 것은 문법을 많이 외우는 것보다 문제를 작은 단위로 나누고 해결 방법을 생각하는 능력이다.
원하는 기능이 무엇인지 정의하고, 필요한 작업을 순서대로 구성해야 한다.
라이브러리와 프레임워크 활용
실제 개발에서는 모든 기능을 처음부터 구현하지 않는다.
라이브러리는 재사용 가능한 기능을 제공하고, 프레임워크는 프로그램 개발에 필요한 구조와 규칙을 제공한다.
이러한 도구를 적절히 활용하면 개발 시간을 줄이고 복잡한 기능을 효율적으로 구현할 수 있다.
디버깅(Debugging)
디버깅은 프로그램에서 발생한 오류의 원인을 찾아 수정하는 과정이다.
기본적인 흐름은 다음과 같다.
문제 발생 → 원인 분석 → 코드 수정 → 재실행 및 결과 확인
오류 메시지를 확인하고 문제가 발생한 위치와 원인을 파악하는 능력은 실제 개발에서 중요하다.
리팩토링(Refactoring)
리팩토링은 프로그램의 외부 동작을 유지하면서 내부 코드 구조를 개선하는 작업이다.
반복된 코드를 함수로 분리하거나 복잡한 로직을 단순하게 만드는 것이 대표적인 예시다.
리팩토링을 통해 코드의 가독성과 유지보수성을 높일 수 있다.
확장성과 유지보수성
서비스가 커지고 사용자가 증가하면 기존 코드가 처리해야 하는 작업도 많아진다.
따라서 개발자는 프로그램이 현재 정상적으로 동작하는 것뿐 아니라 앞으로 수정하거나 확장하기 쉬운 구조인지도 고려해야 한다.
이번 강의에서 강조한 내용은 단순히 실행되는 코드를 작성하는 것과 좋은 코드를 작성하는 것은 다르다는 점이었다.
11. 이번 강의를 통해 정리한 내용
이번 프로그래밍 오버뷰 강의는 새로운 문법을 깊이 있게 학습하는 과정이라기보다 프로그래밍 분야 전체를 이해하는 과정이었다.
코딩의 기본 개념에서 시작해 클라이언트와 서버의 관계, 프론트엔드와 백엔드의 차이, 모바일 앱 개발, 데이터와 AI 직무, 게임과 IoT 개발까지 폭넓게 살펴봤다.
특히 이전에 학습했던 Python, FastAPI, 데이터베이스, API가 웹 서비스 구조 안에서 각각 어떤 역할을 하는지 다시 연결해 볼 수 있었다.
또한 개발자의 역할이 단순히 코드를 작성하는 데 그치지 않는다는 점도 중요했다.
요구사항을 이해하고, 문제를 해결하고, 오류를 수정하고, 다른 사람이 이해하기 쉬운 코드를 작성하는 능력까지 개발 역량에 포함된다는 것이다.
12. 앞으로 복습할 부분
이번 강의는 프로그래밍 분야를 전체적으로 소개하는 과정이었기 때문에 각 기술의 세부적인 구현 방법까지 다루지는 않았다.
앞으로는 다음 내용을 중심으로 복습하려고 한다.
- 웹 서비스 구조: 클라이언트, 서버, API, 데이터베이스의 연결 과정
- Python 기본 문법: 변수, 함수, 조건문, 반복문
- 백엔드 개발: API 설계와 데이터베이스 연동
- 데이터 및 AI: 데이터 처리부터 머신러닝 모델의 서비스 적용까지의 과정
- 코드 품질: 디버깅, 리팩토링, 유지보수성, 확장성
특히 코드를 작성할 때 단순히 실행 결과만 확인하는 것이 아니라 왜 이런 구조로 작성했는지 설명할 수 있는 수준까지 이해하는 것이 중요하다고 생각한다.
13. 오늘의 회고
이번 「프로그래밍 오버뷰」 강의를 통해 코딩의 기본 원리부터 개발 분야와 학습 방향까지 전체적인 흐름을 정리했다.
이미 접해 본 기술도 있었지만, 개별 기술을 배우는 것과 그 기술이 전체 소프트웨어 구조에서 어떤 역할을 하는지 이해하는 것은 다른 문제였다.
웹 개발과 모바일 앱 개발의 차이, 데이터 분야의 직무 구분, 개발 언어와 프레임워크의 관계 등을 한 번에 살펴보면서 앞으로 어떤 내용을 더 공부해야 할지 정리할 수 있었다.
무엇보다 기억에 남는 내용은 좋은 개발자가 되기 위해 필요한 것이 단순한 코딩 문법만은 아니라는 점이다.
AI가 코드를 작성하는 데 도움을 줄 수 있는 환경에서도 요구사항을 정확히 이해하고, 생성된 코드의 동작을 검증하고, 오류를 해결하고, 전체 구조를 판단하는 능력은 중요하다.
앞으로는 새로운 기술을 무작정 많이 배우기보다 기본 원리를 이해하고, 직접 구현하고, 문제가 발생했을 때 스스로 원인을 설명할 수 있는 능력을 키우는 방향으로 학습을 이어가고 싶다.
핵심 정리
이번 강의에서 학습한 내용을 정리하면 다음과 같다.
- 코딩은 컴퓨터에 명령을 전달해 문제를 해결하는 과정이다.
- 실제 서비스는 클라이언트, 서버, API, 데이터베이스 등 여러 요소가 연결되어 동작한다.
- 개발 분야에 따라 필요한 프로그래밍 언어와 기술이 달라진다.
- 코딩은 개발뿐 아니라 업무 자동화, 데이터 분석, 협업에도 활용할 수 있다.
- 좋은 개발자가 되기 위해서는 문제 해결, 디버깅, 리팩토링, 유지보수 능력이 중요하다.
결국 프로그래밍을 잘한다는 것은 단순히 코드를 많이 작성하는 것이 아니라, 문제를 이해하고 적절한 기술로 해결할 수 있다는 의미에 가깝다.
해시태그
#코드잇 #Codeit #프로그래밍오버뷰 #코딩공부 #개발자공부 #Python #웹개발 #백엔드개발 #AI개발자 #개발회고