Skip to content

Latest commit

 

History

41 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TIL

Today I learn

AI 엔지니어 / 백엔드 개발자 개념 공부거리들

AI 엔지니어 및 FastAPI 백엔드 포지션 취업을 위한 개념 정리 우선순위: 🔴 필수 (면접에서 거의 확실히 나옴) → 🟡 권장 (알면 차별화) → 🟢 후순위 (취업 후 배워도 됨)


1. 네트워크

🔴 필수

  • HTTP 동작 원리: 요청/응답 구조, 헤더, 바디, 쿠키, 세션
  • HTTP 메서드 차이: GET, POST, PUT, PATCH, DELETE 각각의 의미와 용도
  • 상태 코드: 200, 201, 204, 400, 401, 403, 404, 409, 500 각각 언제 쓰는지
  • HTTPS: SSL/TLS가 뭔지, 왜 필요한지, 대칭키/비대칭키 암호화 기초
  • CORS: 왜 발생하는지, 어떻게 해결하는지, 브라우저의 동일 출처 정책
  • REST API: 리소스 중심 설계, URL 네이밍 규칙, 상태 무결성(Stateless)
  • DNS: 도메인이 IP로 변환되는 과정 (간단히)
  • TCP vs UDP: 차이점과 각각 어디에 쓰이는지

🟡 권장

  • WebSocket vs HTTP: 양방향 통신이 필요한 이유, 연결 유지 방식
  • gRPC: REST와의 차이, 어떤 상황에서 쓰는지 (개념만)
  • 로드밸런싱: L4 vs L7, 왜 필요한지
  • CDN: 정적 파일 서빙, 왜 빠른지
  • OAuth 2.0 흐름: Authorization Code Flow 전체 과정

🟢 후순위

  • HTTP/2, HTTP/3 차이
  • TCP 3-way handshake 상세
  • 네트워크 계층 모델 (OSI 7계층) 상세

2. 운영체제

🔴 필수

  • 프로세스 vs 스레드: 차이, 메모리 공유 여부, 컨텍스트 스위칭
  • 동시성 vs 병렬성: 개념 차이, 싱글코어에서 동시성이 어떻게 가능한지
  • 비동기(async/await): 이벤트 루프 동작 원리, I/O 바운드 vs CPU 바운드
  • 왜 FastAPI가 비동기인지: async def vs def의 차이, 어떤 작업에 async를 써야 하는지
  • 데드락: 뭔지, 왜 발생하는지, 어떻게 방지하는지 (개념)
  • 메모리 기초: 스택 vs 힙, 가비지 컬렉션이 뭔지 (Python 기준)

🟡 권장

  • 멀티프로세싱 vs 멀티스레딩 vs 비동기: Python에서 각각 언제 쓰는지
  • Python GIL: 뭔지, 왜 존재하는지, 어떤 영향을 주는지
  • 파일 디스크립터: 소켓, 파일 등이 내부적으로 어떻게 관리되는지
  • 컨테이너가 OS 레벨에서 어떻게 동작하는지: 네임스페이스, cgroups (개념만)

🟢 후순위

  • 가상 메모리, 페이징
  • 스케줄링 알고리즘 상세
  • 시스템 콜 상세

3. 데이터베이스

🔴 필수

  • 인덱스: 왜 필요한지, B-Tree 구조 기본, 언제 걸어야 하는지, 인덱스가 오히려 느려지는 경우
  • EXPLAIN ANALYZE: 쿼리 실행 계획 읽는 법, Sequential Scan vs Index Scan 차이
  • 트랜잭션과 ACID: 각 속성이 뭔지, 왜 중요한지
  • 정규화: 1NF, 2NF, 3NF가 뭔지, 왜 하는지, 반정규화는 언제 하는지
  • N+1 문제: 뭔지, ORM에서 왜 발생하는지, 어떻게 해결하는지 (JOIN, eager loading)
  • SQL 기본: JOIN(INNER, LEFT, RIGHT), GROUP BY, HAVING, 서브쿼리
  • 커넥션 풀링: 왜 필요한지, SQLAlchemy에서 어떻게 설정하는지
  • ORM vs Raw SQL: 각각의 장단점, 언제 뭘 써야 하는지

🟡 권장

  • 격리 수준(Isolation Level): Read Uncommitted ~ Serializable, 각 수준에서 발생할 수 있는 문제
  • 낙관적 잠금 vs 비관적 잠금: 개념과 사용 사례
  • 파티셔닝: 테이블이 커졌을 때 어떻게 나누는지
  • 레플리케이션: 읽기/쓰기 분리, 마스터-슬레이브 구조
  • Redis 자료구조: String, Hash, List, Set, Sorted Set 각각 언제 쓰는지
  • 캐시 전략: Cache Aside, Write Through, Write Behind 패턴

🟢 후순위

  • 샤딩 전략
  • MVCC 내부 동작
  • WAL(Write-Ahead Logging) 상세

4. 자료구조 & 알고리즘

🔴 필수

  • 시간/공간 복잡도: Big-O 표기법, O(1), O(n), O(log n), O(n²) 차이
  • 배열 vs 링크드 리스트: 각각의 장단점, 접근/삽입/삭제 시간 복잡도
  • 해시맵(딕셔너리): 동작 원리, 해시 충돌, Python dict의 시간 복잡도
  • 스택, 큐: 개념과 활용 사례
  • 정렬: 버블, 선택, 삽입, 퀵, 병합 정렬의 시간 복잡도 (코드까지 외울 필요는 없고 개념)
  • 이진 탐색: 정렬된 데이터에서 O(log n) 검색
  • 트리 기초: 이진 트리, BST 개념
  • 기초 DFS/BFS: 그래프 탐색의 기본

🟡 권장

  • 힙/우선순위 큐: 개념과 활용
  • 그래프: 인접 리스트, 인접 행렬, 최단 경로 기초 (다익스트라)
  • 동적 프로그래밍: 메모이제이션, 간단한 DP 문제 풀이
  • 코딩 테스트 연습: 프로그래머스 레벨 1~2 수준

🟢 후순위

  • 고급 트리 (AVL, 레드블랙 트리)
  • 고급 그래프 알고리즘
  • 문자열 알고리즘 (KMP 등)

5. 보안

🔴 필수

  • 인증 vs 인가: 차이점, 각각 어떻게 구현하는지
  • JWT: 구조(Header, Payload, Signature), Access Token vs Refresh Token, 왜 둘 다 필요한지
  • 토큰 저장 위치: 쿠키 vs 로컬스토리지, 각각의 보안 이슈
  • 비밀번호 해싱: 평문 저장이 왜 위험한지, bcrypt/argon2, 솔트가 뭔지
  • SQL Injection: 뭔지, ORM이 어떻게 방지하는지, 파라미터 바인딩
  • XSS/CSRF: 각각 뭔지, 어떻게 방지하는지 (기본 개념)
  • HTTPS: 왜 필수인지, 인증서 개념
  • 환경변수 관리: 비밀키를 코드에 넣으면 안 되는 이유, .env 파일, 시크릿 관리

🟡 권장

  • Rate Limiting: 왜 필요한지, 어떻게 구현하는지 (Redis 기반)
  • API Key 관리: 발급, 회전, 만료 전략
  • OWASP Top 10: 주요 웹 보안 취약점 목록 (개념 수준)

🟢 후순위

  • 보안 감사 및 침투 테스트
  • 제로 트러스트 아키텍처
  • 암호학 상세 (RSA, AES 알고리즘 내부)

6. 백엔드 설계 & 아키텍처

🔴 필수

  • 계층 분리: 라우터(Controller) / 서비스(Business Logic) / 레포지토리(Data Access) 패턴
  • API 설계: RESTful 원칙, URL 네이밍 컨벤션, 일관된 응답 형식, 에러 응답 표준화
  • 페이지네이션: offset vs cursor 방식, 각각의 장단점
  • 입력 검증: Pydantic으로 요청/응답 스키마 정의, 왜 서버에서 검증해야 하는지
  • 에러 핸들링: 예외 처리 전략, 커스텀 예외 클래스, 일관된 에러 응답
  • 로깅: 로그 레벨(DEBUG, INFO, WARNING, ERROR), 구조화된 로깅, 뭘 로깅해야 하는지
  • 환경 분리: 개발/스테이징/프로덕션 환경 설정 분리

🟡 권장

  • 비동기 작업 처리: 백그라운드 태스크, 메시지 큐(Celery + Redis), 작업 상태 추적
  • API 버저닝: URL 방식(/v1/, /v2/) vs 헤더 방식
  • 의존성 주입: FastAPI의 Depends 패턴, 왜 테스트가 쉬워지는지
  • 멱등성: 같은 요청을 여러 번 보내도 결과가 같은 것, PUT vs POST의 멱등성 차이
  • Webhook: 개념, 사용 사례, 재시도 전략
  • 헬스체크 엔드포인트: 서버 상태 확인 API, 왜 필요한지

🟢 후순위

  • MSA: 마이크로서비스 아키텍처 개념, 모놀리식과의 차이, 장단점
  • 이벤트 드리븐 아키텍처: 이벤트 소싱, CQRS
  • 헥사고날/클린 아키텍처: 포트 & 어댑터 패턴
  • DDD(도메인 주도 설계)

7. DevOps & 인프라

🔴 필수

  • Docker: Dockerfile 작성, 이미지/컨테이너 개념, docker-compose, 볼륨, 네트워크
  • Git: 브랜치 전략(Git Flow or GitHub Flow), PR, merge, rebase, conflict 해결
  • CI/CD: GitHub Actions로 테스트 자동화, Docker 이미지 빌드, 자동 배포
  • AWS 기본: EC2, RDS, S3, IAM 기본, 보안 그룹
  • 리눅스 기본 명령어: ls, cd, cat, grep, ps, top, tail, chmod, 파이프(|)

🟡 권장

  • AWS 추가: ECR(컨테이너 레지스트리), ECS(컨테이너 배포), CloudWatch(모니터링)
  • Nginx: 리버스 프록시가 뭔지, 왜 FastAPI 앞에 두는지, 기본 설정
  • 모니터링: 서버 메트릭 수집, 로그 수집, 알림 설정 (개념)
  • 도메인/DNS 설정: Route53, A 레코드, CNAME
  • SSL 인증서: Let's Encrypt, 자동 갱신

🟢 후순위

  • Kubernetes: 파드, 디플로이먼트, 서비스, 인그레스 (취업 후)
  • Terraform/IaC: 인프라를 코드로 관리하는 개념
  • 서비스 메시 (Istio 등)

8. AI / ML 관련

🔴 필수

  • 트랜스포머 기본: 어텐션 메커니즘이 뭔지, 인코더/디코더 구조, 왜 RNN보다 좋은지 (수식보다 직관적 이해)
  • 임베딩: 텍스트를 벡터로 변환하는 개념, 코사인 유사도, 유클리드 거리
  • RAG: 전체 파이프라인, 왜 필요한지(할루시네이션 방지), 청킹 전략
  • 벡터 검색: ANN(Approximate Nearest Neighbor), HNSW vs IVFFlat 인덱스 차이
  • 프롬프트 엔지니어링: 시스템 프롬프트, few-shot, chain-of-thought, 프롬프트 구조화
  • LLM API 활용: 토큰 개념, 컨텍스트 윈도우, temperature/top_p, 스트리밍
  • Function Calling / Tool Use: LLM이 외부 도구를 호출하는 메커니즘
  • 하이브리드 검색: 벡터 검색 + 키워드 검색 조합, RRF(Reciprocal Rank Fusion)
  • 평가(Evaluation): RAG 품질을 어떻게 측정하는지 (Precision, Recall, MRR 등)

🟡 권장

  • 파인튜닝: Full fine-tuning vs LoRA vs QLoRA, 언제 파인튜닝이 필요한지
  • 토크나이저: BPE, WordPiece 등이 뭔지, 왜 중요한지
  • 모델 서빙: 추론 최적화, 배치 처리, 양자화(quantization) 기초
  • 에이전트 설계 패턴: ReAct, Plan-and-Execute, 멀티 에이전트
  • LangGraph: 그래프 기반 에이전트 흐름 제어, 상태 관리
  • 가드레일: LLM 출력 검증, 할루시네이션 탐지, 안전한 출력 보장
  • 리랭킹: Cross-encoder 리랭킹, LLM 기반 리랭킹

🟢 후순위

  • PyTorch 심화: 커스텀 모델 설계, 학습 루프 직접 구현
  • 논문 읽기: Attention Is All You Need 등 핵심 논문
  • 분산 학습: 여러 GPU로 모델 학습
  • RLHF/DPO: LLM 정렬(alignment) 기법
  • MLOps: MLflow, Airflow, 모델 레지스트리, A/B 테스트

9. 테스트 & 코드 품질

🔴 필수

  • 단위 테스트: pytest 기본, 테스트 함수 작성법
  • API 테스트: FastAPI TestClient로 엔드포인트 테스트
  • 테스트 픽스처: 테스트 데이터 준비, conftest.py 활용
  • 코드 포매팅: black, isort, ruff 같은 도구 사용

🟡 권장

  • 통합 테스트: DB 연동 테스트, 테스트용 DB 설정
  • 모킹: 외부 API(LLM 호출 등)를 테스트할 때 mock 사용법
  • 테스트 커버리지: 측정 방법, 적정 수준

🟢 후순위

  • E2E 테스트
  • 성능 테스트 (부하 테스트)
  • TDD 방법론

10. 면접에서 자주 나오는 개념 질문 예시

아래 질문들에 자기 프로젝트 경험과 연결해서 답할 수 있으면 합격 확률이 크게 올라감.

백엔드 질문:

  • "프로세스와 스레드의 차이가 뭔가요?"
  • "async/await가 내부적으로 어떻게 동작하나요?"
  • "인덱스를 왜 쓰나요? 항상 좋은 건가요?"
  • "N+1 문제를 설명하고 해결 방법을 말해주세요"
  • "JWT의 Access Token과 Refresh Token은 왜 둘 다 필요한가요?"
  • "REST API에서 PUT과 PATCH의 차이는?"
  • "Docker를 왜 쓰나요? 가상머신과 뭐가 다른가요?"
  • "CI/CD가 왜 필요한가요?"

AI 질문:

  • "RAG가 뭔가요? 왜 필요한가요?"
  • "임베딩이 뭔가요? 코사인 유사도는 어떻게 계산하나요?"
  • "벡터 검색만으로 충분하지 않은 이유가 뭔가요?"
  • "프롬프트 엔지니어링에서 중요한 점은?"
  • "트랜스포머의 어텐션이 뭔가요? (직관적으로)"
  • "할루시네이션을 어떻게 줄일 수 있나요?"
  • "파인튜닝과 RAG 중 언제 뭘 선택해야 하나요?"

공통 질문:

  • "이 기술을 왜 선택했나요?"
  • "프로젝트에서 가장 어려웠던 점과 해결 방법은?"
  • "다시 만든다면 뭘 다르게 하겠나요?"

공부 순서 요약

1단계 (즉시)     : Git 협업 + Docker + 기존 프로젝트 정리
2단계 (1~2개월)  : AWS 배포 + 테스트 코드 + CS 기초(네트워크, OS, DB)
3단계 (2~3개월)  : 새 프로젝트 + LangGraph + 파인튜닝 경험
4단계 (3~5개월)  : 포트폴리오 다듬기 + 면접 준비 + 코딩 테스트

주의하자: 새 기술을 넓게 배우는 것보다, 가진 기술을 깊이 이해하고 "왜?"를 설명할 수 있는 게 취업에서 훨씬 중요하다.

About

Where I post what I've studied

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors