마무리 — 소프트웨어 개발자의 길¶
여기까지 온 것을 돌아보며¶
20장에 걸쳐 배운 것들을 정리합니다.
1장: API — 프로그램이 서로 대화하는 방법
2장: 웹 아키텍처 — 인터넷이 동작하는 구조
3장: SDD — 어떻게 만들 것인지 설계
4장: SRS — 무엇을 만들 것인지 정의
5장: 데이터베이스 설계 — 데이터 구조화
6장: SQL — 데이터 조작 언어
7장: 백엔드 API — FastAPI로 서버 구현
8장: 인증과 보안 — JWT, bcrypt
9장: 배포 — 서버를 세상에 공개
10장: 프론트엔드 — HTML/CSS
11장: JavaScript — 동적 페이지
12장: fetch API — 프론트엔드와 백엔드 연결
13장: Git — 버전 관리와 협업
14장: 테스트 — 자동화된 품질 확인
15장: 에러 처리와 로깅
16장: 성능 최적화
17장: Docker — 환경 표준화
18장: 실전 기획
19장: 실전 구현과 배포
이것들을 경험한 것은 소프트웨어 개발의 전체 그림을 본 것입니다.
지금 할 수 있는 것¶
이 과정을 마친 당신은 다음을 할 수 있습니다.
✅ 아이디어를 API 설계로 구체화하기
✅ 데이터베이스를 설계하고 SQL로 조작하기
✅ FastAPI로 백엔드 서버 구현하기
✅ JWT 인증이 있는 다중 사용자 서비스 만들기
✅ HTML/CSS/JS로 프론트엔드 만들기
✅ 브라우저와 서버를 fetch API로 연결하기
✅ Git으로 코드 버전 관리하기
✅ 테스트 코드 작성하기
✅ 클라우드에 배포하기
다음에 배울 것들¶
백엔드 심화¶
ORM (Object Relational Mapper)
# 지금까지: SQL 직접 작성
conn.execute("SELECT * FROM users WHERE id = ?", (user_id,))
# ORM (SQLAlchemy): Python 코드로 DB 조작
user = db.query(User).filter(User.id == user_id).first()
FastAPI 심화 - Background Tasks (백그라운드 작업) - WebSocket (실시간 통신) - Dependency Injection 심화 - 라우터 분리 (APIRouter)
데이터베이스 심화 - 트랜잭션 (Transaction) - 데이터베이스 마이그레이션 (Alembic) - 복잡한 JOIN, 서브쿼리 - Redis (캐시, 세션 저장)
프론트엔드 심화¶
JavaScript 프레임워크
React: 컴포넌트 기반, 가장 널리 사용
Vue: 입문하기 쉬운 프레임워크
Svelte: 빠르고 가벼운 최신 프레임워크
TypeScript
// JavaScript에 타입 시스템 추가
function greet(name: string): string {
return `안녕하세요, ${name}님`;
}
DevOps / 인프라¶
CI/CD 파이프라인
# GitHub Actions — push 시 자동 테스트
on: push
jobs:
test:
runs-on: ubuntu-latest
steps:
- run: pytest
클라우드 심화 - AWS EC2, S3, RDS - Kubernetes (컨테이너 오케스트레이션) - Nginx (웹 서버, 리버스 프록시) - 모니터링 (Grafana, Prometheus)
컴퓨터 과학 기초¶
이 과정에서 도구를 배웠다면, 이것들은 왜 그렇게 동작하는지를 설명합니다.
자료구조와 알고리즘:
- 배열, 연결 리스트, 트리, 그래프
- 정렬, 탐색, 동적 프로그래밍
→ 더 효율적인 코드를 작성하는 사고법
운영체제:
- 프로세스, 스레드, 메모리 관리
→ Docker, 성능 최적화를 더 깊이 이해
네트워크:
- TCP/IP, HTTP 상세
→ 보안, 성능 문제를 근본에서 이해
컴파일러/인터프리터:
→ Python, JavaScript가 어떻게 실행되는지 이해
포트폴리오 만들기¶
배운 것을 증명하는 가장 좋은 방법은 실제로 만든 것을 보여주는 것입니다.
좋은 포트폴리오 프로젝트의 조건¶
1. 직접 사용하거나 실제로 필요한 서비스
2. 전체 스택 (백엔드 + 프론트엔드 + 배포)
3. 코드가 GitHub에 공개되어 있음
4. README에 "무엇을", "어떻게 실행하는지" 설명
5. 실제 URL로 접근 가능
포트폴리오 아이디어¶
초급:
- 개인 일기장 (Markdown 저장, 검색)
- 운동 기록 앱 (날짜별 기록, 그래프)
- 영어 단어장 (암기 카드, 퀴즈)
중급:
- 공유 북마크 (팀원끼리 링크 공유)
- 간단한 블로그 (글 작성, 댓글)
- 식단 기록 앱 (음식 DB, 칼로리 합산)
심화:
- 실시간 채팅 (WebSocket)
- 파일 공유 서비스 (S3 연동)
- 오픈 API 활용 (날씨, 지도, 번역)
문제를 만났을 때¶
1. 오류 메시지를 정확히 읽기
→ 대부분 오류 메시지에 원인이 있습니다
2. 구글링 / 공식 문서
→ "FastAPI HTTPException 404" 처럼 구체적으로 검색
3. 공식 문서
→ FastAPI: https://fastapi.tiangolo.com
→ MDN (HTML/CSS/JS): https://developer.mozilla.org
4. 질문하기
→ Stack Overflow, GitHub Issues, 커뮤니티
→ 질문할 때는 코드, 오류 메시지, 시도한 것을 포함
5. 코드를 잘게 나눠서 테스트
→ 어느 줄에서 문제가 생기는지 좁혀나가기
좋은 개발자가 되는 것¶
기술만큼 중요한 것들이 있습니다.
읽기 쉬운 코드
# 이해하기 어려운 코드
def f(x, y):
return x * y / 100 if y > 0 else 0
# 이해하기 쉬운 코드
def calculate_discount_price(original_price: int, discount_percent: int) -> int:
if discount_percent <= 0:
return original_price
return original_price * (100 - discount_percent) // 100
점진적 개발 습관
큰 기능을 한 번에 만들려 하지 말고:
1. 가장 단순한 버전을 먼저 만든다
2. 동작을 확인한다
3. 조금씩 기능을 추가한다
4. 각 단계에서 테스트한다
기록하는 습관
코드보다 결정의 이유가 더 빨리 잊혀집니다.
- 왜 이 방식을 선택했는가
- 어떤 대안을 고려했는가
- 알려진 한계는 무엇인가
커밋 메시지, PR 설명, README에 남기세요.
이 과정에서 가장 중요한 것¶
기술보다 중요한 것:
"사용자가 필요로 하는 것을 만드는가?"
→ 아무리 기술이 좋아도 아무도 필요 없으면 의미 없음
"이해하고 만드는가?"
→ 복사-붙여넣기로 동작하는 코드보다
느리게 만들더라도 이해한 코드가 더 가치 있음
"계속 배우는가?"
→ 기술은 빠르게 변합니다
특정 기술을 배우는 것보다 배우는 방법을 배우는 것이 중요
마지막 실습 미션¶
나만의 프로젝트 완성¶
이 과정에서 배운 것을 모두 활용해 프로젝트를 완성하세요:
□ 아이디어 → 요구사항 정의
□ API 설계
□ DB 설계
□ 백엔드 구현 (FastAPI + SQLite/PostgreSQL)
□ 인증 (JWT)
□ 프론트엔드 (HTML/CSS/JS)
□ 테스트 코드 작성
□ 배포 (Railway 또는 Render)
□ GitHub README 작성
완성한 URL과 GitHub 링크를 공유해 보세요.
감사합니다¶
이 과정을 따라온 당신은 이미 많은 것을 알고 있습니다.
처음 API가 무엇인지도 몰랐던 때로 돌아가 보세요.
1장에서: "API가 뭔지 모르겠다"
지금: API를 직접 만들고 배포할 수 있다
앞으로 만들 것들이 기대됩니다.
"모든 전문가는 한때 초보자였다."
지금 모른다는 것은 아직 배우지 않았다는 것입니다.
모르는 것이 부끄러운 게 아니라, 배우려 하지 않는 것이 아쉬운 일입니다.