์ ๊ฐ ๋ณด๋ ค๊ณ ๋ง๋ค์์ต๋๋ค. ๊ณ์ ๋ด์ฉ์ด ์ถ๊ฐ๋ ์์ ์ ๋๋ค
1. ์ํํธ์จ์ด ํ ์คํธ ๊ธฐ์ด
- ํ ์คํธ ๋ชฉ์ : ์ํํธ์จ์ด์ ๊ฒฐํจ์ ์ฐพ์๋ด๊ณ ํ์ง์ ํฅ์์ํค๊ธฐ ์ํจ.
- ํ
์คํธ ์์น
- ๊ฒฐํจ์ด ์กด์ฌํจ์ ์ฆ๋ช ํ ์๋ ์์ด๋, ๊ฒฐํจ์ด ์์์ ์ฆ๋ช ํ ์๋ ์์
- ์กฐ๊ธฐ ํ ์คํ ์ด ์ค์ํจ
- ๊ฒฐํจ ์ง์ค(ํ๋ ํ ๋ฒ์น: 80%์ ๊ฒฐํจ์ด 20%์ ๋ชจ๋์์ ๋ฐ๊ฒฌ๋จ)
- ์ด์ถฉ์ ํจ๋ฌ๋ ์ค(๋์ผํ ํ ์คํธ๋ฅผ ๋ฐ๋ณตํ๋ฉด ๋ ์ด์ ์๋ก์ด ๊ฒฐํจ์ ์ฐพ๊ธฐ ์ด๋ ค์)
2. ํ ์คํธ ์ ํ ๋ฐ ๊ธฐ๋ฒ
(1) ํ ์คํธ ์์ค
- ๋จ์ ํ ์คํธ (Unit Test): ๊ฐ๋ณ ๋ชจ๋์ด๋ ํจ์์ ๋์์ ํ์ธ (JUnit, Mockito)
- ํตํฉ ํ ์คํธ (Integration Test): ์ฌ๋ฌ ๋ชจ๋์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ฐ๋๋๋์ง ํ์ธ
- ์์คํ ํ ์คํธ (System Test): ์ ์ฒด ์์คํ ์ด ์๊ตฌ์ฌํญ์ ๋ง์กฑํ๋์ง ๊ฒ์ฆ
- ์ธ์ ํ ์คํธ (Acceptance Test): ์ค์ ์ฌ์ฉ์๊ฐ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ๋์ํ๋์ง ํ์ธ
(2) ํ ์คํธ ์ข ๋ฅ
- ๊ธฐ๋ฅ ํ ์คํธ: ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ๊ธฐ๋ฅ์ด ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ์ธ
- ๋น๊ธฐ๋ฅ ํ ์คํธ: ์ฑ๋ฅ, ๋ณด์, ์ ๊ทผ์ฑ ๋ฑ ๊ธฐ๋ฅ ์ด์ธ์ ์์ ๊ฒ์ฆ
- ํ๊ท ํ ์คํธ (Regression Test): ๋ณ๊ฒฝ ์ฌํญ์ด ๊ธฐ์กด ๊ธฐ๋ฅ์ ์ํฅ์ ๋ฏธ์น๋์ง ํ์ธ
- ๋ถํ ํ ์คํธ (Load Test): ์ผ์ ์์ค์ ํธ๋ํฝ์์ ์์คํ ์ด ์ ์ ๋์ํ๋์ง ํ์ธ
- ์คํธ๋ ์ค ํ ์คํธ (Stress Test): ์ต๋ ๋ถํ ์ํฉ์์ ์ฑ๋ฅ ์ ํ ์ฌ๋ถ ํ์ธ
- ๋ณด์ ํ ์คํธ (Security Test): SQL Injection, XSS ๋ฑ ๋ณด์ ์ทจ์ฝ์ ํ ์คํธ
(3) ํ ์คํธ ๊ธฐ๋ฒ
- ํ์ดํธ๋ฐ์ค ํ ์คํธ: ๋ด๋ถ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ๋ถ์ํ์ฌ ํ ์คํธ (๊ตฌํ ๋ก์ง ๊ธฐ๋ฐ)
- ๋ธ๋๋ฐ์ค ํ ์คํธ: ์ ๋ ฅ๊ณผ ์ถ๋ ฅ๋ง ๋ณด๊ณ ๊ธฐ๋ฅ์ ํ ์คํธ (์ฌ์ฉ์ ๊ด์ )
- ๋์น ๋ถํ (Equivalence Partitioning): ์ ๋ ฅ๊ฐ์ ๊ทธ๋ฃน์ผ๋ก ๋๋์ด ํ ์คํธ
- ๊ฒฝ๊ณ๊ฐ ๋ถ์ (Boundary Value Analysis): ๊ฒฝ๊ณ๊ฐ(์ต๋/์ต์๊ฐ) ์ค์ฌ์ผ๋ก ํ ์คํธ
- ๊ฒฐ์ ํ ์ด๋ธ (Decision Table): ๋ค์ํ ์กฐํฉ์ ์ ๋ ฅ๊ฐ์ ๋ฐ๋ฅธ ๊ฒฐ๊ณผ ๋ถ์
3. ํ ์คํธ ์๋ํ์ ๋๊ตฌ
- ํ ์คํธ ์๋ํ ํ์์ฑ: ๋ฐ๋ณต์ ์ธ ํ ์คํธ๋ฅผ ํจ์จ์ ์ผ๋ก ์ํํ๊ณ ์ธ์ ์ค๋ฅ๋ฅผ ์ค์ด๊ธฐ ์ํจ
- ํ
์คํธ ํ๋ ์์ํฌ
- ๋จ์ ํ ์คํธ: JUnit, TestNG, PyTest
- UI ํ ์คํธ: Selenium, Appium
- API ํ ์คํธ: Postman, RestAssured
- ๋ถํ ํ ์คํธ: JMeter, Locust
4. ๊ฒฐํจ ๊ด๋ฆฌ ๋ฐ QA ํ๋ก์ธ์ค
- ๊ฒฐํจ(๋ฒ๊ทธ) ๊ด๋ฆฌ ํ๋ก์ธ์ค
- ๊ฒฐํจ ๋ฐ๊ฒฌ (Defect Detection)
- ๊ฒฐํจ ๋ฑ๋ก (Defect Logging) – Jira, Redmine ๋ฑ์ ๋๊ตฌ ์ฌ์ฉ
- ๊ฒฐํจ ๋ถ์ (Defect Analysis) – ์ฌ๊ฐ๋(Severity) ๋ฐ ์ฐ์ ์์(Priority) ์ค์
- ๊ฒฐํจ ์์ (Defect Fixing)
- ๊ฒฐํจ ์ฌํ ์คํธ (Retesting)
- ํ๊ท ํ ์คํธ (Regression Testing)
- ๊ฒฐํจ ์ข ๋ฃ (Defect Closure)
- ํ
์คํธ ๋ฌธ์ ์์ฑ
- ํ ์คํธ ๊ณํ์ (Test Plan)
- ํ ์คํธ ์ผ์ด์ค (Test Case)
- ํ ์คํธ ๊ฒฐ๊ณผ ๋ณด๊ณ ์ (Test Report)
5. ์ ์์ผ(Agile)๊ณผ QA
- ์ ์์ผ ๊ฐ๋ฐ๊ณผ ํ ์คํธ: ์คํฌ๋ผ(Scrum), ์นธ๋ฐ(Kanban) ๋ฑ
- ํ
์คํธ ์ฃผ๋ ๊ฐ๋ฐ (TDD: Test-Driven Development)
- ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋จผ์ ์์ฑํ ํ ์ฝ๋ ๊ฐ๋ฐ
- ํ๋ ์ฃผ๋ ๊ฐ๋ฐ (BDD: Behavior-Driven Development)
- ์ฌ์ฉ์ ๊ด์ ์์ ํ ์คํธ ์๋๋ฆฌ์ค ์์ฑ (Cucumber, Gherkin ์ฌ์ฉ)
6. ๊ธฐ๋ณธ์ ์ธ SQL ๋ฐ API ํ ์คํธ
- SQL ๊ธฐ์ด
- SELECT, JOIN, GROUP BY, WHERE, ORDER BY ๋ฑ
- ๋ฐ์ดํฐ ๊ฒ์ฆ์ ์ํด SQL ์ฟผ๋ฆฌ ํ์ฉ
- API ํ
์คํธ
- HTTP ์์ฒญ(GET, POST, PUT, DELETE) ์ดํด
- JSON, XML ํ์ ํ์
- Postman์ ์ด์ฉํ API ํ ์คํธ
7. CI/CD ๋ฐ DevOps ๊ฐ๋
- CI/CD (Continuous Integration/Continuous Deployment)
- Jenkins, GitHub Actions, GitLab CI/CD ํ์ฉ
- DevOps์ QA
- QA๊ฐ ์ง์์ ์ธ ํ ์คํธ ๋ฐ ๋ฐฐํฌ ์๋ํ์ ๊ธฐ์ฌํด์ผ ํจ
1. ์ํํธ์จ์ด ํ ์คํธ์ ๊ฐ๋
(1) ์ํํธ์จ์ด ํ ์คํธ๋?
- ์ํํธ์จ์ด๊ฐ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๋์ง ๊ฒ์ฆํ๋ ๊ณผ์ .
- ๊ฒฐํจ(Bug)์ ๋ฐ๊ฒฌํ๊ณ , ํ์ง์ ๋ณด์ฅํ๊ธฐ ์ํ ํ๋.
- ๊ฐ๋ฐ ๋จ๊ณ์์ ๋ฐ์ํ๋ ์ค๋ฅ๋ฅผ ์ค์ด๊ณ , ์ ์ง๋ณด์ ๋น์ฉ์ ์ ๊ฐํ๋ ๋ชฉ์ .
(2) ํ ์คํธ์ ๊ธฐ๋ณธ ์์น (ISTQB ๊ธฐ์ค)
- ํ ์คํ ์ ๊ฒฐํจ์ด ์กด์ฌํจ์ ๋ฐํ ์๋ ์์ง๋ง, ๊ฒฐํจ์ด ์์์ ์ฆ๋ช ํ ์๋ ์์.
- ์๋ฒฝํ ํ ์คํ ์ ๋ถ๊ฐ๋ฅํจ.
- ์ด๊ธฐ ํ ์คํ ์ด ์ค์ํจ. (SDLC ์ด๊ธฐ ๋จ๊ณ์์ ํ ์คํธ๊ฐ ์งํ๋ ์๋ก ๋น์ฉ์ด ์ ๊ฐ๋จ)
- ๊ฒฐํจ ์ง์ค์ ๋ฒ์น (Pareto Principle). (80%์ ๊ฒฐํจ์ 20%์ ๋ชจ๋์์ ๋ฐ๊ฒฌ๋จ)
- ์ด์ถฉ์ ํจ๋ฌ๋ ์ค (Pesticide Paradox). (๋์ผํ ํ ์คํธ ๋ฐ๋ณต ์ ์๋ก์ด ๊ฒฐํจ์ ์ฐพ๊ธฐ ์ด๋ ค์)
- ํ ์คํ ์ ์ ํฉ(Context) ์์กด์ ์. (๋๋ฉ์ธ๋ณ๋ก ํ ์คํธ ์ ๋ต์ด ๋ค๋ฆ)
- ์ค๋ฅ ๋ถ์ฌ์ ๊ถค๋ณ (Absence-of-Errors Fallacy). (์ฌ์ฉ์ ์๊ตฌ์ฌํญ๊ณผ ๋ง์ง ์์ผ๋ฉด ๊ฒฐํจ์ด ์์ด๋ ํ์ง์ด ๋ฎ์)
2. ์ํํธ์จ์ด ๊ฐ๋ฐ ์๋ช ์ฃผ๊ธฐ(SDLC)์ QA์ ์ญํ
(1) SDLC(Software Development Life Cycle) ๋จ๊ณ
- ์๊ตฌ์ฌํญ ๋ถ์ (Requirements Analysis)
- ์ค๊ณ (Design)
- ๊ตฌํ (Development)
- ํ ์คํธ (Testing)
- ๋ฐฐํฌ (Deployment)
- ์ ์ง๋ณด์ (Maintenance)
(2) V-๋ชจ๋ธ๊ณผ QA
- V-๋ชจ๋ธ์ SDLC ๋จ๊ณ๋ณ๋ก ๋์ํ๋ ํ ์คํธ ํ๋์ด ์กด์ฌํจ.
- ์ข์ธก(๊ฐ๋ฐ)๊ณผ ์ฐ์ธก(ํ
์คํธ)์ด ๋์๋จ.
- ์๊ตฌ์ฌํญ ๋ถ์ → ์ธ์ ํ ์คํธ
- ์์คํ ์ค๊ณ → ์์คํ ํ ์คํธ
- ์์ธ ์ค๊ณ → ํตํฉ ํ ์คํธ
- ๊ตฌํ → ๋จ์ ํ ์คํธ
3. ํ ์คํธ ์์ค(Test Levels)
์ํํธ์จ์ด ๊ฐ๋ฐ์์ ํ ์คํธ๋ ๊ณ์ธต์ ์ผ๋ก ์ํ๋๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก 4๊ฐ์ง ์ฃผ์ ์์ค์ด ์์.
(1) ๋จ์ ํ ์คํธ (Unit Test)
- ๊ฐ์ฅ ์์ ๋จ์(ํจ์, ๋ชจ๋)๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ํ ์คํธ.
- ๊ฐ๋ฐ์๊ฐ ์ง์ ์ํํ๋ฉฐ, ํ์ดํธ๋ฐ์ค ํ ์คํธ ๋ฐฉ์ ์ฌ์ฉ.
- ์๋ํ ํ ์คํธ(JUnit, PyTest ๋ฑ) ํ์ฉ ๊ฐ๋ฅ.
(2) ํตํฉ ํ ์คํธ (Integration Test)
- ์ฌ๋ฌ ๋ชจ๋์ด ๊ฒฐํฉ๋ ๋ ์ ์์ ์ผ๋ก ์๋ํ๋์ง ํ์ธ.
- Big Bang, Top-Down, Bottom-Up ๋ฑ์ ๋ฐฉ์์ด ์์.
- Stub, Driver ๋ฑ์ ์ฌ์ฉํ์ฌ ํ ์คํธ ํ๊ฒฝ์ ๋ชจ์ฌํจ.
(3) ์์คํ ํ ์คํธ (System Test)
- ์ ์ฒด ์์คํ ์ด ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๋์ง ๊ฒ์ฆ.
- ๋ธ๋๋ฐ์ค ํ ์คํธ ์ค์ฌ.
- ๊ธฐ๋ฅ, ์ฑ๋ฅ, ๋ณด์ ๋ฑ ์ฌ๋ฌ ์ธก๋ฉด์ ํ ์คํธํจ.
(4) ์ธ์ ํ ์คํธ (Acceptance Test)
- ์ค์ ์ฌ์ฉ์ ๊ด์ ์์ ์์คํ ์ด ๊ธฐ๋๋๋ก ๋์ํ๋์ง ํ์ธ.
- ์ํ ํ ์คํธ (๋ด๋ถ ์ฌ์ฉ์ ํ ์คํธ), ๋ฒ ํ ํ ์คํธ (์ธ๋ถ ์ฌ์ฉ์ ํ ์คํธ).
4. ํ ์คํธ ์ ํ(Test Types)
ํ ์คํธ๋ ๋ชฉ์ ์ ๋ฐ๋ผ ๊ธฐ๋ฅ์ ํ ์คํธ์ ๋น๊ธฐ๋ฅ์ ํ ์คํธ๋ก ๋๋จ.
(1) ๊ธฐ๋ฅ ํ ์คํธ (Functional Testing)
- ์๊ตฌ์ฌํญ ๋ช ์ธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์์ ๊ฒ์ฆํ๋ ํ ์คํธ.
- ๋ธ๋๋ฐ์ค ํ ์คํธ ๊ธฐ๋ฒ ์ฌ์ฉ.
- ์: ์ ํจ์ฑ ๊ฒ์ฌ, ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ํ์ธ ๋ฑ.
(2) ๋น๊ธฐ๋ฅ ํ ์คํธ (Non-Functional Testing)
- ์ฑ๋ฅ, ๋ณด์, ์ฌ์ฉ์ฑ ๋ฑ ๊ธฐ๋ฅ ์ด์ธ์ ์์๋ฅผ ๊ฒ์ฆ.
- ์ฃผ์ ์ ํ:
- ์ฑ๋ฅ ํ ์คํธ (Performance Test): ์๋ต ์๊ฐ, ์ฒ๋ฆฌ๋ ํ ์คํธ
- ๋ถํ ํ ์คํธ (Load Test): ๋ค์์ ์ฌ์ฉ์๊ฐ ๋์์ ์ ๊ทผํ ๋ ์ฑ๋ฅ ํ์ธ
- ์คํธ๋ ์ค ํ ์คํธ (Stress Test): ์์คํ ์ด ํ๊ณ๋ฅผ ์ด๊ณผํ์ ๋์ ๋ฐ์ ํ์ธ
- ๋ณด์ ํ ์คํธ (Security Test): SQL Injection, XSS ๋ฑ ๋ณด์ ์ทจ์ฝ์ ๊ฒ์ฆ
(3) ํ๊ท ํ ์คํธ (Regression Testing)
- ์ฝ๋ ์์ ์ดํ ๊ธฐ์กด ๊ธฐ๋ฅ์ด ์ ์ ๋์ํ๋์ง ํ์ธ.
- ์๋ํ ํ ์คํธ ๋๊ตฌ(JUnit, Selenium ๋ฑ)๋ฅผ ํ์ฉํ์ฌ ๋ฐ๋ณต ์ํ.
5. ํ ์คํธ ๊ธฐ๋ฒ (Testing Techniques)
ํ ์คํธ ๊ธฐ๋ฒ์ ํฌ๊ฒ ํ์ดํธ๋ฐ์ค ํ ์คํธ(White-box Testing) ์ ๋ธ๋๋ฐ์ค ํ ์คํธ(Black-box Testing) ๋ก ๊ตฌ๋ถ๋จ.
(1) ํ์ดํธ๋ฐ์ค ํ ์คํธ
- ๋ด๋ถ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ๋ถ์ํ์ฌ ํ ์คํธ ์ํ.
- ์ ์ด ํ๋ฆ(Flow Control), ์กฐ๊ฑด๋ฌธ, ๋ฃจํ ๊ฒ์ฌ ๋ฑ์ ํฌํจ.
- ๊ธฐ๋ฒ: ๋ฌธ์ฅ(Statement) ์ปค๋ฒ๋ฆฌ์ง, ๋ถ๊ธฐ(Branch) ์ปค๋ฒ๋ฆฌ์ง, ์กฐ๊ฑด ์ปค๋ฒ๋ฆฌ์ง.
(2) ๋ธ๋๋ฐ์ค ํ ์คํธ
- ๋ด๋ถ ์ฝ๋๊ฐ ์๋ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ ์คํธ ์ํ.
- ๊ธฐ๋ฒ:
- ๋์น ๋ถํ (Equivalence Partitioning): ์ ์ฌํ ์ ๋ ฅ๊ฐ์ ๊ทธ๋ฃนํํ์ฌ ํ ์คํธ.
- ๊ฒฝ๊ณ๊ฐ ๋ถ์ (Boundary Value Analysis): ์ต์/์ต๋๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ ์คํธ.
- ๊ฒฐ์ ํ ์ด๋ธ (Decision Table Testing): ์ฌ๋ฌ ์กฐ๊ฑด ์กฐํฉ์ ๋ถ์ํ์ฌ ํ ์คํธ.
- ์ํ ์ ์ด(State Transition Testing): ์ํ ๋ณํ์ ๋ฐ๋ผ ํ ์คํธ.
6. ๊ฒฐํจ ๊ด๋ฆฌ์ QA ํ๋ก์ธ์ค
(1) ๊ฒฐํจ(๋ฒ๊ทธ) ๊ด๋ฆฌ ํ๋ก์ธ์ค
- ๊ฒฐํจ ๋ฐ๊ฒฌ (Defect Detection)
- ๊ฒฐํจ ๋ฑ๋ก (Defect Logging) - Jira, Redmine ๋ฑ์ ๋๊ตฌ ํ์ฉ
- ๊ฒฐํจ ๋ถ์ (Defect Analysis) - ์ฌ๊ฐ๋(Severity) ๋ฐ ์ฐ์ ์์(Priority) ์ค์
- ๊ฒฐํจ ์์ (Defect Fixing)
- ๊ฒฐํจ ์ฌํ ์คํธ (Retesting)
- ํ๊ท ํ ์คํธ (Regression Testing)
- ๊ฒฐํจ ์ข ๋ฃ (Defect Closure)
(2) ํ ์คํธ ๋ฌธ์
- ํ ์คํธ ๊ณํ์(Test Plan): ํ ์คํธ ๋ฒ์, ์ ๋ต, ์ผ์ ๋ฑ์ ์ ์.
- ํ ์คํธ ์ผ์ด์ค(Test Case): ์ ๋ ฅ๊ฐ, ์์ ๊ฒฐ๊ณผ, ์ํ ์ ์ฐจ ๋ฑ์ ์ ์.
- ํ ์คํธ ๊ฒฐ๊ณผ ๋ณด๊ณ ์(Test Report): ํ ์คํธ ์ํ ๊ฒฐ๊ณผ ์์ฝ.
7. ์ ์์ผ(Agile) ๊ฐ๋ฐ๊ณผ QA
- ์ ์์ผ(Agile) ๋ฐฉ๋ฒ๋ก ์์๋ ์งง์ ์ฃผ๊ธฐ์ ๊ฐ๋ฐ๊ณผ ์ง์์ ์ธ ํ ์คํธ๊ฐ ์ค์ํจ.
- ์คํฌ๋ผ(Scrum)
- ์คํ๋ฆฐํธ ๋จ์๋ก ๊ฐ๋ฐ & ํ ์คํธ ๋ฐ๋ณต.
- QA๋ ๊ฐ๋ฐํ๊ณผ ํ๋ ฅํ์ฌ ์ง์์ ์ธ ํ์ง ๋ณด์ฅ.
- TDD (Test-Driven Development, ํ
์คํธ ์ฃผ๋ ๊ฐ๋ฐ)
- ๊ฐ๋ฐ์๊ฐ ๋จผ์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ด๋ฅผ ํต๊ณผํ๋ ๋ฐฉ์์ผ๋ก ๊ฐ๋ฐ ์งํ.
- BDD (Behavior-Driven Development, ํ๋ ์ฃผ๋ ๊ฐ๋ฐ)
- ์ฌ์ฉ์์ ํ๋์ ๊ธฐ๋ฐ์ผ๋ก ํ ์คํธ ์์ฑ (Gherkin ์ธ์ด, Cucumber ์ฌ์ฉ).
8. ์ ์ ํ ์คํธ(Static Testing)์ ๋์ ํ ์คํธ(Dynamic Testing)
์ํํธ์จ์ด ํ ์คํธ๋ ์คํ ์ฌ๋ถ์ ๋ฐ๋ผ ์ ์ ํ ์คํธ์ ๋์ ํ ์คํธ๋ก ๊ตฌ๋ถ๋จ.
(1) ์ ์ ํ ์คํธ (Static Testing)
- ์ํํธ์จ์ด ์คํ ์์ด ๊ฒฐํจ์ ์ฐพ๋ ๋ฐฉ๋ฒ.
- ์ฃผ๋ก ๋ฌธ์, ์ฝ๋, ์ํคํ ์ฒ ๋ฆฌ๋ทฐ ๋ฑ์ ํตํด ๊ฒฐํจ์ ์๋ณ.
- ๋ํ์ ์ธ ๊ธฐ๋ฒ
- ๋ฆฌ๋ทฐ(Review): ์๊ตฌ์ฌํญ, ์ฝ๋, ํ ์คํธ ์ผ์ด์ค ๋ฑ์ ๊ฒํ .
- ์ํฌ์ค๋ฃจ(Walkthrough): ๋ฌธ์๋ฅผ ์์ฑ์๊ฐ ์ค๋ช ํ๊ณ ๋๋ฃ๋ค์ด ํผ๋๋ฐฑ ์ ๊ณต.
- ์ธ์คํ์ (Inspection): ๊ณต์์ ์ธ ์ ์ฐจ์ ๋ฐ๋ผ ๊ฒฐํจ์ ๋ฐ๊ฒฌํ๊ณ ๊ธฐ๋ก.
- ์ ์ ๋ถ์(Static Analysis): ์๋ํ ๋๊ตฌ(SonarQube, PMD)๋ฅผ ์ด์ฉํด ์ฝ๋ ํ์ง ๋ถ์.
(2) ๋์ ํ ์คํธ (Dynamic Testing)
- ์ํํธ์จ์ด๋ฅผ ์คํํ์ฌ ํ ์คํธํ๋ ๋ฐฉ๋ฒ.
- ๋ธ๋๋ฐ์ค ํ ์คํธ์ ํ์ดํธ๋ฐ์ค ํ ์คํธ๋ฅผ ํฌํจ.
- ๋จ์ ํ ์คํธ, ํตํฉ ํ ์คํธ, ์์คํ ํ ์คํธ ๋ฑ์ด ๋ชจ๋ ๋์ ํ ์คํธ์ ํด๋น.
9. ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง (Test Coverage)
- ํ ์คํธ์ ์์ ์ฑ์ ์ธก์ ํ๋ ์งํ.
- ์ผ๋ง๋ ๋ง์ ์ฝ๋๊ฐ ํ ์คํธ๋์๋์ง ํ๋จํ๋ ๊ธฐ์ค.
- ์ผ๋ฐ์ ์ธ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ์ ํ
- ๋ฌธ์ฅ ์ปค๋ฒ๋ฆฌ์ง(Statement Coverage): ์คํ๋ ์ฝ๋ ๋ผ์ธ์ ๋น์จ.
- ๋ถ๊ธฐ ์ปค๋ฒ๋ฆฌ์ง(Branch Coverage): if, switch ๋ฑ์ ๋ถ๊ธฐ๊ฐ ํ ์คํธ๋ ๋น์จ.
- ์กฐ๊ฑด ์ปค๋ฒ๋ฆฌ์ง(Condition Coverage): ๊ฐ๋ณ ์กฐ๊ฑด์์ด ์ฐธ/๊ฑฐ์ง์ผ๋ก ์คํ๋ ๋น์จ.
- MC/DC (Modified Condition/Decision Coverage): ๋ชจ๋ ๊ฐ๋ณ ์กฐ๊ฑด์ด ๋ ๋ฆฝ์ ์ผ๋ก ํ ์คํธ๋๋์ง ํ์ธ.
- ๊ฒฝ๋ก ์ปค๋ฒ๋ฆฌ์ง(Path Coverage): ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ์คํ ๊ฒฝ๋ก๋ฅผ ํ ์คํธ.
10. ๋ฆฌ์คํฌ ๊ธฐ๋ฐ ํ ์คํธ (Risk-Based Testing)
- ์ํํธ์จ์ด์ ์ํ๋๋ฅผ ๊ณ ๋ คํ์ฌ ํ ์คํธ ์ฐ์ ์์๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ.
- ๋ชจ๋ ํ ์คํธ๋ฅผ ์ํํ ์ ์๋ ๊ฒฝ์ฐ, ๋น์ฆ๋์ค ์ํฅ๋ ๋ฐ ๊ฒฐํจ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ ๊ธฐ์ค์ผ๋ก ํ ์คํธ๋ฅผ ์ํ.
- ๋ฆฌ์คํฌ ๋ถ์ ์์
- ๊ฒฐํจ ๋ฐ์ ๊ฐ๋ฅ์ฑ(Probability)
- ๊ฒฐํจ์ด ๋ฏธ์น๋ ์ํฅ(Impact)
- ํ๋ณต ๊ฐ๋ฅ์ฑ(Recoverability)
11. ํ ์คํธ ์ค๋ผํด (Test Oracle)
- ํ ์คํธ ๊ฒฐ๊ณผ๊ฐ ์ฌ๋ฐ๋ฅธ์ง ํ๋จํ๋ ๊ธฐ์ค.
- ํ ์คํธ๋ฅผ ์๋ํํ ๋ ๋ง์ด ์ฌ์ฉ๋จ.
- ๋ํ์ ์ธ ์ค๋ผํด ์ ํ
- ์ฐธ ์ค๋ผํด(True Oracle): ๋ชจ๋ ์ ๋ ฅ๊ฐ์ ๋ํด ์ ํํ ์์ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณต.
- ์ํ๋ง ์ค๋ผํด(Sampling Oracle): ์ผ๋ถ ์ ๋ ฅ๊ฐ์ ๋ํด์๋ง ์์ ๊ฒฐ๊ณผ ์ ๊ณต.
- ํด๋ฆฌ์คํฑ ์ค๋ผํด(Heuristic Oracle): ๊ธฐ์กด ๋์๊ณผ ๋น๊ตํ์ฌ ๊ฒฐํจ ์ฌ๋ถ ํ๋จ.
- ์ผ๊ด์ฑ ๊ฒ์ฌ ์ค๋ผํด(Consistency Oracle): ๋์ผํ ์ ๋ ฅ์ ๋ํด ์ผ๊ด๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋์ง ํ์ธ.
12. ํ์์ ํ ์คํธ (Exploratory Testing)
- ์ฌ์ ์ ์ ํด์ง ํ ์คํธ ์ผ์ด์ค ์์ด, ํ ์คํฐ์ ๊ฒฝํ๊ณผ ์ง๊ด์ ๋ฐํ์ผ๋ก ์ํํ๋ ํ ์คํธ.
- ์๊ตฌ์ฌํญ์ด ๋ถ๋ช ํํ๊ฑฐ๋ ์ด๊ธฐ ๋จ๊ณ์์ ํจ๊ณผ์ .
- ์ฅ์ : ์ ์ฐ์ฑ, ์๋ก์ด ๊ฒฐํจ ๋ฐ๊ฒฌ ๊ฐ๋ฅ์ฑ ์ฆ๊ฐ.
- ๋จ์ : ํ ์คํธ ๊ฒฐ๊ณผ ์ฌํ์ด ์ด๋ ค์ธ ์ ์์.
13. ํ๊ท ํ ์คํธ (Regression Testing) ์ ๋ต
- ๊ธฐ์กด ๊ธฐ๋ฅ์ด ๋ณ๊ฒฝ ์์ด ์ ์์ ์ผ๋ก ๋์ํ๋์ง ๊ฒ์ฆํ๋ ํ ์คํธ.
- ํ๊ท ํ
์คํธ ๋ฒ์๋ฅผ ๊ฒฐ์ ํ๋ ์ ๋ต
- ์์ ํ๊ท ํ ์คํธ(Complete Regression Testing): ๋ชจ๋ ํ ์คํธ๋ฅผ ๋ค์ ์ํ.
- ์ ํ์ ํ๊ท ํ ์คํธ(Selective Regression Testing): ๋ณ๊ฒฝ๋ ๋ถ๋ถ๊ณผ ์ํฅ์ ๋ฐ๋ ๋ถ๋ถ๋ง ํ ์คํธ.
- ํ ์คํธ ์ค์ํธ ์ฌ์ฌ์ฉ(Test Suite Reuse): ๊ธฐ์กด ํ ์คํธ ์ผ์ด์ค๋ฅผ ์๋ํํ์ฌ ์ฌ์ฌ์ฉ.
14. ํ ์คํ ์ฑ์๋ ๋ชจ๋ธ (Testing Maturity Models, TMMi)
- ์กฐ์ง์ ํ ์คํธ ํ๋ก์ธ์ค ์ฑ์๋๋ฅผ ํ๊ฐํ๋ ๋ชจ๋ธ.
- CMMI(Capability Maturity Model Integration)์ ์ ์ฌํ ๊ฐ๋ .
- TMMi์ 5๋จ๊ณ
- ์ด๊ธฐ(Initial): ํ ์คํธ ํ๋ก์ธ์ค๊ฐ ์ฒด๊ณํ๋์ง ์์.
- ๊ด๋ฆฌ(Managed): ๊ธฐ๋ณธ์ ์ธ ํ ์คํธ ํ๋ก์ธ์ค ๊ตฌ์ถ.
- ์ ์(Defined): ํ์คํ๋ ํ ์คํธ ํ๋ก์ธ์ค ์ ์ฉ.
- ์ธก์ (Measured): ํ ์คํธ ์ฑ๊ณผ๋ฅผ ์ธก์ ํ๊ณ ๋ถ์.
- ์ต์ ํ(Optimized): ์ง์์ ์ธ ๊ฐ์ ๋ฐ ์๋ํ ๋์ .
15. ์ํํธ์จ์ด ํ์ง ์์ฑ (Software Quality Attributes)
- ์ํํธ์จ์ด ํ์ง์ ํ๊ฐํ๋ ๊ธฐ์ค.
- ISO/IEC 25010 ๊ธฐ์ค ์ฃผ์ ํ์ง ์์ฑ
- ๊ธฐ๋ฅ์ฑ(Functionality): ์ํํธ์จ์ด๊ฐ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๋์ง ์ฌ๋ถ.
- ์ ๋ขฐ์ฑ(Reliability): ์์คํ ์ด ์ค๋ฅ ์์ด ์ง์์ ์ผ๋ก ๋์ํ๋ ๋ฅ๋ ฅ.
- ์ฑ๋ฅ ํจ์จ์ฑ(Performance Efficiency): ์๋ต ์๊ฐ, ์ฒ๋ฆฌ๋, ๋ฆฌ์์ค ์ฌ์ฉ๋.
- ์ฌ์ฉ์ฑ(Usability): ์ฌ์ฉ์ ์นํ์ ์ธ UI/UX.
- ๋ณด์(Security): ๋ฐ์ดํฐ ๋ณดํธ ๋ฐ ์ ๊ทผ ์ ์ด.
- ํธํ์ฑ(Compatibility): ๋ค๋ฅธ ์์คํ ๊ณผ์ ์ฐ๋์ฑ.
- ์ ์ง๋ณด์์ฑ(Maintainability): ์ฝ๋ ์์ ๋ฐ ๊ฐ์ ์ฉ์ด์ฑ.
- ์ด์์ฑ(Portability): ๋ค๋ฅธ ํ๊ฒฝ์์๋ ์คํ ๊ฐ๋ฅ ์ฌ๋ถ.
16. ๊ฒฐํจ์ ์ฌ๊ฐ๋(Severity)์ ์ฐ์ ์์(Priority)
- ์ฌ๊ฐ๋(Severity): ๊ฒฐํจ์ด ์์คํ
์ ๋ฏธ์น๋ ์ํฅ์ ์ ๋.
- Critical (์น๋ช ์ ): ์์คํ ๋ค์ด, ๋ฐ์ดํฐ ์์ค.
- Major (์ค๋ํจ): ์ฃผ์ ๊ธฐ๋ฅ์ด ์ ์์ ์ผ๋ก ๋์ํ์ง ์์.
- Minor (๊ฒฝ๋ฏธํจ): ์ผ๋ถ ๊ธฐ๋ฅ์ด ๋น์ ์์ ์ด๋, ๋์ฒด ๊ฐ๋ฅ.
- Trivial (์ฌ์ํจ): UI ์ค๋ฅ, ์คํ ๋ฑ.
- ์ฐ์ ์์(Priority): ํด๊ฒฐํด์ผ ํ ์๊ธ์ฑ.
- High (๋์): ์ฆ์ ์์ ํ์.
- Medium (๋ณดํต): ๋ค์ ๋ฆด๋ฆฌ์ค๊น์ง ํด๊ฒฐ ํ์.
- Low (๋ฎ์): ์ฅ๊ธฐ์ ์ผ๋ก ํด๊ฒฐ ๊ฐ๋ฅ.
17. ํ์ด์ฆ ์ปจํ ์ธ๋จผํธ (Phase Containment)
- ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๊ฐ ๋จ๊ณ์์ ๊ฒฐํจ์ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ๊ณ ํด๊ฒฐํ๋ ๊ฐ๋ .
- ๊ฒฐํจ ์์ ๋น์ฉ์ ๋ฆ์์๋ก ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์, ์ด๊ธฐ ๋จ๊ณ์์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ๋ ๊ฒ์ด ์ค์ํจ.
- "์ด๊ธฐ ํ ์คํธ(Early Testing)" ์์น๊ณผ ์ฐ๊ฒฐ๋จ
18. ์ํํธ์จ์ด ํ ์คํธ ๋ชจ๋ธ
ํ ์คํธ ํ๋ก์ธ์ค๋ฅผ ๊ตฌ์กฐ์ ์ผ๋ก ์ ์ํ ์ฌ๋ฌ ๋ชจ๋ธ์ด ์์.
(1) V-๋ชจ๋ธ (V-Model)
- SDLC์ ํ ์คํธ ํ๋์ ๋ณ๋ ฌ์ ์ผ๋ก ์ํํ๋ ๋ชจ๋ธ.
- ๊ฐ๋ฐ ๋จ๊ณ๋ง๋ค ๋์ํ๋ ํ ์คํธ ๋จ๊ณ๊ฐ ์กด์ฌ.
- ๋จ์ : ์ด๊ธฐ ์ค๊ณ ์ค๋ฅ๊ฐ ๋ฐ๊ฒฌ๋๋ฉด ๋น์ฉ์ด ํผ.
์๊ตฌ์ฌํญ ๋ถ์ | ์ธ์ ํ ์คํธ (Acceptance Testing) |
์์คํ ์ค๊ณ | ์์คํ ํ ์คํธ (System Testing) |
์ํคํ ์ฒ ์ค๊ณ | ํตํฉ ํ ์คํธ (Integration Testing) |
๋ชจ๋ ์ค๊ณ | ๋จ์ ํ ์คํธ (Unit Testing) |
(2) ์ ์์ผ ํ ์คํ (Agile Testing)
- ์ ์์ผ ๊ฐ๋ฐ ๋ฐฉ์(Scrum, Kanban ๋ฑ)๊ณผ ํจ๊ป ์ํ๋๋ ํ ์คํธ ๋ฐฉ์.
- ์งง์ ๊ฐ๋ฐ ์ฃผ๊ธฐ(Sprint)๋ง๋ค ๋ฐ๋ณต์ ์ผ๋ก ํ ์คํธ ์ํ.
- TDD (Test-Driven Development), BDD (Behavior-Driven Development) ๊ธฐ๋ฒ๊ณผ ๋ฐ์ ํ ๊ด๋ จ.
(3) ์คํ์ด๋ด ๋ชจ๋ธ (Spiral Model)
- ์ํ ๋ถ์์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐ๊ณผ ํ ์คํธ๋ฅผ ๋ฐ๋ณตํ๋ ๋ชจ๋ธ.
- ์ ์ง์ ์ผ๋ก ์์คํ ์ ํ์ฅํ๋ฉด์ ํ ์คํธ๋ฅผ ์งํ.
19. ํ ์คํธ ์๋ํ (Test Automation)
๋ฐ๋ณต์ ์ธ ํ ์คํธ๋ฅผ ์๋์ผ๋ก ์ํํ์ฌ QA ํ๋ก์ธ์ค๋ฅผ ์ต์ ํํ๋ ๊ฐ๋ .
(1) ์๋ํ ํ ์คํธ์ ์ฅ์
- ํ ์คํธ ์๋ ํฅ์ (์๋ ํ ์คํธ ๋๋น ๋น ๋ฆ).
- ํ๊ท ํ ์คํธ(Regression Test)์ ์ฉ์ด.
- ์ผ๊ด๋ ํ ์คํธ ์ํ ๊ฐ๋ฅ (์ฌ๋์ ์ค์ ๋ฐฉ์ง).
(2) ์๋ํ ํ ์คํธ ๋๊ตฌ
ํ ์คํธ ์์ญ๋ํ์ ์ธ ๋๊ตฌ๋จ์ ํ ์คํธ | JUnit (Java), PyTest (Python), NUnit (C#) |
UI ํ ์คํธ | Selenium, Cypress, Appium |
API ํ ์คํธ | Postman, RestAssured |
์ฑ๋ฅ ํ ์คํธ | JMeter, Gatling, Locust |
๋ณด์ ํ ์คํธ | OWASP ZAP, Burp Suite |
(3) ํ ์คํธ ์๋ํ ํ๋ ์์ํฌ
- ํค์๋ ๊ธฐ๋ฐ ํ ์คํธ (Keyword-Driven Testing): ํ ์คํธ ์คํฌ๋ฆฝํธ ์์ด ํค์๋ ๊ธฐ๋ฐ์ผ๋ก ํ ์คํธ ์ํ (e.g., Robot Framework).
- ๋ฐ์ดํฐ ๊ธฐ๋ฐ ํ ์คํธ (Data-Driven Testing): ๋ค์ํ ์ ๋ ฅ๊ฐ์ ์ด์ฉํด ๋์ผํ ํ ์คํธ ์ผ์ด์ค ์คํ.
- ๋ชจ๋ธ ๊ธฐ๋ฐ ํ ์คํธ (Model-Based Testing): ์์คํ ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ํ ์คํธ ์๋ ์์ฑ.
20. ์ํํธ์จ์ด ๊ฒฐํจ ์ ํ (Types of Software Defects)
์ํํธ์จ์ด์์ ๋ฐ์ํ ์ ์๋ ๊ฒฐํจ ์ ํ์ ์ ๋ฆฌํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์.
๊ฒฐํจ ์ ํ์ค๋ช๊ธฐ๋ฅ ๊ฒฐํจ (Functional Defect) | ์๊ตฌ์ฌํญ์ ๋ง์ง ์๋ ๋์ ๋ฐ์ |
์ฑ๋ฅ ๊ฒฐํจ (Performance Defect) | ์๋, ์๋ต ์๊ฐ ๋ฑ์ ์ฑ๋ฅ ๋ฌธ์ |
๋ณด์ ๊ฒฐํจ (Security Defect) | ๋ฐ์ดํฐ ๋ ธ์ถ, ์ทจ์ฝ์ ๊ณต๊ฒฉ ๊ฐ๋ฅ์ฑ |
UI/UX ๊ฒฐํจ (UI/UX Defect) | UI ์์ ์ ๋ ฌ ์ค๋ฅ, ์ ๊ทผ์ฑ ๋ฌธ์ |
๋ ผ๋ฆฌ ๊ฒฐํจ (Logical Defect) | ์๋ชป๋ ์๊ณ ๋ฆฌ์ฆ ๋๋ ๊ณ์ฐ ์ค๋ฅ |
ํธํ์ฑ ๊ฒฐํจ (Compatibility Defect) | OS, ๋ธ๋ผ์ฐ์ , ๋๋ฐ์ด์ค ๊ฐ ํธํ์ฑ ๋ฌธ์ |
๋ค๊ตญ์ด ๊ฒฐํจ (Localization Defect) | ์ธ์ด๋ณ UI ๊นจ์ง, ๋ฒ์ญ ์ค๋ฅ |
21. ๊ฒฐํจ ์ถ์ (Defect Tracking) ๋ฐ ๋ฒ๊ทธ ๋ผ์ดํ์ฌ์ดํด
ํ ์คํธ ์ค ๋ฐ๊ฒฌ๋ ๊ฒฐํจ์ ํน์ ํ ํ๋ฆ์ ๋ฐ๋ผ ์ถ์ ๋จ.
(1) ๊ฒฐํจ ๋ผ์ดํ์ฌ์ดํด (Bug Lifecycle)
- New (์ ๊ท): ๊ฒฐํจ์ด ๋ฐ๊ฒฌ๋์ด ๋ฑ๋ก๋จ.
- Assigned (ํ ๋น๋จ): ๊ฐ๋ฐ์๊ฐ ์์ ํ ๋ด๋น์๋ก ์ง์ ๋จ.
- In Progress (์์ ์ค): ๊ฐ๋ฐ์๊ฐ ๊ฒฐํจ์ ์์ ํ๋ ๋จ๊ณ.
- Fixed (์์ ์๋ฃ): ๊ฒฐํจ์ด ํด๊ฒฐ๋จ.
- Retest (์ฌํ ์คํธ): QA๊ฐ ์์ ๋ ์ฝ๋ ํ ์คํธ.
- Closed (์ข ๋ฃ๋จ): ๊ฒฐํจ์ด ํด๊ฒฐ๋์๊ณ , ๋ค์ ๋ฐ์ํ์ง ์์.
- Reopen (์ฌ์คํ๋จ): ์์ ์ด ๋ถ์์ ํ์ฌ ๋ค์ ํด๊ฒฐํด์ผ ํ ๊ฒฝ์ฐ.
(2) ๊ฒฐํจ ์ฌ๊ฐ๋(Severity)์ ์ฐ์ ์์(Priority)
- ์ฌ๊ฐ๋(Severity): ์์คํ ์ ๋ฏธ์น๋ ์ํฅ.
- ์ฐ์ ์์(Priority): ํด๊ฒฐ ์๊ธ์ฑ.
22. ํ ์คํธ ํ๊ฒฝ ๊ด๋ฆฌ (Test Environment Management)
ํ ์คํธ๊ฐ ์ํํ๊ฒ ์งํ๋๋ ค๋ฉด ์ ์ ํ ํ ์คํธ ํ๊ฒฝ์ด ํ์ํจ.
(1) ํ ์คํธ ํ๊ฒฝ์ ์์
- ํ๋์จ์ด (์๋ฒ, ๋คํธ์ํฌ)
- ์ํํธ์จ์ด (OS, DB, API)
- ํ ์คํธ ๋ฐ์ดํฐ (์ค์ ๋ฐ์ดํฐ์ ์ ์ฌํ ํ ์คํธ์ฉ ๋ฐ์ดํฐ)
- ๋ชจ์ ์์คํ (Stub, Mock, Virtualization ์ฌ์ฉ)
(2) ๊ฐ์ํ ํ ์คํธ ํ๊ฒฝ
- Docker: ์ปจํ ์ด๋ ๊ธฐ๋ฐ ํ ์คํธ ํ๊ฒฝ ๊ตฌ์ถ.
- VMware: ๊ฐ์ ๋จธ์ ์ ํ์ฉํ ํ ์คํธ ํ๊ฒฝ.
- Cloud-based Testing: AWS, Google Cloud ๋ฑ์ ํ์ฉํ ์๊ฒฉ ํ ์คํธ.
23. ์ง์์ ํตํฉ ๋ฐ ๋ฐฐํฌ (CI/CD)์ QA
QA๋ DevOps์ ๊ธด๋ฐํ๊ฒ ์ฐ๊ด๋จ.
(1) ์ง์์ ํตํฉ (CI - Continuous Integration)
- ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ ๋๋ง๋ค ์๋์ผ๋ก ๋น๋ ๋ฐ ํ ์คํธ ์ํ.
- ๋ํ์ ์ธ ๋๊ตฌ: Jenkins, GitHub Actions, GitLab CI/CD
(2) ์ง์์ ๋ฐฐํฌ (CD - Continuous Deployment)
- ์ฝ๋๊ฐ ์๋์ผ๋ก ๋ฐฐํฌ๋๋ ํ๋ก์ธ์ค.
- ์๋ํ๋ ํ ์คํธ๊ฐ ํ์์ .
(3) QA ์ญํ
- CI/CD ํ๊ฒฝ์์ ์๋ํ ํ ์คํธ ์ํ.
- ๋ฐฐํฌ ์ ํ ํ์ง ๊ฒ์ฆ.
24. ํ ์คํธ ๋ฐ์ดํฐ ๊ด๋ฆฌ (Test Data Management, TDM)
ํ ์คํธ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ํํ๋ ค๋ฉด ์ ์ ํ ํ ์คํธ ๋ฐ์ดํฐ๊ฐ ํ์ํจ.
(1) ํ ์คํธ ๋ฐ์ดํฐ ์ ํ
- ์ค์ ๋ฐ์ดํฐ (Production Data): ์คํ๊ฒฝ ๋ฐ์ดํฐ๋ฅผ ์ต๋ช ํํ์ฌ ์ฌ์ฉ.
- ์ํ ๋ฐ์ดํฐ (Sample Data): ์๊ท๋ชจ ํ ์คํธ์ฉ ๊ฐ๊ณต ๋ฐ์ดํฐ.
- ๋ชจ์ ๋ฐ์ดํฐ (Synthetic Data): ์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ ๊ฐ์ง ๋ฐ์ดํฐ.
(2) ํ ์คํธ ๋ฐ์ดํฐ ์ต๋ช ํ ๊ธฐ๋ฒ
- ๋ง์คํน(Masking): ์ผ๋ถ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ ค์ ์ฌ์ฉ (e.g., 123-45-6789 → 123-XX-XXXX).
- ์ํธํ(Encryption): ๋ฐ์ดํฐ ์ํธํ ํ ํ ์คํธ.
- ๋๋คํ(Randomization): ๋ฐ์ดํฐ๋ฅผ ๋ฌด์์๋ก ๋ณ๊ฒฝ.
25. AI ๊ธฐ๋ฐ ํ ์คํธ ๋ฐ ์ต์ ํธ๋ ๋
AI ๊ธฐ์ ์ด QA์ ์ ๋ชฉ๋๋ฉด์ ์ง๋ฅํ ํ ์คํธ ์๋ํ๊ฐ ๋ฐ์ ํ๊ณ ์์.
(1) AI ๊ธฐ๋ฐ ํ ์คํธ ์๋ํ
- ๋จธ์ ๋ฌ๋์ ํ์ฉํ ์๋ ๊ฒฐํจ ํ์ง.
- ์ค๋งํธ ํ ์คํธ ์ผ์ด์ค ์์ฑ.
- ์์จ์ ์ธ UI ํ ์คํธ ์ํ.
(2) ์ฃผ์ AI ํ ์คํธ ๋๊ตฌ
- Applitools: ์๊ฐ์ UI ํ ์คํธ ์๋ํ.
- Testim: AI ๊ธฐ๋ฐ ํ ์คํธ ์๋ํ ๋๊ตฌ.
- Mabl: ๋จธ์ ๋ฌ๋ ๊ธฐ๋ฐ UI ํ ์คํธ.
26. ๊ฒฐํจ ์๋ฐฉ ๊ธฐ๋ฒ (Defect Prevention Techniques)
QA์ ํต์ฌ ๋ชฉํ ์ค ํ๋๋ ๊ฒฐํจ์ ์ฌ์ ์ ์๋ฐฉํ๋ ๊ฒ์.
(1) ๊ฒฐํจ ์๋ฐฉ์ด ์ค์ํ ์ด์
- ์ด๊ธฐ ๋จ๊ณ์์ ๊ฒฐํจ์ ๋ฐฉ์งํ๋ฉด ๋น์ฉ์ด ์ ๊ฐ๋จ (๋์ค์ ์์ ํ ์๋ก ๋น์ฉ ์ฆ๊ฐ).
- ํ ์คํธ ๋จ๊ณ์์ ๊ฒฐํจ์ด ์ค์ด๋ค๋ฉด ์ ํ ํ์ง์ด ๋์์ง.
- ์ง์์ ์ธ ๊ฐ์ (CQI, Continuous Quality Improvement)์ ๋์.
(2) ๊ฒฐํจ ์๋ฐฉ ๋ฐฉ๋ฒ
- ์ฝ๋ฉ ํ์ค ์ค์
- ์ผ๊ด๋ ์ฝ๋ฉ ์คํ์ผ ์ ์ง (Lint, Checkstyle ๊ฐ์ ๋๊ตฌ ํ์ฉ).
- ์ ์ ๋ถ์ ๋๊ตฌ ํ์ฉ
- SonarQube, PMD, FindBugs ๊ฐ์ ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ๋ก ์ฝ๋ ํ์ง์ ์๋ ์ ๊ฒ.
- ๋ฆฌ๋ทฐ ๋ฐ ํ์ด ํ๋ก๊ทธ๋๋ฐ
- ์ฝ๋ ๋ฆฌ๋ทฐ(Code Review), ์ํฌ์ค๋ฃจ(Walkthrough), ์ธ์คํ์ (Inspection)์ ํตํด ์ค๋ฅ ์ฌ์ ๋ฐ๊ฒฌ.
- ํ
์คํธ ์ฃผ๋ ๊ฐ๋ฐ (TDD, Test-Driven Development)
- ํ ์คํธ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑํ๊ณ , ๊ทธ ํ ์คํธ๋ฅผ ํต๊ณผํ๋ ์ฝ๋๋ฅผ ๊ฐ๋ฐ.
- ์๋ํ๋ ๋น๋ ๋ฐ ํตํฉ ํ
์คํธ (CI/CD ์ ์ฉ)
- ์ง์์ ํตํฉ(CI) ๊ณผ์ ์์ ์๋์ผ๋ก ํ ์คํธ๋ฅผ ์ํํ์ฌ ๊ฒฐํจ์ ์กฐ๊ธฐ์ ๊ฐ์ง.
27. ํ ์คํธ ์ค๊ณ ๊ธฐ๋ฒ (Test Design Techniques)
ํ ์คํธ ์ผ์ด์ค๋ฅผ ํจ์จ์ ์ผ๋ก ์์ฑํ๋ ๋ฐฉ๋ฒ.
(1) ๋ช ์ธ ๊ธฐ๋ฐ ํ ์คํธ ๊ธฐ๋ฒ (Specification-Based Testing)
- ์ํํธ์จ์ด์ ์๊ตฌ์ฌํญ(์คํ)์ ๊ธฐ๋ฐํ์ฌ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์ค๊ณ.
- ๋ํ์ ์ธ ๊ธฐ๋ฒ:
- ๋์น ๋ถํ (Equivalence Partitioning)
- ์ ๋ ฅ๊ฐ์ ์ฌ๋ฌ ๋ฒ์๋ก ๋๋๊ณ , ๊ฐ ๋ฒ์์์ ํ๋์ ๊ฐ๋ง ํ ์คํธ.
- ์: 1~100๊น์ง ์ซ์๋ฅผ ์ ๋ ฅํ ์ ์๋ค๋ฉด, 0(์๋ชป๋ ๊ฐ), 50(์ ์ ๊ฐ), 101(์๋ชป๋ ๊ฐ)๋ง ํ ์คํธํ๋ฉด ๋จ.
- ๊ฒฝ๊ณ๊ฐ ๋ถ์ (Boundary Value Analysis)
- ๊ฐ์ฅ ์ค๋ฅ๊ฐ ๋ง์ด ๋ฐ์ํ๋ **๊ฒฝ๊ณ ๊ฐ(์ต์, ์ต๋)**์ ์ง์ค์ ์ผ๋ก ํ ์คํธ.
- ์: 1~100๊น์ง ์ ๋ ฅ ๊ฐ๋ฅ → 0, 1, 100, 101์ ํ ์คํธ.
- ๊ฒฐ์ ํ
์ด๋ธ ํ
์คํธ (Decision Table Testing)
- ์ฌ๋ฌ ์กฐ๊ฑด ์กฐํฉ์ ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๋ถ์.
- ์: ๋ก๊ทธ์ธ ์ "์์ด๋ + ๋น๋ฐ๋ฒํธ"๊ฐ ์ผ์นํ๋ ๊ฒฝ์ฐ๋ง ์ฑ๊ณต → 4๊ฐ์ง ๊ฒฝ์ฐ์ ์ ํ ์คํธ.
- ์ํ ์ ์ด ํ
์คํธ (State Transition Testing)
- ์์คํ ์ด ์ํ๋ฅผ ๋ณ๊ฒฝํ ๋ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๋์ง ํ์ธ.
- ์: ATM์์ "์นด๋ ์ฝ์ → PIN ์ ๋ ฅ → ์ถ๊ธ ์์ฒญ → ์ถ๊ธ ์๋ฃ" ํ๋ฆ ํ ์คํธ.
- ๋์น ๋ถํ (Equivalence Partitioning)
(2) ๊ฒฝํ ๊ธฐ๋ฐ ํ ์คํธ ๊ธฐ๋ฒ (Experience-Based Testing)
- ํ ์คํฐ์ ๊ฒฝํ๊ณผ ์ง๊ด์ ํ์ฉํ ํ ์คํธ.
- ๋ํ์ ์ธ ๋ฐฉ๋ฒ:
- ํ์์ ํ ์คํธ (Exploratory Testing): ์ฆํฅ์ ์ผ๋ก ์์คํ ์ ํ์ํ๋ฉฐ ๊ฒฐํจ์ ๋ฐ๊ฒฌ.
- ์๋ฌ ์ถ์ ๊ธฐ๋ฒ (Error Guessing): ์์ฃผ ๋ฐ์ํ๋ ๊ฒฐํจ ์ ํ์ ์์ํ์ฌ ํ ์คํธ.
- ์ฒดํฌ๋ฆฌ์คํธ ๊ธฐ๋ฐ ํ ์คํธ: ๊ณผ๊ฑฐ์ ๊ฒฐํจ ํจํด์ ๋ฐํ์ผ๋ก ํ ์คํธ.
28. QA Metrics (์ํํธ์จ์ด ํ์ง ์งํ)
QA์์ ํ ์คํธ์ ํจ๊ณผ๋ฅผ ์ธก์ ํ๋ ์งํ.
(1) ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง (Test Coverage)
- ์ํํธ์จ์ด ์ฝ๋ ์ค ๋ช %๊ฐ ํ ์คํธ๋์๋์ง๋ฅผ ์ธก์ .
- ์ฝ๋์ ์คํ ๋น๋๋ฅผ ๊ธฐ์ค์ผ๋ก ํจ.
- ์ฃผ์ ์ปค๋ฒ๋ฆฌ์ง ์ ํ:
- ๋ฌธ์ฅ ์ปค๋ฒ๋ฆฌ์ง (Statement Coverage): ์ ์ฒด ์ฝ๋ ์ค ์คํ๋ ์ฝ๋ ๋ผ์ธ์ ๋น์จ.
- ๋ถ๊ธฐ ์ปค๋ฒ๋ฆฌ์ง (Branch Coverage): ๋ชจ๋ if-else ๋ถ๊ธฐ๊ฐ ํ ์คํธ๋์๋์ง ํ์ธ.
- ์กฐ๊ฑด ์ปค๋ฒ๋ฆฌ์ง (Condition Coverage): ๊ฐ๋ณ ์กฐ๊ฑด์ด ์ฐธ/๊ฑฐ์ง์ผ๋ก ์คํ๋์๋์ง ํ์ธ.
(2) ๊ฒฐํจ ๋ฐ๋ (Defect Density)
- ์ฝ๋ 1,000๋ผ์ธ(LOC)๋น ๊ฒฐํจ์ ๊ฐ์๋ฅผ ์ธก์ .
- ๊ณต์: ๊ฒฐํจ๋ฐ๋=๋ฐ๊ฒฌ๋๊ฒฐํจ์์ฝ๋๋ผ์ธ์×1000๊ฒฐํจ ๋ฐ๋ = \frac{๋ฐ๊ฒฌ๋ ๊ฒฐํจ ์}{์ฝ๋ ๋ผ์ธ ์} \times 1000
- ๊ฒฐํจ ๋ฐ๋๊ฐ ๋์ ๋ชจ๋์ ์ง์ค ํ ์คํธ ๋์.
(3) ํ ์คํธ ํจ๊ณผ์ฑ (Test Effectiveness)
- ํ ์คํธ๊ฐ ์ผ๋ง๋ ํจ๊ณผ์ ์ผ๋ก ๊ฒฐํจ์ ์ฐพ์๋์ง ํ๊ฐ.
- ๊ณต์: ํ ์คํธํจ๊ณผ์ฑ=๋ฐ๊ฒฌ๋๊ฒฐํจ์์ด๊ฒฐํจ์×100%ํ ์คํธ ํจ๊ณผ์ฑ = \frac{๋ฐ๊ฒฌ๋ ๊ฒฐํจ ์}{์ด ๊ฒฐํจ ์} \times 100\%
29. ํ ์คํธ ํ๊ฒฝ ๊ฒฉ๋ฆฌ (Test Environment Isolation)
QA ํ ์คํธ ํ๊ฒฝ์ด ์ด์ ํ๊ฒฝ๊ณผ ์ถฉ๋ํ์ง ์๋๋ก ์ค์ ํ๋ ๋ฐฉ๋ฒ.
(1) ํ ์คํธ ํ๊ฒฝ ๊ฒฉ๋ฆฌ์ ํ์์ฑ
- ํ ์คํธ ์ค ๋ฐ์ดํฐ๊ฐ ๋ณ์กฐ๋์ง ์๋๋ก ๋ฐฉ์ง.
- ์ด์ ์์คํ ๊ณผ ๋ถ๋ฆฌ๋ ํ ์คํธ ํ๊ฒฝ์ ์ ์งํ์ฌ ์์ ์ฑ ํ๋ณด.
(2) ๊ฒฉ๋ฆฌ ๋ฐฉ๋ฒ
- ๊ฐ์ํ ํ๊ฒฝ ์ฌ์ฉ (Virtual Machines, Docker)
- Docker ์ปจํ ์ด๋๋ก ํ ์คํธ ํ๊ฒฝ ๊ตฌ์ถ.
- ํ
์คํธ ๋ฐ์ดํฐ ๊ฒฉ๋ฆฌ
- ์ด์ ๋ฐ์ดํฐ์ ๋ค๋ฅธ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ.
- Mocking & Stubbing ํ์ฉ
- ์ค์ ์์คํ ์ ํธ์ถํ์ง ์๊ณ , ๊ฐ์ง(Mock) ์๋ต์ ์ฌ์ฉ.
30. ์ฑ๋ฅ ํ ์คํธ (Performance Testing)
์ํํธ์จ์ด์ ์ฑ๋ฅ์ ์ธก์ ํ๋ ํ ์คํธ.
(1) ์ฑ๋ฅ ํ ์คํธ ์ ํ
์ ํ์ค๋ช๋ถํ ํ ์คํธ (Load Testing) | ๋ค์์ ์ฌ์ฉ์๊ฐ ์ ์ํ ๋ ์ฑ๋ฅ ์ธก์ |
์คํธ๋ ์ค ํ ์คํธ (Stress Testing) | ์์คํ ์ ์ต๋ ํ๊ณ๋ฅผ ํ ์คํธ |
๋ด๊ตฌ์ฑ ํ ์คํธ (Endurance Testing) | ์ฅ๊ธฐ๊ฐ ์ฌ์ฉ ์ ์ฑ๋ฅ ์ ์ง ์ฌ๋ถ ํ ์คํธ |
์คํ์ดํฌ ํ ์คํธ (Spike Testing) | ๊ฐ์์ค๋ฌ์ด ํธ๋ํฝ ์ฆ๊ฐ์ ๋ํ ๋ฐ์ ํ์ธ |
ํ์ฅ์ฑ ํ ์คํธ (Scalability Testing) | ์์คํ ์ด ํ์ฅ๋ ๋ ์ฑ๋ฅ ์ ์ง ์ฌ๋ถ ํ์ธ |
(2) ์ฃผ์ ์ฑ๋ฅ ์งํ
- ์๋ต ์๊ฐ (Response Time): ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ.
- ์ฒ๋ฆฌ๋ (Throughput): ์ด๋น ์ฒ๋ฆฌ ๊ฐ๋ฅํ ์์ฒญ ์.
- CPU/๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋: ์์คํ ์ ๋ฆฌ์์ค ์๋น๋.
(3) ์ฑ๋ฅ ํ ์คํธ ๋๊ตฌ
- JMeter: ๋ถํ ๋ฐ ์ฑ๋ฅ ํ ์คํธ ์๋ํ.
- Gatling: ์ค์๊ฐ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ์ ๊ณต.
- Locust: Python ๊ธฐ๋ฐ ์ฑ๋ฅ ํ ์คํธ ๋๊ตฌ.
31. ๋ณด์ ํ ์คํธ (Security Testing)
์ํํธ์จ์ด์ ๋ณด์ ์ทจ์ฝ์ ์ ํ์งํ๋ ํ ์คํธ.
(1) ๋ณด์ ํ ์คํธ ์ ํ
์ ํ์ค๋ช์นจํฌ ํ ์คํธ (Penetration Testing) | ํด์ปค์ฒ๋ผ ์์คํ ์ ๊ณต๊ฒฉํ์ฌ ์ทจ์ฝ์ ๋ฐ๊ฒฌ |
์ทจ์ฝ์ ๊ฒ์ฌ (Vulnerability Scanning) | OWASP Top 10 ๊ธฐ๋ฐ ์๋ํ ๋ณด์ ์ค์บ |
๊ถํ ํ ์คํธ (Access Control Testing) | ์ฌ์ฉ์ ๊ถํ ๋ฐ ์ ๊ทผ ์ ์ด ํ ์คํธ |
๋ฐ์ดํฐ ์ํธํ ํ ์คํธ | ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ์ ์ก ๊ณผ์ ์์ ์ํธํ ํ์ธ |
(2) ๋ณด์ ํ ์คํธ ๋๊ตฌ
- OWASP ZAP: ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ณด์ ํ ์คํธ ๋๊ตฌ.
- Burp Suite: ๋คํธ์ํฌ ๋ฐ API ์ทจ์ฝ์ ๋ถ์.
- SQLMap: SQL Injection ์๋ํ ๋๊ตฌ.
32. QA์ SQA (Software Quality Assurance)์ ์ฐจ์ด
QA์ SQA๋ ๋น์ทํ ๊ฐ๋ ์ผ๋ก ๋ณด์ด์ง๋ง, ํฌ๊ด์ ์ธ ๋ฒ์์ ์ญํ ์ด ๋ค๋ฆ.
(1) QA (Quality Assurance, ํ์ง ๋ณด์ฆ)
- ์ํํธ์จ์ด๊ฐ ์ผ์ ํ ํ์ง ๊ธฐ์ค์ ์ถฉ์กฑํ๋๋ก ๋ณด์ฅํ๋ ํ๋.
- ํ ์คํธ๋ฟ๋ง ์๋๋ผ ํ๋ก์ธ์ค ๊ฐ์ , ๊ฒฐํจ ์๋ฐฉ, ํ์ง ํฅ์์ ์ํ ์ ๋ฐ์ ์ธ ์ ๋ต ํฌํจ.
- ์: ํ ์คํธ ๊ณํ ์๋ฆฝ, ๊ฒฐํจ ๊ด๋ฆฌ, ํ์ง ํ๋ก์ธ์ค ๊ฐ์ .
(2) SQA (Software Quality Assurance, ์ํํธ์จ์ด ํ์ง ๋ณด์ฆ)
- ์ํํธ์จ์ด ๊ฐ๋ฐ ์ ์ฒด ๊ณผ์ ์์ ํ์ง์ ๋ณด์ฅํ๊ธฐ ์ํ ํ๋.
- QA๋ณด๋ค ๋ ๋์ ๊ฐ๋ ์ผ๋ก, ํ ์คํธ๋ฟ๋ง ์๋๋ผ ์ฝ๋ ๋ฆฌ๋ทฐ, ํ๋ก์ธ์ค ๊ฐ์ , ๋ณด์ ํ ์คํธ ๋ฑ ํฌํจ.
- ์: ์ฝ๋ ํ์ง ์ธก์ , ๊ฐ๋ฐ ํ์ค ์๋ฆฝ, ํ๋ก์ธ์ค ๋ชจ๋ํฐ๋ง.
๐ก QA๋ ์ฃผ๋ก ํ ์คํธ๋ฅผ ํฌํจํ ํ์ง ๊ฒ์ฆ ์ญํ ์ ํ๊ณ , SQA๋ ํ์ง์ ๋ณด์ฅํ๋ ์ ๋ฐ์ ์ธ ์ฒด๊ณ๋ฅผ ์๋ฆฝํ๋ ์ญํ ์ ํ๋ค.
33. Shift-Left Testing (์ํํธ ๋ ํํธ ํ ์คํ )
(1) ๊ฐ๋
- ํ ์คํธ๋ฅผ ๊ฐ๋ฐ ๋ผ์ดํ์ฌ์ดํด์ ์ด๊ธฐ ๋จ๊ณ(Left)์ ์ง์คํ๋ ๊ฐ๋ .
- ๊ณผ๊ฑฐ์๋ ๊ฐ๋ฐ ์๋ฃ ํ ํ ์คํธ๋ฅผ ์ํํ์ง๋ง, ์ด๊ธฐ์ ํ ์คํธ๋ฅผ ์ํํ๋ฉด ๊ฒฐํจ์ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ์ฌ ์์ ๋น์ฉ์ ์ค์ผ ์ ์์.
(2) Shift-Left Testing์ ์ฃผ์ ์ ๋ต
- TDD (Test-Driven Development, ํ
์คํธ ์ฃผ๋ ๊ฐ๋ฐ)
- ํ ์คํธ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑํ๊ณ , ๊ทธ ํ ์คํธ๋ฅผ ํต๊ณผํ๋ ์ฝ๋๋ฅผ ๊ตฌํํ๋ ๋ฐฉ์.
- ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๊ทน๋ํํ์ฌ ๊ฒฐํจ์ ์ฌ์ ์ ๋ฐฉ์ง.
- ์ ์ ๋ถ์ (Static Code Analysis)
- SonarQube, ESLint ๊ฐ์ ์ ์ ๋ถ์ ๋๊ตฌ๋ก ์ฝ๋๋ฅผ ๊ฒํ ํ์ฌ ์กฐ๊ธฐ์ ๊ฒฐํจ์ ๋ฐ๊ฒฌ.
- CI/CD ํ์ดํ๋ผ์ธ์์ ์๋ํ๋ ํ
์คํธ ์ํ
- ์ง์์ ํตํฉ(CI) ๊ณผ์ ์์ ์ ๋ ํ ์คํธ(Unit Test)์ ์ ์ ์ฝ๋ ๋ถ์์ ์๋์ผ๋ก ์คํ.
๐ก Shift-Left Testing์ ์ ์ฉํ๋ฉด ๊ฒฐํจ ์์ ๋น์ฉ์ 30~50% ์ค์ผ ์ ์์ผ๋ฉฐ, ์ํํธ์จ์ด ํ์ง์ด ํฅ์๋จ.
34. QA์์ ํ์ฉ๋๋ AI ๋ฐ ๋จธ์ ๋ฌ๋
์ต๊ทผ QA์์๋ AI ๊ธฐ๋ฐ์ ์๋ํ ํ ์คํธ ๋ฐ ํ์ง ๋ถ์์ด ํ๋ฐํ๊ฒ ์ด๋ฃจ์ด์ง๊ณ ์์.
(1) AI ๊ธฐ๋ฐ ํ ์คํธ ์๋ํ ๊ธฐ๋ฒ
- Self-healing ํ
์คํธ
- AI๊ฐ UI ๋ณ๊ฒฝ ์ฌํญ์ ์๋์ผ๋ก ๊ฐ์งํ๊ณ ํ ์คํธ ์ฝ๋๋ฅผ ์ ๋ฐ์ดํธํจ.
- Selenium, Testim ๊ฐ์ ๋๊ตฌ์์ ์ฌ์ฉ.
- ์์ธก ๋ถ์ (Predictive Analytics)
- ๋จธ์ ๋ฌ๋์ ํ์ฉํด ํ ์คํธ ์ผ์ด์ค ์ฐ์ ์์ ์๋ ์ ์ .
- ๊ณผ๊ฑฐ ๊ฒฐํจ ๋ฐ์ดํฐ๋ฅผ ํ์ตํ์ฌ ๊ฒฐํจ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ๋์ ์ฝ๋ ๋ถ๋ถ ์์ธก.
- Visual Testing (์๊ฐ์ ํ
์คํธ)
- AI๊ฐ UI์ ์๊ฐ์ ๋ณํ๋ฅผ ๊ฐ์งํ์ฌ UI ์ค๋ฅ๋ฅผ ์๋์ผ๋ก ์ฐพ์.
- Applitools ๊ฐ์ ๋๊ตฌ์์ ์ ๊ณต.
๐ก AI ๊ธฐ๋ฐ ํ ์คํธ ์๋ํ๋ QA์ ํจ์จ์ฑ์ ๋์ด๊ณ , ์ ์ง๋ณด์ ๋น์ฉ์ ์ ๊ฐํ๋ ํต์ฌ ๊ธฐ์ ๋ก ๋ ์ค๋ฅด๊ณ ์์.
35. QA์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์คํธ (Database Testing)
์ํํธ์จ์ด์ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๋์ง ๊ฒ์ฆํ๋ ํ ์คํธ.
(1) ์ฃผ์ ํ ์คํธ ํญ๋ชฉ
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ํ
์คํธ
- ACID (Atomicity, Consistency, Isolation, Durability) ์์น์ด ์ ์ง์ผ์ง๋์ง ํ์ธ.
- ํธ๋์ญ์ ์ฒ๋ฆฌ ์ค ๋ฐ์ดํฐ ์์ค์ด ์๋์ง ๊ฒ์ฆ.
- SQL ์ฑ๋ฅ ํ
์คํธ
- ์ฟผ๋ฆฌ ์ต์ ํ๋ฅผ ํตํด DB ์๋ต ์๊ฐ์ด ์ ์ ํ์ง ํ์ธ.
- Index, Query Plan ๋ถ์ ๋ฑ์ ํ์ฉ.
- ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์
ํ
์คํธ
- ์๋ก์ด DB๋ก ๋ฐ์ดํฐ ์ด์ ์, ์์ค ์์ด ์ ํํ๊ฒ ์ด๋ํ๋์ง ํ์ธ.
(2) ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์คํธ ๋๊ตฌ
- SQLUnit: SQL ํ ์คํธ ์๋ํ ๋๊ตฌ.
- DbFit: ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์คํธ๋ฅผ ์ํ BDD ํ๋ ์์ํฌ.
- JDBCUnit: Java ๊ธฐ๋ฐ์ DB ํ ์คํธ ๋๊ตฌ.
๐ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์คํธ๋ ํนํ ๊ธ์ต, ์๋ฃ ๋ฑ ๋ฐ์ดํฐ ์ ํ์ฑ์ด ์ค์ํ ์์คํ ์์ ํ์์ ์ธ QA ํ๋์.
36. QA์์ A/B ํ ์คํธ (A/B Testing)
A/B ํ ์คํธ๋ ๋ ๊ฐ ์ด์์ ๋ฒ์ ์ ๋น๊ตํ์ฌ ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ฐพ๋ ์คํ์ ํ ์คํธ ๋ฐฉ๋ฒ.
(1) A/B ํ ์คํธ ๊ณผ์
- ๊ฐ์ค ์ค์
- ์: "๋ฒํผ ์์์ ํ๋์์์ ์ด๋ก์์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ํด๋ฆญ๋ฅ ์ด ์ฆ๊ฐํ ๊ฒ์ด๋ค."
- ๊ทธ๋ฃน ๋ถํ
- A ๊ทธ๋ฃน(๊ธฐ์กด UI), B ๊ทธ๋ฃน(๋ณ๊ฒฝ๋ UI)์ผ๋ก ๋๋์ด ํธ๋ํฝ์ ๋ฐฐ๋ถ.
- ํ
์คํธ ์คํ ๋ฐ ๋ฐ์ดํฐ ์์ง
- ์ฌ์ฉ์ ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ์.
- ๊ฒฐ๊ณผ ๋ถ์
- ํด๋ฆญ๋ฅ (CTR), ์ ํ์จ(Conversion Rate) ๋ฑ์ ์ธก์ ํ์ฌ ์ต์ ์ UI ์ ํ.
๐ก A/B ํ ์คํธ๋ ์น์ฌ์ดํธ, ๋ชจ๋ฐ์ผ ์ฑ์ UX ๊ฐ์ ๋ฐ ๋น์ฆ๋์ค ์ฑ๊ณผ ์ต์ ํ์ ๋งค์ฐ ์ค์ํ ๊ธฐ๋ฒ.
37. QA์์ ๋ก๊ทธ ๋ถ์ (Log Analysis)
์ํํธ์จ์ด๊ฐ ์คํ ์ค ๋ฐ์ํ๋ ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ์์คํ ์ ์ํ ๋ฐ ์ค๋ฅ๋ฅผ ์ถ์ ํ๋ QA ๊ธฐ๋ฒ.
(1) ๋ก๊ทธ ๋ถ์์ ํ์์ฑ
- ํ ์คํธ ํ๊ฒฝ์์ ๋ฐ๊ฒฌํ์ง ๋ชปํ ๊ฒฐํจ์ ์ด์ ํ๊ฒฝ์์ ์ค์๊ฐ์ผ๋ก ๋ชจ๋ํฐ๋ง ๊ฐ๋ฅ.
- ์๊ธฐ์น ์์ ์์ธ(Exception), ์ฑ๋ฅ ์ ํ ๋ฌธ์ ๋ฅผ ์ฌ์ ์ ๊ฐ์ง.
(2) ๋ก๊ทธ ๋ถ์ ๋๊ตฌ
- ELK Stack (Elasticsearch, Logstash, Kibana): ๋ก๊ทธ ์์ง, ๊ฒ์, ์๊ฐํ ๋๊ตฌ.
- Splunk: ๋จธ์ ๋ฌ๋์ ํ์ฉํ ๋ก๊ทธ ๋ถ์ ๋ฐ ๋ณด์ ๋ชจ๋ํฐ๋ง.
- Graylog: ์ค์๊ฐ ๋ก๊ทธ ๋ชจ๋ํฐ๋ง ๋ฐ ์๋ฆผ ๊ธฐ๋ฅ ์ ๊ณต.
๐ก ๋ก๊ทธ ๋ถ์์ QA ํ๋ก์ธ์ค์ ํฌํจํ๋ฉด ์์คํ ์์ ์ฑ์ด ๋ํญ ํฅ์๋จ.
38. QA์์์ ์ ํ๋ฆฌ์ผ์ด์ ๋ชจ๋ํฐ๋ง (Application Monitoring)
์ด์ ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ ๋ฐ ์ค๋ฅ๋ฅผ ์ค์๊ฐ์ผ๋ก ๊ฐ์ํ๋ ํ๋.
(1) ์ฃผ์ ๋ชจ๋ํฐ๋ง ์งํ
- ์๋ต ์๊ฐ(Response Time)
- API, DB ์ฟผ๋ฆฌ, UI ๋ฐ์ ์๋๋ฅผ ์ธก์ .
- CPU/๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋
- ์์คํ ๊ณผ๋ถํ ์ฌ๋ถ๋ฅผ ์ค์๊ฐ ๋ชจ๋ํฐ๋ง.
- ์ค๋ฅ ๋ฐ์๋ฅ (Error Rate)
- HTTP 500, 404 ๋ฑ ์ค๋ฅ ๋น์จ์ ์ธก์ .
(2) ๋ํ์ ์ธ ๋ชจ๋ํฐ๋ง ๋๊ตฌ
- New Relic: ์ค์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง.
- AppDynamics: ๋น์ฆ๋์ค ํธ๋์ญ์ ์ถ์ ๋ฐ ์ค๋ฅ ๊ฐ์ง.
- Datadog: ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ชจ๋ํฐ๋ง.
๐ก ์ ํ๋ฆฌ์ผ์ด์ ๋ชจ๋ํฐ๋ง์ ํตํด ์ด์ ํ๊ฒฝ์์๋ ์ง์์ ์ธ ํ์ง ๊ด๋ฆฌ ๊ฐ๋ฅ.
1. Shift-Left Testing (์ํํธ ๋ ํํธ ํ ์คํ ) - ์ ์ค์ํ๊ฐ?
Shift-Left Testing์ ์ํํธ์จ์ด ๊ฐ๋ฐ ์ด๊ธฐ ๋จ๊ณ์์ ํ
์คํธ๋ฅผ ์ํํ๋ ์ ๋ต์ด๋ค.
๊ณผ๊ฑฐ์๋ ๊ฐ๋ฐ์ด ์๋ฃ๋ ํ QA ํ
์คํธ๋ฅผ ์งํํ์ง๋ง, ์ด ๋ฐฉ๋ฒ์ ๊ฒฐํจ ์์ ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ , ์ผ์ ์ด ์ง์ฐ๋๋ ๋ฌธ์ ๊ฐ ์์๋ค.
Shift-Left Testing์ ์ ์ฉํ๋ฉด ํ
์คํธ๋ฅผ ์กฐ๊ธฐ์ ์ํํ์ฌ ๊ฒฐํจ์ ๋น ๋ฅด๊ฒ ๋ฐ๊ฒฌํ๊ณ ์์ ๋น์ฉ์ ์ ๊ฐํ ์ ์์.
(1) ์ Shift-Left Testing์ด ์ค์ํ๊ฐ?
- ์ด๊ธฐ ๊ฒฐํจ ๋ฐ๊ฒฌ → ์์ ๋น์ฉ ์ ๊ฐ
- ๊ฐ๋ฐ์ด ์๋ฃ๋ ํ ๋ฐ๊ฒฌ๋ ๊ฒฐํจ์ ์์ ํ๋ ๋น์ฉ์ ์ด๊ธฐ ๊ฐ๋ฐ ๋จ๊ณ์์ ์์ ํ๋ ๊ฒ๋ณด๋ค 5~10๋ฐฐ ๋น์ธ๋ค.
- ๋ฐ๋ผ์ ๊ฐ๋ฐ ์ด๊ธฐ์ ๊ฒฐํจ์ ๋ฐ๊ฒฌํ๋ ๊ฒ์ด ๊ฐ์ฅ ๋น์ฉ ํจ์จ์ ์ด๋ค.
- ๊ฐ๋ฐ ์ฃผ๊ธฐ์ ์์ ์ฑ ํฅ์
- Shift-Left Testing์ ์ ์ฉํ๋ฉด, ๊ธฐ๋ฅ์ด ๊ตฌํ๋ ๋๋ง๋ค ํ ์คํธ๊ฐ ์งํ๋๋ฏ๋ก ๋์ค์ ์ ์ฒด ๊ธฐ๋ฅ์ ํ ์คํธํ ๋ ํฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.
- ์๋ํ ํ
์คํธ ๋์
๊ณผ ์๋์ง ํจ๊ณผ
- TDD (ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ), CI/CD ๋ฑ๊ณผ ๊ฒฐํฉํ์ฌ ์๋ํ๋ ํ ์คํธ ํ๊ฒฝ์ ๊ตฌ์ถํ๋ฉด ๋ ํจ์จ์ ์ธ ํ์ง ๋ณด์ฅ์ด ๊ฐ๋ฅํ๋ค.
(2) Shift-Left Testing์ ์ฃผ์ ๊ธฐ๋ฒ
โ TDD (Test-Driven Development, ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ)
- ํ ์คํธ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑํ๊ณ , ์ด๋ฅผ ํต๊ณผํ๋ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํ๋ ๋ฐฉ์.
- ๊ฐ๋ฐ์๊ฐ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ ์ ๋จผ์ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ๋ฏ๋ก, ์์ฐ์ค๋ฝ๊ฒ ๊ฒฐํจ์ด ์ค์ด๋ค๊ณ , ์ฝ๋ ํ์ง์ด ํฅ์๋๋ค.
- TDD์ ๋จ๊ณ:
- ํ ์คํธ ์์ฑ: ์คํจํ ์๋ฐ์ ์๋ ํ ์คํธ ์ฝ๋ ์์ฑ.
- ํ ์คํธ ์คํ: ๋น์ฐํ ์คํจํจ.
- ์ฝ๋ ์์ฑ: ํ ์คํธ๋ฅผ ํต๊ณผํ๋๋ก ์ต์ํ์ ์ฝ๋ ์์ฑ.
- ๋ฆฌํฉํ ๋ง: ์ค๋ณต ์ฝ๋ ์ ๊ฑฐ ๋ฐ ์ต์ ํ.
- ๋ฐ๋ณต.
โก ์ ์ ์ฝ๋ ๋ถ์ (Static Code Analysis)
- ์ํํธ์จ์ด๋ฅผ ์คํํ์ง ์๊ณ ์ฝ๋ ์์ฒด๋ฅผ ๋ถ์ํ์ฌ ์ ์ฌ์ ์ธ ๊ฒฐํจ์ ํ์งํ๋ ๋ฐฉ๋ฒ.
- ๋ํ์ ์ธ ์ ์ ๋ถ์ ๋๊ตฌ:
- SonarQube: ์ฝ๋ ํ์ง ๋ฐ ๋ณด์ ์ ๊ฒ.
- Checkstyle, PMD: Java ์ฝ๋ ์คํ์ผ ๊ฒ์ฌ.
- ESLint: JavaScript ์ฝ๋ ์คํ์ผ ๋ฐ ์ค๋ฅ ๋ถ์.
โข CI/CD ํ์ดํ๋ผ์ธ์์์ ์๋ํ ํ ์คํธ
- ์ฝ๋๊ฐ ๋น๋๋ ๋๋ง๋ค ์๋์ผ๋ก ํ ์คํธ๋ฅผ ์คํํ๋ ๋ฐฉ์.
- ์ฃผ์ CI/CD ๋๊ตฌ:
- Jenkins
- GitHub Actions
- GitLab CI/CD
- Azure DevOps
๐ก ๊ฒฐ๋ก : Shift-Left Testing์ ์ ์ฉํ๋ฉด ์ด๊ธฐ ๋จ๊ณ์์ ๊ฒฐํจ์ ์ฐพ์๋ด๊ณ , ๊ฐ๋ฐ ๋น์ฉ์ ์ ๊ฐํ ์ ์์ผ๋ฉฐ, ์๋ํ ํ ์คํธ์ ๊ฒฐํฉํ๋ฉด ํ์ง์ด ๋ํญ ํฅ์๋๋ค.
2. ํ ์คํธ ์๋ํ (Test Automation) - ์ค๋ฌด์์ ์ด๋ป๊ฒ ์ ์ฉํ๋๊ฐ?
ํ ์คํธ ์๋ํ๋ ๋ฐ๋ณต์ ์ธ ํ ์คํธ๋ฅผ ์๋์ผ๋ก ์ํํ์ฌ QA ํ๋ก์ธ์ค๋ฅผ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ด๋ค.
(1) ํ ์คํธ ์๋ํ๊ฐ ์ค์ํ ์ด์
- QA ์์ฐ์ฑ ํฅ์
- ๋ฐ๋ณต์ ์ธ ํ ์คํธ๋ฅผ ์๋ํํ๋ฉด ํ ์คํธ ์ํ ์๊ฐ์ ์ค์ผ ์ ์๊ณ , QA ํ์ ๋ ์ค์ํ ํ ์คํธ(ํ์์ ํ ์คํธ ๋ฑ)์ ์ง์คํ ์ ์๋ค.
- ํ๊ท ํ
์คํธ ํจ์จ์ฑ ์ฆ๊ฐ
- ์ํํธ์จ์ด๊ฐ ์ ๋ฐ์ดํธ๋ ๋๋ง๋ค ๊ธฐ์กด ๊ธฐ๋ฅ์ด ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ์ธํด์ผ ํ๋๋ฐ, ์ด๋ฅผ ํ๊ท ํ ์คํธ(Regression Test) ๋ผ๊ณ ํ๋ค.
- ์๋ํ๋ ํ๊ท ํ ์คํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ฐฑ ๊ฐ์ ํ ์คํธ๋ฅผ ๋ช ๋ถ ์์ ์คํ ๊ฐ๋ฅ.
- ํ
์คํธ ์ผ๊ด์ฑ ์ ์ง
- ์๋ ํ ์คํธ๋ ์ฌ๋์ ์ค์(์คํ, ์ค์๋ก ํ ์คํธ ์คํ ๊ฑด๋๋ฐ๊ธฐ ๋ฑ) ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
- ์๋ํ ํ ์คํธ๋ ํญ์ ๋์ผํ ๋ฐฉ์์ผ๋ก ํ ์คํธ๋ฅผ ์ํํ๋ฏ๋ก ์ ๋ขฐ์ฑ์ด ๋๋ค.
(2) ํ ์คํธ ์๋ํ ๋๊ตฌ์ ์ฌ์ฉ ์ฌ๋ก
โ ์ ๋ ํ ์คํธ (Unit Testing)
- ๊ฐ๋ณ ๋ชจ๋์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๋์ง ํ์ธํ๋ ํ ์คํธ.
- ์ฃผ์ ๋๊ตฌ:
- Java → JUnit, TestNG
- Python → PyTest, unittest
- JavaScript → Jest, Mocha
โก UI ํ ์คํธ (End-to-End Test)
- ์น/๋ชจ๋ฐ์ผ UI ํ ์คํธ ์๋ํ.
- ์ฃผ์ ๋๊ตฌ:
- Selenium (์น UI ์๋ํ)
- Cypress (์น ํ๋ ์์ํฌ์ ํตํฉ์ด ์ฌ์ด UI ์๋ํ ๋๊ตฌ)
- Appium (๋ชจ๋ฐ์ผ ์ฑ ํ ์คํธ)
โข API ํ ์คํธ (API Testing)
- REST API ๋ฐ GraphQL API๋ฅผ ์๋ํ ํ ์คํธํ๋ ๋๊ตฌ.
- ์ฃผ์ ๋๊ตฌ:
- Postman (API ์์ฒญ ์๋ํ ๋ฐ ์คํฌ๋ฆฝํ ๊ฐ๋ฅ)
- RestAssured (Java ๊ธฐ๋ฐ API ํ ์คํธ)
- SoapUI (SOAP, REST API ํ ์คํธ)
๐ก ๊ฒฐ๋ก : ์ค๋ฌด์์ ํ ์คํธ ์๋ํ๋ฅผ ์ ์ฉํ๋ฉด ๋ฐ๋ณต์ ์ธ ํ ์คํธ๋ฅผ ๋น ๋ฅด๊ฒ ์คํํ๊ณ , ํ๊ท ํ ์คํธ๋ฅผ ๋์ฑ ํจ์จ์ ์ผ๋ก ์ํํ ์ ์๋ค.
3. ์ฑ๋ฅ ํ ์คํธ (Performance Testing) - ์ค์ ๋ก ์ด๋ป๊ฒ ํ๋๊ฐ?
์ฑ๋ฅ ํ ์คํธ๋ ์์คํ ์ด ํน์ ํ ๋ถํ(ํธ๋ํฝ, ์ฌ์ฉ๋)์์๋ ์์ ์ ์ผ๋ก ๋์ํ๋์ง ํ์ธํ๋ ํ ์คํธ์ด๋ค.
(1) ์ฑ๋ฅ ํ ์คํธ๊ฐ ์ค์ํ ์ด์
- ์ฌ์ฉ์๊ฐ ๋ง์์ง๋ฉด ์์คํ ์ด ์ด๋ป๊ฒ ๋ฐ์ํ๋์ง ํ์ธ ํ์.
- ํธ๋ํฝ์ด ๊ธ์ฆํ๋ฉด ์๋ต ์๋๊ฐ ๋๋ ค์ง๊ฑฐ๋ ์์คํ ์ด ๋ค์ด๋ ์ํ์ด ์์.
- ์ฑ๋ฅ ์ด์๋ ์ด์ ํ๊ฒฝ์์ ๋ฐ๊ฒฌ๋๋ฉด ํด๊ฒฐํ๋ ๋ฐ ๋ง์ ๋น์ฉ๊ณผ ์๊ฐ์ด ์์๋จ.
(2) ์ฑ๋ฅ ํ ์คํธ ์ ํ
ํ ์คํธ ์ ํ์ค๋ช๋ถํ ํ ์คํธ (Load Testing) | ์ ์์ ์ธ ์ฌ์ฉ๋์์์ ์ฑ๋ฅ ์ธก์ |
์คํธ๋ ์ค ํ ์คํธ (Stress Testing) | ์ต๋ ๋ถํ๋ฅผ ์ด๊ณผํ์ ๋ ์์คํ ๋ฐ์ ํ์ธ |
๋ด๊ตฌ์ฑ ํ ์คํธ (Endurance Testing) | ์ฅ์๊ฐ ๋์ ์์คํ ์ด ์์ ์ ์ผ๋ก ๋์ํ๋์ง ํ ์คํธ |
์คํ์ดํฌ ํ ์คํธ (Spike Testing) | ๊ฐ์์ค๋ฌ์ด ํธ๋ํฝ ์ฆ๊ฐ ์ ์์คํ ๋ฐ์ ํ ์คํธ |
(3) ์ฑ๋ฅ ํ ์คํธ ๋๊ตฌ
- JMeter → ๋ถํ ๋ฐ ์คํธ๋ ์ค ํ ์คํธ ์๋ํ.
- Gatling → ์ค์๊ฐ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๋ฐ ๋ถ์.
- Locust → Python ๊ธฐ๋ฐ ์ฑ๋ฅ ํ ์คํธ ๋๊ตฌ.
(4) ์ฑ๋ฅ ํ ์คํธ ์ํ ์ ์ฐจ
- ํ
์คํธ ๋ชฉํ ์ ์
- "์ต๋ 10,000๋ช ์ ๋์ ์ ์์๋ฅผ ์ฒ๋ฆฌํ ์ ์๋๊ฐ?"
- ํ
์คํธ ํ๊ฒฝ ์ค๋น
- ์ค์ ์ด์ ํ๊ฒฝ๊ณผ ์ ์ฌํ ํ๊ฒฝ์ ๊ตฌ์ฑ.
- ๋ถํ ์๋๋ฆฌ์ค ์์ฑ
- ์ฌ์ฉ์ ์๋ฅผ ์ฆ๊ฐ์ํค๋ฉด์ ๋ถํ ํ ์คํธ ์งํ.
- ๊ฒฐ๊ณผ ๋ถ์
- ํ๊ท ์๋ต ์๊ฐ, CPU ์ฌ์ฉ๋, ์๋ฌ์จ ๋ถ์.
๐ก ๊ฒฐ๋ก : ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์ ๋๋ก ์ํํ๋ฉด ์์คํ ์ด ํธ๋ํฝ ์ฆ๊ฐ์๋ ์์ ์ ์ผ๋ก ๋์ํ ์ ์๋๋ก ๋๋น ๊ฐ๋ฅ.
โ ์ ๋ฆฌ: ๋ฐ๋์ ์์์ผ ํ QA ๊ฐ๋
- Shift-Left Testing → ๊ฐ๋ฐ ์ด๊ธฐ๋ถํฐ ํ ์คํธ๋ฅผ ์ํํ์ฌ ๋น์ฉ ์ ๊ฐ.
- ํ ์คํธ ์๋ํ → ์์์ ํ ์คํธ๋ฅผ ์ค์ด๊ณ , ๋น ๋ฅด๊ณ ์ ๋ขฐ์ฑ ์๋ QA ์ํ.
- ์ฑ๋ฅ ํ ์คํธ → ์์คํ ์ด ๋ถํ์๋ ์์ ์ ์ผ๋ก ๋์ํ๋์ง ๊ฒ์ฆ.
4. ํ๊ท ํ ์คํธ (Regression Testing)
ํ๊ท ํ ์คํธ๋ ์ฝ๋ ๋ณ๊ฒฝ ํ ๊ธฐ์กด ๊ธฐ๋ฅ์ด ์์๋๋ก ๋์ํ๋์ง ํ์ธํ๋ ํ ์คํธ์ด๋ค. ์ํํธ์จ์ด๋ ์ง์์ ์ผ๋ก ์ ๋ฐ์ดํธ๋๋ฉฐ, ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ, ๋ฒ๊ทธ ์์ , ์ฑ๋ฅ ๊ฐ์ ๋ฑ์ด ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์, ์ด ๊ณผ์ ์์ ๊ธฐ์กด ๊ธฐ๋ฅ์ด ์๋์น ์๊ฒ ์์๋ ์ ์๋ค.
(1) ํ๊ท ํ ์คํธ๊ฐ ์ค์ํ ์ด์
- ์ฝ๋ ๋ณ๊ฒฝ์ ์ํฅ ๊ฒ์ฆ: ์ํํธ์จ์ด๋ ๋์์์ด ์งํํ๋ฉฐ, ๊ทธ ๊ณผ์ ์์ ๊ธฐ์กด ๊ธฐ๋ฅ์ด ์ ๋๋ก ๋์ํ์ง ์์ ๊ฐ๋ฅ์ฑ์ด ์์.
- ๊ฒฐํจ ๋ฐฉ์ง: ์๋ก์ด ์ฝ๋๊ฐ ๊ธฐ์กด ์ฝ๋์ ์ถฉ๋ํ์ฌ ์๋ก์ด ๊ฒฐํจ์ ๋ฐ์์ํค๋ ๊ฒ์ ๋ฐฉ์ง.
- ๊ณ ๊ฐ ๋ง์กฑ๋ ํฅ์: ์์ ์ ์ธ ์ํํธ์จ์ด ์ ๊ณต์ ํตํด ์ฌ์ฉ์ ๊ฒฝํ ๊ฐ์ .
(2) ํ๊ท ํ ์คํธ ์ ๋ต
- ์ ํ์ ํ๊ท ํ
์คํธ (Selective Regression Testing)
- ๋ณ๊ฒฝ๋ ๋ถ๋ถ๊ณผ ๊ทธ์ ์ง์ ์ ์ผ๋ก ์ฐ๊ด๋ ๋ถ๋ถ๋ง์ ์ง์ค์ ์ผ๋ก ํ ์คํธ.
- ์์ ํ๊ท ํ
์คํธ (Complete Regression Testing)
- ์ ์ฒด ์์คํ ์ ํ ์คํธ. ์๊ฐ์ด ๋ง์ด ์์๋๋ฏ๋ก ์ค์ ๋ฆด๋ฆฌ์ค ์ ์ฃผ๋ก ์ฌ์ฉ.
- ์๋ํ๋ ํ๊ท ํ
์คํธ
- ์๋ํ ๋๊ตฌ๋ฅผ ํ์ฉํด ์ ๊ธฐ์ ์ผ๋ก ํ๊ท ํ ์คํธ๋ฅผ ์ํ.
- ์ฃผ๊ธฐ์ ์ผ๋ก ํ ์คํธ ์ผ์ด์ค๋ฅผ ์ ๋ฐ์ดํธํ์ฌ ์ ์ง.
(3) ํ๊ท ํ ์คํธ ๋๊ตฌ
- Selenium: ์น ์ ํ๋ฆฌ์ผ์ด์ ์ UI ํ ์คํธ ์๋ํ์ ์ ํฉ.
- TestNG, JUnit: ๋จ์ ํ ์คํธ ๋ฐ ํ๊ท ํ ์คํธ ์๋ํ์ ์ฌ์ฉ.
- Cypress: ์ต์ ํ๋ฐํธ์๋ ๊ธฐ์ ๊ณผ์ ํธํ์ฑ์ด ์ข์ ๋๊ตฌ.
๐ก ๊ฒฐ๋ก : ํ๊ท ํ ์คํธ๋ฅผ ์ ์ ํ ์ํํ๋ฉด ์ฝ๋ ๋ณ๊ฒฝ์ผ๋ก ์ธํ ๋ถ์์ ์ฑ์ ์ต์ํํ ์ ์๋ค. ํนํ, ์๋ํ๋ฅผ ํตํด ๋ฐ๋ณต์ ์ธ ํ๊ท ํ ์คํธ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ค์ํ๋ค.
5. QA์์์ ๊ฒฐํจ ๊ด๋ฆฌ (Defect Management)
๊ฒฐํจ ๊ด๋ฆฌ ํ๋ก์ธ์ค๋ ํ ์คํธ ์ค ๋ฐ๊ฒฌ๋ ๊ฒฐํจ(๋ฒ๊ทธ)์ ์ฒด๊ณ์ ์ผ๋ก ๊ธฐ๋ก, ์ถ์ , ์์ ํ๋ ์ผ๋ จ์ ์ ์ฐจ๋ฅผ ๋งํ๋ค.
(1) ๊ฒฐํจ ๊ด๋ฆฌ์ ์ค์์ฑ
- ๊ฒฐํจ ์ถ์ ๋ฐ ์์ : ๋ชจ๋ ๊ฒฐํจ์ ์ถ์ ํ์ฌ ํด๋น ๊ฒฐํจ์ด ํด๊ฒฐ๋ ๋๊น์ง ๊ด๋ฆฌ.
- ํ์ง ๊ฐ์ : ๊ฒฐํจ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ๊ฒฐํจ ๋ฐ์ ์์ธ์ ํ์ ํ๊ณ , ์ฌ๋ฐ ๋ฐฉ์ง ์ ๋ต์ ์๋ฆฝ.
- ๊ฐ๋ฐ๊ณผ ํ ์คํธ ๊ฐ์ ์ํํ ์ปค๋ฎค๋์ผ์ด์ : QA์ ๊ฐ๋ฐํ ๊ฐ์ ๋ช ํํ ๊ฒฐํจ ์ ๋ณด๋ฅผ ๊ณต์ ํ์ฌ ์ ์ํ ์์ ์ด ์ด๋ฃจ์ด์ง๋๋ก ํจ.
(2) ๊ฒฐํจ ๋ผ์ดํ์ฌ์ดํด (Bug Lifecycle)
- ๊ฒฐํจ ๋ฐ๊ฒฌ (New): ํ ์คํธ ์ค ๊ฒฐํจ์ด ๋ฐ๊ฒฌ๋์ด ๋ฑ๋ก.
- ํ ๋น (Assigned): ๊ฐ๋ฐ์์๊ฒ ๊ฒฐํจ์ด ํ ๋น.
- ์์ ์ค (In Progress): ๊ฐ๋ฐ์๊ฐ ๊ฒฐํจ์ ์์ .
- ์์ ์๋ฃ (Fixed): ์์ ์ด ์๋ฃ๋ ์ํ.
- ์ฌํ ์คํธ (Retesting): QA๊ฐ ์์ ๋ ๊ฒฐํจ์ ๋ค์ ํ ์คํธ.
- ์ข ๋ฃ (Closed): ๊ฒฐํจ์ด ํด๊ฒฐ๋์๊ณ , ๋ฌธ์ ๊ฐ ์ฌ๋ฐํ์ง ์์.
- ์ฌ์คํ (Reopened): ๊ฒฐํจ์ด ์์ ํ ํด๊ฒฐ๋์ง ์์ ๋ค์ ํ ์คํธ๋ฅผ ์๊ตฌ.
(3) ๊ฒฐํจ ๊ด๋ฆฌ ๋๊ตฌ
- Jira: ๊ฒฐํจ ๊ด๋ฆฌ ๋ฐ ํ๋ก์ ํธ ๊ด๋ฆฌ ๋๊ตฌ. ์ด์๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์.
- Bugzilla: ๊ฒฐํจ ์ถ์ ์ ํนํ๋ ๋๊ตฌ๋ก, ๊ฒฐํจ ์ํ์ ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ์์ธํ ๊ธฐ๋ก ๊ฐ๋ฅ.
- Redmine: ํ๋ก์ ํธ ๊ด๋ฆฌ ๋ฐ ๊ฒฐํจ ์ถ์ ๊ธฐ๋ฅ์ ๋์์ ์ ๊ณต.
๐ก ๊ฒฐ๋ก : ๊ฒฐํจ ๊ด๋ฆฌ๋ ํจ์จ์ ์ธ QA ํ๋ก์ธ์ค์ ํต์ฌ์ด๋ค. ๊ฒฐํจ์ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ถ์ ํจ์ผ๋ก์จ, ์ํํธ์จ์ด ํ์ง์ ๋์ด๊ณ , ์ถ์ ํ ์ค๋ฅ๋ฅผ ์ต์ํํ ์ ์๋ค.
6. API ํ ์คํธ (API Testing)
API ํ ์คํธ๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ์ ๋ฐ์ดํฐ ์ ์ก ๋ฐ ์ํธ์์ฉ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ด๋ฃจ์ด์ง๋์ง ๊ฒ์ฆํ๋ ํ ์คํธ์ด๋ค. ํ๋ ์ํํธ์จ์ด๋ ๋๋ถ๋ถ REST API, GraphQL API ๋ฑ์ ํตํด ์ฌ๋ฌ ์๋น์ค์ ์ํธ์์ฉํ๋ฏ๋ก, API ํ ์คํธ๋ ๋งค์ฐ ์ค์ํ๋ค.
(1) API ํ ์คํธ๊ฐ ์ค์ํ ์ด์
- ๋ฐฑ์๋ ๊ธฐ๋ฅ ๊ฒ์ฆ: UI๊ฐ ๋ณ๊ฒฝ๋์ด๋ ๋ฐฑ์๋์ ๊ธฐ๋ฅ์ด ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ์ธ ๊ฐ๋ฅ.
- ๋ ๋ฆฝ์ ์ธ ํ ์คํธ ๊ฐ๋ฅ: UI ๊ฐ๋ฐ์ด ์๋ฃ๋์ง ์์ ์ํ์์๋ ๋ฐฑ์๋ ๊ธฐ๋ฅ์ ํ ์คํธํ ์ ์์.
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ: API๋ฅผ ํตํด ์ ์ก๋๋ ๋ฐ์ดํฐ์ ์ ํ์ฑ๊ณผ ์ผ๊ด์ฑ์ ๊ฒ์ฆ.
(2) ์ฃผ์ ํ ์คํธ ํญ๋ชฉ
- ๊ธฐ๋ฅ ํ ์คํธ: API๊ฐ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ๋์ํ๋์ง ํ์ธ.
- ๋ณด์ ํ ์คํธ: ์ธ์ฆ, ๊ถํ ๋ถ์ฌ, ๋ฐ์ดํฐ ์ํธํ ๋ฑ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ด๋ฃจ์ด์ง๋์ง ํ์ธ.
- ์ฑ๋ฅ ํ ์คํธ: API์ ์๋ต ์๊ฐ, ์ฒ๋ฆฌ๋์ ์ธก์ .
- ์๋ฌ ์ฒ๋ฆฌ ํ ์คํธ: ์๋ชป๋ ์ ๋ ฅ์ ๋ํด ์ ์ ํ ์๋ฌ ๋ฉ์์ง๋ฅผ ๋ฐํํ๋์ง ํ์ธ.
(3) API ํ ์คํธ ๋๊ตฌ
- Postman: HTTP ์์ฒญ์ ์ฝ๊ฒ ํ ์คํธํ๊ณ , ํ ์คํธ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ์ ์์.
- RestAssured: Java ๊ธฐ๋ฐ์ REST API ์๋ํ ํ ์คํธ ๋๊ตฌ.
- SoapUI: SOAP ๋ฐ REST API์ ๊ธฐ๋ฅ ํ ์คํธ์ ๋ณด์ ํ ์คํธ์ ์ฌ์ฉ.
๐ก ๊ฒฐ๋ก : API ํ ์คํธ๋ฅผ ํตํด ๋ฐฑ์๋์ ํ๋ฐํธ์๋ ๊ฐ์ ๋ฐ์ดํฐ ์ ์ก์ด ์ ํํ๊ฒ ์ด๋ฃจ์ด์ง๋์ง ํ์ธํ๊ณ , ๋ณด์ ๋ฐ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ ์ ์๋ค.
7. ๋ณด์ ํ ์คํธ (Security Testing)
๋ณด์ ํ ์คํธ๋ ์ํํธ์จ์ด๊ฐ ๋ณด์ ์ทจ์ฝ์ ์ผ๋ก๋ถํฐ ์์ ํ์ง ๊ฒ์ฆํ๋ ํ ์คํธ์ด๋ค. ํนํ, ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ์ํํธ์จ์ด์์๋ ๋ณด์์ด ๋งค์ฐ ์ค์ํ ์ด์์ด๋ค.
(1) ๋ณด์ ํ ์คํธ๊ฐ ์ค์ํ ์ด์
- ๋ฐ์ดํฐ ๋ณดํธ: ๊ฐ์ธ์ ๋ณด๋ ๊ธฐ๋ฐ ์ ๋ณด๊ฐ ์ธ๋ถ์ ๋ ธ์ถ๋์ง ์๋๋ก ๋ณดํธ.
- ์ทจ์ฝ์ ํ์ง: ์์คํ ์ด ๊ณต๊ฒฉ์ ์ทจ์ฝํ์ง ์์์ง ํ์ธ.
- ๊ท์ ์ค์: GDPR, HIPAA ๋ฑ ๋ฒ์ ๊ท์ ์ ๋ฐ๋ฅธ ๋ณด์ ์๊ฑด ์ถฉ์กฑ.
(2) ๋ณด์ ํ ์คํธ ์ ํ
- ์นจํฌ ํ ์คํธ (Penetration Testing): ์ค์ ํด์ปค์ฒ๋ผ ์์คํ ์ ๊ณต๊ฒฉํ์ฌ ๋ณด์ ์ทจ์ฝ์ ๋ฐ๊ฒฌ.
- ์ทจ์ฝ์ ์ค์บ๋ (Vulnerability Scanning): ์๋ํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด ์์คํ ์ ์ทจ์ฝ์ ์ ์ค์บ.
- SQL Injection ํ ์คํธ: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ถ๋ฒ์ ์ธ ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง ํ์ธ.
- XSS (Cross-Site Scripting) ํ ์คํธ: ์น ํ์ด์ง์ ์ ์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ ํ ์ ์๋์ง ํ์ธ.
(3) ๋ณด์ ํ ์คํธ ๋๊ตฌ
- OWASP ZAP: ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ทจ์ฝ์ ์ ๋ถ์ํ๊ณ ํ ์คํธ.
- Burp Suite: ์น ๋ณด์ ํ ์คํธ์ ํนํ๋ ๋๊ตฌ๋ก, ๋ค์ํ ๊ณต๊ฒฉ ์๋๋ฆฌ์ค๋ฅผ ์ง์.
- Nmap: ๋คํธ์ํฌ ๋ณด์ ์ค์บ๋ ๋๊ตฌ.
๐ก ๊ฒฐ๋ก : ๋ณด์ ํ ์คํธ๋ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๊ณ ์์คํ ์ ์์ ์ฑ์ ์ ์งํ๊ธฐ ์ํด ํ์์ ์ด๋ค. ์ด๋ฅผ ํตํด ์ธ๋ถ ๊ณต๊ฒฉ์ ๋ํ ๋์๋ ฅ์ ๋์ด๊ณ , ๋ฒ์ ๊ท์ ๋ฅผ ์ค์ํ ์ ์๋ค.
8. ํ ์คํธ ์ ๋ต (Test Strategy)
ํ
์คํธ ์ ๋ต(Test Strategy)์ ํ๋ก์ ํธ ์ ๋ฐ์์ ์ด๋ป๊ฒ ํ
์คํธ๋ฅผ ์ํํ ๊ฒ์ธ์ง์ ๋ํ ๊ณ ์์ค์ ๊ณํ์ด๋ค.
์ผ๋ฐ์ ์ธ ํ
์คํธ ๊ณํ(Test Plan)๋ณด๋ค ๋ ํฌ๊ด์ ์ธ ๊ฐ๋
์ผ๋ก, ์กฐ์ง ์ ์ฒด ๋๋ ํน์ ํ๋ก์ ํธ์ ํ
์คํธ ๋ฐฉํฅ์ฑ์ ์ ์ํ๋ ์ญํ ์ ํ๋ค.
(1) ํ ์คํธ ์ ๋ต์ ์๋ฆฝํ๋ ์ด์
- ํ ์คํธ ๋ชฉํ๋ฅผ ๋ช ํํ๊ฒ ์ ์ํ๊ณ , ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ ๋ง์ถ ํ ์คํธ ๋ฐฉํฅ์ฑ์ ์ค์ .
- ํ๋ก์ ํธ์ ํ์ง ๋ชฉํ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ฌ์ฑํ ์ ์๋๋ก ์ ์ ํ ํ ์คํธ ๊ธฐ๋ฒ์ ์ ์ .
- ์ ํ๋ ์์(์๊ฐ, ์ธ๋ ฅ, ์์ฐ) ๋ด์์ ์ต์ ์ ํ ์คํธ ์คํ ๋ฐฉ๋ฒ์ ๊ฒฐ์ .
(2) ํ ์คํธ ์ ๋ต์ ์ฃผ์ ์์
- ํ
์คํธ ๋ฒ์ (Scope of Testing)
- ์ด๋ค ๊ธฐ๋ฅ์ ํ ์คํธํ ๊ฒ์ธ๊ฐ?
- ์ฃผ์ ํ ์คํธ ์ ํ(๊ธฐ๋ฅ ํ ์คํธ, ์ฑ๋ฅ ํ ์คํธ, ๋ณด์ ํ ์คํธ ๋ฑ)์ ์ ์.
- ํ
์คํธ ์ ๊ทผ ๋ฐฉ์ (Testing Approach)
- ๋ธ๋๋ฐ์ค ํ ์คํธ vs ํ์ดํธ๋ฐ์ค ํ ์คํธ.
- ์๋ ํ ์คํธ vs ์๋ํ ํ ์คํธ.
- ๊ธฐ๋ฅ ๊ธฐ๋ฐ ํ ์คํธ vs ๋ฆฌ์คํฌ ๊ธฐ๋ฐ ํ ์คํธ.
- ํ
์คํธ ํ๊ฒฝ (Test Environment)
- ์ค์ ์ด์ ํ๊ฒฝ๊ณผ ์ ์ฌํ ํ ์คํธ ํ๊ฒฝ์ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ.
- ๊ฐ์ํ, ํด๋ผ์ฐ๋ ํ๊ฒฝ ์ฌ์ฉ ์ฌ๋ถ.
- ํ
์คํธ ๋๊ตฌ ๋ฐ ํ๋ ์์ํฌ
- Selenium, JUnit, Postman ๋ฑ ์ฌ์ฉํ ๋๊ตฌ๋ฅผ ๋ฏธ๋ฆฌ ์ ์.
- ํ
์คํธ ์ข
๋ฃ ๊ธฐ์ค (Exit Criteria)
- "๋ฒ๊ทธ๊ฐ X๊ฐ ์ดํ์ผ ๋ ํ ์คํธ ์๋ฃ"์ ๊ฐ์ ๊ธฐ์ค์ ์ค์ .
๐ก ๊ฒฐ๋ก : ํ ์คํธ ์ ๋ต์ ์๋ฆฝํ๋ฉด ๋นํจ์จ์ ์ธ ํ ์คํธ๋ฅผ ์ค์ด๊ณ , ํ๋ก์ ํธ ์ผ์ ๋ด์์ ์ต์์ ํ์ง์ ๋ณด์ฅํ ์ ์๋ค.
9. ๋ฆฌ์คํฌ ๊ธฐ๋ฐ ํ ์คํธ (Risk-Based Testing)
๋ฆฌ์คํฌ ๊ธฐ๋ฐ ํ ์คํธ๋ ์์คํ ์์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ๊ณผ ๊ฒฐํจ ๊ฐ๋ฅ์ฑ์ด ๋์ ๋ถ๋ถ์ ์ฐ์ ์ ์ผ๋ก ํ ์คํธํ๋ ์ ๋ต์ด๋ค.
(1) ๋ฆฌ์คํฌ ๊ธฐ๋ฐ ํ ์คํธ๊ฐ ์ค์ํ ์ด์
- ๋ชจ๋ ๊ธฐ๋ฅ์ 100% ํ ์คํธํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํจ → ์ฐ์ ์์๋ฅผ ์ ํด์ผ ํจ.
- ํ๋ก์ ํธ ์ผ์ ์ด ์ด๋ฐํ ๋, ์ค์ํ ๊ธฐ๋ฅ์ ์ง์คํ์ฌ ํ์ง์ ํ๋ณดํ ์ ์์.
(2) ๋ฆฌ์คํฌ ๋ถ์ ๋ฐฉ๋ฒ
- ๋น์ฆ๋์ค ์ค์๋(Business Impact) ํ๊ฐ
- ํน์ ๊ธฐ๋ฅ์ด ๋น์ฆ๋์ค์ ๋ฏธ์น๋ ์ํฅ์ด ์ผ๋ง๋ ํฐ์ง ํ๊ฐ.
- ์: ๊ฒฐ์ ์์คํ , ์ฌ์ฉ์ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๋งค์ฐ ์ค์ํจ.
- ๊ฒฐํจ ๋ฐ์ ๊ฐ๋ฅ์ฑ(Bug Likelihood) ํ๊ฐ
- ๊ณผ๊ฑฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ์ผ๋ก ์ด๋ค ๊ธฐ๋ฅ์์ ๊ฒฐํจ์ด ์์ฃผ ๋ฐ์ํ๋์ง ๋ถ์.
- ์ ๊ท ๊ฐ๋ฐ๋ ๊ธฐ๋ฅ์ ๋ฒ๊ทธ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ๋์.
- ์ฐ์ ์์ ๋งค๊ธฐ๊ธฐ
- ๋น์ฆ๋์ค ์ค์๋ X ๊ฒฐํจ ๋ฐ์ ๊ฐ๋ฅ์ฑ = ํ ์คํธ ์ฐ์ ์์ ๊ฒฐ์ .
- ๊ฐ์ฅ ์ค์ํ ๊ธฐ๋ฅ์ ๋จผ์ ํ ์คํธํ๊ณ , ๋ ์ค์ํ ๊ธฐ๋ฅ์ ์ดํ์ ์งํ.
๐ก ๊ฒฐ๋ก : ๋ฆฌ์คํฌ ๊ธฐ๋ฐ ํ ์คํธ๋ฅผ ํ์ฉํ๋ฉด ์ ํ๋ ๋ฆฌ์์ค(์๊ฐ, ์ธ๋ ฅ) ๋ด์์๋ ํจ๊ณผ์ ์ธ ํ ์คํธ๋ฅผ ์ํํ ์ ์์.
10. ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์คํธ (Database Testing)
๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์คํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ๋ฐ๋ฅธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ฒ์ํ๋์ง ๊ฒ์ฆํ๋ ๊ณผ์ ์ด๋ค.
(1) ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์คํธ์ ์ฃผ์ ํญ๋ชฉ
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฌ (Data Integrity Testing)
- ACID ์์น(์์์ฑ, ์ผ๊ด์ฑ, ๊ณ ๋ฆฝ์ฑ, ์ง์์ฑ)์ด ์ ์ง์ผ์ง๋์ง ํ์ธ.
- ํธ๋์ญ์ ์ด ์คํจํด๋ ๋ฐ์ดํฐ๊ฐ ์์๋์ง ์๋์ง ๊ฒ์ฆ.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ ํ
์คํธ
- SQL ์ฟผ๋ฆฌ ์คํ ์๋๋ฅผ ์ธก์ ํ๊ณ , ์ธ๋ฑ์ฑ, ์ฟผ๋ฆฌ ์ต์ ํ ์ํ.
- EXPLAIN PLAN์ ์ฌ์ฉํ์ฌ SQL ์คํ ๊ณํ ๋ถ์.
- ๋ฐ์ดํฐ ๋ณด์ ํ
์คํธ
- ๋ฐ์ดํฐ๊ฐ ์ํธํ๋์ด ์ ์ฅ๋๋์ง ํ์ธ.
- SQL Injection ๊ณต๊ฒฉ์ด ๊ฐ๋ฅํ์ง ํ ์คํธ.
- ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์
ํ
์คํธ
- DB๋ฅผ ์ ๊ทธ๋ ์ด๋ํ๊ฑฐ๋ ๋ณ๊ฒฝํ ๋ ๋ฐ์ดํฐ๊ฐ ์์ค ์์ด ์ ์์ ์ผ๋ก ์ด๋ํ๋์ง ํ์ธ.
(2) ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์คํธ ๋๊ตฌ
- SQLUnit: ์ ๋ ํ ์คํธ์ฉ SQL ํ ์คํธ ํ๋ ์์ํฌ.
- DbFit: ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์คํธ ์๋ํ ๋๊ตฌ.
- PostgreSQL Explain Analyze: SQL ์คํ ๊ณํ ๋ถ์ ๋๊ตฌ.
๐ก ๊ฒฐ๋ก : ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์คํธ๋ฅผ ์ํํ๋ฉด ๋ฐ์ดํฐ ์์ค, ๋ฌด๊ฒฐ์ฑ ๋ฌธ์ , ์ฑ๋ฅ ์ ํ๋ฅผ ์ฌ์ ์ ๋ฐฉ์งํ ์ ์์.
11. A/B ํ ์คํธ (A/B Testing)
A/B ํ ์คํธ๋ ๋ ๊ฐ ์ด์์ ๋ฒ์ ์ ์คํํ์ฌ ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ฐพ๋ ํ ์คํธ ๊ธฐ๋ฒ์ด๋ค.
(1) A/B ํ ์คํธ์ ๋ชฉ์
- ์ฌ์ฉ์์ ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ต์ ์ UI/UX๋ฅผ ์ฐพ์.
- ๋น์ฆ๋์ค ๋ชฉํ(์ ํ์จ ์ฆ๊ฐ, ํด๋ฆญ๋ฅ ํฅ์ ๋ฑ)๋ฅผ ์ต์ ํ.
- ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์์ฌ ๊ฒฐ์ → ๊ฐ์ด ์๋๋ผ ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก ๊ธฐ๋ฅ ๊ฐ์ .
(2) A/B ํ ์คํธ ์คํ ์ ์ฐจ
- ๊ฐ์ค ์๋ฆฝ
- "์ด๋ก์ ๋ฒํผ์ด ํ๋์ ๋ฒํผ๋ณด๋ค ํด๋ฆญ๋ฅ ์ด ๋ ๋์ ๊ฒ์ด๋ค."
- A/B ๊ทธ๋ฃน ๋ถํ
- ์ฌ์ฉ์ ์ ๋ฐ(A๊ทธ๋ฃน) → ๊ธฐ์กด UI ์ฌ์ฉ.
- ๋๋จธ์ง ์ ๋ฐ(B๊ทธ๋ฃน) → ์๋ก์ด UI ์ฌ์ฉ.
- ๋ฐ์ดํฐ ์์ง ๋ฐ ๋ถ์
- ํด๋ฆญ๋ฅ , ์ ํ์จ(Conversion Rate) ๋ฑ์ ๋ฐ์ดํฐ๋ฅผ ์ธก์ .
- ํต๊ณ์ ์ผ๋ก ์ ์๋ฏธํ ์ฐจ์ด๊ฐ ์๋์ง ๋ถ์.
- ๊ฒฐ๋ก ๋์ถ ๋ฐ ๋ฐ์
- B๊ทธ๋ฃน์ ํด๋ฆญ๋ฅ ์ด ๋์ผ๋ฉด, ์๋ก์ด UI๋ฅผ ์ ์ฉ.
(3) A/B ํ ์คํธ ๋๊ตฌ
- Google Optimize: ๊ตฌ๊ธ์ด ์ ๊ณตํ๋ A/B ํ ์คํธ ๋๊ตฌ.
- Optimizely: UI ์คํ ๋ฐ ํ ์คํธ ๋๊ตฌ.
- VWO (Visual Website Optimizer): ์น์ฌ์ดํธ UX ์ต์ ํ ๋๊ตฌ.
๐ก ๊ฒฐ๋ก : A/B ํ ์คํธ๋ฅผ ํ์ฉํ๋ฉด ์คํ์ ํตํด ์ฌ์ฉ์ ๊ฒฝํ์ ์ต์ ํํ๊ณ , ์ ํ ๊ฐ์ ๋ฐฉํฅ์ ๋ฐ์ดํฐ ๊ธฐ๋ฐ์ผ๋ก ๊ฒฐ์ ํ ์ ์์.
12. ํ์์ ํ ์คํธ (Exploratory Testing)
ํ์์ ํ ์คํธ๋ ์ฌ์ ์ ์ ์๋ ํ ์คํธ ์ผ์ด์ค ์์ด, ํ ์คํฐ์ ๊ฒฝํ๊ณผ ์ง๊ด์ ๋ฐํ์ผ๋ก ๊ฒฐํจ์ ์ฐพ์๋ด๋ ๋ฐฉ๋ฒ์ด๋ค.
(1) ํ์์ ํ ์คํธ๊ฐ ์ค์ํ ์ด์
- ์ ํํ๋ ํ ์คํธ ์ผ์ด์ค๋ก๋ ์ฐพ๊ธฐ ์ด๋ ค์ด ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌ ๊ฐ๋ฅ.
- ์์ธกํ ์ ์๋ ์ฌ์ฉ์ ํ๋์ ์๋ฎฌ๋ ์ด์ ํ ์ ์์.
- ์๋ก์ด ๊ธฐ๋ฅ์ด๋ ์ด๊ธฐ ๊ฐ๋ฐ๋ ์ ํ์์ ํนํ ํจ๊ณผ์ .
(2) ํ์์ ํ ์คํธ ๋ฐฉ๋ฒ๋ก
- ์ฐจํฐ(ํ
์คํธ ๋ชฉํ) ์ค์
- ํน์ ๊ธฐ๋ฅ์ด๋ ์๋๋ฆฌ์ค๋ฅผ ์ค์ฌ์ผ๋ก ํ ์คํธ๋ฅผ ์ํ.
- ํ
์คํธ ์ํ
- ์์์น ๋ชปํ ์ ๋ ฅ์ ์๋ํ๊ณ , ์ฃ์ง ์ผ์ด์ค๋ฅผ ํ ์คํธ.
- ๋ฒ๊ทธ ๋ถ์ ๋ฐ ๋ฌธ์ํ
- ๋ฐ๊ฒฌ๋ ๋ฒ๊ทธ๋ฅผ ๊ธฐ๋กํ๊ณ ์ฌํ ๋ฐฉ๋ฒ์ ๋ฌธ์ํ.
๐ก ๊ฒฐ๋ก : ํ์์ ํ ์คํธ๋ ์ ํํ๋ ํ ์คํธ์ ํ๊ณ๋ฅผ ๋ณด์ํ๊ณ , ์ค์ฌ์ฉ์ ๊ด์ ์์ ๊ฒฐํจ์ ๋ฐ๊ฒฌํ๋ ๋ฐ ํจ๊ณผ์ ์ด๋ค.
1. ์ํํธ์จ์ด ํ ์คํธ ์์น (Fundamental Principles of Testing)
Pretest์์๋ ํ ์คํธ์ ๊ธฐ๋ณธ ์์น์ ์ดํดํ๊ณ ์๋์ง ํ๊ฐํ ๊ฐ๋ฅ์ฑ์ด ๋์.
(1) ์ฃผ์ ์์น๊ณผ ์ค๋ช
์์น์ค๋ช ๊ทผ๊ฑฐํ ์คํธ๋ ๊ฒฐํจ์ด ์กด์ฌํจ์ ์ฆ๋ช ํ ์ ์์ง๋ง, ๊ฒฐํจ์ด ์์์ ์ฆ๋ช ํ ์ ์๋ค | ๋ชจ๋ ์ํํธ์จ์ด์๋ ๊ฒฐํจ์ด ์์ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฏ๋ก, ์๋ฒฝํ ํ ์คํธ๋ ๋ถ๊ฐ๋ฅํจ | ๊ฒฐํจ์ด ์๋ค๊ณ ํ๋๋ผ๋ ๋ชจ๋ ๊ฐ๋ฅ์ฑ์ ํ ์คํธํ ์๋ ์์ |
์๋ฒฝํ ํ ์คํธ๋ ๋ถ๊ฐ๋ฅํ๋ค | ๋ชจ๋ ์ ๋ ฅ ์กฐํฉ์ ํ ์คํธํ๋ ๊ฒ์ ํ์ค์ ์ผ๋ก ๋ถ๊ฐ๋ฅํจ | ์๋ฅผ ๋ค์ด, ๋น๋ฐ๋ฒํธ ์ ๋ ฅ ํ๋์์ ๋ชจ๋ ๊ฐ๋ฅ์ฑ์ ํ ์คํธํ๋ ๊ฒ์ ๋นํจ์จ์ |
์กฐ๊ธฐ ํ ์คํ ์ด ์ค์ํ๋ค (Shift-Left Testing) | ๊ฐ๋ฐ ์ด๊ธฐ์ ํ ์คํธํ ์๋ก ๋น์ฉ ์ ๊ฐ ๊ฐ๋ฅ | ๊ฒฐํจ ์์ ๋น์ฉ์ ๊ฐ๋ฐ ํ๋ฐ์ผ๋ก ๊ฐ์๋ก ์ฆ๊ฐ (Shift-Left Testing ๊ฐ๋ ) |
๊ฒฐํจ ์ง์ค์ ๋ฒ์น (80/20 ๋ฒ์น) | ์ ์ฒด ์ฝ๋์ 20%๊ฐ 80%์ ๊ฒฐํจ์ ํฌํจํจ | ๊ณผ๊ฑฐ ๊ฒฐํจ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๋ฉด ํน์ ๋ชจ๋์์ ๋ง์ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๋ ๊ฒฝํฅ |
์ด์ถฉ์ ํจ๋ฌ๋ ์ค | ๋์ผํ ํ ์คํธ๋ฅผ ๋ฐ๋ณตํ๋ฉด ์๋ก์ด ๊ฒฐํจ์ ์ฐพ๊ธฐ ์ด๋ ค์ | ํ ์คํธ ์ผ์ด์ค๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ณ๊ฒฝํ์ฌ ์๋ก์ด ๊ฒฐํจ์ ๋ฐ๊ฒฌํด์ผ ํจ |
ํ ์คํธ๋ ์ ํฉ(Context)์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค | ์ํํธ์จ์ด์ ํน์ฑ์ ๋ฐ๋ผ ํ ์คํธ ๋ฐฉ๋ฒ์ด ๋ค๋ฆ | ์: ๊ธ์ต ์์คํ ์ ๋ณด์ ํ ์คํธ๊ฐ ์ค์, ๊ฒ์์ ์ฑ๋ฅ ํ ์คํธ๊ฐ ์ค์ |
์ค๋ฅ ๋ถ์ฌ์ ๊ถค๋ณ | ๊ฒฐํจ์ด ์๋ค๊ณ ํด์ ๋ฐ๋์ ํ์ง์ด ๋๋ค๊ณ ํ ์ ์์ | ์ฌ์ฉ์์ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ์ง ๋ชปํ๋ฉด ํ์ง์ด ๋ฎ์ ์ํํธ์จ์ด |
(2) Pretest์์ ์ถ์ ๊ฐ๋ฅ์ฑ
โ
ํ
์คํธ ์์น ์ค ํ๋๋ฅผ ์ ์ํ๊ณ , ๊ทธ ์์น์ด ์๋ฏธํ๋ ๋ฐ๋ฅผ ์ ํํ๋ผ๋ ๋ฌธ์
โ
"์ด์ถฉ์ ํจ๋ฌ๋
์ค๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด ์ด๋ค ์ ๊ทผ ๋ฐฉ์์ด ํ์ํ๊ฐ?" ๊ฐ์ ์์ฉํ ๋ฌธ์
2. ํ ์คํธ ์ ํ (Types of Testing)
Pretest์์๋ ๊ฐ ํ ์คํธ ์ ํ์ ๋ชฉ์ ๊ณผ ์ฐจ์ด์ ์ ๊ตฌ๋ณํ ์ ์๋์ง ํ๊ฐํ ๊ฐ๋ฅ์ฑ์ด ๋์.
(1) ์ฃผ์ ํ ์คํธ ์ ํ
ํ ์คํธ ์ ํ๋ชฉ์ ์์๋จ์ ํ ์คํธ (Unit Test) | ๊ฐ๋ณ ๋ชจ๋/ํจ์์ ๋์ ๊ฒ์ฆ | JUnit, PyTest ์ฌ์ฉ |
ํตํฉ ํ ์คํธ (Integration Test) | ๋ชจ๋ ๊ฐ์ ์ํธ์์ฉ ํ์ธ | API ํธ์ถ ๊ฒ์ฆ |
์์คํ ํ ์คํธ (System Test) | ์ ์ฒด ์์คํ ์ด ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๋์ง ๊ฒ์ฆ | ๊ธฐ๋ฅ ๋ฐ ๋น๊ธฐ๋ฅ ํ ์คํธ ์ํ |
์ธ์ ํ ์คํธ (Acceptance Test) | ์ต์ข ์ฌ์ฉ์์ ์๊ตฌ์ฌํญ ์ถฉ์กฑ ์ฌ๋ถ ๊ฒ์ฆ | ์ค์ ์ฌ์ฉ์ ๋๋ QA ํ์ด ์ํ |
ํ๊ท ํ ์คํธ (Regression Test) | ๊ธฐ์กด ๊ธฐ๋ฅ์ด ๋ณ๊ฒฝ ์์ด ๋์ํ๋์ง ํ์ธ | ์ํํธ์จ์ด ์ ๋ฐ์ดํธ ํ ๊ธฐ์กด ํ ์คํธ ์คํ |
์ฑ๋ฅ ํ ์คํธ (Performance Test) | ์์คํ ์ ์๋, ์์ ์ฑ ๊ฒ์ฆ | JMeter, LoadRunner ์ฌ์ฉ |
๋ณด์ ํ ์คํธ (Security Test) | ์์คํ ์ด ๋ณด์ ์ํ์ ์์ ํ์ง ๊ฒ์ฆ | OWASP ZAP ์ฌ์ฉ |
ํ์์ ํ ์คํธ (Exploratory Test) | ์ ํด์ง ํ ์คํธ ์ผ์ด์ค ์์ด ๊ฒฐํจ ๋ฐ๊ฒฌ | ๊ฒฝํ ๊ธฐ๋ฐ ํ ์คํธ |
(2) Pretest์์ ์ถ์ ๊ฐ๋ฅ์ฑ
โ
"ํตํฉ ํ
์คํธ์ ์์คํ
ํ
์คํธ์ ์ฐจ์ด์ ์?" ๊ฐ์ ๊ฐ๋
๋น๊ต ๋ฌธ์
โ
"์ฑ๋ฅ ํ
์คํธ์์ ์ธก์ ํด์ผ ํ๋ ์ฃผ์ ์งํ๋?" ๊ฐ์ ์ค๋ฌด์ ์์ฉ ๋ฌธ์
3. ํ ์คํธ ์ค๊ณ ๊ธฐ๋ฒ (Test Design Techniques)
ํ ์คํธ ์ผ์ด์ค๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ค๊ณํ ์ ์๋์ง ํ๊ฐํ๋ ๋ฌธ์ ์ถ์ ๊ฐ๋ฅ.
(1) ์ฃผ์ ํ ์คํธ ๊ธฐ๋ฒ
๊ธฐ๋ฒ์ค๋ช ์์๋์น ๋ถํ (Equivalence Partitioning) | ์ ๋ ฅ๊ฐ์ ์ฌ๋ฌ ๊ทธ๋ฃน(์ ํจ/๋ฌดํจ)์ผ๋ก ๋๋์ด ๋ํ๊ฐ์ ํ ์คํธ | 1~100 ์ ํจ → 50 ํ ์คํธ, 0/101 ๋ฌดํจ |
๊ฒฝ๊ณ๊ฐ ๋ถ์ (Boundary Value Analysis) | ์ต์/์ต๋ ๊ฒฝ๊ณ๋ฅผ ์ค์ฌ์ผ๋ก ํ ์คํธ | 1~100 ์ ํจ → 0, 1, 100, 101 ํ ์คํธ |
๊ฒฐ์ ํ ์ด๋ธ ํ ์คํธ (Decision Table Testing) | ์ฌ๋ฌ ์กฐ๊ฑด ์กฐํฉ์ ๋ถ์ํ์ฌ ํ ์คํธ | ํ์๊ฐ์ ์ "์ด๋ฉ์ผ ์ธ์ฆ + ์ฝ๊ด ๋์" ์กฐํฉ ํ ์คํธ |
์ํ ์ ์ด ํ ์คํธ (State Transition Testing) | ์ํ ๋ณํ์ ๋ฐ๋ผ ํ ์คํธ | ATM: "์นด๋ ์ฝ์ → PIN ์ ๋ ฅ → ์ถ๊ธ ์์ฒญ" ์ํ ์ ์ด |
์ค๋ฅ ์ถ์ (Error Guessing) | ๊ฒฝํ์ ๋ฐํ์ผ๋ก ์ค๋ฅ ๊ฐ๋ฅ์ฑ์ด ๋์ ๋ถ๋ถ ํ ์คํธ | ๋ก๊ทธ์ธ ์ "๋น ๊ฐ ์ ๋ ฅ", "ํน์ ๋ฌธ์ ์ ๋ ฅ" ๋ฑ ์๋ |
(2) Pretest์์ ์ถ์ ๊ฐ๋ฅ์ฑ
โ
"๊ฒฝ๊ณ๊ฐ ๋ถ์ ๊ธฐ๋ฒ์ ์ ์ฉํ ํ
์คํธ ์ผ์ด์ค๋ฅผ ์ ํํ์์ค" ๊ฐ์ ๋ฌธ์
โ
"๋์น ๋ถํ ์ ์ ์ฉํ๋ฉด ํ
์คํธ ์ผ์ด์ค๊ฐ ๋ช ๊ฐ๋ก ์ค์ด๋๋๊ฐ?" ๊ฐ์ ๋ฌธ์
4. ๊ฒฐํจ ๊ด๋ฆฌ (Defect Management)
Pretest์์๋ ๊ฒฐํจ ๊ด๋ฆฌ ํ๋ก์ธ์ค๋ฅผ ์ดํดํ๊ณ ์๋์ง ํ๊ฐํ ๊ฐ๋ฅ์ฑ์ด ๋์.
(1) ๊ฒฐํจ ๋ผ์ดํ์ฌ์ดํด (Bug Lifecycle)
- New (์ ๊ท) → ๊ฒฐํจ ๋ฐ๊ฒฌ ํ ๋ฑ๋ก๋จ.
- Assigned (ํ ๋น๋จ) → ๊ฐ๋ฐ์์๊ฒ ๋ฐฐ์ ๋จ.
- In Progress (์์ ์ค) → ๊ฒฐํจ ์์ ์งํ ์ค.
- Fixed (์์ ์๋ฃ) → ๊ฐ๋ฐ์๊ฐ ์์ ์๋ฃ.
- Retest (์ฌํ ์คํธ) → QA๊ฐ ๋ค์ ํ ์คํธ.
- Closed (์ข ๋ฃ๋จ) → ๊ฒฐํจ์ด ํด๊ฒฐ๋จ.
- Reopened (์ฌ์คํ๋จ) → ๊ฒฐํจ์ด ์์ ํ ํด๊ฒฐ๋์ง ์์ ๋ค์ ์คํ๋จ.
(2) ๊ฒฐํจ ์ฌ๊ฐ๋(Severity) vs ์ฐ์ ์์(Priority)
๊ตฌ๋ถ์ค๋ช ์์์ฌ๊ฐ๋ (Severity) | ๊ฒฐํจ์ด ์์คํ ์ ๋ฏธ์น๋ ์ํฅ | Critical (์์คํ ๋ค์ด) / Minor (UI ์คํ) |
์ฐ์ ์์ (Priority) | ์์ ์๊ธ์ฑ | High (์ฆ์ ์์ ํ์) / Low (ํฅํ ์์ ๊ฐ๋ฅ) |
(3) Pretest์์ ์ถ์ ๊ฐ๋ฅ์ฑ
โ
"๋ค์ ์ค ๊ฒฐํจ ๊ด๋ฆฌ ํ๋ก์ธ์ค์ ์ฌ๋ฐ๋ฅธ ์์๋?" ๊ฐ์ ๋ฌธ์
โ
"Critical์ด์ง๋ง Low Priority์ธ ๋ฒ๊ทธ์ ์์๋?" ๊ฐ์ ์์ฉ ๋ฌธ์
5. ์๋ํ ํ ์คํธ (Test Automation)
Pretest์์๋ ์๋ํ ํ ์คํธ์ ํ์์ฑ๊ณผ ์ฃผ์ ๋๊ตฌ์ ๋ํ ์ดํด๋๋ฅผ ํ๊ฐํ ๊ฐ๋ฅ์ฑ์ด ๋์.
(1) ์๋ํ ํ ์คํธ์ ํ์์ฑ
- ๋ฐ๋ณต์ ์ธ ํ ์คํธ๋ฅผ ์๋์ผ๋ก ์ํํ์ฌ ์์ฐ์ฑ ํฅ์.
- ํ๊ท ํ ์คํธ์ ์ ํฉ → ์ฝ๋ ๋ณ๊ฒฝ ํ ์๋์ผ๋ก ๊ธฐ์กด ๊ธฐ๋ฅ์ ๊ฒ์ฆ.
- ํ ์คํธ ์คํ ์๋ ์ฆ๊ฐ → ์๋ ํ ์คํธ ๋๋น ํจ์จ์ .
(2) ์ฃผ์ ์๋ํ ํ ์คํธ ๋๊ตฌ
ํ ์คํธ ์ ํ๋๊ตฌ์ค๋ช์ ๋ ํ ์คํธ | JUnit, PyTest | ์ฝ๋ ๋จ์ ํ ์คํธ |
UI ํ ์คํธ | Selenium, Cypress | ๋ธ๋ผ์ฐ์ UI ํ ์คํธ |
API ํ ์คํธ | Postman, RestAssured | REST API ํ ์คํธ |
์ฑ๋ฅ ํ ์คํธ | JMeter, Locust | ๋ถํ/์ฑ๋ฅ ํ ์คํธ |
(3) Pretest์์ ์ถ์ ๊ฐ๋ฅ์ฑ
โ
"Selenium์ ์ด๋ค ์ ํ์ ํ
์คํธ์ ์ฌ์ฉ๋๋๊ฐ?" ๊ฐ์ ๊ฐ๋
๋ฌธ์
โ
"์๋ํ ํ
์คํธ์ ์ฅ์ ์?" ๊ฐ์ ์์ ํ ๋ฌธ์
๐ฅ ๊ฒฐ๋ก : ์จ๋ผ์ธ Pretest์ ์ถ์ ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ ๊ฐ๋ ๋ค
โ
์ํํธ์จ์ด ํ
์คํธ ์์น
โ
ํ
์คํธ ์ ํ๊ณผ ์ฐจ์ด์
โ
ํ
์คํธ ์ค๊ณ ๊ธฐ๋ฒ (๋์น ๋ถํ , ๊ฒฝ๊ณ๊ฐ ๋ถ์ ๋ฑ)
โ
๊ฒฐํจ ๊ด๋ฆฌ ํ๋ก์ธ์ค (Bug Lifecycle, Severity vs Priority)
โ
์๋ํ ํ
์คํธ ๋ฐ ์ฃผ์ ๋๊ตฌ
1. ์ํํธ์จ์ด ํ ์คํธ ์์น ๋ฌธ์
๋ฌธ์ 1. ๋ค์ ์ค ์ํํธ์จ์ด ํ ์คํธ ์์น์ ๋ํ ์ค๋ช ์ผ๋ก ์ฌ๋ฐ๋ฅธ ๊ฒ์?
- ํ ์คํธ๋ฅผ ์ํํ๋ฉด ๋ชจ๋ ๊ฒฐํจ์ ๋ฐ๊ฒฌํ ์ ์๋ค.
- ๋์ผํ ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ฐ๋ณตํด์ ์คํํ๋ฉด ์๋ก์ด ๊ฒฐํจ์ ๊ณ์ ๋ฐ๊ฒฌํ ์ ์๋ค.
- ์ํํธ์จ์ด์ ๊ฒฐํจ์ด ์๋ค๊ณ ํ๋๋ผ๋ ํ์ง์ด ๋๋ค๊ณ ๋จ์ ํ ์ ์๋ค.
- ํ ์คํธ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์ด ์๋ฃ๋ ํ์๋ง ์ํํด์ผ ํ๋ค.
โ ์ ๋ต: โข ์ํํธ์จ์ด์ ๊ฒฐํจ์ด ์๋ค๊ณ ํ๋๋ผ๋ ํ์ง์ด ๋๋ค๊ณ ๋จ์ ํ ์ ์๋ค.
๐ ํด์ค:
- โ ํ๋ฆผ: ํ ์คํธ๋ ๋ชจ๋ ๊ฒฐํจ์ ์ฐพ์ ์ ์์ผ๋ฉฐ, ์๋ฒฝํ ํ ์คํธ๋ ๋ถ๊ฐ๋ฅํ๋ค.
- โก ํ๋ฆผ: ๋์ผํ ํ ์คํธ๋ฅผ ๋ฐ๋ณตํ๋ฉด ๋ ์ด์ ์๋ก์ด ๊ฒฐํจ์ ์ฐพ๊ธฐ ์ด๋ ค์ด ์ด์ถฉ์ ํจ๋ฌ๋ ์ค๊ฐ ๋ฐ์ํ ์ ์๋ค.
- โฃ ํ๋ฆผ: ํ ์คํธ๋ ๊ฐ๋ฐ ์๋ฃ ํ๋ฟ๋ง ์๋๋ผ ์ด๊ธฐ ๋จ๊ณ์์๋ ์ํํ๋ ๊ฒ์ด ์ค์ํ๋ค (Shift-Left Testing ๊ฐ๋ ).
- โข ์ ๋ต: ์ฌ์ฉ์์ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ์ง ์๋๋ค๋ฉด ๊ฒฐํจ์ด ์์ด๋ ํ์ง์ด ๋ฎ์ ์ํํธ์จ์ด๊ฐ ๋ ์ ์๋ค.
2. ํ ์คํธ ์ ํ ๋ฌธ์
๋ฌธ์ 2. ๋ค์ ์ค ์์คํ ์ด ์์๋ ์ฑ๋ฅ์ ์ ์งํ๋์ง ๊ฒ์ฆํ๋ ํ ์คํธ๋?
- ๋จ์ ํ ์คํธ (Unit Test)
- ํตํฉ ํ ์คํธ (Integration Test)
- ์ฑ๋ฅ ํ ์คํธ (Performance Test)
- ํ์์ ํ ์คํธ (Exploratory Test)
โ ์ ๋ต: โข ์ฑ๋ฅ ํ ์คํธ (Performance Test)
๐ ํด์ค:
- โ ๋จ์ ํ ์คํธ: ๊ฐ๋ณ ๋ชจ๋/ํจ์๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๋์ง ๊ฒ์ฆ.
- โก ํตํฉ ํ ์คํธ: ์ฌ๋ฌ ๋ชจ๋์ด ์ ์์ ์ผ๋ก ์ฐ๋๋๋์ง ํ์ธ.
- โข ์ฑ๋ฅ ํ ์คํธ: ์์คํ ์ ์๋, ์๋ต ์๊ฐ, ์ฒ๋ฆฌ๋ ๋ฑ์ ํ๊ฐํ์ฌ ์์๋ ์ฑ๋ฅ์ ์ ์งํ๋์ง ๊ฒ์ฆ (์ ๋ต!).
- โฃ ํ์์ ํ ์คํธ: ์ฌ์ ์ ์ ํด์ง ํ ์คํธ ์ผ์ด์ค ์์ด ํ ์คํฐ์ ์ง๊ด๊ณผ ๊ฒฝํ์ ํ์ฉํ์ฌ ํ ์คํธ.
3. ํ ์คํธ ์ค๊ณ ๊ธฐ๋ฒ ๋ฌธ์
๋ฌธ์ 3. "ํ์ ๊ฐ์ ์ ๋์ด ์ ๋ ฅ ํ๋๋ 1~100๊น์ง ์ ๋ ฅํ ์ ์๋ค." ์ด ๊ฒฝ์ฐ, ๊ฒฝ๊ณ๊ฐ ๋ถ์ ๊ธฐ๋ฒ์ ์ ์ฉํ ํ ์คํธ ์ผ์ด์ค๋ก ๊ฐ์ฅ ์ ์ ํ ๊ฒ์?
- 0, 50, 100, 101
- 1, 50, 100
- -1, 0, 1, 99, 100, 101
- 10, 20, 30, 40
โ ์ ๋ต: โข -1, 0, 1, 99, 100, 101
๐ ํด์ค:
- ๊ฒฝ๊ณ๊ฐ ๋ถ์ (Boundary Value Analysis) ๋ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ ๊ทผ์ฒ์์ ์ค๋ฅ๊ฐ ๋ง์ด ๋ฐ์ํ๋ค๋ ์์น์ ๋ฐ๋ผ ๊ฒฝ๊ณ๋ฅผ ์ค์ฌ์ผ๋ก ํ ์คํธ๋ฅผ ์ํํด์ผ ํ๋ค.
- โ , โก ํ๋ฆผ: 0, 50, 100์ ํฌํจ๋์์ง๋ง, ๊ฒฝ๊ณ ํ ์คํธ์ ํต์ฌ์ธ ์ต์/์ต๋๊ฐ ๋ฐ๋ก ๋ฐ๊นฅ์ชฝ(-1, 101) ์ด ํฌํจ๋์ง ์์.
- โฃ ํ๋ฆผ: ๋ฌด์์ ์ซ์๋ก ํ ์คํธํ์ฌ ๊ฒฝ๊ณ๊ฐ ๊ฒ์ฆ์ ์ ๋๋ก ์ํํ์ง ์์.
- โข ์ ๋ต: ์ต์๊ฐ(1), ์ต๋๊ฐ(100), ์ต์๊ฐ์ ์ง์ (-1, 0), ์ต๋๊ฐ์ ์งํ(101)๋ฅผ ํฌํจํ์ฌ ๊ฐ์ฅ ์๋ฒฝํ ๊ฒฝ๊ณ๊ฐ ํ ์คํธ๋ฅผ ์ํํ ์ ์์.
4. ๊ฒฐํจ ๊ด๋ฆฌ ๋ฌธ์
๋ฌธ์ 4. ๋ค์ ์ค ๊ฒฐํจ์ ์ฌ๊ฐ๋(Severity)์ ์ฐ์ ์์(Priority)์ ๋ํ ์ค๋ช ์ผ๋ก ์ ์ ํ์ง ์์ ๊ฒ์?
- ์ฌ๊ฐ๋๊ฐ ๋์๋ ์ฐ์ ์์๊ฐ ๋ฎ์ ์ ์๋ค.
- ์ฌ๊ฐ๋๊ฐ ๋ฎ์๋ ์ฐ์ ์์๊ฐ ๋์ ์ ์๋ค.
- ์ฌ๊ฐ๋๋ ์ฃผ๋ก QA ํ์ด ๊ฒฐ์ ํ๊ณ , ์ฐ์ ์์๋ ๋น์ฆ๋์ค ํ๊ณผ ๊ฐ๋ฐํ์ด ๊ฒฐ์ ํ ์ ์๋ค.
- ์ฌ๊ฐ๋๊ฐ ๋์ ๊ฒฐํจ์ ํญ์ ์ฐ์ ์์๊ฐ ๋๋ค.
โ ์ ๋ต: โฃ ์ฌ๊ฐ๋๊ฐ ๋์ ๊ฒฐํจ์ ํญ์ ์ฐ์ ์์๊ฐ ๋๋ค.
๐ ํด์ค:
- โ ์ ๋ต: ์๋ฅผ ๋ค์ด, ์น๋ช ์ ์ธ ์ค๋ฅ(Critical Bug)๊ฐ ๋ฐ์ํ์ง๋ง, ํด๋น ๊ธฐ๋ฅ์ด ์ ์ฌ์ฉ๋์ง ์๋๋ค๋ฉด ์ฐ์ ์์๊ฐ ๋ฎ์ ์๋ ์์.
- โก ์ ๋ต: UI ์คํ ๊ฐ์ ๊ฒฝ๋ฏธํ ์ค๋ฅ(Minor Bug) ์ด๋๋ผ๋, ๋ง์ผํ ์บ ํ์ธ ์ ์ ๊ธด๊ธ ์์ ์ด ํ์ํ๋ค๋ฉด ์ฐ์ ์์๊ฐ ๋์ ์ ์์.
- โข ์ ๋ต: ์ฌ๊ฐ๋(Severity)๋ ๋ณดํต QA ํ์ด ๊ฒฐ์ ํ๊ณ , ์ฐ์ ์์(Priority)๋ ๋น์ฆ๋์ค์ ์ธ ํ๋จ์ด ํฌํจ๋ ์ ์์.
- โฃ ํ๋ฆผ: ์ฌ๊ฐ๋๊ฐ ๋์๋ ๋น์ฆ๋์ค์ ์ผ๋ก ์ค์ํ์ง ์๋ค๋ฉด ์ฐ์ ์์๊ฐ ๋ฎ์์ง ์ ์์.
5. ์๋ํ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 5. ์๋ํ ํ ์คํธ์ ์ฃผ์ ์ฅ์ ์ผ๋ก ์ ์ ํ์ง ์์ ๊ฒ์?
- ํ ์คํธ ์คํ ์๋๋ฅผ ํฅ์์ํจ๋ค.
- ํ๊ท ํ ์คํธ(Regression Test)๋ฅผ ์๋์ผ๋ก ์ํํ ์ ์๋ค.
- ๋ชจ๋ ์ ํ์ ํ ์คํธ๋ฅผ ์์ ํ ์๋ํํ ์ ์๋ค.
- ํ ์คํธ์ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์๋ค.
โ ์ ๋ต: โข ๋ชจ๋ ์ ํ์ ํ ์คํธ๋ฅผ ์์ ํ ์๋ํํ ์ ์๋ค.
๐ ํด์ค:
- โ ์ ๋ต: ์๋ํ ํ ์คํธ๋ ๋ฐ๋ณต์ ์ธ ํ ์คํธ๋ฅผ ๋น ๋ฅด๊ฒ ์ํํ์ฌ ์๋๋ฅผ ํฅ์์ํด.
- โก ์ ๋ต: ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์๋์ผ๋ก ํ๊ท ํ ์คํธ๋ฅผ ์ํํ์ฌ ๊ธฐ์กด ๊ธฐ๋ฅ์ด ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ์ธ ๊ฐ๋ฅ.
- โข ํ๋ฆผ: ํ์์ ํ ์คํธ, UX ํ ์คํธ, ์ง๊ด์ด ํ์ํ ํ ์คํธ๋ ์๋ํํ๊ธฐ ์ด๋ ค์.
- โฃ ์ ๋ต: ์๋ํ ํ ์คํธ๋ ํญ์ ๋์ผํ ๋ฐฉ์์ผ๋ก ํ ์คํธ๋ฅผ ์ํํ์ฌ ํ ์คํธ ๊ฒฐ๊ณผ์ ์ผ๊ด์ฑ์ ์ ์งํ ์ ์์.
6. API ํ ์คํธ ๋ฌธ์
๋ฌธ์ 6. API ํ ์คํธ์์ HTTP ์ํ ์ฝ๋ 500์ด ๋ฐํ๋์๋ค๋ฉด, ์ด๋ฅผ ์๋ฏธํ๋ ๊ฒ์?
- ์์ฒญ์ด ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋์์์ ์๋ฏธํ๋ค.
- ์ธ์ฆ์ด ์คํจํ์์ ์๋ฏธํ๋ค.
- ํด๋ผ์ด์ธํธ ์์ฒญ์ด ์๋ชป๋์์์ ์๋ฏธํ๋ค.
- ์๋ฒ ๋ด๋ถ ์ค๋ฅ๊ฐ ๋ฐ์ํ์์ ์๋ฏธํ๋ค.
โ ์ ๋ต: โฃ ์๋ฒ ๋ด๋ถ ์ค๋ฅ๊ฐ ๋ฐ์ํ์์ ์๋ฏธํ๋ค.
๐ ํด์ค:
- โ ํ๋ฆผ: ์์ฒญ์ด ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ฉด 200 OK๊ฐ ๋ฐํ๋จ.
- โก ํ๋ฆผ: ์ธ์ฆ ์คํจ๋ 401 Unauthorized ์ฝ๋๊ฐ ๋ฐํ๋จ.
- โข ํ๋ฆผ: ํด๋ผ์ด์ธํธ ์์ฒญ ์ค๋ฅ๋ 400 Bad Request ์ฝ๋๊ฐ ๋ฐํ๋จ.
- โฃ ์ ๋ต: 500 Internal Server Error๋ ์๋ฒ ๋ด๋ถ์์ ์๊ธฐ์น ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋ ๋ฐํ๋๋ ์ํ ์ฝ๋.
๐ฅ ๊ฒฐ๋ก : Pretest ๋๋น๋ฅผ ์ํ ํต์ฌ ์ ๋ฆฌ
โ
์ํํธ์จ์ด ํ
์คํธ ์์น – Shift-Left Testing, ์ด์ถฉ์ ํจ๋ฌ๋
์ค ์ดํด
โ
ํ
์คํธ ์ ํ – ๋จ์ ํ
์คํธ, ํตํฉ ํ
์คํธ, ์ฑ๋ฅ ํ
์คํธ ์ฐจ์ด์ ์์ง
โ
ํ
์คํธ ์ค๊ณ ๊ธฐ๋ฒ – ๋์น ๋ถํ , ๊ฒฝ๊ณ๊ฐ ๋ถ์ ์ค๋ฌด ์ ์ฉ ๋ฅ๋ ฅ ํ์
โ
๊ฒฐํจ ๊ด๋ฆฌ – Bug Lifecycle๊ณผ Severity vs Priority ์ฐจ์ด์ ์ดํด
โ
์๋ํ ํ
์คํธ – Selenium, JUnit ๋ฑ ์๋ํ ํ
์คํธ์ ์ฅ์ ๋ฐ ํ๊ณ ์ดํด
โ
API ํ
์คํธ – HTTP ์ํ ์ฝ๋์ API ํ
์คํธ ๋๊ตฌ (Postman, RestAssured) ์์ง
7. ๋ธ๋๋ฐ์ค ํ ์คํธ ๊ธฐ๋ฒ ๋ฌธ์
๋ฌธ์ 7. ๋ค์ ์ค ๋ธ๋๋ฐ์ค ํ ์คํธ ๊ธฐ๋ฒ์ ํด๋นํ๋ ๊ฒ์?
- ๋ฌธ์ฅ(Statement) ์ปค๋ฒ๋ฆฌ์ง
- ๋์น ๋ถํ (Equivalence Partitioning)
- ๋ถ๊ธฐ(Branch) ์ปค๋ฒ๋ฆฌ์ง
- ์กฐ๊ฑด ์ปค๋ฒ๋ฆฌ์ง (Condition Coverage)
โ ์ ๋ต: โก ๋์น ๋ถํ (Equivalence Partitioning)
๐ ํด์ค:
- ๋ธ๋๋ฐ์ค ํ ์คํธ๋ ๋ด๋ถ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ฅด๋ ์ํ์์, ์ ๋ ฅ๊ณผ ์ถ๋ ฅ ๊ฐ๋ง์ ๊ธฐ์ค์ผ๋ก ํ ์คํธํ๋ ๊ธฐ๋ฒ์ด์ผ.
- โ , โข, โฃ ํ๋ฆผ: ๋ฌธ์ฅ ์ปค๋ฒ๋ฆฌ์ง, ๋ถ๊ธฐ ์ปค๋ฒ๋ฆฌ์ง, ์กฐ๊ฑด ์ปค๋ฒ๋ฆฌ์ง๋ ํ์ดํธ๋ฐ์ค ํ ์คํธ ๊ธฐ๋ฒ์ ์ํจ.
- โก ์ ๋ต: ๋์น ๋ถํ ์ ์ ๋ ฅ๊ฐ์ ์ฌ๋ฌ ๊ทธ๋ฃน์ผ๋ก ๋๋๊ณ , ๊ทธ๋ฃน ๋ด ๋ํ ๊ฐ์ ํ ์คํธํ๋ ๊ธฐ๋ฒ์ผ๋ก, ๋ธ๋๋ฐ์ค ํ ์คํธ์ ํด๋นํจ.
8. ํ๊ท ํ ์คํธ ๋ฌธ์
๋ฌธ์ 8. ์ํํธ์จ์ด ์ ๋ฐ์ดํธ ํ, ๊ธฐ์กด ๊ธฐ๋ฅ์ด ์ ์์ ์ผ๋ก ์๋ํ๋์ง ๊ฒ์ฆํ๋ ํ ์คํธ๋?
- ํ์์ ํ ์คํธ
- ๋จ์ ํ ์คํธ
- ํ๊ท ํ ์คํธ
- ์ธ์ ํ ์คํธ
โ ์ ๋ต: โข ํ๊ท ํ ์คํธ (Regression Testing)
๐ ํด์ค:
- โ ํ๋ฆผ: ํ์์ ํ ์คํธ๋ ํ ์คํฐ๊ฐ ์ง๊ด์ ์ผ๋ก ๊ฒฐํจ์ ์ฐพ๋ ํ ์คํธ ๋ฐฉ๋ฒ.
- โก ํ๋ฆผ: ๋จ์ ํ ์คํธ๋ ๊ฐ๋ณ ์ฝ๋ ๋ชจ๋์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ฒ์ฆํ๋ ํ ์คํธ.
- โข ์ ๋ต: ํ๊ท ํ ์คํธ๋ ๊ธฐ์กด ๊ธฐ๋ฅ์ด ์ฝ๋ ๋ณ๊ฒฝ ํ์๋ ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ์ธํ๋ ํ ์คํธ.
- โฃ ํ๋ฆผ: ์ธ์ ํ ์คํธ๋ ์ฌ์ฉ์ ์๊ตฌ์ฌํญ์ด ์ถฉ์กฑ๋์๋์ง๋ฅผ ๊ฒ์ฆํ๋ ํ ์คํธ.
9. ์ฑ๋ฅ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 9. ๋ค์ ์ค ์ฑ๋ฅ ํ ์คํธ์์ ์ธก์ ํด์ผ ํ ํต์ฌ ์งํ๊ฐ ์๋ ๊ฒ์?
- ์๋ต ์๊ฐ (Response Time)
- ์ฒ๋ฆฌ๋ (Throughput)
- ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง (Code Coverage)
- CPU ์ฌ์ฉ๋ฅ (CPU Utilization)
โ ์ ๋ต: โข ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง (Code Coverage)
๐ ํด์ค:
- โ ์ ๋ต: ์๋ต ์๊ฐ์ ์ฌ์ฉ์๊ฐ ์์ฒญ์ ๋ณด๋ธ ํ ์๋ฒ๊ฐ ์๋ตํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ.
- โก ์ ๋ต: ์ฒ๋ฆฌ๋์ ๋จ์ ์๊ฐ๋น ์ฒ๋ฆฌ๋๋ ์์ฒญ ์.
- โข ํ๋ฆผ: ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋ ํ์ดํธ๋ฐ์ค ํ ์คํธ์ ์ธก์ ์งํ๋ก, ์ฑ๋ฅ ํ ์คํธ์ ๊ด๋ จ ์์.
- โฃ ์ ๋ต: CPU ์ฌ์ฉ๋ฅ ์ ์๋ฒ์ ์์ ์๋น๋์ ์ธก์ ํ๋ ์ค์ํ ์ฑ๋ฅ ์งํ.
10. SQL Injection ๋ณด์ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 10. ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด SQL Injection ๊ณต๊ฒฉ์ ์ทจ์ฝํ์ง ํ ์คํธํ ๋ ๊ฐ์ฅ ์ ์ ํ ์ ๋ ฅ๊ฐ์?
- SELECT * FROM users WHERE username = 'admin' AND password = 'password123';
- ' OR '1'='1' --
- INSERT INTO users (username, password) VALUES ('hacker', 'hack123');
- DELETE FROM users WHERE username = 'admin';
โ ์ ๋ต: โก ' OR '1'='1' --
๐ ํด์ค:
- SQL Injection ๊ณต๊ฒฉ์ ์ ์์ ์ธ SQL ๋ฌธ์ ์ฃผ์ ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์กฐ์ํ๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ์ด์ผ.
- โ ํ๋ฆผ: ์ผ๋ฐ์ ์ธ SQL ์ฟผ๋ฆฌ์ผ ๋ฟ, ๊ณต๊ฒฉ ํจํด์ด ์๋.
- โก ์ ๋ต: ' OR '1'='1' -- ํจํด์ ํญ์ ์ฐธ์ด ๋๋ ์กฐ๊ฑด์ ์ฝ์ ํ์ฌ ๋ฌด๋จ ๋ก๊ทธ์ธ ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๋ํ์ ์ธ SQL Injection ๊ณต๊ฒฉ ๋ฐฉ์.
- โข, โฃ ํ๋ฆผ: ๋จ์ SQL ๋ฌธ์ผ๋ก, ์ง์ ์ ์ธ SQL Injection ๊ณต๊ฒฉ์ด ์๋.
11. ํ ์คํธ ํ๊ฒฝ ๊ฒฉ๋ฆฌ ๋ฌธ์
๋ฌธ์ 11. ํ ์คํธ๋ฅผ ์ด์ ํ๊ฒฝ๊ณผ ๋ถ๋ฆฌํ์ฌ ์ํํ๋ ์ฃผ์ ๋ชฉ์ ์?
- ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ์ฌ ๊ฒฐํจ์ ๋น ๋ฅด๊ฒ ์ฐพ๊ธฐ ์ํด์
- ์ด์ ํ๊ฒฝ์์ ์ฌ์ฉ์์ ์ค์ ์์ฒญ์ ๊ธฐ๋ฐ์ผ๋ก ํ ์คํธํ๊ธฐ ์ํด์
- ํ ์คํธ๋ก ์ธํด ์ด์ ์๋น์ค์ ์ํฅ์ ์ฃผ์ง ์๋๋ก ํ๊ธฐ ์ํด์
- ๊ฐ๋ฐ์์ QA๊ฐ ๊ฐ์ ํ๊ฒฝ์์ ํ ์คํธ๋ฅผ ์งํํ๊ธฐ ์ํด์
โ ์ ๋ต: โข ํ ์คํธ๋ก ์ธํด ์ด์ ์๋น์ค์ ์ํฅ์ ์ฃผ์ง ์๋๋ก ํ๊ธฐ ์ํด์
๐ ํด์ค:
- โ ํ๋ฆผ: ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ณ๊ฒฝํ๋ฉด ๋ณด์ ๋ฐ ๋ฐ์ดํฐ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์.
- โก ํ๋ฆผ: ํ ์คํธ๋ ์ด์ ํ๊ฒฝ์์ ์ง์ ์ํํ๋ฉด ์ ๋๋ฉฐ, ๋ณ๋์ ํ ์คํธ ํ๊ฒฝ์์ ์ํํด์ผ ํจ.
- โข ์ ๋ต: ํ ์คํธ ํ๊ฒฝ์ ์ด์ ํ๊ฒฝ๊ณผ ๋ถ๋ฆฌํ๋ฉด, ํ ์คํธ ๊ณผ์ ์์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๊ฐ ์ค์ ์๋น์ค์ ์ํฅ์ ๋ฏธ์น๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์.
- โฃ ํ๋ฆผ: ๊ฐ๋ฐ์์ QA๋ ํ ์คํธ ํ๊ฒฝ์์ ํ๋ ฅํ ์ ์์ง๋ง, ์ด์ ํ๊ฒฝ๊ณผ์ ๊ฒฉ๋ฆฌ๊ฐ ๋ ์ค์ํ ์ด์ ์.
12. ํ ์คํธ ์๋ํ ์ ๋ต ๋ฌธ์
๋ฌธ์ 12. ๋ค์ ์ค ํ ์คํธ ์๋ํ ๋์ ์ ๊ณ ๋ คํด์ผ ํ ๊ฐ์ฅ ์ค์ํ ์์๋?
- ๋ชจ๋ ํ ์คํธ๋ฅผ 100% ์๋ํํ๋ ๊ฒ์ด ๋ชฉํ์ด๋ค.
- ์์ฃผ ๋ฐ๋ณต๋๋ ํ ์คํธ๋ฅผ ์ฐ์ ์ ์ผ๋ก ์๋ํํด์ผ ํ๋ค.
- ์๋ํ๋ ํ ์คํธ๋ ํ ๋ฒ ์์ฑํ๋ฉด ์์ ํ ํ์๊ฐ ์๋ค.
- ์๋ํ ํ ์คํธ๋ ์๋ ํ ์คํธ๋ณด๋ค ํญ์ ๋ ํจ๊ณผ์ ์ด๋ค.
โ ์ ๋ต: โก ์์ฃผ ๋ฐ๋ณต๋๋ ํ ์คํธ๋ฅผ ์ฐ์ ์ ์ผ๋ก ์๋ํํด์ผ ํ๋ค.
๐ ํด์ค:
- โ ํ๋ฆผ: 100% ์๋ํ๋ ํ์ค์ ์ผ๋ก ๋ถ๊ฐ๋ฅํจ. UX ํ ์คํธ๋ ํ์์ ํ ์คํธ๋ ์ฌ์ ํ ์๋์ผ๋ก ์ํํด์ผ ํจ.
- โก ์ ๋ต: ์๋ํ ํ ์คํธ๋ ํ๊ท ํ ์คํธ, API ํ ์คํธ ๋ฑ ์์ฃผ ๋ฐ๋ณต๋๋ ํ ์คํธ๋ถํฐ ๋์ ํ๋ ๊ฒ์ด ํจ๊ณผ์ .
- โข ํ๋ฆผ: ์ฝ๋ ๋ณ๊ฒฝ์ด ์์ ๊ฒฝ์ฐ ์๋ํ ํ ์คํธ ์คํฌ๋ฆฝํธ๋ ์ ๋ฐ์ดํธํด์ผ ํจ.
- โฃ ํ๋ฆผ: ์๋ํ ํ ์คํธ๊ฐ ํญ์ ๋ ํจ๊ณผ์ ์ธ ๊ฒ์ ์๋. ํ์์ ํ ์คํธ, UI ํ ์คํธ๋ ์๋ ํ ์คํธ๊ฐ ๋ ํจ๊ณผ์ ์ผ ์ ์์.
13. ๊ฒฐํจ ์ฌํ์ฑ ๋ฌธ์
๋ฌธ์ 13. QA๊ฐ ๊ฒฐํจ์ ๋ฐ๊ฒฌํ์ ๋, ๊ฒฐํจ์ด ๋ค์ ๋ฐ์ํ๋๋ก ํ๋ ๊ณผ์ ์ ๋ฌด์์ด๋ผ๊ณ ํ๋๊ฐ?
- ๊ฒฐํจ ๋ณด๊ณ (Defect Reporting)
- ๊ฒฐํจ ์ถ์ (Defect Tracking)
- ๊ฒฐํจ ์ฌํ (Defect Reproduction)
- ๊ฒฐํจ ์ข ๋ฃ (Defect Closure)
โ ์ ๋ต: โข ๊ฒฐํจ ์ฌํ (Defect Reproduction)
๐ ํด์ค:
- โ ํ๋ฆผ: ๊ฒฐํจ ๋ณด๊ณ ๋ ๊ฒฐํจ์ ๋ฐ๊ฒฌํ ํ ๋ฌธ์ํํ๋ ๊ณผ์ .
- โก ํ๋ฆผ: ๊ฒฐํจ ์ถ์ ์ ๊ฒฐํจ์ด ํด๊ฒฐ๋ ๋๊น์ง ๊ด๋ฆฌํ๋ ๊ณผ์ .
- โข ์ ๋ต: ๊ฒฐํจ ์ฌํ์ ๋ฐ๊ฒฌ๋ ๊ฒฐํจ์ ๋ค์ ์คํํ์ฌ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง ํ์ธํ๋ ๊ณผ์ .
- โฃ ํ๋ฆผ: ๊ฒฐํจ ์ข ๋ฃ๋ ๊ฒฐํจ์ด ํด๊ฒฐ๋์์ ๋ ์ต์ข ์ ์ผ๋ก ๋ง๋ฌด๋ฆฌํ๋ ๋จ๊ณ.
๐ฅ ์จ๋ผ์ธ Pretest ๋๋น ํต์ฌ ์ ๋ฆฌ
โ
๋ธ๋๋ฐ์ค ํ
์คํธ vs ํ์ดํธ๋ฐ์ค ํ
์คํธ ์ฐจ์ด ์ดํดํ๊ธฐ
โ
ํ๊ท ํ
์คํธ, ์ฑ๋ฅ ํ
์คํธ, SQL Injection ๋ณด์ ํ
์คํธ ๊ฐ๋
์์ง
โ
ํ
์คํธ ํ๊ฒฝ ๊ฒฉ๋ฆฌ์ ์ค์์ฑ๊ณผ ์ด์ ํ๊ฒฝ ๋ถ๋ฆฌ ์ด์ ์ดํดํ๊ธฐ
โ
ํ
์คํธ ์๋ํ ์ ๋ต – 100% ์๋ํ๋ ๋ถ๊ฐ๋ฅํ๋ฉฐ ๋ฐ๋ณต์ ์ธ ํ
์คํธ๋ถํฐ ์ ์ฉ
โ
๊ฒฐํจ ์ฌํ์ด ๋ฌด์์ธ์ง ๋ช
ํํ ์ดํดํ๊ณ , ๊ฒฐํจ ์ถ์ ํ๋ก์ธ์ค ์ตํ๊ธฐ
14. ์ํํธ์จ์ด ๊ฐ๋ฐ ์๋ช ์ฃผ๊ธฐ(SDLC) ๋ฌธ์
๋ฌธ์ 14. ์ํํธ์จ์ด ๊ฐ๋ฐ ์๋ช ์ฃผ๊ธฐ(SDLC)์์ ํ ์คํธ๋ฅผ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ์์ํ๋ ๊ฐ๋ฐ ๋ชจ๋ธ์?
- V-๋ชจ๋ธ (V-Model)
- ํญํฌ์ ๋ชจ๋ธ (Waterfall Model)
- ์ ์์ผ ๋ชจ๋ธ (Agile Model)
- ๋์ ํ ๋ชจ๋ธ (Spiral Model)
โ ์ ๋ต: โข ์ ์์ผ ๋ชจ๋ธ (Agile Model)
๐ ํด์ค:
- โ V-๋ชจ๋ธ: ๊ฐ๋ฐ ๋จ๊ณ๋ง๋ค ๋์ํ๋ ํ ์คํธ ๋จ๊ณ๊ฐ ์กด์ฌํ์ง๋ง, ๊ธฐ๋ณธ์ ์ผ๋ก ์ค๊ณ๊ฐ ์๋ฃ๋ ํ ํ ์คํธ๊ฐ ์์๋จ.
- โก ํญํฌ์ ๋ชจ๋ธ: ํ ๋จ๊ณ๊ฐ ๋๋์ผ ๋ค์ ๋จ๊ณ๊ฐ ์งํ๋๋ฏ๋ก ํ ์คํธ๋ ๊ฐ๋ฐ์ด ์๋ฃ๋ ํ ์์๋จ.
- โข ์ ๋ต – ์ ์์ผ ๋ชจ๋ธ: ์ ์์ผ ๊ฐ๋ฐ์์๋ "Shift-Left Testing" ๊ฐ๋ ์ ์ ์ฉํ์ฌ ๊ฐ๋ฐ ์ด๊ธฐ๋ถํฐ ์ง์์ ์ผ๋ก ํ ์คํธ๊ฐ ์ํ๋จ.
- โฃ ๋์ ํ ๋ชจ๋ธ: ๋ฆฌ์คํฌ ๋ถ์์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐ๊ณผ ํ ์คํธ๊ฐ ๋ฐ๋ณต๋์ง๋ง, ํ ์คํธ๊ฐ ๊ฐ๋ฐ ์ด๊ธฐ์ ํฌํจ๋์ง๋ ์์.
15. ๊ฒฐํจ ์ฌ๊ฐ๋ & ์ฐ์ ์์ ๋ฌธ์
๋ฌธ์ 15. ๋ค์ ์ค "์ฌ๊ฐ๋(Severity)๋ ๋์ง๋ง, ์ฐ์ ์์(Priority)๋ ๋ฎ์" ๊ฒฐํจ ์ฌ๋ก๋ก ์ ์ ํ ๊ฒ์?
- ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ด ๋์ํ์ง ์์ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ํ ์ ์์.
- ํน์ ๋ธ๋ผ์ฐ์ (์: Internet Explorer)์์ UI๊ฐ ๊นจ์ง์ง๋ง, ์๋น์ค ์ฌ์ฉ์๋ ๋ฌธ์ ๊ฐ ์์.
- ์ฌ์ฉ์๊ฐ ๊ฒฐ์ ์ ์นด๋ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ฉด ์ฑ์ด ๊ฐ์ ์ข ๋ฃ๋จ.
- ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ ์, ํ์ธ ๋ฉ์์ง๊ฐ ํ์๋์ง ์์.
โ ์ ๋ต: โก ํน์ ๋ธ๋ผ์ฐ์ (์: Internet Explorer)์์ UI๊ฐ ๊นจ์ง์ง๋ง, ์๋น์ค ์ฌ์ฉ์๋ ๋ฌธ์ ๊ฐ ์์.
๐ ํด์ค:
- โ ํ๋ฆผ: ๋ก๊ทธ์ธ ๋ถ๊ฐ๋ฅ → ์ฌ์ฉ์๊ฐ ์์คํ ์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ์ฌ๊ฐ๋(Severity) ๋๊ณ , ์ฐ์ ์์(Priority)๋ ๋์.
- โก ์ ๋ต: UI๊ฐ ๊นจ์ง๋ ๋ฌธ์ ๋ ์๊ฐ์ ์ธ ์ํฅ๋ง ์์ ๋ฟ, ๊ธฐ๋ฅ์ ์ผ๋ก๋ ๋ฌธ์ ๊ฐ ์์ผ๋ฏ๋ก ์ฐ์ ์์๊ฐ ๋ฎ์ ์ ์์.
- โข ํ๋ฆผ: ๊ฒฐ์ ์ ์ฑ์ด ์ข ๋ฃ๋๋ ๋ฌธ์ → ๋น์ฆ๋์ค์ ์ผ๋ก ์ค์ํ ๊ธฐ๋ฅ์ด๋ฏ๋ก ์ฐ์ ์์๊ฐ ๋์.
- โฃ ํ๋ฆผ: ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ ํ ํ์ธ ๋ฉ์์ง๊ฐ ์์ผ๋ฉด UX์ ์ํฅ์ ์ฃผ์ง๋ง, ๊ธด๊ธ ์์ ์ด ํ์ํ์ง๋ ์์ (์ค๊ฐ ์ฐ์ ์์ ๊ฐ๋ฅ).
16. API ํ ์คํธ ๋ฌธ์
๋ฌธ์ 16. REST API์์ HTTP ์ํ ์ฝ๋ 404 Not Found๊ฐ ์๋ฏธํ๋ ๊ฒ์?
- ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ดํดํ ์ ์์.
- ์์ฒญํ ๋ฆฌ์์ค(์: URL)๊ฐ ์กด์ฌํ์ง ์์.
- ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋จ.
- ์๋ฒ ๋ด๋ถ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํจ.
โ ์ ๋ต: โก ์์ฒญํ ๋ฆฌ์์ค(์: URL)๊ฐ ์กด์ฌํ์ง ์์.
๐ ํด์ค:
- โ ํ๋ฆผ: ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ดํดํ ์ ์๋ ๊ฒฝ์ฐ 400 Bad Request ๋ฐํ.
- โก ์ ๋ต: 404 Not Found๋ ์์ฒญํ ๋ฆฌ์์ค(ํ์ผ, ํ์ด์ง ๋ฑ)๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ ๋ฐํ๋จ.
- โข ํ๋ฆผ: ์์ฒญ์ด ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๋์์ผ๋ฉด 200 OK ๋ฐํ.
- โฃ ํ๋ฆผ: ์๋ฒ ๋ด๋ถ ์ค๋ฅ๋ 500 Internal Server Error ๋ฐํ.
17. ํ์์ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 17. ํ์์ ํ ์คํธ(Exploratory Testing)์ ๊ฐ์ฅ ํฐ ์ฅ์ ์?
- ํ ์คํธ ์ผ์ด์ค๊ฐ ๋ช ํํ๊ฒ ์ ์๋์ด ์์ด ์คํํ๊ธฐ ์ฝ๋ค.
- ์์์น ๋ชปํ ๊ฒฐํจ์ ๋ฐ๊ฒฌํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
- ์๋ํํ๊ธฐ ์ฌ์ ํ ์คํธ ๋น์ฉ์ ์ ๊ฐํ ์ ์๋ค.
- ๋ชจ๋ ์ ๋ ฅ๊ฐ ์กฐํฉ์ ํ ์คํธํ ์ ์๋ค.
โ ์ ๋ต: โก ์์์น ๋ชปํ ๊ฒฐํจ์ ๋ฐ๊ฒฌํ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
๐ ํด์ค:
- โ ํ๋ฆผ: ํ์์ ํ ์คํธ๋ ์ฌ์ ์ ์ ํด์ง ํ ์คํธ ์ผ์ด์ค ์์ด ํ ์คํฐ์ ๊ฒฝํ๊ณผ ์ง๊ด์ ๋ฐํ์ผ๋ก ์ํํ๋ ํ ์คํธ.
- โก ์ ๋ต: ์์ธกํ์ง ๋ชปํ ์ฌ์ฉ์ ํ๋์ ์๋ฎฌ๋ ์ด์ ํ ์ ์์ผ๋ฏ๋ก, ์์์น ๋ชปํ ๊ฒฐํจ์ ๋ฐ๊ฒฌํ๋ ๋ฐ ํจ๊ณผ์ .
- โข ํ๋ฆผ: ํ์์ ํ ์คํธ๋ ์๋ํํ๊ธฐ ์ด๋ ค์.
- โฃ ํ๋ฆผ: ๋ชจ๋ ์ ๋ ฅ๊ฐ ์กฐํฉ์ ํ ์คํธํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ฉฐ, ํน์ ์๋๋ฆฌ์ค์์๋ง ์ํ ๊ฐ๋ฅ.
18. CI/CD ํ์ดํ๋ผ์ธ ๋ฌธ์
๋ฌธ์ 18. ์ง์์ ํตํฉ(Continuous Integration, CI)์์ ํ ์คํธ ์๋ํ๊ฐ ์ค์ํ ์ด์ ๋?
- ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์ด์ ํ๊ฒฝ์ ์ฆ์ ๋ฐฐํฌ๋๋๋ก ํ๊ธฐ ์ํด์.
- ๊ฐ๋ฐ์ ๊ฐ ์ฝ๋ ์ถฉ๋์ ๋ฐฉ์งํ๊ธฐ ์ํด์.
- ์ฝ๋ ๋ณ๊ฒฝ์ด ๊ธฐ์กด ๊ธฐ๋ฅ์ ์ํฅ์ ์ฃผ๋์ง ๋น ๋ฅด๊ฒ ๊ฒ์ฆํ๊ธฐ ์ํด์.
- ํ ์คํธ๋ฅผ ์ํํ ํ์ ์์ด ๋ฐฐํฌํ ์ ์๋๋ก ํ๊ธฐ ์ํด์.
โ ์ ๋ต: โข ์ฝ๋ ๋ณ๊ฒฝ์ด ๊ธฐ์กด ๊ธฐ๋ฅ์ ์ํฅ์ ์ฃผ๋์ง ๋น ๋ฅด๊ฒ ๊ฒ์ฆํ๊ธฐ ์ํด์.
๐ ํด์ค:
- โ ํ๋ฆผ: CI/CD์์๋ ์ด์ ๋ฐฐํฌ ์ด์ ์ ๊ฒ์ฆ ๊ณผ์ ์ ๊ฑฐ์น๋ฉฐ, CI๋ ๋ฐฐํฌ๋ณด๋ค๋ ์๋ ํ ์คํธ ๋ฐ ์ฝ๋ ํตํฉ์ ์ง์ค๋จ.
- โก ํ๋ฆผ: ์ฝ๋ ์ถฉ๋ ๋ฐฉ์ง๋ ๋ฒ์ ๊ด๋ฆฌ ์์คํ (Git)์ด ๋ด๋นํ๋ฉฐ, CI์ ์ฃผ์ ๋ชฉ์ ์ ์๋.
- โข ์ ๋ต: CI์์๋ ์๋ก์ด ์ฝ๋๊ฐ ๊ธฐ์กด ๊ธฐ๋ฅ์ ์ํฅ์ ์ฃผ์ง ์๋์ง ํ์ธํ๊ธฐ ์ํด ์๋ํ๋ ํ ์คํธ๊ฐ ํ์์ .
- โฃ ํ๋ฆผ: CI๋ ํ ์คํธ๋ฅผ ์๋ํํ์ฌ ๋ฌธ์ ๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ์ง๋ง, ํ ์คํธ๋ฅผ ์ํํ์ง ์๊ณ ๋ฐฐํฌํ๋ ๊ฒ์ ์ํํจ.
19. ํ ์คํธ ํ๊ฒฝ ๋ฌธ์
๋ฌธ์ 19. ์ด์ ํ๊ฒฝ๊ณผ ๋์ผํ ํ ์คํธ ํ๊ฒฝ์ ๊ตฌ์ถํ๋ ๊ฐ์ฅ ํฐ ์ด์ ๋?
- ๊ฐ๋ฐ์์ QA๊ฐ ๋์ผํ ํ๊ฒฝ์์ ์์ ํ ์ ์๋๋ก ํ๊ธฐ ์ํด.
- ํ ์คํธ ํ๊ฒฝ์์ ๋ฐ์ํ ๋ฌธ์ ๊ฐ ์ด์ ํ๊ฒฝ์์๋ ๋์ผํ๊ฒ ์ฌํ๋๋๋ก ํ๊ธฐ ์ํด.
- ํ ์คํธ ๋น์ฉ์ ์ ๊ฐํ๊ธฐ ์ํด.
- ์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ง์ ์ฌ์ฉํ ์ ์๋๋ก ํ๊ธฐ ์ํด.
โ ์ ๋ต: โก ํ ์คํธ ํ๊ฒฝ์์ ๋ฐ์ํ ๋ฌธ์ ๊ฐ ์ด์ ํ๊ฒฝ์์๋ ๋์ผํ๊ฒ ์ฌํ๋๋๋ก ํ๊ธฐ ์ํด.
๐ ํด์ค:
- โ ํ๋ฆผ: ๊ฐ๋ฐ์์ QA๊ฐ ๋์ผํ ํ๊ฒฝ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ชฉ์ ์ ์๋๋ฉฐ, ์ด์ ํ๊ฒฝ๊ณผ ๋์ผํ๊ฒ ํ ์คํธํ๋ ๊ฒ์ด ์ค์ํจ.
- โก ์ ๋ต: ์ด์ ํ๊ฒฝ๊ณผ ๋์ผํ ํ๊ฒฝ์ ๊ตฌ์ถํ๋ฉด ํ ์คํธ ์ ๋ฐ๊ฒฌ๋ ๊ฒฐํจ์ด ์ด์์์๋ ๋์ผํ๊ฒ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋์์ง.
- โข ํ๋ฆผ: ์คํ๋ ค ํ ์คํธ ํ๊ฒฝ์ ์ด์ ํ๊ฒฝ๊ณผ ์ ์ฌํ๊ฒ ๋ง๋ค๋ฉด ๋น์ฉ์ด ์ฆ๊ฐํ ์ ์์.
- โฃ ํ๋ฆผ: ์ด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ง์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ณด์ ๋ฐ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ฌธ์ ๋ฅผ ์ด๋ํ ์ ์์.
๐ฅ ์จ๋ผ์ธ Pretest ๋๋น ํต์ฌ ์ ๋ฆฌ (์ถ๊ฐ)
โ
SDLC์์ ํ
์คํธ๋ฅผ ๊ฐ์ฅ ๋น ๋ฅด๊ฒ ์์ํ๋ ๊ฐ๋ฐ ๋ชจ๋ธ์ ์ ์์ผ ๋ชจ๋ธ
โ
์ฌ๊ฐ๋(Severity) vs ์ฐ์ ์์(Priority) ์ฐจ์ด ๋ฐ ์ฌ๋ก ๋ถ์
โ
REST API ์ํ ์ฝ๋ (404 Not Found, 500 Internal Server Error ๋ฑ) ์ดํด
โ
ํ์์ ํ
์คํธ๋ ์์์น ๋ชปํ ๊ฒฐํจ์ ๋ฐ๊ฒฌํ๋ ๋ฐ ํจ๊ณผ์
โ
CI/CD์์ ํ
์คํธ ์๋ํ๊ฐ ์ค์ํ ์ด์ – ๋น ๋ฅธ ํ๊ท ํ
์คํธ ๊ฐ๋ฅ
โ
์ด์ ํ๊ฒฝ๊ณผ ๋์ผํ ํ
์คํธ ํ๊ฒฝ ๊ตฌ์ถ์ ์ด์ – ๋ฌธ์ ์ฌํ์ฑ ํ๋ณด
20. ํ์ดํธ๋ฐ์ค ํ ์คํธ ๋ฌธ์
๋ฌธ์ 20. ๋ค์ ์ค ํ์ดํธ๋ฐ์ค ํ ์คํธ ๊ธฐ๋ฒ์ ํด๋นํ๋ ๊ฒ์?
- ๋์น ๋ถํ (Equivalence Partitioning)
- ๋ฌธ์ฅ ์ปค๋ฒ๋ฆฌ์ง (Statement Coverage)
- ๊ฒฝ๊ณ๊ฐ ๋ถ์ (Boundary Value Analysis)
- ํ์์ ํ ์คํธ (Exploratory Testing)
โ ์ ๋ต: โก ๋ฌธ์ฅ ์ปค๋ฒ๋ฆฌ์ง (Statement Coverage)
๐ ํด์ค:
- ํ์ดํธ๋ฐ์ค ํ ์คํธ๋ ์ฝ๋ ๋ด๋ถ ๋ก์ง์ ๋ถ์ํ์ฌ ํ ์คํธํ๋ ๊ธฐ๋ฒ์ด์ผ.
- โ , โข, โฃ ํ๋ฆผ: ๋์น ๋ถํ , ๊ฒฝ๊ณ๊ฐ ๋ถ์, ํ์์ ํ ์คํธ๋ ๋ธ๋๋ฐ์ค ํ ์คํธ ๊ธฐ๋ฒ์ ํด๋น.
- โก ์ ๋ต: ๋ฌธ์ฅ ์ปค๋ฒ๋ฆฌ์ง๋ ์ฝ๋์ ๋ชจ๋ ๋ฌธ์ฅ์ด ์ต์ํ ํ ๋ฒ์ ์คํ๋๋๋ก ๋ณด์ฅํ๋ ํ์ดํธ๋ฐ์ค ํ ์คํธ ๊ธฐ๋ฒ.
21. ์ ์์ผ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 21. ์ ์์ผ(Agile) ํ๊ฒฝ์์ ํ ์คํธ๋ฅผ ์ํํ ๋ ๊ฐ์ฅ ์ค์ํ ์์น์?
- ๊ฐ๋ฐ์ด ๋๋ ํ ์ต์ข ์ ์ผ๋ก ํ ์คํธ๋ฅผ ์ํํ๋ค.
- ํ ์คํธ๋ ๊ฐ๋ฐํ๊ณผ QAํ์ด ์์ ํ ๋ถ๋ฆฌ๋ ์ํ์์ ์ํํด์ผ ํ๋ค.
- ์๋ํ ํ ์คํธ๋ ์ ์์ผ ๊ฐ๋ฐ์์๋ ํ์ํ์ง ์๋ค.
- ์งง์ ๊ฐ๋ฐ ์ฃผ๊ธฐ(Sprint)๋ง๋ค ์ง์์ ์ผ๋ก ํ ์คํธ๋ฅผ ์ํํ๋ค.
โ ์ ๋ต: โฃ ์งง์ ๊ฐ๋ฐ ์ฃผ๊ธฐ(Sprint)๋ง๋ค ์ง์์ ์ผ๋ก ํ ์คํธ๋ฅผ ์ํํ๋ค.
๐ ํด์ค:
- โ ํ๋ฆผ: ์ ์์ผ์์๋ ๊ฐ๋ฐ๊ณผ ํ ์คํธ๊ฐ ๋์์ ์งํ๋จ (Shift-Left Testing).
- โก ํ๋ฆผ: ์ ์์ผ์์๋ ๊ฐ๋ฐํ๊ณผ QAํ์ด ๊ธด๋ฐํ๊ฒ ํ์ ํด์ผ ํจ.
- โข ํ๋ฆผ: ์๋ํ ํ ์คํธ๋ ์ ์์ผ ๊ฐ๋ฐ์์ ๋ฐ๋์ ํ์ํจ (ํ๊ท ํ ์คํธ๋ฅผ ์๋ํํด์ผ ๋น ๋ฅธ ๋ฐฐํฌ ๊ฐ๋ฅ).
- โฃ ์ ๋ต: ์ ์์ผ์์๋ ๋ฐ๋ณต์ ์ธ ๊ฐ๋ฐ ์ฃผ๊ธฐ(Sprint)๋ง๋ค ์ง์์ ์ผ๋ก ํ ์คํธ๋ฅผ ์ํํ๋ ๊ฒ์ด ํต์ฌ ์์น.
22. ๊ฒฐํจ ์ถ์ ๋๊ตฌ ๋ฌธ์
๋ฌธ์ 22. ๋ค์ ์ค ์ํํธ์จ์ด ๊ฒฐํจ์ ๊ด๋ฆฌํ๋ ๋ฐ ๊ฐ์ฅ ์ ํฉํ ๋๊ตฌ๋?
- Jenkins
- Postman
- Jira
- Selenium
โ ์ ๋ต: โข Jira
๐ ํด์ค:
- โ ํ๋ฆผ: Jenkins๋ CI/CD ์๋ํ ๋๊ตฌ.
- โก ํ๋ฆผ: Postman์ API ํ ์คํธ ๋๊ตฌ.
- โข ์ ๋ต: Jira๋ ์ํํธ์จ์ด ๊ฒฐํจ์ ์ถ์ ํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋๊ตฌ.
- โฃ ํ๋ฆผ: Selenium์ UI ์๋ํ ํ ์คํธ ๋๊ตฌ.
23. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฌด๊ฒฐ์ฑ ๋ฌธ์
๋ฌธ์ 23. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํธ๋์ญ์ ์ด ACID ์์น์ ์ค์ํด์ผ ํ๋ ์ด์ ๋?
- SQL Injection ๊ณต๊ฒฉ์ ๋ฐฉ์ดํ๊ธฐ ์ํด์
- ๋ฐ์ดํฐ๊ฐ ์์ค๋์ง ์๊ณ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด์
- ์ฟผ๋ฆฌ ์คํ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํด์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํด์
โ ์ ๋ต: โก ๋ฐ์ดํฐ๊ฐ ์์ค๋์ง ์๊ณ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด์
๐ ํด์ค:
- ACID ์์น์ด๋?
- Atomicity (์์์ฑ): ํธ๋์ญ์ ์ด ์์ ํ ์ํ๋๊ฑฐ๋ ์ ํ ์ํ๋์ง ์์์ผ ํจ.
- Consistency (์ผ๊ด์ฑ): ํธ๋์ญ์ ์ด ์คํ๋ ํ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๊ฐ ์ ์ง๋์ด์ผ ํจ.
- Isolation (๊ณ ๋ฆฝ์ฑ): ํธ๋์ญ์ ์ด ๋์์ ์คํ๋ ๋ ์๋ก ๊ฐ์ญํ์ง ์๋๋ก ๋ณด์ฅ.
- Durability (์ง์์ฑ): ํธ๋์ญ์ ์ด ์๋ฃ๋๋ฉด ๊ฒฐ๊ณผ๊ฐ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ.
- โ ํ๋ฆผ: SQL Injection ๋ฐฉ์ง๋ ๋ณ๋์ ๋ณด์ ๊ธฐ๋ฒ์ด ํ์ํจ.
- โข ํ๋ฆผ: ACID ์์น์ ์ฑ๋ฅ์ด ์๋ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ ์ญํ .
- โฃ ํ๋ฆผ: ๋ฐ์ดํฐ๋ฒ ์ด์ค ํฌ๊ธฐ์๋ ๊ด๋ จ์ด ์์.
24. UI ํ ์คํธ ๋ฌธ์
๋ฌธ์ 24. UI ํ ์คํธ๋ฅผ ์๋ํํ๋ ๊ฐ์ฅ ์ ์ ํ ๋๊ตฌ๋?
- JMeter
- Selenium
- SonarQube
- Burp Suite
โ ์ ๋ต: โก Selenium
๐ ํด์ค:
- โ ํ๋ฆผ: JMeter๋ ์ฑ๋ฅ ํ ์คํธ ๋๊ตฌ.
- โก ์ ๋ต: Selenium์ ์น UI ์๋ํ ํ ์คํธ ๋๊ตฌ๋ก, ๋ฒํผ ํด๋ฆญ, ํผ ์ ๋ ฅ ๋ฑ์ ์๋ํํ ์ ์์.
- โข ํ๋ฆผ: SonarQube๋ ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ.
- โฃ ํ๋ฆผ: Burp Suite๋ ๋ณด์ ํ ์คํธ ๋๊ตฌ.
25. ๋ณด์ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 25. OWASP Top 10์์ ๊ฐ์ฅ ์ค์ํ ๋ณด์ ์ทจ์ฝ์ ์ค ํ๋์ธ "XSS(Cross-Site Scripting)"์ ์ฃผ์ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ์?
- SQL Injection์ ์ด์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ ๋ณด๋ฅผ ๋นผ๋ด๋ ๊ณต๊ฒฉ
- ์ฌ์ฉ์ ์ ๋ ฅ์ ๊ฒ์ฆํ์ง ์๊ณ ์น ํ์ด์ง์ ์ ์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ ํ๋ ๊ณต๊ฒฉ
- ์ํธํ๋์ง ์์ ๋คํธ์ํฌ๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ํ์ทจํ๋ ๊ณต๊ฒฉ
- ๊ด๋ฆฌ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ฌด์ฐจ๋ณ ๋์ (Brute Force)ํ์ฌ ๋ก๊ทธ์ธํ๋ ๊ณต๊ฒฉ
โ ์ ๋ต: โก ์ฌ์ฉ์ ์ ๋ ฅ์ ๊ฒ์ฆํ์ง ์๊ณ ์น ํ์ด์ง์ ์ ์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ์ ํ๋ ๊ณต๊ฒฉ
๐ ํด์ค:
- โ ํ๋ฆผ: SQL Injection์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐ์ ๊ณต๊ฒฉ.
- โก ์ ๋ต: XSS(Cross-Site Scripting)๋ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ ํํฐ๋งํ์ง ์์ ์ ์ฑ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ.
- โข ํ๋ฆผ: ์ํธํ๋์ง ์์ ๋คํธ์ํฌ์์ ๋ฐ์ดํฐ๋ฅผ ํ์ทจํ๋ ๊ฒ์ ์ค๋ํ ๊ณต๊ฒฉ.
- โฃ ํ๋ฆผ: ๋น๋ฐ๋ฒํธ๋ฅผ ๋ฌด์ฐจ๋ณ ๋์ ํ๋ ๊ณต๊ฒฉ์ Brute Force ๊ณต๊ฒฉ.
26. ํ ์คํธ ์ข ๋ฃ ๊ธฐ์ค ๋ฌธ์
๋ฌธ์ 26. ๋ค์ ์ค ํ ์คํธ ์ข ๋ฃ ๊ธฐ์ค(Exit Criteria)์ ํด๋นํ์ง ์๋ ๊ฒ์?
- ํ ์คํธ ์ผ์ด์ค์ 100%๊ฐ ์คํ๋์๋๊ฐ?
- ์ฃผ์ ๊ฒฐํจ์ด ๋ชจ๋ ํด๊ฒฐ๋์๋๊ฐ?
- ํ๋ก์ ํธ ์ผ์ ์ด ์ข ๋ฃ๋์๋๊ฐ?
- ํ ์คํธ ํ๊ฒฝ์ด ์ด์ ํ๊ฒฝ๊ณผ ๋์ผํ๊ฐ?
โ ์ ๋ต: โฃ ํ ์คํธ ํ๊ฒฝ์ด ์ด์ ํ๊ฒฝ๊ณผ ๋์ผํ๊ฐ?
๐ ํด์ค:
- ํ ์คํธ ์ข ๋ฃ ๊ธฐ์ค(Exit Criteria) ์ ํ ์คํธ๋ฅผ ์๋ฃํ ์ ์๋ ์กฐ๊ฑด์ ์ ์ํ๋ ๊ฒ.
- โ ์ ๋ต: ๋ชจ๋ ํ ์คํธ ์ผ์ด์ค๊ฐ ์คํ๋์๋์ง ํ์ธํด์ผ ํจ.
- โก ์ ๋ต: ์ฃผ์ ๊ฒฐํจ์ด ํด๊ฒฐ๋์๋์ง๋ ํ ์คํธ ์ข ๋ฃ ๊ธฐ์ค ์ค ํ๋.
- โข ์ ๋ต: ํ๋ก์ ํธ ์ผ์ ์ ๋ง์ถฐ ํ ์คํธ๊ฐ ์ข ๋ฃ๋๋ ๊ฒฝ์ฐ๋ ์์.
- โฃ ํ๋ฆผ: ํ ์คํธ ํ๊ฒฝ๊ณผ ์ด์ ํ๊ฒฝ์ด ๋ฐ๋์ ๋์ผํด์ผ ํ๋ ๊ฒ์ ์๋.
๐ฅ Pretest ๋๋น ์ถ๊ฐ ์ ๋ฆฌ
โ
ํ์ดํธ๋ฐ์ค ํ
์คํธ vs ๋ธ๋๋ฐ์ค ํ
์คํธ ์ฐจ์ด ์ดํด
โ
์ ์์ผ ๋ชจ๋ธ์์๋ ์ง์์ ์ธ ํ
์คํธ๊ฐ ํต์ฌ ์์น
โ
๊ฒฐํจ ์ถ์ ๋๊ตฌ (Jira ๋ฑ)์ ์ญํ ์์ง
โ
๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์
์ ACID ์์น ์ดํด
โ
UI ํ
์คํธ ์๋ํ ๋๊ตฌ (Selenium) ์ดํด
โ
๋ณด์ ํ
์คํธ์์ XSS(Cross-Site Scripting) ๊ฐ๋
์์ง
โ
ํ
์คํธ ์ข
๋ฃ ๊ธฐ์ค(Exit Criteria) ๋ช
ํํ ์ดํด
27. ์ ์ ํ ์คํธ vs ๋์ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 27. ๋ค์ ์ค ์ ์ ํ ์คํธ(Static Testing) ๊ธฐ๋ฒ์ ํด๋นํ๋ ๊ฒ์?
- ํ์์ ํ ์คํธ (Exploratory Testing)
- ์ฝ๋ ๋ฆฌ๋ทฐ (Code Review)
- ์ฑ๋ฅ ํ ์คํธ (Performance Testing)
- UI ํ ์คํธ (UI Testing)
โ ์ ๋ต: โก ์ฝ๋ ๋ฆฌ๋ทฐ (Code Review)
๐ ํด์ค:
- ์ ์ ํ ์คํธ(Static Testing): ์ฝ๋๋ฅผ ์คํํ์ง ์๊ณ ๊ฒฐํจ์ ๋ฐ๊ฒฌํ๋ ํ ์คํธ ๊ธฐ๋ฒ.
- โ , โข, โฃ ํ๋ฆผ: ํ์์ ํ ์คํธ, ์ฑ๋ฅ ํ ์คํธ, UI ํ ์คํธ๋ ๋์ ํ ์คํธ(Dynamic Testing) ์ ์ํจ.
- โก ์ ๋ต: ์ฝ๋ ๋ฆฌ๋ทฐ๋ ์์ค ์ฝ๋๋ฅผ ์คํํ์ง ์๊ณ ๊ฐ๋ฐ์๊ฐ ๊ฒํ ํ๋ ๊ณผ์ ์ด๋ฏ๋ก ์ ์ ํ ์คํธ์ ํด๋น.
28. ํ ์คํธ ์ผ์ด์ค์ ํ ์คํธ ์๋๋ฆฌ์ค ๋ฌธ์
๋ฌธ์ 28. ํ ์คํธ ์๋๋ฆฌ์ค(Test Scenario)์ ํ ์คํธ ์ผ์ด์ค(Test Case)์ ์ฐจ์ด๋ก ์ ์ ํ ๊ฒ์?
- ํ ์คํธ ์ผ์ด์ค๋ ํ ์คํธ ์๋๋ฆฌ์ค๋ณด๋ค ๋ ํฌ๊ด์ ์ธ ๊ฐ๋ ์ด๋ค.
- ํ ์คํธ ์๋๋ฆฌ์ค๋ ์ฌ๋ฌ ๊ฐ์ ํ ์คํธ ์ผ์ด์ค๋ฅผ ํฌํจํ ์ ์๋ค.
- ํ ์คํธ ์๋๋ฆฌ์ค๋ ํ ์คํธ ์ผ์ด์ค๋ณด๋ค ๋ ๊ตฌ์ฒด์ ์ด๋ค.
- ํ ์คํธ ์ผ์ด์ค๋ ๊ธฐ๋ฅ ํ ์คํธ์๋ง ์ฌ์ฉ๋๋ฉฐ, ํ ์คํธ ์๋๋ฆฌ์ค๋ ์ฑ๋ฅ ํ ์คํธ์ ์ฌ์ฉ๋๋ค.
โ ์ ๋ต: โก ํ ์คํธ ์๋๋ฆฌ์ค๋ ์ฌ๋ฌ ๊ฐ์ ํ ์คํธ ์ผ์ด์ค๋ฅผ ํฌํจํ ์ ์๋ค.
๐ ํด์ค:
- ํ ์คํธ ์๋๋ฆฌ์ค(Test Scenario): ์ํํธ์จ์ด๋ฅผ ํ ์คํธํ ์ ์ฒด์ ์ธ ํ๋ฆ์ ์ ์ํ๋ ํฌ๊ด์ ์ธ ๊ฐ๋ .
- ํ ์คํธ ์ผ์ด์ค(Test Case): ํ ์คํธ ์๋๋ฆฌ์ค๋ฅผ ์ํํ๊ธฐ ์ํ ๊ตฌ์ฒด์ ์ธ ์ ๋ ฅ๊ฐ, ์์ ๊ฒฐ๊ณผ, ์คํ ์ ์ฐจ ๋ฑ์ ํฌํจ.
- โ ํ๋ฆผ: ํ ์คํธ ์๋๋ฆฌ์ค๊ฐ ํ ์คํธ ์ผ์ด์ค๋ณด๋ค ๋ ํฌ๊ด์ ์ธ ๊ฐ๋ ์.
- โข ํ๋ฆผ: ํ ์คํธ ์ผ์ด์ค๊ฐ ๋ ๊ตฌ์ฒด์ ์ด๋ฉฐ, ์๋๋ฆฌ์ค๋ ์ ์ฒด์ ์ธ ํ๋ฆ์ ์ ์ํจ.
- โฃ ํ๋ฆผ: ํ ์คํธ ์ผ์ด์ค๋ ๋ชจ๋ ์ ํ์ ํ ์คํธ์์ ์ฌ์ฉ๋ ์ ์์.
29. ๋น๊ธฐ๋ฅ ํ ์คํธ vs ๊ธฐ๋ฅ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 29. ๋ค์ ์ค ๋น๊ธฐ๋ฅ ํ ์คํธ(Non-Functional Testing)์ ํด๋นํ๋ ๊ฒ์?
- ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ด ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ์ธํ๋ ํ ์คํธ
- ๊ฒฐ์ ์์คํ ์์ ์นด๋ ๋ฒํธ ์ ํจ์ฑ์ ๊ฒ์ฆํ๋ ํ ์คํธ
- ์์คํ ์ด 1,000๋ช ์ ๋์ ์ฌ์ฉ์๋ฅผ ์ฒ๋ฆฌํ ์ ์๋์ง ํ์ธํ๋ ํ ์คํธ
- ํ์๊ฐ์ ์ ํ์ ์ ๋ ฅ๊ฐ์ ์ฒดํฌํ๋ ํ ์คํธ
โ ์ ๋ต: โข ์์คํ ์ด 1,000๋ช ์ ๋์ ์ฌ์ฉ์๋ฅผ ์ฒ๋ฆฌํ ์ ์๋์ง ํ์ธํ๋ ํ ์คํธ
๐ ํด์ค:
- ๊ธฐ๋ฅ ํ ์คํธ(Functional Testing): ์ํํธ์จ์ด๊ฐ ๊ธฐ๋ฅ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ๋์ง ํ์ธํ๋ ํ ์คํธ.
- ๋น๊ธฐ๋ฅ ํ ์คํธ(Non-Functional Testing): ์ฑ๋ฅ, ๋ณด์, ์์ ์ฑ ๋ฑ ๊ธฐ๋ฅ ์ด์ธ์ ์์๋ฅผ ๊ฒ์ฆํ๋ ํ ์คํธ.
- โ , โก, โฃ ํ๋ฆผ: ๋ชจ๋ ๊ธฐ๋ฅ ํ ์คํธ์ ํด๋น.
- โข ์ ๋ต: ๋ถํ ํ ์คํธ(Load Testing)์ ์ผ์ข ์ผ๋ก, ๋น๊ธฐ๋ฅ ํ ์คํธ์ ํด๋นํจ.
30. ํ๊ท ํ ์คํธ vs ์ฌํ ์คํธ ๋ฌธ์
๋ฌธ์ 30. ๋ค์ ์ค ํ๊ท ํ ์คํธ(Regression Testing)์ ์ฌํ ์คํธ(Retesting)์ ์ฐจ์ด์ ๋ํ ์ค๋ช ์ผ๋ก ์ ์ ํ ๊ฒ์?
- ํ๊ท ํ ์คํธ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ํ ์คํธํ๋ ๊ฒ์ด๊ณ , ์ฌํ ์คํธ๋ ๊ธฐ์กด ๊ธฐ๋ฅ์ ๋ค์ ํ ์คํธํ๋ ๊ฒ์ด๋ค.
- ํ๊ท ํ ์คํธ๋ ๋ณ๊ฒฝ๋ ์ฝ๋๊ฐ ๊ธฐ์กด ๊ธฐ๋ฅ์ ์ํฅ์ ์ฃผ์ง ์์๋์ง ํ์ธํ๋ ๊ฒ์ด๊ณ , ์ฌํ ์คํธ๋ ํน์ ๊ฒฐํจ์ด ์์ ๋์๋์ง ํ์ธํ๋ ๊ฒ์ด๋ค.
- ํ๊ท ํ ์คํธ๋ ๊ธฐ๋ฅ ํ ์คํธ์ ์ผ๋ถ์ด๋ฉฐ, ์ฌํ ์คํธ๋ ์ฑ๋ฅ ํ ์คํธ์ ์ผ๋ถ์ด๋ค.
- ํ๊ท ํ ์คํธ์ ์ฌํ ์คํธ๋ ๊ฐ์ ์๋ฏธ์ด๋ฉฐ, ์ฉ์ด๋ง ๋ค๋ฅผ ๋ฟ์ด๋ค.
โ ์ ๋ต: โก ํ๊ท ํ ์คํธ๋ ๋ณ๊ฒฝ๋ ์ฝ๋๊ฐ ๊ธฐ์กด ๊ธฐ๋ฅ์ ์ํฅ์ ์ฃผ์ง ์์๋์ง ํ์ธํ๋ ๊ฒ์ด๊ณ , ์ฌํ ์คํธ๋ ํน์ ๊ฒฐํจ์ด ์์ ๋์๋์ง ํ์ธํ๋ ๊ฒ์ด๋ค.
๐ ํด์ค:
- ํ๊ท ํ ์คํธ(Regression Testing): ์ฝ๋ ๋ณ๊ฒฝ ํ ๊ธฐ์กด ๊ธฐ๋ฅ์ด ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ์ธ.
- ์ฌํ ์คํธ(Retesting): ํน์ ๊ฒฐํจ(Bug)์ด ์์ ๋ ํ, ํด๋น ๊ฒฐํจ์ด ํด๊ฒฐ๋์๋์ง ํ์ธ.
- โ , โข, โฃ ํ๋ฆผ: ํ๊ท ํ ์คํธ๋ ๊ธฐ์กด ๊ธฐ๋ฅ์ด ๊นจ์ง์ง ์์๋์ง ํ์ธํ๋ ๊ฒ์ด๊ณ , ์ฌํ ์คํธ๋ ํน์ ๋ฒ๊ทธ ์์ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๊ฒ์ด๋ฏ๋ก ๋ค๋ฆ.
31. API GET vs POST ๋ฌธ์
๋ฌธ์ 31. ๋ค์ ์ค HTTP GET๊ณผ POST ์์ฒญ์ ์ฐจ์ด์ ๋ํ ์ค๋ช ์ผ๋ก ์ฌ๋ฐ๋ฅธ ๊ฒ์?
- GET ์์ฒญ์ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์ ์ ์ฅํ๊ณ , POST ์์ฒญ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- GET ์์ฒญ์ ๋ฐ์ดํฐ๋ฅผ URL์ ํฌํจํ์ฌ ๋ณด๋ด๊ณ , POST ์์ฒญ์ ์์ฒญ ๋ณธ๋ฌธ(Body)์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ์ฌ ๋ณด๋ธ๋ค.
- GET ์์ฒญ์ ๋ณด์์ฑ์ด ๋๊ณ , POST ์์ฒญ์ ๋ณด์์ฑ์ด ๋ฎ๋ค.
- GET ์์ฒญ์ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ ์์ง๋ง, POST ์์ฒญ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
โ ์ ๋ต: โก GET ์์ฒญ์ ๋ฐ์ดํฐ๋ฅผ URL์ ํฌํจํ์ฌ ๋ณด๋ด๊ณ , POST ์์ฒญ์ ์์ฒญ ๋ณธ๋ฌธ(Body)์ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ์ฌ ๋ณด๋ธ๋ค.
๐ ํด์ค:
- โ ํ๋ฆผ: GET ์์ฒญ์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๋ฐ ์ฌ์ฉ๋๊ณ , POST ์์ฒญ์ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋จ.
- โก ์ ๋ต: GET ์์ฒญ์ ๋ฐ์ดํฐ๋ฅผ URL์ ํฌํจํ์ฌ ์ ์กํ๊ณ , POST ์์ฒญ์ Body์ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ์ ์กํจ.
- โข ํ๋ฆผ: GET ์์ฒญ์ URL์ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋๋ฏ๋ก ๋ณด์์ฑ์ด ๋ฎ์. POST ์์ฒญ์ Body์ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ธฐ ๋๋ฌธ์ ์๋์ ์ผ๋ก ๋ณด์์ฑ์ด ๋์.
- โฃ ํ๋ฆผ: GET ์์ฒญ์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ์ง ์๊ณ ์กฐํํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, POST ์์ฒญ์ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์ ์ ์กํ๋ ๋ฐ ์ฌ์ฉ๋จ.
32. TDD vs BDD ๋ฌธ์
๋ฌธ์ 32. TDD(Test-Driven Development)์ BDD(Behavior-Driven Development)์ ์ฐจ์ด์ ๋ํ ์ค๋ช ์ผ๋ก ์ฌ๋ฐ๋ฅธ ๊ฒ์?
- TDD๋ ์ฝ๋ ๊ตฌํ์ ๋จผ์ ํ๊ณ ํ ์คํธ๋ฅผ ๋์ค์ ์์ฑํ๋ ๋ฐฉ์์ด๋ฉฐ, BDD๋ ํ ์คํธ๋ฅผ ๋จผ์ ์์ฑํ๋ ๋ฐฉ์์ด๋ค.
- TDD๋ ์ฝ๋ ๋ ๋ฒจ์์ ํ ์คํธ๋ฅผ ๋จผ์ ์์ฑํ๋ ๋ฐฉ์์ด๊ณ , BDD๋ ์ฌ์ฉ์ ํ๋(Behavior) ์ค์ฌ์ผ๋ก ํ ์คํธ๋ฅผ ์ค๊ณํ๋ ๋ฐฉ์์ด๋ค.
- TDD๋ ๊ธฐ๋ฅ ํ ์คํธ๋ฅผ ์ํํ๋ ๊ฒ์ด๊ณ , BDD๋ ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์ํํ๋ ๊ฒ์ด๋ค.
- TDD์ BDD๋ ๊ฐ์ ๊ฐ๋ ์ด๋ฉฐ, ์ฉ์ด๋ง ๋ค๋ฅผ ๋ฟ์ด๋ค.
โ ์ ๋ต: โก TDD๋ ์ฝ๋ ๋ ๋ฒจ์์ ํ ์คํธ๋ฅผ ๋จผ์ ์์ฑํ๋ ๋ฐฉ์์ด๊ณ , BDD๋ ์ฌ์ฉ์ ํ๋(Behavior) ์ค์ฌ์ผ๋ก ํ ์คํธ๋ฅผ ์ค๊ณํ๋ ๋ฐฉ์์ด๋ค.
๐ ํด์ค:
- โ ํ๋ฆผ: TDD๋ ํ ์คํธ๋ฅผ ๋จผ์ ์์ฑํ ํ, ํด๋น ํ ์คํธ๋ฅผ ํต๊ณผํ๋ ์ฝ๋๋ฅผ ๊ฐ๋ฐํ๋ ๋ฐฉ์.
- โก ์ ๋ต: TDD๋ ์ฝ๋ ๋จ์ ํ ์คํธ(Unit Test) ์์ฃผ๋ก ์งํ๋๋ฉฐ, BDD๋ ์ฌ์ฉ์์ ํ๋ ๊ธฐ๋ฐ์ผ๋ก ํ ์คํธ ์๋๋ฆฌ์ค๋ฅผ ์์ฑํ๋ ๋ฐฉ์(Gherkin, Cucumber ๋ฑ ํ์ฉ).
- โข ํ๋ฆผ: BDD๋ ์ฑ๋ฅ ํ ์คํธ์ ๊ด๋ จ์ด ์์.
- โฃ ํ๋ฆผ: TDD์ BDD๋ ํ ์คํธ ์ ๊ทผ ๋ฐฉ์์ด ๋ค๋ฆ.
๐ฅ Pretest ๋๋น ํท๊ฐ๋ฆฌ๊ธฐ ์ฌ์ด ๊ฐ๋ ์ ๋ฆฌ
โ
์ ์ ํ
์คํธ vs ๋์ ํ
์คํธ ์ฐจ์ด ์ดํด
โ
ํ
์คํธ ์๋๋ฆฌ์ค vs ํ
์คํธ ์ผ์ด์ค ์ฐจ์ด ์์ง
โ
๊ธฐ๋ฅ ํ
์คํธ vs ๋น๊ธฐ๋ฅ ํ
์คํธ ๊ตฌ๋ณ
โ
ํ๊ท ํ
์คํธ vs ์ฌํ
์คํธ ์ฐจ์ด ์ดํด
โ
GET vs POST ์ฐจ์ด ๋ฐ ๋ณด์ ์ด์ ์ ๋ฆฌ
โ
TDD vs BDD ์ฐจ์ด ์ดํด ๋ฐ ํ์ฉ ์ฌ๋ก ์์ง
33. ํ์ดํธ๋ฐ์ค ํ ์คํธ vs ๋ธ๋๋ฐ์ค ํ ์คํธ ๋ฌธ์
๋ฌธ์ 33. ๋ค์ ์ค ํ์ดํธ๋ฐ์ค ํ ์คํธ ๊ธฐ๋ฒ์ ํด๋นํ๋ ๊ฒ์?
- ๊ฒฝ๊ณ๊ฐ ๋ถ์ (Boundary Value Analysis)
- ๋์น ๋ถํ (Equivalence Partitioning)
- ์กฐ๊ฑด ์ปค๋ฒ๋ฆฌ์ง (Condition Coverage)
- ํ์์ ํ ์คํธ (Exploratory Testing)
โ ์ ๋ต: โข ์กฐ๊ฑด ์ปค๋ฒ๋ฆฌ์ง (Condition Coverage)
๐ ํด์ค:
- ํ์ดํธ๋ฐ์ค ํ ์คํธ(White-box Testing): ์์ค ์ฝ๋ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ถ์ํ์ฌ ํ ์คํธํ๋ ๊ธฐ๋ฒ.
- ๋ธ๋๋ฐ์ค ํ ์คํธ(Black-box Testing): ๋ด๋ถ ์ฝ๋๊ฐ ์๋ ์ ๋ ฅ๊ณผ ์ถ๋ ฅ๋ง์ ๊ธฐ์ค์ผ๋ก ํ ์คํธํ๋ ๊ธฐ๋ฒ.
- โ , โก, โฃ ํ๋ฆผ: ๊ฒฝ๊ณ๊ฐ ๋ถ์, ๋์น ๋ถํ , ํ์์ ํ ์คํธ๋ ๋ชจ๋ ๋ธ๋๋ฐ์ค ํ ์คํธ ๊ธฐ๋ฒ.
- โข ์ ๋ต: ์กฐ๊ฑด ์ปค๋ฒ๋ฆฌ์ง๋ ์ฝ๋ ๋ด ์กฐ๊ฑด๋ฌธ(If, Switch ๋ฑ)์ด ์ฐธ/๊ฑฐ์ง์ ๋ชจ๋ ์คํํ๋์ง ๊ฒ์ฆํ๋ ํ์ดํธ๋ฐ์ค ํ ์คํธ ๊ธฐ๋ฒ.
34. Smoke Test vs Sanity Test ๋ฌธ์
๋ฌธ์ 34. Smoke Test์ Sanity Test์ ์ฐจ์ด์ ๋ํ ์ค๋ช ์ผ๋ก ์ฌ๋ฐ๋ฅธ ๊ฒ์?
- Smoke Test๋ ์ธ๋ถ์ ์ธ ๊ธฐ๋ฅ ํ ์คํธ๋ฅผ ์ํํ๊ณ , Sanity Test๋ ์ฃผ์ ๊ธฐ๋ฅ๋ง ํ์ธํ๋ค.
- Smoke Test๋ ์๋ก์ด ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ๋ ์ํํ๊ณ , Sanity Test๋ ๋ฒ๊ทธ ์์ ํ ์ํํ๋ค.
- Smoke Test๋ ํน์ ๊ธฐ๋ฅ๋ง ํ ์คํธํ๊ณ , Sanity Test๋ ์ ์ฒด ์์คํ ์ ํ ์คํธํ๋ค.
- Smoke Test์ Sanity Test๋ ๊ฐ์ ์๋ฏธ์ด๋ฉฐ, ์ฉ์ด๋ง ๋ค๋ฅผ ๋ฟ์ด๋ค.
โ ์ ๋ต: โก Smoke Test๋ ์๋ก์ด ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋ ๋ ์ํํ๊ณ , Sanity Test๋ ๋ฒ๊ทธ ์์ ํ ์ํํ๋ค.
๐ ํด์ค:
- Smoke Test: ์ํํธ์จ์ด์ ๋น๋(Build)๊ฐ ์ ์์ ์ผ๋ก ์ด๋ฃจ์ด์ก๋์ง ํ์ธํ๋ ์ด๊ธฐ ํ ์คํธ.
- Sanity Test: ๋ฒ๊ทธ ์์ ํ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ด ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ์ธํ๋ ํ ์คํธ.
- โ ํ๋ฆผ: Smoke Test๋ ์ฃผ์ ๊ธฐ๋ฅ์ ๋น ๋ฅด๊ฒ ๊ฒ์ฆํ๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ฉฐ, ์ธ๋ถ์ ์ธ ๊ธฐ๋ฅ ํ ์คํธ๋ ์๋.
- โข ํ๋ฆผ: Smoke Test๋ ์ ์ฒด์ ์ธ ๋์์ ํ์ธํ๊ณ , Sanity Test๋ ํน์ ๊ธฐ๋ฅ์ ์ง์คํจ.
- โฃ ํ๋ฆผ: ๋์ ๋ชฉ์ ์ด ๋ค๋ฆ!
35. ํ ์คํธ ๋ฐ์ดํฐ ์ ํ ๋ฌธ์
๋ฌธ์ 35. ๋ค์ ์ค ํ ์คํธ ๋ฐ์ดํฐ ์ ํ ์ค "์ค์ ์ด์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ต๋ช ํํ์ฌ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ"๋?
- ์ํ ๋ฐ์ดํฐ (Sample Data)
- ๋ชจ์ ๋ฐ์ดํฐ (Synthetic Data)
- ์ต๋ช ํ๋ ๋ฐ์ดํฐ (Anonymized Data)
- ๋๋ฏธ ๋ฐ์ดํฐ (Dummy Data)
โ ์ ๋ต: โข ์ต๋ช ํ๋ ๋ฐ์ดํฐ (Anonymized Data)
๐ ํด์ค:
- โ ์ํ ๋ฐ์ดํฐ: ์ด์ ๋ฐ์ดํฐ์์ ์ผ๋ถ๋ง ์ถ์ถํ์ฌ ์ฌ์ฉํ ๋ฐ์ดํฐ.
- โก ๋ชจ์ ๋ฐ์ดํฐ: ์ด์ ๋ฐ์ดํฐ์ ๋น์ทํ๊ฒ ์ธ์์ ์ผ๋ก ์์ฑ๋ ๋ฐ์ดํฐ.
- โข ์ ๋ต: ์ต๋ช ํ๋ ๋ฐ์ดํฐ๋ ์ด์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ธ์ ๋ณด๋ฅผ ์ ๊ฑฐํ์ฌ ํ ์คํธ์ฉ์ผ๋ก ๋ณํํ ๋ฐ์ดํฐ.
- โฃ ๋๋ฏธ ๋ฐ์ดํฐ: ์๋ฏธ ์๋ ๊ฐ(์: XXX, 1234 ๋ฑ)์ผ๋ก ์ฑ์ด ๊ฐ์ง ๋ฐ์ดํฐ.
36. RESTful API์ SOAP API ๋ฌธ์
๋ฌธ์ 36. RESTful API์ SOAP API์ ์ฐจ์ด์ ๋ํ ์ค๋ช ์ผ๋ก ์ฌ๋ฐ๋ฅธ ๊ฒ์?
- RESTful API๋ ์ํ ์ ๋ณด๋ฅผ ์ ์งํ๊ณ , SOAP API๋ ์ํ ์ ๋ณด๋ฅผ ์ ์งํ์ง ์๋๋ค.
- RESTful API๋ XML๋ง ์ง์ํ๊ณ , SOAP API๋ JSON๊ณผ XML์ ๋ชจ๋ ์ง์ํ๋ค.
- RESTful API๋ ๊ฒฝ๋(Lightweight)ํ๋ฉฐ, SOAP API๋ ๋ณด์์ฑ์ด ๋์ง๋ง ๋ฌด๊ฒ๋ค.
- RESTful API๋ ํธ๋์ญ์ ์ ์ง์ํ์ง๋ง, SOAP API๋ ํธ๋์ญ์ ์ ์ง์ํ์ง ์๋๋ค.
โ ์ ๋ต: โข RESTful API๋ ๊ฒฝ๋(Lightweight)ํ๋ฉฐ, SOAP API๋ ๋ณด์์ฑ์ด ๋์ง๋ง ๋ฌด๊ฒ๋ค.
๐ ํด์ค:
- โ ํ๋ฆผ: RESTful API๋ ์ํ ์ ๋ณด๋ฅผ ์ ์งํ์ง ์์(Stateless), SOAP API๋ ์ผ๋ถ ์ํ ์ ๋ณด๋ฅผ ์ ์งํ ์ ์์.
- โก ํ๋ฆผ: RESTful API๋ JSON, XML ๋ฑ ๋ค์ํ ํฌ๋งท์ ์ง์ํ์ง๋ง, SOAP API๋ XML๋ง ์ง์.
- โข ์ ๋ต: RESTful API๋ ๊ฐ๋ณ๊ณ ๋น ๋ฅด๋ฉฐ(๊ฒฝ๋), SOAP API๋ ๋ณด์ ๊ธฐ๋ฅ์ด ๋ง์ง๋ง ์๋์ ์ผ๋ก ๋ฌด๊ฑฐ์.
- โฃ ํ๋ฆผ: SOAP API๋ ํธ๋์ญ์ ์ ์ง์ํ๋ฉฐ, RESTful API๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํธ๋์ญ์ ์ ๊ณ ๋ คํ์ง ์์.
37. DevOps์ QA์ ์ญํ ๋ฌธ์
๋ฌธ์ 37. DevOps ํ๊ฒฝ์์ QA๊ฐ ์ํํด์ผ ํ๋ ์ญํ ๋ก ์ ์ ํ์ง ์์ ๊ฒ์?
- CI/CD ํ์ดํ๋ผ์ธ์์ ์๋ํ ํ ์คํธ๋ฅผ ์ํํ๋ ๊ฒ.
- ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋น ๋ฅธ ํผ๋๋ฐฑ์ ์ ๊ณตํ๋ ๊ฒ.
- ์ด์ ํ๊ฒฝ์์ ์ง์ ์ค์๊ฐ ๋ฒ๊ทธ๋ฅผ ์์ ํ๋ ๊ฒ.
- ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ๊ธฐ์กด ๊ธฐ๋ฅ์ ์ํฅ์ ์ฃผ์ง ์๋์ง ๊ฒ์ฆํ๋ ๊ฒ.
โ ์ ๋ต: โข ์ด์ ํ๊ฒฝ์์ ์ง์ ์ค์๊ฐ ๋ฒ๊ทธ๋ฅผ ์์ ํ๋ ๊ฒ.
๐ ํด์ค:
- DevOps ํ๊ฒฝ์์ QA์ ์ญํ :
- ์๋ํ ํ ์คํธ ์ํ ๋ฐ ์ ์ง๋ณด์ (CI/CD)
- ๋น ๋ฅธ ํผ๋๋ฐฑ ์ ๊ณต
- ์ฝ๋ ๋ณ๊ฒฝ์ ์ํฅ ๋ถ์ ๋ฐ ํ์ง ๊ฒ์ฆ
- โข ํ๋ฆผ: ์ด์ ํ๊ฒฝ์์ ๋ฒ๊ทธ๋ฅผ ์ง์ ์์ ํ๋ ๊ฒ์ ๊ฐ๋ฐ์์ ์ญํ ์ด๋ฉฐ, QA๋ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋ณด๊ณ ํ๋ ์ญํ .
38. ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 38. ํด๋ผ์ฐ๋ ํ๊ฒฝ์์ ํ ์คํธ๋ฅผ ์ํํ ๋ ์ฅ์ ์ผ๋ก ์ ์ ํ์ง ์์ ๊ฒ์?
- ํ ์คํธ ํ๊ฒฝ์ ๋น ๋ฅด๊ฒ ํ์ฅํ ์ ์๋ค.
- ๋น์ฉ์ ์ ๊ฐํ ์ ์๋ค.
- ๋ฌผ๋ฆฌ์ ์ธ ํ ์คํธ ์ฅ๋น๊ฐ ํ์ํ์ง ์๋ค.
- ๋ณด์์ฑ์ด ์จํ๋ ๋ฏธ์ค(On-Premise) ํ๊ฒฝ๋ณด๋ค ํญ์ ๋๋ค.
โ ์ ๋ต: โฃ ๋ณด์์ฑ์ด ์จํ๋ ๋ฏธ์ค(On-Premise) ํ๊ฒฝ๋ณด๋ค ํญ์ ๋๋ค.
๐ ํด์ค:
- ํด๋ผ์ฐ๋ ํ
์คํธ์ ์ฅ์ :
- ํ๊ฒฝ ํ์ฅ ๊ฐ๋ฅ (Scalability)
- ๋น์ฉ ์ ๊ฐ (Pay-as-you-go ๋ชจ๋ธ)
- ๋ฌผ๋ฆฌ์ ์ฅ๋น ์์ด ํ ์คํธ ๊ฐ๋ฅ
- โฃ ํ๋ฆผ: ํด๋ผ์ฐ๋ ํ๊ฒฝ์ ๋ณด์์ฑ์ ์ค์ ๊ณผ ์ด์ ๋ฐฉ์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ฉฐ, ์จํ๋ ๋ฏธ์ค ํ๊ฒฝ๋ณด๋ค ๋ฐ๋์ ๋๋ค๊ณ ํ ์ ์์.
๐ฅ Pretest ๋๋น ํท๊ฐ๋ฆฌ๊ธฐ ์ฌ์ด ๊ฐ๋ ์ ๋ฆฌ (์ถ๊ฐ)
โ
ํ์ดํธ๋ฐ์ค vs ๋ธ๋๋ฐ์ค ํ
์คํธ ๊ฐ๋
์ ๋ฆฌ
โ
Smoke Test vs Sanity Test ์ฐจ์ด ์์ง
โ
ํ
์คํธ ๋ฐ์ดํฐ ์ ํ(์ต๋ช
ํ ๋ฐ์ดํฐ, ๋๋ฏธ ๋ฐ์ดํฐ ๋ฑ) ์ดํด
โ
RESTful API vs SOAP API ์ฐจ์ด์ ์ ๋ฆฌ
โ
DevOps ํ๊ฒฝ์์ QA์ ์ญํ ๋ช
ํํ ๊ตฌ๋ถ
โ
ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ํ
์คํธ์ ์ฅ์ ๊ณผ ๋ณด์์ฑ ๋ฌธ์ ์ดํด
โ 39. ์ ์ ๋ถ์ vs ๋์ ๋ถ์ ๋ฌธ์
๋ฌธ์ 39. ๋ค์ ์ค ์ ์ ๋ถ์(Static Analysis)๊ณผ ๋์ ๋ถ์(Dynamic Analysis)์ ๋ํ ์ค๋ช ์ผ๋ก ์ฌ๋ฐ๋ฅธ ๊ฒ์?
- ์ ์ ๋ถ์์ ํ๋ก๊ทธ๋จ์ ์คํํ์ง ์๊ณ ์์ค ์ฝ๋๋ฅผ ๊ฒ์ฌํ๋ ๋ฐฉ์์ด๋ค.
- ๋์ ๋ถ์์ ์์ค ์ฝ๋ ๊ฒํ ๋ฅผ ํตํด ๊ฒฐํจ์ ์ฐพ๋ ๋ฐฉ์์ด๋ค.
- ์ ์ ๋ถ์์ ์คํ ์ค ๋ฐ์ํ๋ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- ๋์ ๋ถ์์ ํ ์คํธ ํ๊ฒฝ์ ์ค์ ํ์ง ์๊ณ ์์ค ์ฝ๋๋ง์ผ๋ก ๋ณด์ ์ทจ์ฝ์ ์ ๋ถ์ํ๋ ๊ธฐ๋ฒ์ด๋ค.
โ ์ ๋ต: โ ์ ์ ๋ถ์์ ํ๋ก๊ทธ๋จ์ ์คํํ์ง ์๊ณ ์์ค ์ฝ๋๋ฅผ ๊ฒ์ฌํ๋ ๋ฐฉ์์ด๋ค.
๐ ํด์ค:
- ์ ์ ๋ถ์ (Static Analysis): ํ๋ก๊ทธ๋จ์ ์คํํ์ง ์๊ณ ์์ค ์ฝ๋ ์์ค์์ ๊ฒฐํจ์ ๋ถ์ํ๋ ๊ธฐ๋ฒ.
- ์: ์ฝ๋ ๋ฆฌ๋ทฐ, ์ ์ ๋ถ์ ๋๊ตฌ(SonarQube, ESLint).
- ๋์ ๋ถ์ (Dynamic Analysis): ํ๋ก๊ทธ๋จ์ ์คํํ ์ํ์์ ๊ฒฐํจ์ ๋ถ์ํ๋ ๊ธฐ๋ฒ.
- ์: ์ฑ๋ฅ ํ ์คํธ, ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ถ์.
- โก, โฃ ํ๋ฆผ: ๋์ ๋ถ์์ ์ค์ ํ๋ก๊ทธ๋จ์ ์คํํด์ผ ๊ฐ๋ฅ.
- โข ํ๋ฆผ: ์ฑ๋ฅ ๋ฌธ์ ๋ถ์์ ๋์ ๋ถ์์์ ์ํ.
โ 40. ์ ์์ผ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 40. ์ ์์ผ ํ๊ฒฝ์์ QA๊ฐ ์ํํด์ผ ํ๋ ์ญํ ๋ก ์ ์ ํ์ง ์์ ๊ฒ์?
- ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ์์ ํ๋ฉด ๋น ๋ฅด๊ฒ ํ๊ท ํ ์คํธ๋ฅผ ์คํํ๋ค.
- ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํ์ง ์๊ณ , ๊ฐ๋ฐ์ด ์๋ฃ๋ ํ ํ ์คํธ๋ฅผ ์ํํ๋ค.
- CI/CD ํ๊ฒฝ์์ ์๋ํ๋ ํ ์คํธ๋ฅผ ์ํํ๋ค.
- ๊ฐ๋ฐ ํ๊ณผ ๊ธด๋ฐํ ํ๋ ฅํ์ฌ ํ์ง์ ๋ณด์ฅํ๋ค.
โ ์ ๋ต: โก ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํ์ง ์๊ณ , ๊ฐ๋ฐ์ด ์๋ฃ๋ ํ ํ ์คํธ๋ฅผ ์ํํ๋ค.
๐ ํด์ค:
- ์ ์์ผ ํ
์คํธ์ ํต์ฌ ์์น:
- Shift-Left Testing: ๊ฐ๋ฐ ์ด๊ธฐ๋ถํฐ ํ ์คํธ ์ํ.
- TDD (Test-Driven Development): ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋จผ์ ์์ฑ ํ ์ฝ๋ ๊ตฌํ.
- CI/CD ํ ์คํธ ์๋ํ: ์ง์์ ์ธ ๋ฐฐํฌ ํ๊ฒฝ์์ ์๋ ํ ์คํธ ์คํ.
- โก ํ๋ฆผ: ์ ์์ผ์์๋ ๊ฐ๋ฐ๊ณผ ํ ์คํธ๊ฐ ๋ณํ๋๋ฏ๋ก, ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํ๋ ๊ฒ์ด ์ค์.
โ 41. ์ ๊ท ํํ์(Regex) ๋ฌธ์
๋ฌธ์ 41. ๋ค์ ์ ๊ท ํํ์ ^\d{3}-\d{2}-\d{4}$์ด ์๋ฏธํ๋ ๊ฒ์?
- ์ด๋ฉ์ผ ์ฃผ์ ํ์์ ๊ฒ์ฆํ๋ค.
- ์ ํ๋ฒํธ ํ์์ ๊ฒ์ฆํ๋ค.
- ์์ ์ํ๋ฆฌํฐ ๋๋ฒ(SSN) ํ์์ ๊ฒ์ฆํ๋ค.
- IPv4 ์ฃผ์ ํ์์ ๊ฒ์ฆํ๋ค.
โ ์ ๋ต: โข ์์ ์ํ๋ฆฌํฐ ๋๋ฒ(SSN) ํ์์ ๊ฒ์ฆํ๋ค.
๐ ํด์ค:
- ์ ๊ท ํํ์(Regex) ๋ถ์:
- ^ → ๋ฌธ์์ด ์์.
- \d{3} → ์ซ์ 3์๋ฆฌ.
- - → ํ์ดํ(-).
- \d{2} → ์ซ์ 2์๋ฆฌ.
- - → ํ์ดํ(-).
- \d{4} → ์ซ์ 4์๋ฆฌ.
- $ → ๋ฌธ์์ด ์ข ๋ฃ.
- โ , โก, โฃ ํ๋ฆผ: ์ด๋ฉ์ผ, ์ ํ๋ฒํธ, IP ์ฃผ์ ํ์๊ณผ ์ผ์นํ์ง ์์.
โ 42. SQL Injection ์ทจ์ฝ์ ๋ฌธ์
๋ฌธ์ 42. ๋ค์ ์ค SQL Injection์ ๋ฐฉ์งํ๊ธฐ ์ํ ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์?
- ์ฌ์ฉ์ ์ ๋ ฅ์ ์ง์ SQL ์ฟผ๋ฆฌ์ ํฌํจํ๋ค.
- Prepared Statements(ํ๋ฆฌํ์ด๋ ์คํ ์ดํธ๋จผํธ)๋ฅผ ์ฌ์ฉํ๋ค.
- SQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ธฐ ์ ์ ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ชจ๋ ๋๋ฌธ์๋ก ๋ณํํ๋ค.
- SQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ธฐ ์ ์ ๋ชจ๋ ๊ณต๋ฐฑ์ ์ ๊ฑฐํ๋ค.
โ ์ ๋ต: โก Prepared Statements(ํ๋ฆฌํ์ด๋ ์คํ ์ดํธ๋จผํธ)๋ฅผ ์ฌ์ฉํ๋ค.
๐ ํด์ค:
- SQL Injection ๋ฐฉ์ง ๋ฐฉ๋ฒ:
- Prepared Statements ์ฌ์ฉ → SQL ์คํ ์ ์ ๋ ฅ๊ฐ์ ์์ ํ๊ฒ ์ฒ๋ฆฌ.
- ์ ๋ ฅ๊ฐ ๊ฒ์ฆ ๋ฐ ํํฐ๋ง → ํน์ ๋ฌธ์ (', ", --) ์ ๊ฑฐ.
- ์ต์ ๊ถํ ์์น ์ ์ฉ → ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ณ์ ์ ์ต์ ๊ถํ๋ง ๋ถ์ฌ.
- โ , โข, โฃ ํ๋ฆผ: ๋ณด์ ์ทจ์ฝ์ ์ ํด๊ฒฐํ์ง ๋ชปํจ.
โ 43. CI/CD์์ QA์ ์ญํ ๋ฌธ์
๋ฌธ์ 43. CI/CD ํ์ดํ๋ผ์ธ์์ QA๊ฐ ์ํํด์ผ ํ๋ ์ญํ ๋ก ์ ์ ํ์ง ์์ ๊ฒ์?
- ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์๋ํ๋ ํ ์คํธ๋ฅผ ์คํํ๋ค.
- ์ฝ๋ ๋ฐฐํฌ ํ ์ด์ ํ๊ฒฝ์์ ์ง์ ์๋ ํ ์คํธ๋ฅผ ์ํํ๋ค.
- ํ ์คํธ ์คํจ ์ ๊ฐ๋ฐ ํ์ ํผ๋๋ฐฑ์ ์ ๊ณตํ๋ค.
- ์ฑ๋ฅ ํ ์คํธ๋ฅผ CI/CD ํ์ดํ๋ผ์ธ์ ํตํฉํ ์ ์๋ค.
โ ์ ๋ต: โก ์ฝ๋ ๋ฐฐํฌ ํ ์ด์ ํ๊ฒฝ์์ ์ง์ ์๋ ํ ์คํธ๋ฅผ ์ํํ๋ค.
๐ ํด์ค:
- CI/CD์์ QA์ ์ฃผ์ ์ญํ :
- ์๋ํ ํ ์คํธ ์ํ.
- ํ ์คํธ ์คํจ ์ ๋น ๋ฅธ ํผ๋๋ฐฑ ์ ๊ณต.
- ์ฑ๋ฅ ํ ์คํธ, ๋ณด์ ํ ์คํธ ์๋ํ.
- โก ํ๋ฆผ: ์ด์ ํ๊ฒฝ์์ ์ง์ ์๋ ํ ์คํธ๋ฅผ ์ํํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ธ CI/CD QA ์ ๋ฌด๊ฐ ์๋.
โ 44. ๋ณด์ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 44. OWASP Top 10์์ ๊ฐ์ฅ ์ํํ ์ทจ์ฝ์ ์ค ํ๋์ธ "CSRF(Cross-Site Request Forgery)" ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฅ ์ ์ ํ ๊ฒ์?
- ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณต์กํ๊ฒ ์ค์ ํ๋ค.
- HTTP ์์ฒญ์ CSRF ํ ํฐ์ ํฌํจํ๋ค.
- HTTPS ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ค.
- SQL Injection์ ๋ฐฉ์งํ๊ธฐ ์ํด Prepared Statements๋ฅผ ์ฌ์ฉํ๋ค.
โ ์ ๋ต: โก HTTP ์์ฒญ์ CSRF ํ ํฐ์ ํฌํจํ๋ค.
๐ ํด์ค:
- CSRF ๊ณต๊ฒฉ:
- ์ฌ์ฉ์๊ฐ ์ธ์ฆ๋ ์ธ์ ์์ ์ ์ฑ ์์ฒญ์ด ์คํ๋๋๋ก ์ ๋ํ๋ ๊ณต๊ฒฉ.
- ๋ฐฉ์ง ๋ฐฉ๋ฒ:
- CSRF ํ ํฐ ์ฌ์ฉ → ์์ฒญ๋ง๋ค ๊ณ ์ ํ ํ ํฐ์ ํฌํจํ์ฌ ๊ฒ์ฆ.
- SameSite ์ฟ ํค ์ ์ฑ ์ค์ → ๋ค๋ฅธ ์ฌ์ดํธ์์ ์ธ์ฆ๋ ์์ฒญ์ ์ฐจ๋จ.
- Referrer ๊ฒ์ฆ → ์์ฒญ ์ถ์ฒ ํ์ธ.
โ ์ถ๊ฐ ์ฌํ ๊ฐ๋ ์ ๋ฆฌ
๐ ์ํ์์ ์์ฃผ ์ถ์ ๋๋ ํท๊ฐ๋ฆฌ๋ ๊ฐ๋ ๋ค
โ
์ ์ ๋ถ์(Static Analysis) vs ๋์ ๋ถ์(Dynamic Analysis) ์ฐจ์ด
โ
CI/CD์์ QA ์ญํ & ์๋ํ ํ
์คํธ ํ์์ฑ
โ
SQL Injection, CSRF ๋ฑ ๋ณด์ ์ทจ์ฝ์ ๋ฐ ๋ฐฉ์ง ๋ฐฉ๋ฒ
โ
์ ์์ผ ํ๊ฒฝ์์ ํ
์คํธ ์๋ํ์ ์ค์์ฑ
โ
RESTful API & ์ ๊ท ํํ์(Regex) ์ค๋ฌด ํ์ฉ๋ฒ
โ 45. ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง ๋ฌธ์
๋ฌธ์ 45. ๋ค์ ์ค ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง(Test Coverage)๋ฅผ ์ธก์ ํ๋ ์ฃผ์ ๊ธฐ์ค์ด ์๋ ๊ฒ์?
- ๋ฌธ์ฅ ์ปค๋ฒ๋ฆฌ์ง (Statement Coverage)
- ๋ถ๊ธฐ ์ปค๋ฒ๋ฆฌ์ง (Branch Coverage)
- ์ํ ์ปค๋ฒ๋ฆฌ์ง (State Coverage)
- UI ๋์์ธ ์ปค๋ฒ๋ฆฌ์ง (UI Design Coverage)
โ ์ ๋ต: โฃ UI ๋์์ธ ์ปค๋ฒ๋ฆฌ์ง (UI Design Coverage)
๐ ํด์ค:
- ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง(Test Coverage): ์ฝ๋์ ์ด๋ ๋ถ๋ถ์ด ํ ์คํธ๋์๋์ง ์ธก์ ํ๋ ์งํ.
- ์ฃผ์ ํ
์คํธ ์ปค๋ฒ๋ฆฌ์ง ์ ํ:
- ๋ฌธ์ฅ ์ปค๋ฒ๋ฆฌ์ง (Statement Coverage): ์ฝ๋์ ๋ชจ๋ ๋ฌธ์ฅ์ด ์คํ๋์๋์ง ํ์ธ.
- ๋ถ๊ธฐ ์ปค๋ฒ๋ฆฌ์ง (Branch Coverage): if ๋๋ switch ๋ฌธ์์ ๋ชจ๋ ๋ถ๊ธฐ ์กฐ๊ฑด์ด ์คํ๋์๋์ง ํ์ธ.
- ์กฐ๊ฑด ์ปค๋ฒ๋ฆฌ์ง (Condition Coverage): ๋ ผ๋ฆฌ ์กฐ๊ฑด์ด true์ false๋ฅผ ๋ชจ๋ ์คํํ๋์ง ํ์ธ.
- MC/DC (Modified Condition/Decision Coverage): ๋ชจ๋ ๊ฐ๋ณ ์กฐ๊ฑด์ด ๋ ๋ฆฝ์ ์ผ๋ก ๊ฒฐ๊ณผ์ ์ํฅ์ ์ฃผ๋์ง ํ์ธ.
- ๊ฒฝ๋ก ์ปค๋ฒ๋ฆฌ์ง (Path Coverage): ์ฝ๋์ ๋ชจ๋ ์คํ ๊ฒฝ๋ก๋ฅผ ํ ์คํธ.
- โฃ ํ๋ฆผ: UI ๋์์ธ ์ปค๋ฒ๋ฆฌ์ง๋ ์ฝ๋ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง์ ๊ด๋ จ์ด ์์.
โ 46. ๋ก๋ ํ ์คํธ vs ์คํธ๋ ์ค ํ ์คํธ ๋ฌธ์
๋ฌธ์ 46. ๋ค์ ์ค ๋ก๋ ํ ์คํธ(Load Testing)์ ์คํธ๋ ์ค ํ ์คํธ(Stress Testing)์ ์ฐจ์ด์ ๋ํ ์ค๋ช ์ผ๋ก ์ฌ๋ฐ๋ฅธ ๊ฒ์?
- ๋ก๋ ํ ์คํธ๋ ์ต๋ ๋ถํ ์ํ์์ ์์คํ ์ด ์ด๋ป๊ฒ ๋ฐ์ํ๋์ง ํ์ธํ๋ ๊ฒ์ด๊ณ , ์คํธ๋ ์ค ํ ์คํธ๋ ์ ์์ ์ธ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๋ ์ฑ๋ฅ์ ํ์ธํ๋ ๊ฒ์ด๋ค.
- ๋ก๋ ํ ์คํธ๋ ์ฌ์ฉ๋์ด ์ฆ๊ฐํ๋ ์ํฉ์์์ ์ฑ๋ฅ์ ํ๊ฐํ๋ ๊ฒ์ด๊ณ , ์คํธ๋ ์ค ํ ์คํธ๋ ์์คํ ์ด ํ๊ณ์น๋ฅผ ์ด๊ณผํ ๋ ์ผ๋ง๋ ์ ๋ฒํฐ๋์ง๋ฅผ ํ๊ฐํ๋ ๊ฒ์ด๋ค.
- ๋ก๋ ํ ์คํธ๋ ํน์ ๊ธฐ๋ฅ์ ๋์์ ํ ์คํธํ๋ ๊ฒ์ด๊ณ , ์คํธ๋ ์ค ํ ์คํธ๋ ์ ์ฒด ์์คํ ์ ๊ธฐ๋ฅ์ ํ ์คํธํ๋ ๊ฒ์ด๋ค.
- ๋ก๋ ํ ์คํธ์ ์คํธ๋ ์ค ํ ์คํธ๋ ๋์ผํ ๊ฐ๋ ์ด๋ฉฐ, ์ฉ์ด๋ง ๋ค๋ฅผ ๋ฟ์ด๋ค.
โ ์ ๋ต: โก ๋ก๋ ํ ์คํธ๋ ์ฌ์ฉ๋์ด ์ฆ๊ฐํ๋ ์ํฉ์์์ ์ฑ๋ฅ์ ํ๊ฐํ๋ ๊ฒ์ด๊ณ , ์คํธ๋ ์ค ํ ์คํธ๋ ์์คํ ์ด ํ๊ณ์น๋ฅผ ์ด๊ณผํ ๋ ์ผ๋ง๋ ์ ๋ฒํฐ๋์ง๋ฅผ ํ๊ฐํ๋ ๊ฒ์ด๋ค.
๐ ํด์ค:
- ๋ก๋ ํ
์คํธ (Load Testing): ์ ์์ ์ธ ํธ๋ํฝ ์ฆ๊ฐ ์ํฉ์์ ์์คํ
์ฑ๋ฅ์ ํ๊ฐ.
- ์: ์น์ฌ์ดํธ๊ฐ 1,000๋ช ์ ๋์ ์ ์์๋ฅผ ์ฒ๋ฆฌํ ์ ์๋์ง ํ ์คํธ.
- ์คํธ๋ ์ค ํ
์คํธ (Stress Testing): ์์คํ
์ด ํ๊ณ์ ์ ์ด๊ณผํ์ ๋ ์ด๋๊น์ง ๋ฒํธ ์ ์๋์ง ํ
์คํธ.
- ์: 10๋ง ๋ช ์ ๋์ ์ ์์๊ฐ ๋ฐ์ํ์ ๋ ์๋ฒ๊ฐ ๋ค์ด๋๋์ง ํ์ธ.
- โ ํ๋ฆผ: ๋ก๋ ํ ์คํธ๋ ์ ์์ ์ธ ์ฆ๊ฐ๋ฅผ, ์คํธ๋ ์ค ํ ์คํธ๋ ํ๊ณ๋ฅผ ์ด๊ณผํ ์ํฉ์ ํ ์คํธ.
- โข ํ๋ฆผ: ๋ ๋ค ํน์ ๊ธฐ๋ฅ์ด ์๋๋ผ ์์คํ ์ ์ฒด์ ์ฑ๋ฅ์ ํ๊ฐํจ.
- โฃ ํ๋ฆผ: ๊ฐ๋ ์ด ๋ค๋ฆ! ์คํธ๋ ์ค ํ ์คํธ๋ ์์คํ ์ด ๋ค์ด๋ ๋ ์ด๋ป๊ฒ ๋ณต๊ตฌํ๋์ง๋ ํ๊ฐํจ.
โ 47. ํ์์ ํ ์คํธ ์ ๋ต ๋ฌธ์
๋ฌธ์ 47. ํ์์ ํ ์คํธ(Exploratory Testing)๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ํํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฅ ์ ์ ํ ๊ฒ์?
- ์ฌ์ ์ ๋ชจ๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ฌธ์ํํ ํ ์คํํ๋ค.
- ์์๋ ๊ฒฐ๊ณผ๋ง ํ์ธํ๋ฉฐ ํ ์คํธ๋ฅผ ์ํํ๋ค.
- ํ ์คํฐ์ ๊ฒฝํ๊ณผ ์ง๊ด์ ๊ธฐ๋ฐ์ผ๋ก, ์์์น ๋ชปํ ๊ฒฐํจ์ ์ฐพ๋ ๋ฐ ์ง์คํ๋ค.
- ์ค์ง ๊ธฐ๋ฅ ํ ์คํธ์๋ง ์ฌ์ฉ๋๋ฉฐ, ๋ณด์ ํ ์คํธ์๋ ์ ์ฉํ ์ ์๋ค.
โ ์ ๋ต: โข ํ ์คํฐ์ ๊ฒฝํ๊ณผ ์ง๊ด์ ๊ธฐ๋ฐ์ผ๋ก, ์์์น ๋ชปํ ๊ฒฐํจ์ ์ฐพ๋ ๋ฐ ์ง์คํ๋ค.
๐ ํด์ค:
- ํ์์ ํ
์คํธ(Exploratory Testing):
- ์ ํํ๋ ํ ์คํธ ์ผ์ด์ค ์์ด, ํ ์คํฐ์ ๊ฒฝํ๊ณผ ์ง๊ด์ ํ์ฉํ์ฌ ๊ฒฐํจ์ ์ฐพ๋ ๊ธฐ๋ฒ.
- UI ํ ์คํธ, ๋ณด์ ํ ์คํธ, ์ฑ๋ฅ ํ ์คํธ์์๋ ํ์ฉ ๊ฐ๋ฅ.
- โ ํ๋ฆผ: ํ์์ ํ ์คํธ๋ ์ฌ์ ํ ์คํธ ์ผ์ด์ค ์์ด ์งํ๋จ.
- โก ํ๋ฆผ: ์์๋ ๊ฒฐ๊ณผ๋ฟ๋ง ์๋๋ผ ์์์น ๋ชปํ ๋์๋ ํ์ธํด์ผ ํจ.
- โฃ ํ๋ฆผ: ๋ณด์ ํ ์คํธ์์๋ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉ๋ ์ ์์.
โ 48. ๋ชจ๋ฐ์ผ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 48. ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ํ ์คํธ๋ฅผ ์ํํ ๋ ๊ณ ๋ คํด์ผ ํ ์ฌํญ์ผ๋ก ์ ์ ํ์ง ์์ ๊ฒ์?
- ๋ค์ํ ์ด์ ์ฒด์ (iOS, Android)์ ๋๋ฐ์ด์ค์์ ํ ์คํธํด์ผ ํ๋ค.
- ๋ฐฐํฐ๋ฆฌ ์ฌ์ฉ๋ ๋ฐ ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ํ์ ๋ฐ๋ฅธ ์ฑ๋ฅ์ ๊ฒํ ํด์ผ ํ๋ค.
- ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋์ผํ ๋ฐฉ์์ผ๋ก๋ง ํ ์คํธํ๋ฉด ๋๋ค.
- ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋ ๋์ ๋์์ ํ์ธํด์ผ ํ๋ค.
โ ์ ๋ต: โข ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋์ผํ ๋ฐฉ์์ผ๋ก๋ง ํ ์คํธํ๋ฉด ๋๋ค.
๐ ํด์ค:
- ๋ชจ๋ฐ์ผ ํ
์คํธ ์ฃผ์ ๊ณ ๋ ค์ฌํญ:
- ๋ค์ํ ๋๋ฐ์ด์ค ๋ฐ OS ํ ์คํธ: ํด์๋, CPU ์ฑ๋ฅ ์ฐจ์ด ํ์ธ.
- ๋ฐฐํฐ๋ฆฌ ๋ฐ ๋คํธ์ํฌ ์ํฅ ํ ์คํธ: Wi-Fi vs LTE ํ๊ฒฝ์์ ์ฑ๋ฅ ์ฐจ์ด ๋ถ์.
- ์ฑ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ๋์ ํ ์คํธ: ์ ํ ์์ , ํธ์ ์๋ฆผ ์์ ์ ์ฑ์ ๋ฐ์ ํ์ธ.
- โข ํ๋ฆผ: ๋ชจ๋ฐ์ผ ํ ์คํธ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ค๋ฅด๊ฒ ๋๋ฐ์ด์ค ํน์ฑ(์ผ์, GPS, ๋คํธ์ํฌ ์๋ ๋ฑ)๋ ๊ณ ๋ คํด์ผ ํจ.
โ 49. A/B ํ ์คํธ ๋ฌธ์
๋ฌธ์ 49. A/B ํ ์คํธ(A/B Testing)์ ์ฃผ์ ๋ชฉ์ ์?
- ์น์ฌ์ดํธ์ ๋ชจ๋ ๊ธฐ๋ฅ์ด ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ์ธํ๋ ๊ฒ.
- ๋ ๊ฐ์ง ์ด์์ UI/UX ๋์์ธ ์ค ์ด๋ค ๊ฒ์ด ๋ ํจ๊ณผ์ ์ธ์ง ๋ฐ์ดํฐ ๊ธฐ๋ฐ์ผ๋ก ๊ฒฐ์ ํ๋ ๊ฒ.
- ๋ชจ๋ ๊ธฐ๋ฅ์ ์๋ํ ํ ์คํธํ๋ ๊ฒ.
- ์ํํธ์จ์ด ์ฝ๋์ ํ์ง์ ์ ์ ๋ถ์ํ๋ ๊ฒ.
โ ์ ๋ต: โก ๋ ๊ฐ์ง ์ด์์ UI/UX ๋์์ธ ์ค ์ด๋ค ๊ฒ์ด ๋ ํจ๊ณผ์ ์ธ์ง ๋ฐ์ดํฐ ๊ธฐ๋ฐ์ผ๋ก ๊ฒฐ์ ํ๋ ๊ฒ.
๐ ํด์ค:
- A/B ํ
์คํธ(A/B Testing):
- ๋ ๊ฐ ์ด์์ UI/UX ๋์์ธ์ ํ ์คํธํ์ฌ ์ฌ์ฉ์ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ต์ ์ ๋์์ธ์ ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ.
- ์: ๋นจ๊ฐ์ ๋ฒํผ vs ํ๋์ ๋ฒํผ ์ค ์ด๋ค ๊ฒ์ด ํด๋ฆญ๋ฅ (CTR)์ด ๋์์ง ๋ถ์.
- โ , โข, โฃ ํ๋ฆผ: ๊ธฐ๋ฅ ํ ์คํธ, ์๋ํ ํ ์คํธ, ์ ์ ๋ถ์๊ณผ ๊ด๋ จ ์์.
โ ์ถ๊ฐ ์ ๋ฆฌ & ๋ง๋ฌด๋ฆฌ
๐ ์ํ์์ ์์ฃผ ์ถ์ ๋๋ ํท๊ฐ๋ฆฌ๋ ๊ฐ๋ ๋ค (์ฌํ)
โ
ํ
์คํธ ์ปค๋ฒ๋ฆฌ์ง (Statement, Branch, MC/DC ๋ฑ) ๊น์ด ์ดํด
โ
๋ก๋ ํ
์คํธ vs ์คํธ๋ ์ค ํ
์คํธ ์ฐจ์ด ๋ช
ํํ ๊ตฌ๋ถ
โ
ํ์์ ํ
์คํธ๊ฐ ํ์ํ ์ด์ & ํจ๊ณผ์ ์ธ ์ํ ๋ฐฉ๋ฒ ์ดํด
โ
๋ชจ๋ฐ์ผ ํ
์คํธ ๊ณ ๋ ค์ฌํญ (๋ฐฐํฐ๋ฆฌ, ๋คํธ์ํฌ, ๋ฐฑ๊ทธ๋ผ์ด๋ ๋์ ๋ฑ)
โ
A/B ํ
์คํธ๊ฐ ์ด๋ป๊ฒ UX/UI ์ต์ ํ์ ํ์ฉ๋๋์ง ์ดํด
โ 50. ๋ชจ๋ฐ์ผ ์ฑ ํ ์คํธ ์ ๋ต ๋ฌธ์
๋ฌธ์ 50. ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธํ ๋ ๊ณ ๋ คํด์ผ ํ ๊ฐ์ฅ ์ค์ํ ์์๋?
- ๋ค์ํ ๋คํธ์ํฌ ํ๊ฒฝ(Wi-Fi, 4G, 5G)์์์ ๋์
- ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋์ผํ ๋ฐฉ์์ผ๋ก๋ง ํ ์คํธ
- ๋ฐ์คํฌํฑ ํ๊ฒฝ์์ ์คํ๋๋์ง ์ฌ๋ถ
- ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์๋
โ ์ ๋ต: โ ๋ค์ํ ๋คํธ์ํฌ ํ๊ฒฝ(Wi-Fi, 4G, 5G)์์์ ๋์
๐ ํด์ค:
- ๋ชจ๋ฐ์ผ ์ฑ ํ
์คํธ๋ ์น ์ฑ๊ณผ ๋ค๋ฆ!
- ๋ค์ํ ๋คํธ์ํฌ ํ๊ฒฝ(Wi-Fi, 4G, 5G, ์คํ๋ผ์ธ)์์ ์ฑ์ด ์ ์ ๋์ํ๋์ง ํ์ธํด์ผ ํจ.
- ๋ค์ํ ํ๋ฉด ํฌ๊ธฐ์ ํด์๋์ ๋ํ ๋ฐ์ํ ๋์์ธ ํ ์คํธ ํ์.
- ๋ฐฐํฐ๋ฆฌ ์๋ชจ, CPU ์ฌ์ฉ๋, ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ ์ฌ๋ถ๋ ํ ์คํธ ๋์.
- โก, โข, โฃ ํ๋ฆผ: ์น ํ ์คํธ์ ๋ชจ๋ฐ์ผ ํ ์คํธ๋ ๋ค๋ฅด๋ฉฐ, ๋ชจ๋ฐ์ผ ์ฑ์ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง๋ณด๋ค๋ ๋คํธ์ํฌ, ๋๋ฐ์ด์ค ๋ฆฌ์์ค ์ฌ์ฉ๋, ํฐ์น ์ธํฐํ์ด์ค ํ ์คํธ๊ฐ ๋ ์ค์.
โ 51. ์๋๋ก์ด๋ ์ฑ UI ํ ์คํธ ๋ฌธ์
๋ฌธ์ 51. ์๋๋ก์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ UI๋ฅผ ์๋์ผ๋ก ํ ์คํธํ๋ ๋๊ตฌ๋ก ๊ฐ์ฅ ์ ์ ํ ๊ฒ์?
- Espresso
- JUnit
- Postman
- Burp Suite
โ ์ ๋ต: โ Espresso
๐ ํด์ค:
- Espresso: ์๋๋ก์ด๋ ์ฑ์ UI ํ
์คํธ๋ฅผ ์๋ํํ๋ ๊ณต์ ํ๋ ์์ํฌ.
- ํ๋ฉด ์ด๋, ๋ฒํผ ํด๋ฆญ, ํ ์คํธ ์ ๋ ฅ ๋ฑ์ UI ๋์์ ์๋์ผ๋ก ์คํํ์ฌ ํ ์คํธ.
- โก ํ๋ฆผ: JUnit์ ์ ๋ ํ ์คํธ(Unit Test)์ฉ์ผ๋ก UI ํ ์คํธ์๋ ์ ํฉํ์ง ์์.
- โข ํ๋ฆผ: Postman์ API ํ ์คํธ ๋๊ตฌ.
- โฃ ํ๋ฆผ: Burp Suite๋ ๋ณด์ ํ ์คํธ ๋๊ตฌ.
โ 52. ๋ชจ๋ฐ์ผ ์ฑ ๋คํธ์ํฌ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 52. ์๋๋ก์ด๋ ์ฑ์ด ์คํ๋ผ์ธ ์ํ์์ ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ ์คํธํ๋ ค๋ฉด ์ด๋ค ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ ํ๋๊ฐ?
- ๋ชจ๋ ํ ์คํธ๋ฅผ Wi-Fi ํ๊ฒฝ์์๋ง ์คํํ๋ค.
- ์ฑ์ด ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋์ง ์์ ์ํ์์ ๊ธฐ๋ฅ์ด ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ์ธํ๋ค.
- API ์์ฒญ์ ์๋์ผ๋ก ์กฐ์ํ์ฌ ๋คํธ์ํฌ ์๋ต์ ๋ณํํ๋ค.
- ๋ชจ๋ฐ์ผ ๋ฐ์ดํฐ๊ฐ ํญ์ ์ผ์ ธ ์๋ ์ํ์์๋ง ํ ์คํธํ๋ค.
โ ์ ๋ต: โก ์ฑ์ด ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋์ง ์์ ์ํ์์ ๊ธฐ๋ฅ์ด ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ์ธํ๋ค.
๐ ํด์ค:
- ์คํ๋ผ์ธ ๋ชจ๋ ํ
์คํธ:
- ์ฑ์ด ๋คํธ์ํฌ ์์ด ์คํ๋ ๋ ์บ์ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๊ณ ์ค๋ฅ ์์ด ๋์ํ๋์ง ํ์ธ.
- ๋นํ๊ธฐ ๋ชจ๋์์ ์ฑ์ ์คํํ์ฌ ํ ์คํธ ๊ฐ๋ฅ.
- ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ๋ค์ ํ์ฑํ๋ ๋ ๋ฐ์ดํฐ๊ฐ ์ ์์ ์ผ๋ก ๋๊ธฐํ๋๋์ง ํ์ธ ํ์.
- โ , โฃ ํ๋ฆผ: Wi-Fi ํ๊ฒฝ ๋๋ ๋ชจ๋ฐ์ผ ๋ฐ์ดํฐ๋ง์ผ๋ก ํ ์คํธํ๋ฉด ์คํ๋ผ์ธ ๋์์ ํ์ธํ ์ ์์.
- โข ํ๋ฆผ: API ์์ฒญ์ ๋ณํํ๋ ๊ฒ์ ๋คํธ์ํฌ ๋ณด์ ํ ์คํธ์๋ ์ ์ฉํ์ง๋ง, ์คํ๋ผ์ธ ํ ์คํธ ๋ฐฉ๋ฒ์ ์๋.
โ 53. ๋ชจ๋ฐ์ผ ์ฑ ์ฑ๋ฅ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 53. ์๋๋ก์ด๋ ์ฑ์ ์ฑ๋ฅ ํ ์คํธ์์ ๊ฐ์ฅ ์ค์ํ๊ฒ ๊ณ ๋ คํด์ผ ํ ์์๋?
- ๋ฐฐํฐ๋ฆฌ ์ฌ์ฉ๋, CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ
- ์น ๋ธ๋ผ์ฐ์ ์ ํ์ด์ง ๋ก๋ฉ ์๋
- ์ฑ ์ค์น ํ APK ํ์ผ์ ํฌ๊ธฐ๋ง ํ์ธ
- ์ฑ ๋ด ๊ด๊ณ ์ ๋ ธ์ถ ๋น๋
โ ์ ๋ต: โ ๋ฐฐํฐ๋ฆฌ ์ฌ์ฉ๋, CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ
๐ ํด์ค:
- ๋ชจ๋ฐ์ผ ์ฑ ์ฑ๋ฅ ํ
์คํธ ์ฃผ์ ์์:
- ๋ฐฐํฐ๋ฆฌ ์๋ชจ๋: ํน์ ๊ธฐ๋ฅ ์ฌ์ฉ ์ ๋ฐฐํฐ๋ฆฌ ์๋น๋์ด ๊ธ๊ฒฉํ ์ฆ๊ฐํ๋์ง ํ์ธ.
- CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋: ์ฑ ์คํ ์ค CPU์ RAM์ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋์ง ๋ถ์.
- ์ฑ ์์ ์๊ฐ: ์ฒซ ์คํ ์ ๋ก๋ฉ ์๊ฐ์ด ๋๋ฌด ๊ธด ๊ฒฝ์ฐ ์ต์ ํ ํ์.
- ์คํฌ๋กค ์ฑ๋ฅ: ๋ฆฌ์คํธ ๋ทฐ, ์ด๋ฏธ์ง ๋ก๋ฉ์ด ์ํํ์ง ์ฒดํฌ.
- โก, โข, โฃ ํ๋ฆผ: ์ฑ๋ฅ ํ ์คํธ๋ ๋จ์ํ ๋ก๋ฉ ์๋๋ APK ํ์ผ ํฌ๊ธฐ๊ฐ ์๋, ์ค์ ๊ธฐ๊ธฐ์์์ ์์ ์ฌ์ฉ๋๊ณผ ์คํ ์๋๋ฅผ ์ธก์ ํ๋ ๊ฒ์ด ํต์ฌ.
โ 54. ๋ชจ๋ฐ์ผ ์ฑ ๋ณด์ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 54. ์๋๋ก์ด๋ ์ฑ์ ๋ณด์์ ๊ฐํํ๊ธฐ ์ํด ๋ฐ๋์ ๊ณ ๋ คํด์ผ ํ ์ฌํญ์?
- ์ฑ์ ์์ค ์ฝ๋๋ฅผ ๋๋ ํํ์ฌ ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง์ ๋ฐฉ์งํ๋ค.
- ๋ชจ๋ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๋ก์ปฌ์ ํ๋ฌธ์ผ๋ก ์ ์ฅํ๋ค.
- ๋คํธ์ํฌ ํธ๋ํฝ์ HTTP ํ๋กํ ์ฝ๋ก ์ ์กํ๋ค.
- ์ฑ์ด ๋ฃจํ ๋ ๋๋ฐ์ด์ค์์๋ ์ ์์ ์ผ๋ก ๋์ํ๋๋ก ํ๋ค.
โ ์ ๋ต: โ ์ฑ์ ์์ค ์ฝ๋๋ฅผ ๋๋ ํํ์ฌ ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง์ ๋ฐฉ์งํ๋ค.
๐ ํด์ค:
- ์๋๋ก์ด๋ ์ฑ ๋ณด์ ๊ฐํ ๋ฐฉ๋ฒ:
- ProGuard, R8์ ์ฌ์ฉํ์ฌ ์์ค ์ฝ๋ ๋๋ ํ.
- HTTPS๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์ํธํ ๋ฐ ์ ์ก ๋ณด์ ๊ฐํ.
- ์ฑ์ด ๋ฃจํ ๋ ๊ธฐ๊ธฐ์์ ๋์ํ์ง ์๋๋ก ๋ณด์ ์ ์ฑ ์ ์ฉ.
- โก, โข, โฃ ํ๋ฆผ:
- ๋ฐ์ดํฐ๋ฅผ ํ๋ฌธ(Plain Text)์ผ๋ก ์ ์ฅํ๋ฉด ๋ณด์ ์ทจ์ฝ์ ๋ฐ์ ๊ฐ๋ฅ.
- HTTP ๋์ ๋ฐ๋์ HTTPS๋ฅผ ์ฌ์ฉํด์ผ ํจ.
- ๋ฃจํ ๋ ๊ธฐ๊ธฐ์์๋ ํดํน ๊ฐ๋ฅ์ฑ์ด ๋์ผ๋ฏ๋ก ์ฑ ์คํ์ ์ ํํ๋ ๊ฒ์ด ๋ฐ๋์งํจ.
โ 55. ์๋๋ก์ด๋ ์ฑ ํ ์คํธ ์๋ํ ๋ฌธ์
๋ฌธ์ 55. ์๋๋ก์ด๋ UI ํ ์คํธ ์๋ํ ์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ํ๋ ์์ํฌ๋?
- Selenium
- Espresso
- JMeter
- OWASP ZAP
โ ์ ๋ต: โก Espresso
๐ ํด์ค:
- Espresso:
- ์๋๋ก์ด๋ UI ํ ์คํธ ์๋ํ๋ฅผ ์ํ ๊ณต์ ํ๋ ์์ํฌ.
- ์ฌ์ฉ์๊ฐ ์ง์ ์ฑ์ ์ฌ์ฉํ๋ ๊ฒ์ฒ๋ผ UI ๋์์ ์๋์ผ๋ก ์คํํ๊ณ ๊ฒ์ฆ.
- โ ํ๋ฆผ: Selenium์ ์น UI ํ ์คํธ ์๋ํ ๋๊ตฌ๋ก, ์๋๋ก์ด๋ ๋ค์ดํฐ๋ธ ์ฑ ํ ์คํธ์๋ ์ ํฉํ์ง ์์.
- โข ํ๋ฆผ: JMeter๋ ์ฑ๋ฅ ํ ์คํธ ๋๊ตฌ๋ก, UI ํ ์คํธ์ ๋ฌด๊ด.
- โฃ ํ๋ฆผ: OWASP ZAP์ ๋ณด์ ํ ์คํธ ๋๊ตฌ.
โ ๋ชจ๋ฐ์ผ ์ฑ ํ ์คํธ ์ฌํ ๊ฐ๋ ์ ๋ฆฌ
๐ ๋ชจ๋ฐ์ผ ์๋๋ก์ด๋ ์ฑ ํ ์คํธ์ ํต์ฌ ์์
โ
๋ค์ํ ๋คํธ์ํฌ ํ๊ฒฝ(Wi-Fi, 4G, 5G, ์คํ๋ผ์ธ)์์ ์ฑ์ด ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ์ธ
โ
Espresso๋ฅผ ํ์ฉํ UI ํ
์คํธ ์๋ํ ์ ์ฉ
โ
์ฑ์ ๋ฐฐํฐ๋ฆฌ ์ฌ์ฉ๋, CPU/๋ฉ๋ชจ๋ฆฌ ์๋น์จ์ ์ฑ๋ฅ ํ
์คํธ์์ ์ธก์
โ
HTTPS ์ ์ฉ ๋ฐ ๋๋
ํ๋ฅผ ํตํด ์ฑ ๋ณด์์ ๊ฐํ
โ
๋ฃจํ
๋ ๊ธฐ๊ธฐ์์์ ๋์ ์ฌ๋ถ ํ์ธ ๋ฐ ๋ณด์ ์กฐ์น ์ ์ฉ
โ 56. ๋ชจ๋ฐ์ผ ์ฑ ํฌ๋ก์ค ๋๋ฐ์ด์ค ํ ์คํธ ๋ฌธ์
๋ฌธ์ 56. ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์ ํ ์คํธ ์ ๋ค์ํ ๋๋ฐ์ด์ค์์ ํ ์คํธํ๋ ์ฃผ์ ๋ชฉ์ ์?
- ์ฑ์ด ํน์ ๊ธฐ๊ธฐ์์๋ง ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ์ธํ๊ธฐ ์ํด
- ๋ค์ํ ํ๋ฉด ํฌ๊ธฐ์ ํด์๋์์ UI๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ํ์๋๋์ง ํ์ธํ๊ธฐ ์ํด
- ์ฑ์ ์ฝ๋ ํ์ง์ ๋์ด๊ธฐ ์ํด
- ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณด์ ์ทจ์ฝ์ ์ ํ์ธํ๊ธฐ ์ํด
โ ์ ๋ต: โก ๋ค์ํ ํ๋ฉด ํฌ๊ธฐ์ ํด์๋์์ UI๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ํ์๋๋์ง ํ์ธํ๊ธฐ ์ํด
๐ ํด์ค:
- ํฌ๋ก์ค ๋๋ฐ์ด์ค ํ
์คํธ(Cross Device Testing):
- ์๋๋ก์ด๋ ์ฑ์ ๋ค์ํ ๊ธฐ๊ธฐ(์ค๋งํธํฐ, ํ๋ธ๋ฆฟ)์์ ์คํ๋ ์ ์๊ธฐ ๋๋ฌธ์, ๊ฐ ๊ธฐ๊ธฐ์์ UI๊ฐ ๊นจ์ง๊ฑฐ๋ ๊ธฐ๋ฅ์ด ์ ์์ ์ผ๋ก ์๋ํ์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋์.
- ๋ค์ํ ํด์๋, ํ๋ฉด ๋น์จ, ์ฑ๋ฅ ์ฐจ์ด๋ฅผ ๊ณ ๋ คํ์ฌ ํ ์คํธํด์ผ ํจ.
- โ , โข, โฃ ํ๋ฆผ:
- ํน์ ๊ธฐ๊ธฐ์์๋ง ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ์ธํ๋ ๊ฒ์ด ์๋๋ผ, ๋ชจ๋ ๊ธฐ๊ธฐ์์ ์ผ๊ด๋ ๋์์ ๋ณด์ฅํ๋ ๊ฒ์ด ๋ชฉํ.
- ์ฝ๋ ํ์ง ํฅ์์ ์ฝ๋ ๋ฆฌ๋ทฐ, ์ ์ ๋ถ์ ๋ฑ์ ํตํด ์ํํ๋ ๊ฒ์ด๋ฉฐ, ๋ณด์ ์ทจ์ฝ์ ํ์ธ์ ๋ณด์ ํ ์คํธ์์ ๋ค๋ฃธ.
โ 57. ๋ชจ๋ฐ์ผ ๋คํธ์ํฌ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 57. ๋ชจ๋ฐ์ผ ์ฑ์ด ๋ถ์์ ํ ๋คํธ์ํฌ ํ๊ฒฝ์์๋ ์ ์์ ์ผ๋ก ๋์ํ๋์ง ํ์ธํ๊ธฐ ์ํ ๊ฐ์ฅ ์ ์ ํ ๋ฐฉ๋ฒ์?
- ์ฑ์ Wi-Fi ํ๊ฒฝ์์๋ง ํ ์คํธํ๋ค.
- ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ๋์๋ค๊ฐ ๋ค์ ์ฐ๊ฒฐํ๋ ํ ์คํธ๋ฅผ ์ํํ๋ค.
- ํด๋ผ์ฐ๋ ์๋ฒ์ ์๋ต ์๊ฐ์ ์๋์ผ๋ก ์ค์ ํ์ฌ ํ ์คํธํ๋ค.
- ๋ชจ๋ API ์์ฒญ์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ๋๋์ง๋ง ํ์ธํ๋ค.
โ ์ ๋ต: โก ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ๋์๋ค๊ฐ ๋ค์ ์ฐ๊ฒฐํ๋ ํ ์คํธ๋ฅผ ์ํํ๋ค.
๐ ํด์ค:
- ๋คํธ์ํฌ ์ํ ๋ณํ ํ
์คํธ:
- Wi-Fi → LTE → 5G ๋ณ๊ฒฝ ์ ์ฑ์ด ์ ์ ๋์ํ๋์ง ํ์ธ.
- ๋คํธ์ํฌ ๋๊น(์คํ๋ผ์ธ ์ํ) ํ ์ฌ์ฐ๊ฒฐ ์ ๋ฐ์ดํฐ ๋๊ธฐํ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ด๋ฃจ์ด์ง๋์ง ๊ฒ์ฆ.
- ์ค์ ์ด๋ ์ค(ํฐ๋, ์๋ฆฌ๋ฒ ์ดํฐ)์์ ๋คํธ์ํฌ๊ฐ ๋จ์ ๋์์ ๋์ ๋์ ํ์ธ.
- โ , โข, โฃ ํ๋ฆผ:
- Wi-Fi ํ๊ฒฝ์์๋ง ํ ์คํธํ๋ฉด ์ค์ฌ์ฉ ํ๊ฒฝ์ ๋ฐ์ํ ์ ์์.
- ํด๋ผ์ฐ๋ ์๋ต ์๊ฐ ์ค์ ๋ ์ค์ํ์ง๋ง, ์ค์ ๋คํธ์ํฌ ํ๊ฒฝ์์์ ๋ณํ๊ฐ ๋ ์ค์ํ ํ ์คํธ ํฌ์ธํธ.
โ 58. ๋ชจ๋ฐ์ผ ์ ๊ทผ์ฑ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 58. ๋ชจ๋ฐ์ผ ์ฑ ์ ๊ทผ์ฑ(Accessibility)์ ํ ์คํธํ ๋ ๊ฐ์ฅ ์ค์ํ ์์๋?
- ์๋งน ๋ชจ๋์์ UI๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ํ์๋๋์ง ํ์ธํ๋ ๊ฒ
- ์ฑ์ ์ฑ๋ฅ์ด ๋น ๋ฅธ์ง ์ธก์ ํ๋ ๊ฒ
- ์ฑ์ UI๊ฐ ๊ณ ํด์๋์์ ์ ๋ช ํ๊ฒ ๋ณด์ด๋์ง ํ์ธํ๋ ๊ฒ
- ์ฑ์ด ์ต์ ์๋๋ก์ด๋ ๋ฒ์ ์์๋ง ๋์ํ๋์ง ํ์ธํ๋ ๊ฒ
โ ์ ๋ต: โ ์๋งน ๋ชจ๋์์ UI๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ํ์๋๋์ง ํ์ธํ๋ ๊ฒ
๐ ํด์ค:
- ๋ชจ๋ฐ์ผ ์ ๊ทผ์ฑ ํ
์คํธ(Accessibility Testing):
- ์๊ฐ ์ฅ์ ์ธ์ ์ํ "์์ฑ ํผ๋๋ฐฑ(TalkBack)" ๊ธฐ๋ฅ์ด ์ ์ ๋์ํ๋์ง ํ์ธ.
- ์๋งน ๋ชจ๋(์์ ๋๋น ํ์ธ)์์ UI ์์๊ฐ ๊ตฌ๋ถ ๊ฐ๋ฅํด์ผ ํจ.
- ํ ์คํธ ํฌ๊ธฐ ์กฐ์ ์ ๋ ์ด์์์ด ๊นจ์ง์ง ์๋์ง ํ ์คํธ.
- โก, โข, โฃ ํ๋ฆผ:
- ์ ๊ทผ์ฑ ํ ์คํธ๋ ์ฑ๋ฅ, ๊ณ ํด์๋ ํ ์คํธ๊ฐ ์๋๋ผ ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์๋ ์ํํ๊ฒ ์ฑ์ ์ฌ์ฉํ ์ ์๋๋ก ๊ฒ์ฆํ๋ ๊ฒ์ด ํต์ฌ.
โ 59. ๋ชจ๋ฐ์ผ ๋ณด์ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 59. ๋ชจ๋ฐ์ผ ์ฑ์ ๋ฐ์ดํฐ ๋ณด์์ ๊ฐํํ๊ธฐ ์ํด ๋ฐ๋์ ๊ณ ๋ คํด์ผ ํ ์ฌํญ์?
- ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ก์ปฌ ํ์ผ์ ์ ์ฅํ๋ค.
- ์ฌ์ฉ์ ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ๋ก์ปฌ DB์ ์ํธํ ์์ด ์ ์ฅํ๋ค.
- ์ฑ์ด HTTPS ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ์ฌ ์ ์กํ๋์ง ํ์ธํ๋ค.
- ์ฌ์ฉ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฑ ๋ด ํ๋์ฝ๋ฉํ์ฌ ๋ณด๊ดํ๋ค.
โ ์ ๋ต: โข ์ฑ์ด HTTPS ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ์ฌ ์ ์กํ๋์ง ํ์ธํ๋ค.
๐ ํด์ค:
- ๋ชจ๋ฐ์ผ ๋ณด์ ํ
์คํธ์ ํต์ฌ:
- HTTPS(SSL/TLS) ์ ์ฉ: ๋คํธ์ํฌ ํธ๋ํฝ์ ์ํธํํ์ฌ ๋ฐ์ดํฐ ํ์ทจ ๋ฐฉ์ง.
- ๋ฏผ๊ฐํ ์ ๋ณด(๋น๋ฐ๋ฒํธ, ์นด๋ ์ ๋ณด)๋ฅผ ์ํธํํ์ฌ ์ ์ฅ.
- Secure SharedPreferences ๋๋ Android Keystore System ์ฌ์ฉ.
- โ , โก, โฃ ํ๋ฆผ:
- ๋ก์ปฌ ํ์ผ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ๋ณด์ ์ทจ์ฝ์ ์ด ๋ง์.
- ๋น๋ฐ๋ฒํธ๋ฅผ ์ํธํ ์์ด ์ ์ฅํ๋ฉด ํดํน ์ํ์ด ์์.
- ์ฑ ๋ด ํ๋์ฝ๋ฉ๋ ๋น๋ฐ๋ฒํธ๋ ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง์ผ๋ก ์ฝ๊ฒ ์ ์ถ๋จ.
โ 60. ๋ชจ๋ฐ์ผ ์ฑ ํ ์คํธ ์๋ํ ๋ฌธ์
๋ฌธ์ 60. ๋ชจ๋ฐ์ผ UI ํ ์คํธ ์๋ํ๋ฅผ ์ํด ๊ฐ์ฅ ์ ์ ํ ๋ฐฉ๋ฒ์?
- Espresso์ UI Automator๋ฅผ ์ฌ์ฉํ์ฌ UI ๋์์ ์๋ํํ๋ค.
- ์๋ ํ ์คํธ๋ง ์ํํ๊ณ ์๋ํ๋ ํ์ํ์ง ์๋ค.
- ๋คํธ์ํฌ ๋ก๊ทธ๋ง ๋ถ์ํ์ฌ UI ๋์์ ๊ฒ์ฆํ๋ค.
- Selenium์ ์ฌ์ฉํ์ฌ ์๋๋ก์ด๋ ์ฑ์ ์๋ํํ๋ค.
โ ์ ๋ต: โ Espresso์ UI Automator๋ฅผ ์ฌ์ฉํ์ฌ UI ๋์์ ์๋ํํ๋ค.
๐ ํด์ค:
- ๋ชจ๋ฐ์ผ UI ํ
์คํธ ์๋ํ ๋ฐฉ๋ฒ:
- Espresso: ๋จ์ผ ์ฑ ๋ด UI ํ ์คํธ ์๋ํ (Google ๊ณต์ ์ง์).
- UI Automator: ์ฌ๋ฌ ์ฑ ๊ฐ UI ํ ์คํธ ๊ฐ๋ฅ (์: ์ค์ ์ฑ๊ณผ ์ํธ์์ฉ).
- โก ํ๋ฆผ: ์๋ ํ ์คํธ๋ ์ค์ํ์ง๋ง, ์๋ํ ํ ์คํธ๋ฅผ ํ์ฉํ๋ฉด ๋ฐ๋ณต์ ์ธ UI ํ ์คํธ๋ฅผ ํจ์จ์ ์ผ๋ก ์ํ ๊ฐ๋ฅ.
- โข ํ๋ฆผ: ๋คํธ์ํฌ ๋ก๊ทธ๋ง ๋ถ์ํด์๋ UI ๋์์ ๊ฒ์ฆํ ์ ์์.
- โฃ ํ๋ฆผ: Selenium์ ์น UI ์๋ํ ๋๊ตฌ๋ก, ๋ค์ดํฐ๋ธ ๋ชจ๋ฐ์ผ ์ฑ ํ ์คํธ์๋ ์ ํฉํ์ง ์์.
โ ๋ชจ๋ฐ์ผ ์๋๋ก์ด๋ ์ฑ ํ ์คํธ ์ฌํ ๊ฐ๋ ์ ๋ฆฌ
๐ ๋ชจ๋ฐ์ผ ์ฑ ํ ์คํธ์ ์ฃผ์ ๊ณ ๋ ค์ฌํญ
โ
๋ค์ํ ๊ธฐ๊ธฐ์ ํด์๋์์์ UI ํ
์คํธ(Cross Device Testing)
โ
Wi-Fi, 4G, 5G, ๋คํธ์ํฌ ๋๊น ํ ์ฌ์ฐ๊ฒฐ ํ
์คํธ(Network Resilience Testing)
โ
๋ฐฐํฐ๋ฆฌ ์ฌ์ฉ๋, CPU/๋ฉ๋ชจ๋ฆฌ ์๋น ๋ถ์์ ํตํ ์ฑ๋ฅ ํ
์คํธ(Performance Testing)
โ
Espresso, UI Automator๋ฅผ ํ์ฉํ UI ํ
์คํธ ์๋ํ(UI Test Automation)
โ
TalkBack, ์์ ๋๋น ๊ฒํ ๋ฅผ ํฌํจํ ์ ๊ทผ์ฑ ํ
์คํธ(Accessibility Testing)
โ
HTTPS ์ ์ฉ ๋ฐ ๋ฏผ๊ฐ ๋ฐ์ดํฐ ์ํธํ๋ฅผ ํตํ ๋ณด์ ํ
์คํธ(Security Testing)
โ 61. API ํ ์คํธ์ ๊ณ์ฝ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 61. API ํ ์คํธ์์ "๊ณ์ฝ ํ ์คํธ(Contract Testing)"์ ์ฃผ์ ๋ชฉ์ ์?
- API์ ์์ฒญ๊ณผ ์๋ต์ด ์์๋ ์คํ์ ์ค์ํ๋์ง ํ์ธํ๋ ๊ฒ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ํ๋๋์ง ํ์ธํ๋ ๊ฒ
- API๊ฐ ์คํธ๋ ์ค ํ ์คํธ์์ ๋์ ํธ๋ํฝ์ ๊ฒฌ๋ ์ ์๋์ง ํ์ธํ๋ ๊ฒ
- API์ ๋ณด์ ์ทจ์ฝ์ ์ ๋ถ์ํ๋ ๊ฒ
โ ์ ๋ต: โ API์ ์์ฒญ๊ณผ ์๋ต์ด ์์๋ ์คํ์ ์ค์ํ๋์ง ํ์ธํ๋ ๊ฒ
๐ ํด์ค:
- ๊ณ์ฝ ํ
์คํธ(Contract Testing):
- API์ ์์ฒญ(Request)๊ณผ ์๋ต(Response)์ด ๋ฌธ์ํ๋ ์คํ(OpenAPI, Swagger) ๊ณผ ์ผ์นํ๋์ง ๊ฒ์ฆํ๋ ํ ์คํธ.
- ๋ง์ดํฌ๋ก์๋น์ค ํ๊ฒฝ์์ ์๋น์ค ๊ฐ API ๋ณ๊ฒฝ์ด ๊ธฐ์กด ์๋น์ค์ ์ํฅ์ ์ฃผ์ง ์๋์ง ํ์ธํ๋ ๋ฐ ํ์์ .
- ์: API ์๋ต์ JSON ํ๋ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋์์ ๋, ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋์ง ๊ฒ์ฆ.
- โก, โข, โฃ ํ๋ฆผ:
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ํ ์คํธ๋ DB ํ ์คํธ ์์ญ,
- ์คํธ๋ ์ค ํ ์คํธ๋ ์ฑ๋ฅ ํ ์คํธ ์์ญ,
- ๋ณด์ ํ ์คํธ๋ API ๋ณด์ ์์ญ์์ ๋ค๋ฃจ์ด์ผ ํจ.
โ 62. ์ฑ๋ฅ ํ ์คํธ์์ TPS์ ์๋ต ์๊ฐ ๋ฌธ์
๋ฌธ์ 62. ์ฑ๋ฅ ํ ์คํธ์์ TPS(Transactions Per Second)์ ์๋ต ์๊ฐ(Response Time)์ ๊ด๊ณ์ ๋ํ ์ค๋ช ์ผ๋ก ์ฌ๋ฐ๋ฅธ ๊ฒ์?
- TPS๊ฐ ์ฆ๊ฐํ๋ฉด ์๋ต ์๊ฐ๋ ํญ์ ์ฆ๊ฐํ๋ค.
- TPS๊ฐ ์ฆ๊ฐํด๋ ์๋ต ์๊ฐ์ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
- TPS๊ฐ ์ง๋์น๊ฒ ์ฆ๊ฐํ๋ฉด ์๋ต ์๊ฐ์ด ์ฆ๊ฐํ ์ ์๋ค.
- ์๋ต ์๊ฐ์ TPS์ ๊ด๊ณ์์ด ํญ์ ์ผ์ ํ๋ค.
โ ์ ๋ต: โข TPS๊ฐ ์ง๋์น๊ฒ ์ฆ๊ฐํ๋ฉด ์๋ต ์๊ฐ์ด ์ฆ๊ฐํ ์ ์๋ค.
๐ ํด์ค:
- TPS (Transactions Per Second): ์์คํ ์ด 1์ด ๋์ ์ฒ๋ฆฌํ ์ ์๋ ํธ๋์ญ์ ์.
- ์๋ต ์๊ฐ (Response Time): ์ฌ์ฉ์์ ์์ฒญ์ด ์๋ฒ์์ ์ฒ๋ฆฌ๋์ด ์๋ต์ด ๋ฐํ๋ ๋๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ.
- โข ์ ๋ต:
- TPS๊ฐ ์ฆ๊ฐํ๋ฉด ์๋ฒ์ ๋ถํ๊ฐ ์ปค์ง๊ณ , ํน์ ์๊ณ์ ์ ๋์ผ๋ฉด ์๋ต ์๊ฐ์ด ์ฆ๊ฐํ ์ ์์.
- ์: TPS 1,000์ผ ๋ ์๋ต ์๊ฐ์ด 100ms์๋ค๊ฐ, TPS 5,000์ด ๋๋ฉด ์๋ต ์๊ฐ์ด 500ms๊น์ง ์ฆ๊ฐํ ์ ์์.
- โ , โก, โฃ ํ๋ฆผ:
- TPS์ ์๋ต ์๊ฐ์ ํญ์ ๋์ผํ ๋น์จ๋ก ๋ณํ์ง ์์ผ๋ฉฐ, ์์คํ ์ ๋ถํ์ ์ธํ๋ผ ์ฑ๋ฅ์ ๋ฐ๋ผ ๋ค๋ฆ.
โ 63. ์ ์ ํ ์คํธ vs ๋์ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 63. ๋ค์ ์ค ์ ์ ํ ์คํธ(Static Testing) ๊ธฐ๋ฒ์ ํด๋นํ๋ ๊ฒ์?
- ์ ์ ์ฝ๋ ๋ถ์ (Static Code Analysis)
- ๋ก๋ ํ ์คํธ (Load Testing)
- UI ์๋ํ ํ ์คํธ (UI Automation Testing)
- ๋ณด์ ์ทจ์ฝ์ ํ์ง ํ ์คํธ (Penetration Testing)
โ ์ ๋ต: โ ์ ์ ์ฝ๋ ๋ถ์ (Static Code Analysis)
๐ ํด์ค:
- ์ ์ ํ
์คํธ (Static Testing): ์ฝ๋๋ฅผ ์คํํ์ง ์๊ณ ๊ฒฐํจ์ ์ฐพ๋ ๊ธฐ๋ฒ.
- ์: ์ฝ๋ ๋ฆฌ๋ทฐ(Code Review), ์ ์ ์ฝ๋ ๋ถ์(SonarQube, ESLint), ์๊ตฌ์ฌํญ ๋ฆฌ๋ทฐ.
- ๋์ ํ
์คํธ (Dynamic Testing): ์ค์ ์ํํธ์จ์ด๋ฅผ ์คํํ๋ฉด์ ๊ฒฐํจ์ ์ฐพ๋ ๊ธฐ๋ฒ.
- ์: ๋ก๋ ํ ์คํธ, UI ์๋ํ ํ ์คํธ, ๋ณด์ ์ทจ์ฝ์ ํ์ง ํ ์คํธ.
- โก, โข, โฃ ํ๋ฆผ:
- ๋ก๋ ํ ์คํธ, UI ์๋ํ ํ ์คํธ, ๋ณด์ ํ ์คํธ๋ ๋์ ํ ์คํธ์ ์ํจ.
โ 64. ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์คํธ ๋ฌธ์
๋ฌธ์ 64. ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์คํธ์์ "๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ(Integrity)"์ ๊ฒ์ฆํ๋ ๊ฐ์ฅ ์ค์ํ ๋ฐฉ๋ฒ์?
- ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ก์ปฌ ํ์ผ๋ก ๋ฐฑ์ ํ๋ค.
- ACID ์์น์ ์ ์ฉํ์ฌ ํธ๋์ญ์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ํ๋๋์ง ๊ฒ์ฆํ๋ค.
- SQL Injection ๊ณต๊ฒฉ์ด ๊ฐ๋ฅํ์ง ํ ์คํธํ๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ฌ๋ฌ ๊ฐ์ ์๋ฒ์์ ๋์ผํ ๋ฐ์ดํฐ ์ํ๋ฅผ ์ ์งํ๋์ง ํ์ธํ๋ค.
โ ์ ๋ต: โก ACID ์์น์ ์ ์ฉํ์ฌ ํธ๋์ญ์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ํ๋๋์ง ๊ฒ์ฆํ๋ค.
๐ ํด์ค:
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ(Integrity) ๋ณด์ฅ์ ์ํ ํต์ฌ ์์:
- ACID ์์น:
- Atomicity(์์์ฑ): ํธ๋์ญ์ ์ด "์์ ํ ์คํ๋๊ฑฐ๋, ์ ํ ์คํ๋์ง ์์์ผ ํจ".
- Consistency(์ผ๊ด์ฑ): ๋ฐ์ดํฐ๊ฐ ํญ์ ์ผ๊ด๋ ์ํ๋ฅผ ์ ์งํด์ผ ํจ.
- Isolation(๊ณ ๋ฆฝ์ฑ): ํธ๋์ญ์ ์ด ๋ค๋ฅธ ํธ๋์ญ์ ๊ณผ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋์ด์ผ ํจ.
- Durability(์ง์์ฑ): ํธ๋์ญ์ ์ด ์๋ฃ๋ ํ์๋ ๋ฐ์ดํฐ๊ฐ ์์ค๋์ง ์์์ผ ํจ.
- ACID ์์น:
- โ , โข, โฃ ํ๋ฆผ:
- ๋ฐฑ์ ์ ๋ฌด๊ฒฐ์ฑ๊ณผ ๊ด๋ จ ์์.
- SQL Injection ํ ์คํธ๋ ๋ณด์ ํ ์คํธ ์์ญ.
- ๋ฐ์ดํฐ ๋๊ธฐํ๋ ๋ถ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฒ์ฆ์์ ์ค์ํ์ง๋ง, ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ๊ณผ๋ ์ง์ ์ ์ธ ๊ด๋ จ์ด ์์.
โ 65. ๋ณด์ ํ ์คํธ์์ OWASP Top 10 ๋ฌธ์
๋ฌธ์ 65. OWASP Top 10์์ "Broken Authentication" ์ทจ์ฝ์ ์ ๋ํ ์ค๋ช ์ผ๋ก ์ฌ๋ฐ๋ฅธ ๊ฒ์?
- API๊ฐ ๋น์ ์์ ์ธ ํธ๋ํฝ์ ๊ฐ์งํ์ง ๋ชปํ๋ ๋ฌธ์
- ์ฌ์ฉ์ ๋ก๊ทธ์ธ ๊ณผ์ ์์ ์ธ์ฆ์ด ์ทจ์ฝํ์ฌ ๊ณต๊ฒฉ์๊ฐ ๊ณ์ ์ ํ์ทจํ ์ ์๋ ๋ฌธ์
- ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ ๋ ฅ ๊ฐ์ ๊ฒ์ฆํ์ง ์์ ์ ์ฑ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ ๋ฌธ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ SQL Injection์ด ๋ฐ์ํ๋ ๋ฌธ์
โ ์ ๋ต: โก ์ฌ์ฉ์ ๋ก๊ทธ์ธ ๊ณผ์ ์์ ์ธ์ฆ์ด ์ทจ์ฝํ์ฌ ๊ณต๊ฒฉ์๊ฐ ๊ณ์ ์ ํ์ทจํ ์ ์๋ ๋ฌธ์
๐ ํด์ค:
- Broken Authentication(์ทจ์ฝํ ์ธ์ฆ):
- ๊ณต๊ฒฉ์๊ฐ ์ฝํ ํจ์ค์๋, ์ธ์ ํ์ทจ, ์๋ ๋ก๊ทธ์ธ ๋ฌธ์ ๋ฑ์ ์ ์ฉํ์ฌ ๊ณ์ ์ ํ์ทจํ๋ ๊ณต๊ฒฉ.
- ์:
- "admin/admin123" ๊ฐ์ ์ทจ์ฝํ ๋น๋ฐ๋ฒํธ ์ฌ์ฉ.
- ์ฟ ํค์์ ์ธ์ ID๋ฅผ ํ์ทจํ์ฌ ๋ก๊ทธ์ธ ์ ์ง.
- ๋ค์ค ์ธ์ฆ(MFA)์ ์ ์ฉํ์ง ์์ ๊ณ์ ์ด ์ฝ๊ฒ ํ์ทจ๋๋ ๋ฌธ์ ๋ฐ์.
- โ , โข, โฃ ํ๋ฆผ:
- ๋น์ ์ ํธ๋ํฝ ๊ฐ์ง๋ DDoS ๊ณต๊ฒฉ ๋์ ์์ญ.
- ์ ๋ ฅ ๊ฐ ๊ฒ์ฆ ๋ฌธ์ ๋ XSS(Cross-Site Scripting) ๊ณต๊ฒฉ๊ณผ ๊ด๋ จ.
- SQL Injection์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณด์ ์ทจ์ฝ์ .
โ ์ถ๊ฐ ์ฌํ ๊ฐ๋ ์ ๋ฆฌ
๐ ์ํ์์ ์์ฃผ ์ถ์ ๋๋ ํท๊ฐ๋ฆฌ๋ ๊ฐ๋ ๋ค
โ
API ํ
์คํธ์์ ๊ณ์ฝ ํ
์คํธ(Contract Testing)์ ํ์์ฑ ์ดํด
โ
์ฑ๋ฅ ํ
์คํธ์์ TPS(Transactions Per Second)์ ์๋ต ์๊ฐ ๊ด๊ณ ๋ถ์
โ
์ ์ ํ
์คํธ vs ๋์ ํ
์คํธ ์ฐจ์ด ๋ฐ ์ฃผ์ ๊ธฐ๋ฒ ์์ง
โ
๋ฐ์ดํฐ๋ฒ ์ด์ค ํ
์คํธ์์ ACID ์์น์ด ์ค์ํ ์ด์ ์ดํด
โ
๋ณด์ ํ
์คํธ์์ OWASP Top 10(Broken Authentication, SQL Injection ๋ฑ) ๊ฐ๋
์์ง
โ 66. ํ ์คํธ ์๋ํ ์ ๋ต ๋ฌธ์
๋ฌธ์ 66. ํ ์คํธ ์๋ํ๋ฅผ ๋์ ํ ๋ ๊ฐ์ฅ ๋จผ์ ๊ณ ๋ คํด์ผ ํ ์ฌํญ์?
- ๋ชจ๋ ํ ์คํธ๋ฅผ 100% ์๋ํํ ์ ์๋์ง ๊ฒํ ํ๋ค.
- ์๋ํํ ํ ์คํธ ์ผ์ด์ค์ ์ฐ์ ์์๋ฅผ ์ ํ๋ค.
- ํ ์คํธ ์๋ํ ๋๊ตฌ๋ฅผ ๋จผ์ ์ ์ ํ ํ, ์๋ํ ๋ฒ์๋ฅผ ๊ฒฐ์ ํ๋ค.
- ๊ฐ๋ฐ์๊ฐ ๋ชจ๋ ํ ์คํธ ์๋ํ๋ฅผ ์ง์ ์ํํ๋๋ก ํ๋ค.
โ ์ ๋ต: โก ์๋ํํ ํ ์คํธ ์ผ์ด์ค์ ์ฐ์ ์์๋ฅผ ์ ํ๋ค.
๐ ํด์ค:
- ํ
์คํธ ์๋ํ ์ ๋ต์ ํต์ฌ:
- ์๋ํํ ํ ์คํธ๋ฅผ ์ ์ ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํจ.
- ๋ฐ๋ณต์ ์ด๊ณ ์คํ ๋น๋๊ฐ ๋์ ํ ์คํธ๋ฅผ ์ฐ์ ์ ์ผ๋ก ์๋ํํด์ผ ํจ.
- ์: ํ๊ท ํ ์คํธ(Regression Testing), API ํ ์คํธ, ๋ก๊ทธ์ธ/ํ์๊ฐ์ ํ ์คํธ ๋ฑ.
- โ , โข, โฃ ํ๋ฆผ:
- 100% ์๋ํ๋ ํ์ค์ ์ผ๋ก ๋ถ๊ฐ๋ฅํจ.
- ๋๊ตฌ ์ ์ ๋ณด๋ค ๋ฌด์์ ์๋ํํ ์ง ์ ํ๋ ๊ฒ์ด ์ฐ์ .
- ๊ฐ๋ฐ์๊ฐ ์๋ํ๋ฅผ ์ํํ๋ ๊ฒ๋ ๊ฐ๋ฅํ์ง๋ง, QA ํ๊ณผ ํ์ ์ด ํ์ํจ.
โ 67. API ํ ์คํธ์์ ์ํ ์ฝ๋ ๋ฌธ์
๋ฌธ์ 67. API ํ ์คํธ์์ HTTP 429 Too Many Requests ์๋ต์ด ์๋ฏธํ๋ ๊ฒ์?
- ํด๋ผ์ด์ธํธ ์์ฒญ์ด ์ฌ๋ฐ๋ฅด์ง ์์์ ์๋ฏธํ๋ค.
- ์๋ฒ ๋ด๋ถ ์ค๋ฅ๋ก ์ธํด ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์์ ์๋ฏธํ๋ค.
- ์ฌ์ฉ์๊ฐ ๋๋ฌด ๋ง์ ์์ฒญ์ ๋ณด๋๊ธฐ ๋๋ฌธ์ ์ ํ์ด ๊ฑธ๋ ธ์์ ์๋ฏธํ๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์ธ์ฆ๋์ง ์์์์ ์๋ฏธํ๋ค.
โ ์ ๋ต: โข ์ฌ์ฉ์๊ฐ ๋๋ฌด ๋ง์ ์์ฒญ์ ๋ณด๋๊ธฐ ๋๋ฌธ์ ์ ํ์ด ๊ฑธ๋ ธ์์ ์๋ฏธํ๋ค.
๐ ํด์ค:
- HTTP ์ํ ์ฝ๋:
- 400 Bad Request → ํด๋ผ์ด์ธํธ ์์ฒญ์ด ์๋ชป๋จ.
- 500 Internal Server Error → ์๋ฒ ๋ด๋ถ ์ค๋ฅ.
- 429 Too Many Requests → API ์์ฒญ์ด ๋๋ฌด ๋ง์ ์๋ฒ์์ ์์ฒญ์ ์ ํํจ.
- 401 Unauthorized → ํด๋ผ์ด์ธํธ๊ฐ ์ธ์ฆ๋์ง ์์.
- โข ์ ๋ต:
- API ์๋ฒ์์ Rate Limiting(์์ฒญ ์ ํ) ์ ์ค์ ํ ๊ฒฝ์ฐ ๋ฐ์ํ๋ ์๋ต ์ฝ๋.
- ์: ์ด๋น 100๊ฐ์ ์์ฒญ๋ง ํ์ฉํ๋ API์์ 101๋ฒ์งธ ์์ฒญ์ ๋ณด๋ด๋ฉด 429 Too Many Requests ์๋ต์ ๋ฐ์.
โ 68. ๋ณด์ ํ ์คํธ์์ CSRF ๋ฌธ์
๋ฌธ์ 68. CSRF(Cross-Site Request Forgery) ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์?
- ์ฌ์ฉ์ ์ ๋ ฅ๊ฐ์ ๊ฒ์ฆํ๊ณ ํํฐ๋งํ๋ค.
- HTTP ์์ฒญ์ CSRF ํ ํฐ์ ์ถ๊ฐํ๊ณ ๊ฒ์ฆํ๋ค.
- ๋ชจ๋ ์ฌ์ฉ์ ์์ฒญ์ HTTPS๋ก ์ํธํํ๋ค.
- ์๋ฒ๊ฐ ์์ฒญ์ ๋ฐ์ ๋ IP ์ฃผ์๋ฅผ ๊ฒ์ฌํ๋ค.
โ ์ ๋ต: โก HTTP ์์ฒญ์ CSRF ํ ํฐ์ ์ถ๊ฐํ๊ณ ๊ฒ์ฆํ๋ค.
๐ ํด์ค:
- CSRF (Cross-Site Request Forgery):
- ๊ณต๊ฒฉ์๊ฐ ์ฌ์ฉ์์ ์ธ์ ์ ์ด์ฉํ์ฌ ์์น ์๋ ์์ฒญ์ ์๋ฒ์ ๋ณด๋ผ ์ ์๋๋ก ์ ๋ํ๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ.
- ์: ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ ์ํ์์ ์ ์ฑ ๋งํฌ๋ฅผ ํด๋ฆญํ๋ฉด ๊ณต๊ฒฉ์๊ฐ ์ฌ์ฉ์์ ๊ณ์ ์ผ๋ก ์์ฒญ์ ๋ณด๋ผ ์ ์์.
- ๋ฐฉ์ง ๋ฐฉ๋ฒ:
- CSRF ํ ํฐ ์ฌ์ฉ: ๋ชจ๋ ์์ฒญ์ ๊ณ ์ ํ CSRF ํ ํฐ์ ํฌํจํ์ฌ ์๋ฒ์์ ์ด๋ฅผ ๊ฒ์ฆ.
- SameSite ์ฟ ํค ์ค์ : CSRF ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฟ ํค ์ ์ฑ ์ ์ค์ .
- Referrer ๊ฒ์ฆ: ์์ฒญ์ ์ถ์ฒ๋ฅผ ํ์ธํ์ฌ ์ ๋ขฐํ ์ ์๋ ๋๋ฉ์ธ์ธ์ง ๊ฒ์ฆ.
- โ , โข, โฃ ํ๋ฆผ:
- ์ ๋ ฅ๊ฐ ๊ฒ์ฆ(XSS ๋ฐฉ์ง), HTTPS ์ฌ์ฉ(๋ฐ์ดํฐ ์ํธํ), IP ๊ฒ์ฌ(๋ณด์ ๊ฐํ)๋ ์ค์ํ์ง๋ง CSRF๋ฅผ ์๋ฒฝํ๊ฒ ๋ฐฉ์งํ์ง ๋ชปํจ.
โ 69. ์ฑ๋ฅ ํ ์คํธ์์ ๋ถํ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 69. ๋ถํ ํ ์คํธ(Load Testing)์ ์ฃผ์ ๋ชฉ์ ์?
- ์๋ฒ๊ฐ ๊ณผ๋ถํ ์ํ์์ ์ด๋ป๊ฒ ๋ณต๊ตฌ๋๋์ง ํ์ธํ๋ ๊ฒ.
- ์ ์์ ์ธ ์ฌ์ฉ๋์์ ์์คํ ์ ์ฑ๋ฅ์ ์ธก์ ํ๋ ๊ฒ.
- ํดํน ์๋๊ฐ ์์ ๊ฒฝ์ฐ ์์คํ ์ด ์ด๋ป๊ฒ ๋ฐ์ํ๋์ง ํ์ธํ๋ ๊ฒ.
- ์ฌ์ฉ์์ ์์ฒญ์ ๋ถ์ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํํ๋ ๊ฒ.
โ ์ ๋ต: โก ์ ์์ ์ธ ์ฌ์ฉ๋์์ ์์คํ ์ ์ฑ๋ฅ์ ์ธก์ ํ๋ ๊ฒ.
๐ ํด์ค:
- ๋ถํ ํ
์คํธ(Load Testing):
- ์์คํ ์ด ์ ์์ ์ธ ํธ๋ํฝ์์ ์ผ๋ง๋ ์์ ์ ์ผ๋ก ๋์ํ๋์ง ํ๊ฐํ๋ ํ ์คํธ.
- ์: ํ๋ฃจ ํ๊ท 1๋ง ๋ช ์ด ์ ์ํ๋ ์น์ฌ์ดํธ๊ฐ ๋ฌธ์ ์์ด ๋์ํ๋์ง ํ์ธ.
- โ , โข, โฃ ํ๋ฆผ:
- ๊ณผ๋ถํ ์ํ์์์ ๋ณต๊ตฌ๋ ์คํธ๋ ์ค ํ ์คํธ(Stress Testing) ์์ญ.
- ํดํน ์๋์ ๋ํ ๋ฐ์์ ๋ณด์ ํ ์คํธ(Security Testing) ์์ญ.
- ์ ํ๋ฆฌ์ผ์ด์ ์ต์ ํ๋ ์ฑ๋ฅ ๋ถ์์ ์ผ๋ถ์ง๋ง, ๋ถํ ํ ์คํธ์ ์ง์ ์ ์ธ ๋ชฉ์ ์ ์๋.
โ 70. ๋ชจ๋ฐ์ผ ์ฑ ๋ฐฐํฐ๋ฆฌ ์ฌ์ฉ๋ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 70. ๋ชจ๋ฐ์ผ ์ฑ์ ๋ฐฐํฐ๋ฆฌ ์๋ชจ๋์ ํ ์คํธํ ๋ ๊ณ ๋ คํด์ผ ํ ๊ฐ์ฅ ์ค์ํ ์์๋?
- ์ฑ์ด ๋ค์ํ ๋คํธ์ํฌ ํ๊ฒฝ์์ ์ด๋ป๊ฒ ๋์ํ๋์ง ํ์ธํ๋ ๊ฒ.
- ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋ ๋ ๋ฐฐํฐ๋ฆฌ ์ฌ์ฉ๋์ ์ธก์ ํ๋ ๊ฒ.
- ์ฑ์ด ์ต์ ๋ฒ์ ์ ์๋๋ก์ด๋์์๋ง ์คํ๋๋์ง ํ์ธํ๋ ๊ฒ.
- ์ฑ์ ์ค์น ํ์ผ(APK)์ ํฌ๊ธฐ๋ฅผ ์ต์ํํ๋ ๊ฒ.
โ ์ ๋ต: โก ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋ ๋ ๋ฐฐํฐ๋ฆฌ ์ฌ์ฉ๋์ ์ธก์ ํ๋ ๊ฒ.
๐ ํด์ค:
- ๋ชจ๋ฐ์ผ ๋ฐฐํฐ๋ฆฌ ์๋ชจ ํ
์คํธ:
- ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋ ๋ CPU, ๋คํธ์ํฌ, GPS ์ฌ์ฉ๋์ด ๋ง์ผ๋ฉด ๋ฐฐํฐ๋ฆฌ ์๋ชจ๊ฐ ์ฌํ ์ ์์.
- ๋ฐฐํฐ๋ฆฌ ํ๋กํ์ผ๋ง ๋๊ตฌ:
- Android Profiler
- Battery Historian
- โ , โข, โฃ ํ๋ฆผ:
- ๋คํธ์ํฌ ํ๊ฒฝ ํ ์คํธ๋ ์ค์ํ์ง๋ง, ๋ฐฐํฐ๋ฆฌ ํ ์คํธ์ ํต์ฌ์ ์๋.
- ์ต์ ๋ฒ์ ์์๋ง ์คํ๋๋ ๊ฒ์ด ์๋๋ผ ๋ค์ํ OS ๋ฒ์ ์์ ํ ์คํธํด์ผ ํจ.
- APK ํฌ๊ธฐ๊ฐ ์๋ค๊ณ ๋ฐฐํฐ๋ฆฌ ์๋ชจ๊ฐ ์ค์ด๋๋ ๊ฒ์ ์๋.
โ ์ถ๊ฐ ์ฌํ ๊ฐ๋ ์ ๋ฆฌ
๐ ์ํ์์ ์์ฃผ ์ถ์ ๋๋ ํท๊ฐ๋ฆฌ๋ ๊ฐ๋ ๋ค
โ
ํ
์คํธ ์๋ํ ์ ๋ต - ๋ฌด์์ ์๋ํํด์ผ ํ๋์ง ๋จผ์ ๊ฒฐ์ ํ๋ ๊ฒ์ด ์ค์
โ
API ํ
์คํธ์์ 429 Too Many Requests ์๋ฏธ ๋ฐ Rate Limiting ๊ฐ๋
์์ง
โ
๋ณด์ ํ
์คํธ์์ CSRF ๋ฐฉ์ง ๋ฐฉ๋ฒ(CSRF ํ ํฐ ํ์ฉ)
โ
์ฑ๋ฅ ํ
์คํธ์์ ๋ถํ ํ
์คํธ(Load Testing)์ ์คํธ๋ ์ค ํ
์คํธ ์ฐจ์ด ์ดํด
โ
๋ชจ๋ฐ์ผ ์ฑ ๋ฐฐํฐ๋ฆฌ ์ฌ์ฉ๋ ํ
์คํธ - ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ฐฐํฐ๋ฆฌ ์๋ชจ ๋ถ์ ํ์
โ 71. ์๋ํ ํ ์คํธ ์ ์ง๋ณด์ ๋ฌธ์
๋ฌธ์ 71. ์๋ํ ํ ์คํธ์ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๋ ๊ฐ์ฅ ์ฃผ์ํ ์์ธ์?
- ๋ชจ๋ ํ ์คํธ๋ฅผ ๋งค์ผ ์คํํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ UI๊ฐ ์์ฃผ ๋ณ๊ฒฝ๋๊ธฐ ๋๋ฌธ์ด๋ค.
- ๊ฐ๋ฐ์๊ฐ ์ง์ ํ ์คํธ๋ฅผ ์ํํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ์๋ํ ํ ์คํธ๊ฐ ์๋ ํ ์คํธ๋ณด๋ค ๋๋ฆฌ๊ธฐ ๋๋ฌธ์ด๋ค.
โ ์ ๋ต: โก ์ ํ๋ฆฌ์ผ์ด์ UI๊ฐ ์์ฃผ ๋ณ๊ฒฝ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๐ ํด์ค:
- ์๋ํ ํ
์คํธ์ ์ ์ง๋ณด์ ๋ฌธ์ :
- UI๊ฐ ์์ฃผ ๋ณ๊ฒฝ๋๋ฉด, ๊ธฐ์กด์ ํ ์คํธ ์คํฌ๋ฆฝํธ๊ฐ ์คํจํ ๊ฐ๋ฅ์ฑ์ด ๋์.
- ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ํ์ด์ง ๊ฐ์ฒด ๋ชจ๋ธ (Page Object Model, POM) ์ ์ฉ → UI ๋ณ๊ฒฝ ์ ์ํฅ ์ต์ํ.
- CSS/XPath ๋์ ์์ ์ ์ธ ์์ ์ ํ์ ํ์ฉ.
- API ํ ์คํธ์ ๊ฒฐํฉํ์ฌ ํ๋ฐํธ์๋ ๋ณํ์ ๋ ์์กดํ๋ ์๋ํ ๊ตฌ์ถ.
- โ , โข, โฃ ํ๋ฆผ:
- ๋งค์ผ ์คํํ์ง ์๋ ๊ฒ์ด ์ ์ง๋ณด์๋ฅผ ์ด๋ ต๊ฒ ๋ง๋ค์ง ์์.
- ๊ฐ๋ฐ์๊ฐ ์ง์ ํ ์คํธ๋ฅผ ์ํํ๋ ๊ฒ๊ณผ ์ ์ง๋ณด์ ๋์ด๋๋ ๋ณ๊ฐ.
- ์๋ํ ํ ์คํธ๊ฐ ์๋ ํ ์คํธ๋ณด๋ค ๋๋ฆฌ์ง ์์.
โ 72. API ํ ์คํธ์์ ์๋ต ์๊ฐ ๋ฌธ์
๋ฌธ์ 72. API ํ ์คํธ์์ ์๋ต ์๊ฐ์ด ๋น์ ์์ ์ผ๋ก ๊ธธ์ด์ง ๊ฒฝ์ฐ, ๊ฐ์ฅ ๋จผ์ ํ์ธํด์ผ ํ ์์๋?
- API์ HTTP ์ํ ์ฝ๋
- API์ ๋ฐ์ดํฐ ์๋ต ํฌ๊ธฐ
- ํด๋ผ์ด์ธํธ์ ํ๋ฉด ํด์๋
- ๋คํธ์ํฌ์ IP ์ฃผ์
โ ์ ๋ต: โก API์ ๋ฐ์ดํฐ ์๋ต ํฌ๊ธฐ
๐ ํด์ค:
- API ์๋ต ์๊ฐ์ด ๊ธธ์ด์ง๋ ์ฃผ์ ์์ธ:
- ๋ฐ์ดํฐ ์๋ต ํฌ๊ธฐ: ๋๋ฌด ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ฉด ๋คํธ์ํฌ ์ ์ก ์๊ฐ์ด ๊ธธ์ด์ง.
- ๋ถํ์ํ API ํธ์ถ: ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๋ฒ ์์ฒญํ๋ฉด ์ฑ๋ฅ ์ ํ.
- ์๋ฒ ๋ถํ ์ฆ๊ฐ: ๋์์ ๋๋ฌด ๋ง์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ.
- ํด๊ฒฐ ๋ฐฉ๋ฒ:
- Pagination (ํ์ด์ง) ์ ์ฉ: ํ ๋ฒ์ ๋ฐํํ๋ ๋ฐ์ดํฐ ์์ ์ค์.
- Compression (์์ถ): gzip ์ ์ฉํ์ฌ ์๋ต ํฌ๊ธฐ ์ค์ด๊ธฐ.
- API ์บ์ฑ: ์์ฃผ ์์ฒญ๋๋ ๋ฐ์ดํฐ๋ ์บ์ ํ์ฉ.
- โ , โข, โฃ ํ๋ฆผ:
- HTTP ์ํ ์ฝ๋๋ ์์ฒญ ์ฑ๊ณต ์ฌ๋ถ๋ง ํ๋จํ ์ ์์.
- ํ๋ฉด ํด์๋๋ API ์๋ต ์๋์ ๋ฌด๊ด.
- ๋คํธ์ํฌ IP ์ฃผ์๋ API ์๋ ๋ฌธ์ ํด๊ฒฐ์ ์ง์ ์ ์ธ ์ํฅ์ ์ฃผ์ง ์์.
โ 73. ์ฑ๋ฅ ํ ์คํธ์์ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฌธ์
๋ฌธ์ 73. ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฉ๋ชจ๋ฆฌ ๋์(Memory Leak)๋ฅผ ํ์งํ๋ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์?
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ๋ฒ ์คํํ์ฌ ์๋๊ฐ ๋๋ ค์ง๋์ง ํ์ธํ๋ค.
- ์ฅ์๊ฐ ์คํ ํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๋ค.
- ์์ค ์ฝ๋๋ฅผ ์ ์ ๋ถ์ํ์ฌ ์ค๋ฅ๋ฅผ ์ฐพ๋๋ค.
- API ์๋ต ์๋๋ฅผ ์ธก์ ํ๋ค.
โ ์ ๋ต: โก ์ฅ์๊ฐ ์คํ ํ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๋ค.
๐ ํด์ค:
- ๋ฉ๋ชจ๋ฆฌ ๋์(Memory Leak):
- ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ์ง ์์ ์ ์ ๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๊ฒ ๋๋ ํ์.
- ์ฅ์๊ฐ ์คํ ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ง์์ ์ผ๋ก ์ฆ๊ฐํ๋์ง๋ฅผ ๋ชจ๋ํฐ๋งํด์ผ ํจ.
- Heap Dump ๋ถ์, LeakCanary(Android), VisualVM(Java) ๋ฑ์ ํ์ฉ.
- โ , โข, โฃ ํ๋ฆผ:
- ๋จ์ ์คํ์ผ๋ก๋ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๊ฐ์งํ๊ธฐ ์ด๋ ค์.
- ์ ์ ๋ถ์์ ์ผ๋ถ ์ค๋ฅ๋ ๋ฐ๊ฒฌ ๊ฐ๋ฅํ์ง๋ง ๋์ ๋ถ์์ด ํ์ํจ.
- API ์๋ต ์๋์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ ๋ฌด๊ด.
โ 74. ์ ์์ผ QA์์ ํ ์คํธ ์ ๋ต ๋ฌธ์
๋ฌธ์ 74. ์ ์์ผ(Agile) ๊ฐ๋ฐ ํ๊ฒฝ์์ QA์ ์ญํ ๋ก ๊ฐ์ฅ ์ ์ ํ ๊ฒ์?
- ๊ฐ๋ฐ์ด ์๋ฃ๋ ํ ํ ์คํธ๋ฅผ ์ํํ๋ค.
- ๊ฐ๋ฐ ๋จ๊ณ๋ง๋ค ์๋ํ ํ ์คํธ๋ฅผ ์คํํ๊ณ ํผ๋๋ฐฑ์ ์ ๊ณตํ๋ค.
- ๋ชจ๋ ๊ธฐ๋ฅ์ ์๋ ํ ์คํธ๋ก ๊ฒ์ฆํ๋ค.
- ๊ฐ๋ฐ๊ณผ QA๋ ๋ณ๋๋ก ์์ ํด์ผ ํ๋ค.
โ ์ ๋ต: โก ๊ฐ๋ฐ ๋จ๊ณ๋ง๋ค ์๋ํ ํ ์คํธ๋ฅผ ์คํํ๊ณ ํผ๋๋ฐฑ์ ์ ๊ณตํ๋ค.
๐ ํด์ค:
- ์ ์์ผ์์ QA์ ์ญํ :
- Shift-Left Testing: ๊ฐ๋ฐ ์ด๊ธฐ์ ํ ์คํธ๋ฅผ ์ํํ์ฌ ๊ฒฐํจ์ ๋น ๋ฅด๊ฒ ๋ฐ๊ฒฌ.
- TDD(Test-Driven Development): ๊ฐ๋ฐ์๊ฐ ์ฝ๋ ์์ฑ ์ ์ ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋จผ์ ์์ฑ.
- CI/CD ํ๊ฒฝ์์ ์๋ํ ํ ์คํธ ์คํ: ์ง์์ ์ธ ํ ์คํธ์ ํผ๋๋ฐฑ ์ ๊ณต.
- โ , โข, โฃ ํ๋ฆผ:
- ๊ฐ๋ฐ ํ ํ ์คํธ๋ฅผ ์ํํ๋ฉด ๊ฒฐํจ ์์ ๋น์ฉ์ด ์ฆ๊ฐํจ.
- ๋ชจ๋ ๊ธฐ๋ฅ์ ์๋์ผ๋ก ํ ์คํธํ๋ ๊ฒ์ ๋นํจ์จ์ .
- ์ ์์ผ ํ๊ฒฝ์์๋ ๊ฐ๋ฐ๊ณผ QA๊ฐ ๊ธด๋ฐํ๊ฒ ํ์ ํด์ผ ํจ.
โ 75. ์ ๊ทผ์ฑ ํ ์คํธ์์ ์คํฌ๋ฆฐ ๋ฆฌ๋ ๋ฌธ์
๋ฌธ์ 75. ์ ๊ทผ์ฑ ํ ์คํธ(Accessibility Testing)์์ ์คํฌ๋ฆฐ ๋ฆฌ๋(Screen Reader)๊ฐ ์ค์ํ ์ด์ ๋?
- ๋น์๊ฐ์ ์ฌ์ฉ์(์๊ฐ ์ฅ์ ์ธ)๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ ์ ์๋๋ก ๋๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ชจ๋ ์น์ฌ์ดํธ์์ ํ์๋ก ์ ์ฉํด์ผ ํ๋ ์์์ด๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ณด์ ์ทจ์ฝ์ ์ ์ฐพ๋ ๋ฐ ๋์์ ์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ธก์ ํ๋ ๊ธฐ์ค์ด๊ธฐ ๋๋ฌธ์ด๋ค.
โ ์ ๋ต: โ ๋น์๊ฐ์ ์ฌ์ฉ์(์๊ฐ ์ฅ์ ์ธ)๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ ์ ์๋๋ก ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๐ ํด์ค:
- ์คํฌ๋ฆฐ ๋ฆฌ๋(Screen Reader):
- ์๊ฐ ์ฅ์ ์ธ๋ ์น์ฌ์ดํธ ๋ฐ ๋ชจ๋ฐ์ผ ์ฑ์ ์ด์ฉํ ์ ์๋๋ก ๋๋ ํ์์ ์ธ ์ ๊ทผ์ฑ ๋๊ตฌ.
- Windows: NVDA, JAWS / Mac: VoiceOver / Android: TalkBack.
- ์น ์์(๋ฒํผ, ๋งํฌ, ์ ๋ ฅ ํ๋ ๋ฑ)๊ฐ ์ ์ ํ๊ฒ ์ฝํ๋์ง ํ ์คํธ ํ์.
- โก, โข, โฃ ํ๋ฆผ:
- ๋ชจ๋ ์น์ฌ์ดํธ์์ ํ์๋ ์๋์ง๋ง, ์ ๊ทผ์ฑ ํ์ค(WCAG)์ ์ค์ํด์ผ ํจ.
- ๋ณด์ ์ทจ์ฝ์ ๊ณผ๋ ๊ด๋ จ์ด ์์.
- ์ฑ๋ฅ ํ ์คํธ์ ๊ธฐ์ค์ด ์๋.
โ ์ถ๊ฐ ์ฌํ ๊ฐ๋ ์ ๋ฆฌ
๐ Pretest ๋๋น ์ค์ ๊ฐ๋
โ
ํ
์คํธ ์๋ํ ์ ์ง๋ณด์ - UI ๋ณ๊ฒฝ์ ๋๋นํ ์์ ์ ์ธ ์๋ํ ์ ๋ต ํ์
โ
API ํ
์คํธ์์ ์๋ต ์๋ ๊ฐ์ ์ ์ํ ๋ฐ์ดํฐ ์ต์ ํ(Pagination, Compression)
โ
์ฑ๋ฅ ํ
์คํธ์์ ๋ฉ๋ชจ๋ฆฌ ๋์ ํ์ง(Heap Dump, LeakCanary ํ์ฉ)
โ
์ ์์ผ QA - Shift-Left Testing, CI/CD ์๋ํ ํ
์คํธ์ ์ญํ ์ดํด
โ
์ ๊ทผ์ฑ ํ
์คํธ - ์คํฌ๋ฆฐ ๋ฆฌ๋๋ฅผ ํ์ฉํ UI ์์ฑ ์๋ด ๊ฒ์ฆ ํ์
โ 76. ํ ์คํธ ์๋ํ ์ ์ง๋ณด์ ์ต์ ํ ๋ฌธ์
๋ฌธ์ 76. ํ ์คํธ ์๋ํ ์ฝ๋์ ์ ์ง๋ณด์๋ฅผ ์ต์ ํํ๋ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์?
- ๋ชจ๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์คํํ๋ค.
- ๋จ์ํ UI ๋ณ๊ฒฝ์๋ ํ ์คํธ ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋์ง ์๋๋ก ์ค๊ณํ๋ค.
- ์๋ ํ ์คํธ๋ฅผ ์ต์ํํ๊ณ ๋ชจ๋ ๊ธฐ๋ฅ์ ์๋ํํ๋ค.
- ๋ชจ๋ UI ์์๋ฅผ XPath๋ก ์๋ณํ์ฌ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
โ ์ ๋ต: โก ๋จ์ํ UI ๋ณ๊ฒฝ์๋ ํ ์คํธ ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋์ง ์๋๋ก ์ค๊ณํ๋ค.
๐ ํด์ค:
- ํ
์คํธ ์๋ํ์ ์ ์ง๋ณด์์ฑ์ ๋์ด๋ ํต์ฌ ์ ๋ต:
- ํ์ด์ง ๊ฐ์ฒด ๋ชจ๋ธ (Page Object Model, POM) ์ ์ฉ → UI ๋ณ๊ฒฝ ์ ์ฝ๋ ์์ ์ต์ํ.
- CSS Selector, ID๋ฅผ ํ์ฉํ ์์ ์๋ณ → XPath๋ ์ ์ง๋ณด์์ฑ์ด ๋จ์ด์ง.
- API ๋ ์ด์ด์์ ํ ์คํธ ์คํ → UI ์์กด์ฑ์ ์ค์ฌ ์๋ํ ํ ์คํธ ์๋ ๊ฐ์ .
- โ , โข, โฃ ํ๋ฆผ:
- ๋ชจ๋ ํ ์คํธ๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์คํํ๋ฉด ์ค๋ณต ์ฝ๋๊ฐ ๋ง์์ง๊ณ ๊ด๋ฆฌ๊ฐ ์ด๋ ค์.
- ์๋ ํ ์คํธ๋ ์ฌ์ ํ ํ์ํ๋ฉฐ 100% ์๋ํ๋ ํ์ค์ ์ผ๋ก ๋ถ๊ฐ๋ฅํจ.
- XPath๋ UI ๋ณ๊ฒฝ ์ ๊นจ์ง๊ธฐ ์ฝ๊ธฐ ๋๋ฌธ์ ์ ์ง๋ณด์์ฑ์ด ๋ฎ์.
โ 77. API ์ฑ๋ฅ ํ ์คํธ์์ Rate Limiting ๋ฌธ์
๋ฌธ์ 77. API ์๋ฒ๊ฐ ์ด๋น ์ต๋ 1,000๊ฐ์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋๋ก ์ค๊ณ๋์์ ๋, Rate Limiting์ ์ ์ ํ ์ ์ฉํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์?
- API ์์ฒญ์ ๋ฌด์กฐ๊ฑด ์ฐจ๋จํ๊ณ ์ผ์ ์๊ฐ์ด ์ง๋ ํ ๋ค์ ํ์ฉํ๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋ผ ๋๋ง๋ค ๋๋ค ๋๊ธฐ ์๊ฐ์ ์ถ๊ฐํ๋ค.
- ํน์ ์๊ฐ ๋์ ํ์ฉ๋ ์์ฒญ ์๋ฅผ ์ด๊ณผํ๋ฉด 429 ์๋ต์ ๋ฐํํ๊ณ ์ฌ์๋ ์ง์ฐ์ ์ ๋ํ๋ค.
- ์์ฒญ์ด ๋ง์์ง๋ฉด ์๋์ผ๋ก ์๋ฒ๋ฅผ ํ์ฅํ์ฌ ์ฒ๋ฆฌํ๋๋ก ํ๋ค.
โ ์ ๋ต: โข ํน์ ์๊ฐ ๋์ ํ์ฉ๋ ์์ฒญ ์๋ฅผ ์ด๊ณผํ๋ฉด 429 ์๋ต์ ๋ฐํํ๊ณ ์ฌ์๋ ์ง์ฐ์ ์ ๋ํ๋ค.
๐ ํด์ค:
- Rate Limiting (์์ฒญ ์ ํ):
- ํน์ ์๊ฐ ๋ด์ ์์ฒญ ํ์๋ฅผ ์ ํํ์ฌ ์๋ฒ ๋ถํ๋ฅผ ๋ฐฉ์งํ๊ณ ๊ณต์ ํ ์ฌ์ฉ์ ๋ณด์ฅํ๋ ๊ธฐ๋ฒ.
- 429 Too Many Requests ์๋ต์ ๋ฐํํ๊ณ , Retry-After ํค๋๋ฅผ ํฌํจํ์ฌ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์๋ ๊ฐ๋ฅ ์๊ฐ์ ์ ์ ์๋๋ก ํด์ผ ํจ.
- โ , โก, โฃ ํ๋ฆผ:
- ๋ฌด์กฐ๊ฑด ์ฐจ๋จํ๋ฉด ์ฌ์ฉ์ ๊ฒฝํ์ด ๋๋น ์ง.
- ๋๋ค ๋๊ธฐ ์๊ฐ์ ์์ธก ๊ฐ๋ฅ์ฑ์ ๋ฎ์ถ์ด ๋นํจ์จ์ .
- ์๋ ์๋ฒ ํ์ฅ์ ๋น์ฉ์ด ๋๊ณ , Rate Limiting์ ๋ชฉ์ ๊ณผ ๋ค๋ฆ.
โ 78. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค ์ต์ ํ ๋ฌธ์
๋ฌธ์ 78. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ์ ์คํ ์๋๋ฅผ ์ต์ ํํ๊ธฐ ์ํด ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ๋ ๊ฐ์ฅ ์ค์ํ ๊ณ ๋ ค์ฌํญ์?
- ๋ชจ๋ ์ปฌ๋ผ์ ๋ํด ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ค.
- ์์ฃผ ์ฌ์ฉ๋๋ ๊ฒ์ ์กฐ๊ฑด(WHERE ์ )์ ํฌํจ๋ ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ค.
- ํ ์ด๋ธ์ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ์ฌ ์ฒ๋ฆฌ ์๋๋ฅผ ๋์ธ๋ค.
- ์ธ๋ฑ์ค๋ ํญ์ ๋จ์ผ ์ปฌ๋ผ์ผ๋ก๋ง ์์ฑํด์ผ ํ๋ค.
โ ์ ๋ต: โก ์์ฃผ ์ฌ์ฉ๋๋ ๊ฒ์ ์กฐ๊ฑด(WHERE ์ )์ ํฌํจ๋ ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ค.
๐ ํด์ค:
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค ์ต์ ํ:
- WHERE, JOIN, ORDER BY, GROUP BY ์ ์์ ์์ฃผ ์ฌ์ฉ๋๋ ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ฉด ์ฟผ๋ฆฌ ์คํ ์๋๋ฅผ ํ๊ธฐ์ ์ผ๋ก ๊ฐ์ ํ ์ ์์.
- ์:
sql๋ณต์ฌํธ์งCREATE INDEX idx_user_email ON users(email); SELECT * FROM users WHERE email = 'test@example.com';
- โ , โข, โฃ ํ๋ฆผ:
- ๋ชจ๋ ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ฉด ์ฐ๊ธฐ ์ฑ๋ฅ์ด ์ ํ๋๊ณ , ์ ์ฅ ๊ณต๊ฐ์ด ๋ญ๋น๋จ.
- ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๋ ๊ฒ์ ๋นํจ์จ์ .
- ๋ณตํฉ ์ธ๋ฑ์ค(Multi-Column Index)๋ ํ์ฉ ๊ฐ๋ฅํจ.
โ 79. ์ปจํ ์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 79. ์ปจํ ์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ํํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์?
- ์ปจํ ์ด๋ ๋ด๋ถ์์๋ง ํ ์คํธ๋ฅผ ์คํํ๊ณ ์ธ๋ถ ํ๊ฒฝ๊ณผ์ ์ฐ๊ฒฐ์ ๊ณ ๋ คํ์ง ์๋๋ค.
- ์ปจํ ์ด๋ ์์ ์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋ก๋ํ๋๋ก ๊ตฌ์ฑํ๋ค.
- ์ปจํ ์ด๋๋ณ๋ก ์๋ก ๋ค๋ฅธ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ ํ๊ฒฝ์ ๊ฒฉ๋ฆฌํ๋ค.
- ์ปจํ ์ด๋ ๋ด๋ถ์์๋ง ๋ก๊น ์ ์ํํ์ฌ ๋ก๊ทธ๋ฅผ ์ ์ฅํ๋ค.
โ ์ ๋ต: โก ์ปจํ ์ด๋ ์์ ์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋ก๋ํ๋๋ก ๊ตฌ์ฑํ๋ค.
๐ ํด์ค:
- ์ปจํ
์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
ํ
์คํธ์ ํต์ฌ:
- ํ
์คํธ ๋ฐ์ดํฐ ์๋ ๋ก๋ฉ:
- ์ปจํ ์ด๋๊ฐ ์์๋ ๋ ์ด๊ธฐ ๋ฐ์ดํฐ๋ฅผ ์ค์ ํ์ฌ ํ ์คํธ ํ๊ฒฝ์ ๋น ๋ฅด๊ฒ ๊ตฌ์ฑ ๊ฐ๋ฅ.
- docker-compose.yml์์ ๋ณผ๋ฅจ์ ํ์ฉํ๊ฑฐ๋, entrypoint.sh ์คํฌ๋ฆฝํธ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ ๋ฐฉ์ ์ฌ์ฉ.
- ํ
์คํธ ๋ฐ์ดํฐ ์๋ ๋ก๋ฉ:
- โ , โข, โฃ ํ๋ฆผ:
- ์ปจํ ์ด๋ ๋ด๋ถ์์๋ง ํ ์คํธํ๋ฉด ์ค์ ์ด์ ํ๊ฒฝ๊ณผ์ ํตํฉ ํ ์คํธ๋ฅผ ์ํํ ์ ์์.
- ๋คํธ์ํฌ๋ฅผ ๋ฌด์กฐ๊ฑด ๊ฒฉ๋ฆฌํ๋ฉด API ๋๋ DB ์ฐ๊ฒฐ ํ ์คํธ๊ฐ ์ด๋ ค์.
- ๋ก๊ทธ๋ ์ค์ํ๋ ๋ก๊น ์์คํ (์: ELK, Loki)์ผ๋ก ์ ์ฅํด์ผ ํจ.
โ 80. AI/ML ์์คํ ์ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 80. AI/ML ๋ชจ๋ธ์ ํ์ง์ ํ๊ฐํ๋ ๊ฐ์ฅ ์ค์ํ ํ ์คํธ ๋ฐฉ๋ฒ์?
- ๋ชจ๋ธ์ด ๋ชจ๋ ์ ๋ ฅ๊ฐ์์ ํญ์ ๋์ผํ ์ถ๋ ฅ์ ๋ฐํํ๋์ง ํ์ธํ๋ค.
- ๋ชจ๋ธ์ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ฆํ๊ณ ์ ๋ฐ๋(Precision)์ ์ฌํ์จ(Recall)์ ์ธก์ ํ๋ค.
- ์์ค ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋ถ์ํ์ฌ ๋ชจ๋ธ์ด ๋ ผ๋ฆฌ์ ์ผ๋ก ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๋์ง ํ์ธํ๋ค.
- ๋ชจ๋ธ์ ์คํ ์๋๊ฐ ๋์ผํ์ง ๋ฐ๋ณต์ ์ผ๋ก ์ธก์ ํ๋ค.
โ ์ ๋ต: โก ๋ชจ๋ธ์ ์์ธก ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ฆํ๊ณ ์ ๋ฐ๋(Precision)์ ์ฌํ์จ(Recall)์ ์ธก์ ํ๋ค.
๐ ํด์ค:
- AI/ML ๋ชจ๋ธ ํ
์คํธ์ ํต์ฌ:
- ๋ชจ๋ธ์ ํ์ง์ ํ๊ฐํ๋ ๋ํ์ ์ธ ์งํ:
- ์ ๋ฐ๋(Precision): ๋ชจ๋ธ์ด ๊ธ์ ์ ์ผ๋ก ์์ธกํ ๊ฒ ์ค ์ค์ ๋ก ๋ง์ ๋น์จ.
- ์ฌํ์จ(Recall): ์ค์ ์ ๋ต ์ค์์ ๋ชจ๋ธ์ด ๋งํ ๋น์จ.
- F1 Score: Precision๊ณผ Recall์ ์กฐํ ํ๊ท .
- ๋ชจ๋ธ์ ํ์ง์ ํ๊ฐํ๋ ๋ํ์ ์ธ ์งํ:
- โ , โข, โฃ ํ๋ฆผ:
- AI ๋ชจ๋ธ์ ์ ๋ ฅ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋์ํด์ผ ํจ.
- ์์ค ์ฝ๋ ๊ฐ๋ ์ฑ์ ๋ชจ๋ธ ํ์ง ํ๊ฐ์ ๋ฌด๊ดํจ.
- ์คํ ์๋๋ณด๋ค๋ ์์ธก ์ ํ๋๊ฐ ๋ ์ค์ํ ์์.
โ ๊ณ ๊ธ QA ๊ฐ๋ ์ ๋ฆฌ
๐ Pretest์์ ์ฌํ ๊ฐ๋ ๋๋น
โ
ํ
์คํธ ์๋ํ ์ต์ ํ - ์ ์ง๋ณด์์ฑ ๋์ ์๋ํ ์ฝ๋ ์ค๊ณ (POM, API ๊ธฐ๋ฐ ํ
์คํธ ์ ์ฉ)
โ
API Rate Limiting - 429 Too Many Requests ์๋ต ์ฒ๋ฆฌ ๋ฐ ์์ฒญ ์ฌ์๋ ์ ๋ต
โ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ ํ
์คํธ - WHERE ์ ์ต์ ํ๋ฅผ ์ํ ์ธ๋ฑ์ค ์ ์ฉ ์ ๋ต
โ
์ปจํ
์ด๋ ๊ธฐ๋ฐ ํ
์คํธ - ํ
์คํธ ๋ฐ์ดํฐ ์๋ ๋ก๋ ๋ฐ ๋ก๊น
์ ๋ต ์ดํด
โ
AI/ML ํ
์คํธ - ์ ๋ฐ๋(Precision) & ์ฌํ์จ(Recall) ํ๊ฐ ๋ฐฉ์ ์์ง
โ 81. ํ ์คํธ ์๋ํ์์ ํ๋ฌํ ๋ฌธ์ (Flaky Test) ํด๊ฒฐ
๋ฌธ์ 81. ํ ์คํธ ์๋ํ์์ "ํ๋ฌํ ํ ์คํธ(Flaky Test)"๊ฐ ๋ฐ์ํ๋ ์ฃผ์ ์์ธ์ ๋ฌด์์ธ๊ฐ?
- ๋ชจ๋ ํ ์คํธ๊ฐ ๋ณ๋ ฌ๋ก ์คํ๋๊ธฐ ๋๋ฌธ์ด๋ค.
- ํ ์คํธ ์คํ ๊ฒฐ๊ณผ๊ฐ ํญ์ ์ผ๊ด๋๊ฒ ๋์ค์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ์๋ํ๋ UI ํ ์คํธ๊ฐ ๋๋ฌด ๋น ๋ฅด๊ฒ ์คํ๋๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ชจ๋ ํ ์คํธ๊ฐ ๋๊ธฐ์ ์ผ๋ก ์คํ๋๊ธฐ ๋๋ฌธ์ด๋ค.
โ ์ ๋ต: โก ํ ์คํธ ์คํ ๊ฒฐ๊ณผ๊ฐ ํญ์ ์ผ๊ด๋๊ฒ ๋์ค์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
๐ ํด์ค:
- ํ๋ฌํ
ํ
์คํธ(Flaky Test)๋?
- ๋์ผํ ํ ์คํธ๋ฅผ ๋ฐ๋ณต ์คํํ ๋ ๊ฒฐ๊ณผ๊ฐ ์ผ๊ด๋์ง ์๊ฒ ๋ณํ๋ ํ ์คํธ.
- ํ ๋ฒ์ ํต๊ณผํ์ง๋ง, ๋ค๋ฅธ ์คํ์์๋ ์คํจํ๋ ๋ฌธ์ ๋ฐ์.
- ์ฃผ์ ์์ธ:
- ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฌธ์ : UI ์์๊ฐ ๋ก๋ฉ๋๊ธฐ ์ ์ ํ ์คํธ๊ฐ ์คํ๋จ.
- ํ ์คํธ ํ๊ฒฝ ์ฐจ์ด: ๋ก์ปฌ๊ณผ CI/CD ํ๊ฒฝ์์ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฆ.
- ์๋ฒ ์๋ต ์ง์ฐ: ๋คํธ์ํฌ ์์ฒญ ์๋๊ฐ ์ผ์ ํ์ง ์์.
- ํ ์คํธ ๊ฐ ์ข ์์ฑ: ํ๋์ ํ ์คํธ๊ฐ ๋ค๋ฅธ ํ ์คํธ์ ๊ฒฐ๊ณผ์ ์ํฅ์ ์ค.
- ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ํ ์คํธ ์์ ํ: ํ ์คํธ ์คํ ์ ์ Explicit Wait (๋ช ์์ ๋๊ธฐ) ์ ์ฉ.
- ๋ ๋ฆฝ์ ์ธ ํ ์คํธ ์ค๊ณ: ํ ์คํธ๊ฐ ์๋ก ์ํฅ์ ์ฃผ์ง ์๋๋ก ๊ฐ์ .
- ๋คํธ์ํฌ ์์ฒญ Mocking: ์๋ฒ ์๋ต์ ์์ ์ ์ผ๋ก ์ ์ด.
โ 82. API ๋ถํ ํ ์คํธ์์ ๋ณ๋ชฉ ํ์ ํ์ง
๋ฌธ์ 82. API ๋ถํ ํ ์คํธ(Load Testing)์์ ์๋ฒ์ ๋ณ๋ชฉ ํ์์ ๊ฐ์งํ๊ธฐ ์ํ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์?
- ์ด๋น ์ฒ๋ฆฌ ์์ฒญ ์(TPS)์ ์๋ต ์๊ฐ์ ๋ชจ๋ํฐ๋งํ๋ค.
- ํด๋ผ์ด์ธํธ ์ธก์์ API ์์ฒญ์ ๋ฌด์์๋ก ์์ฑํ์ฌ ๋ถํ๋ฅผ ์ค๋ค.
- ๋ชจ๋ API ์์ฒญ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ง์ ์คํํ๋ค.
- ํ ์คํธ ์คํ ํ ๋ก๊ทธ ํ์ผ๋ง ๋ถ์ํ๋ค.
โ ์ ๋ต: โ ์ด๋น ์ฒ๋ฆฌ ์์ฒญ ์(TPS)์ ์๋ต ์๊ฐ์ ๋ชจ๋ํฐ๋งํ๋ค.
๐ ํด์ค:
- API ๋ถํ ํ
์คํธ์ ํต์ฌ ์งํ:
- TPS(Transactions Per Second): ์ด๋น ๋ช ๊ฐ์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋์ง ์ธก์ .
- ์๋ต ์๊ฐ(Response Time): ์์ฒญ์ด ์ฒ๋ฆฌ๋๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ.
- CPU & ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋: ์๋ฒ ๋ถํ๊ฐ ์ด๋ ์ ๋์ธ์ง ํ์ .
- DB ์ฟผ๋ฆฌ ์คํ ์๊ฐ: ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์๋ต ์๋๋ฅผ ์ ํ์ํค๋์ง ๋ถ์.
- ๋ณ๋ชฉ ํ์ ํ์ง ๋ฐฉ๋ฒ:
- TPS๋ ์ผ์ ํ๋ฐ ์๋ต ์๊ฐ์ด ๊ธ๊ฒฉํ ์ฆ๊ฐํ๋ฉด ์๋ฒ ๋ถํ ์ฆ๊ฐ๋ก ์ธํ ๋ณ๋ชฉ ๋ฐ์ ๊ฐ๋ฅ.
- ํน์ API ํธ์ถ์ด ์๋ต ์๊ฐ์ด ๊ธธ๋ค๋ฉด, ์ฟผ๋ฆฌ ์ต์ ํ ๋๋ ์บ์ฑ ์ ์ฉ ํ์.
- โก, โข, โฃ ํ๋ฆผ:
- ๋ฌด์์ ์์ฒญ์ ํ ์คํธ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ์ง ์์.
- ๋ชจ๋ API ์์ฒญ์ DB์์ ์ง์ ์คํํ๋ฉด ์ค์ ๋ถํ ํ๊ฒฝ๊ณผ ๋ค๋ฆ.
- ๋ก๊ทธ ๋ถ์๋ง์ผ๋ก ์ค์๊ฐ ๋ณ๋ชฉ ํ์ง๋ ์ด๋ ค์.
โ 83. ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค ๋ฌธ์
๋ฌธ์ 83. ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ์ "๊ฒฉ๋ฆฌ ์์ค(Isolation Level)"์ ์กฐ์ ํ๋ ์ฃผ๋ ์ด์ ๋?
- ํธ๋์ญ์ ์ ์ต๋ํ ๋น ๋ฅด๊ฒ ์คํํ๊ธฐ ์ํด์
- ๋์ ์คํ๋๋ ํธ๋์ญ์ ๊ฐ์ ์ถฉ๋์ ๋ฐฉ์งํ๊ณ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ชจ๋ ์ฟผ๋ฆฌ๋ฅผ ์ฆ์ ๋ฐ์ํ๊ธฐ ์ํด์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํด์
โ ์ ๋ต: โก ๋์ ์คํ๋๋ ํธ๋์ญ์ ๊ฐ์ ์ถฉ๋์ ๋ฐฉ์งํ๊ณ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด์.
๐ ํด์ค:
- ํธ๋์ญ์
๊ฒฉ๋ฆฌ ์์ค(Isolation Level)์ด๋?
- ๋ค์ค ํธ๋์ญ์ ์ด ๋์์ ์คํ๋ ๋ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ์ค์ .
- ์ฃผ์ ๊ฒฉ๋ฆฌ ์์ค:
- READ UNCOMMITTED: ํธ๋์ญ์ ์ด ์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ๋ ์ฝ์ ์ ์์ → Dirty Read ๋ฐ์ ๊ฐ๋ฅ.
- READ COMMITTED: ์ปค๋ฐ๋ ๋ฐ์ดํฐ๋ง ์ฝ์ ์ ์์ → Dirty Read ๋ฐฉ์ง.
- REPEATABLE READ: ๋์ผ ํธ๋์ญ์ ๋ด์์๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ๋ ํญ์ ๋์ผํ ๊ฒฐ๊ณผ ์ ์ง → Phantom Read ๋ฐ์ ๊ฐ๋ฅ.
- SERIALIZABLE: ํธ๋์ญ์ ์ ์ง๋ ฌํํ์ฌ ์คํ → ๊ฐ์ฅ ๋์ ์ผ๊ด์ฑ ๋ณด์ฅ, ๊ทธ๋ฌ๋ ์ฑ๋ฅ ์ ํ.
- โข, โฃ ํ๋ฆผ:
- ํธ๋์ญ์ ์ด ์ฆ์ ๋ฐ์๋๋ ๊ฒ์ ACID ์์น์ ์ผ๋ถ์ง๋ง, ๊ฒฉ๋ฆฌ ์์ค๊ณผ๋ ๋ค๋ฆ.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ํฌ๊ธฐ์๋ ์ง์ ์ ์ธ ๊ด๋ จ์ด ์์.
โ 84. ์ปจํ ์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ํ ์คํธ
๋ฌธ์ 84. ์ปจํ ์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์ํํ ๋ ๊ฐ์ฅ ์ค์ํ ๊ณ ๋ ค์ฌํญ์?
- ์ปจํ ์ด๋๊ฐ ์คํ ์ค์ธ์ง ์ฌ๋ถ๋ง ํ์ธํ๋ค.
- ์ปจํ ์ด๋ ๋ด๋ถ์ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ชจ๋ํฐ๋งํ๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ด ํญ์ ๋จ์ผ ๋ ธ๋์์ ์คํ๋๋์ง ํ์ธํ๋ค.
- ๋คํธ์ํฌ ์์ฒญ์ ์ต๋ํ ์ค์ฌ ์ปจํ ์ด๋ ๊ฐ ํต์ ์ ์ฐจ๋จํ๋ค.
โ ์ ๋ต: โก ์ปจํ ์ด๋ ๋ด๋ถ์ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๋ชจ๋ํฐ๋งํ๋ค.
๐ ํด์ค:
- ์ปจํ
์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฑ๋ฅ ํ
์คํธ ํต์ฌ:
- CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋: ํน์ ์ปจํ ์ด๋๊ฐ ๊ณผ๋ถํ ์ํ์ธ์ง ํ์ธ.
- ๋คํธ์ํฌ ํธ๋ํฝ: ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ ํต์ ์ด ๋ณ๋ชฉ์ ์ผ์ผํค๋์ง ๋ถ์.
- ์คํ ๋ฆฌ์ง I/O ์ฑ๋ฅ: ๋ณผ๋ฅจ ๋ง์ดํธ๊ฐ ์ฑ๋ฅ ์ ํ๋ฅผ ์ ๋ฐํ๋์ง ๊ฒํ .
- ํ
์คํธ ๋๊ตฌ:
- Prometheus + Grafana: ์ค์๊ฐ ๋ชจ๋ํฐ๋ง
- K6, JMeter: ๋ถํ ํ ์คํธ ์ํ
- โ , โข, โฃ ํ๋ฆผ:
- ์ปจํ ์ด๋ ์คํ ์ฌ๋ถ๋ง ํ์ธํ๋ ๊ฒ์ ์ฑ๋ฅ ํ ์คํธ๊ฐ ์๋.
- ์ปจํ ์ด๋๋ ๋จ์ผ ๋ ธ๋์์๋ง ์คํ๋์ง ์์ → ํด๋ฌ์คํฐ ํ๊ฒฝ์์ ํ ์คํธํด์ผ ํจ.
- ๋คํธ์ํฌ ์์ฒญ์ ๋ฌด์กฐ๊ฑด ์ค์ด๋ ๊ฒ์ด ์๋๋ผ ์ต์ ํํ๋ ๊ฒ์ด ์ค์.
โ 85. AI/ML ๋ชจ๋ธ์ ํ ์คํธ ์ต์ ํ
๋ฌธ์ 85. AI/ML ์์คํ ์์ "ํธํฅ(Bias)"์ ๊ฒ์ถํ๊ณ ํด๊ฒฐํ๋ ๊ฐ์ฅ ์ ์ ํ ๋ฐฉ๋ฒ์?
- AI ๋ชจ๋ธ์ด ํญ์ ๊ฐ์ ์ถ๋ ฅ์ ๋ฐํํ๋์ง ํ์ธํ๋ค.
- ๋ชจ๋ธ์ด ํน์ ๊ทธ๋ฃน์ ์ฐจ๋ณ์ ์ผ๋ก ์์ธกํ๋์ง ๊ฒํ ํ๊ณ ๊ณต์ ์ฑ ์งํ(Fairness Metric)๋ฅผ ์ ์ฉํ๋ค.
- AI ๋ชจ๋ธ์ ์ฌ๋ฌ ๋ฒ ์คํํ์ฌ ํ๊ท ๊ฐ์ ๊ณ์ฐํ๋ค.
- ๋ชจ๋ธ์ ์์ธก ์๋๋ฅผ ๋ฐ๋ณต ์ธก์ ํ์ฌ ๋์ผํ ์๊ฐ ๋ด์ ๋์ํ๋์ง ํ์ธํ๋ค.
โ ์ ๋ต: โก ๋ชจ๋ธ์ด ํน์ ๊ทธ๋ฃน์ ์ฐจ๋ณ์ ์ผ๋ก ์์ธกํ๋์ง ๊ฒํ ํ๊ณ ๊ณต์ ์ฑ ์งํ(Fairness Metric)๋ฅผ ์ ์ฉํ๋ค.
๐ ํด์ค:
- AI ๋ชจ๋ธ์ ํธํฅ(Bias) ๊ฒ์ถ ๋ฐฉ๋ฒ:
- ํน์ ์ฑ๋ณ, ์ธ์ข , ์ฐ๋ น๋๊ฐ ๋ชจ๋ธ ์์ธก์์ ์ฐจ๋ณ์ ์ผ๋ก ๋ค๋ค์ง๋์ง ๋ถ์.
- ๊ณต์ ์ฑ ์งํ(Fairness Metric): Equalized Odds, Demographic Parity, Disparate Impact ๋ฑ.
- ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ๋ฐ์ดํฐ์ ์ฌ์กฐ์ ๋ฐ ๊ท ํ ์กฐ์ (Rebalancing).
- ํธํฅ ๋ณด์ ์๊ณ ๋ฆฌ์ฆ ์ ์ฉ.
โ ๊ณ ๊ธ QA ๊ฐ๋ ์ ๋ฆฌ
๐ Pretest์์ ์ฌํ ๊ฐ๋ ๋๋น
โ
Flaky Test ํด๊ฒฐ - ํ
์คํธ ๋๊ธฐ ์ ์ฉ & ๋
๋ฆฝ์ ํ
์คํธ ์ค๊ณ
โ
API ๋ถํ ํ
์คํธ - TPS & ์๋ต ์๊ฐ ๋ถ์์ ํตํ ๋ณ๋ชฉ ํด๊ฒฐ
โ
DB ํธ๋์ญ์
๊ฒฉ๋ฆฌ ์์ค - ๋์ ์คํ ์ ๋ฐ์ดํฐ ์ผ๊ด์ฑ ์ ์ง ์ ๋ต
โ
์ปจํ
์ด๋ ์ฑ๋ฅ ํ
์คํธ - CPU/๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ค์๊ฐ ๋ชจ๋ํฐ๋ง ํ์
โ
AI ๋ชจ๋ธ ํ
์คํธ - ํธํฅ(Bias) ๊ฒ์ถ ๋ฐ ๊ณต์ ์ฑ ๊ฐ์ ์ ๋ต
โ 86. ํ ์คํธ ์๋ํ ์ต์ ํ ๋ฌธ์
๋ฌธ์ 86. ๋๊ท๋ชจ ์ํํธ์จ์ด ํ๋ก์ ํธ์์ ํ ์คํธ ์๋ํ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ฐ์ฅ ์ค์ํ ์ ๋ต์?
- ๋ชจ๋ ํ ์คํธ๋ฅผ ํ ๋ฒ์ ์คํํ์ฌ ํ ์คํธ ์๋๋ฅผ ๋์ธ๋ค.
- ์ง์์ ํตํฉ(CI) ํ์ดํ๋ผ์ธ์์ ์คํํ ํ ์คํธ๋ฅผ ๊ณ์ธตํํ๊ณ ๋ณ๋ ฌ๋ก ์คํํ๋ค.
- ์๋ํ ํ ์คํธ๋ณด๋ค ์๋ ํ ์คํธ๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ํํ๋ค.
- ํ ์คํธ ์คํฌ๋ฆฝํธ๋ฅผ ์ต๋ํ ๊ธธ๊ฒ ์์ฑํ์ฌ ํ ์คํธ ๋ฒ์๋ฅผ ๋ํ๋ค.
โ ์ ๋ต: โก ์ง์์ ํตํฉ(CI) ํ์ดํ๋ผ์ธ์์ ์คํํ ํ ์คํธ๋ฅผ ๊ณ์ธตํํ๊ณ ๋ณ๋ ฌ๋ก ์คํํ๋ค.
๐ ํด์ค:
- ๋๊ท๋ชจ ํ๋ก์ ํธ์์ ํ
์คํธ ์๋ํ๋ฅผ ์ต์ ํํ๋ ์ ๋ต:
- ํ
์คํธ ๊ณ์ธตํ(Test Pyramid) ์ ์ฉ:
- ๋จ์ ํ ์คํธ(Unit Test) → ๋น ๋ฅด๊ณ ๋น๋ฒํ๊ฒ ์คํ.
- API ํ ์คํธ(Integration Test) → ์๋น์ค ๊ฐ ์ฐ๋ ๊ฒ์ฆ.
- UI ํ ์คํธ(E2E Test) → ์ต์ํ์ ํ ์คํธ๋ง ์ ์ง.
- ๋ณ๋ ฌ ์คํ(Parallel Execution) ํ์ฉ:
- CI/CD ํ์ดํ๋ผ์ธ์์ ํ ์คํธ๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ์ฌ ์๋ ์ต์ ํ.
- ํ
์คํธ ๋ฐ์ดํฐ ๊ด๋ฆฌ:
- Mocking & Stubbing์ ํตํด ํ ์คํธ ํ๊ฒฝ์์ ๋ถํ์ํ ์ธ๋ถ ์์กด์ฑ์ ์ ๊ฑฐ.
- ํ
์คํธ ๊ณ์ธตํ(Test Pyramid) ์ ์ฉ:
- โ , โข, โฃ ํ๋ฆผ:
- ๋ชจ๋ ํ ์คํธ๋ฅผ ํ ๋ฒ์ ์คํํ๋ฉด CI/CD ์๋๊ฐ ์ ํ๋จ.
- ์๋ํ ํ ์คํธ๋ ์๋ ํ ์คํธ๋ณด๋ค ์ฐ์ ์ ์ผ๋ก ์คํํด์ผ ํจ.
- ๊ธด ํ ์คํธ ์คํฌ๋ฆฝํธ๋ณด๋ค ์งง๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ํ ์คํธ ์ฝ๋๊ฐ ์ค์.
โ 87. API ํ ์คํธ์์ JWT ๋ณด์ ๋ฌธ์
๋ฌธ์ 87. API์์ JWT(JSON Web Token) ์ธ์ฆ์ ์ฌ์ฉํ ๋ ๋ฐ์ํ ์ ์๋ ๋ณด์ ์ทจ์ฝ์ ์?
- JWT๋ฅผ Base64๋ก ์ธ์ฝ๋ฉํ๋ฏ๋ก ๊ณต๊ฒฉ์๊ฐ ์ฝ๊ฒ ํด๋ ํ ์ ์๋ค.
- JWT๋ ์ธ์ฆ์ด ํ์ ์๊ธฐ ๋๋ฌธ์ ๋ณด์์ฑ์ด ๋ฎ๋ค.
- JWT์ ์๋ช (Signature)์ ๊ฒ์ฆํ์ง ์์ผ๋ฉด ํ ํฐ ์๋ณ์กฐ ๊ณต๊ฒฉ์ ๋นํ ์ ์๋ค.
- JWT๋ ํ ๋ฒ ์์ฑ๋๋ฉด ์ ๋ ๋ง๋ฃ๋์ง ์๋๋ค.
โ ์ ๋ต: โข JWT์ ์๋ช (Signature)์ ๊ฒ์ฆํ์ง ์์ผ๋ฉด ํ ํฐ ์๋ณ์กฐ ๊ณต๊ฒฉ์ ๋นํ ์ ์๋ค.
๐ ํด์ค:
- JWT(JSON Web Token) ๋ณด์์์ ๊ฐ์ฅ ์ค์ํ ์ :
- ์๋ช (Signature) ๊ฒ์ฆ: JWT๋ Header.Payload.Signature ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ง.
- ๊ณต๊ฒฉ์๊ฐ JWT๋ฅผ ์๋ณ์กฐํ๋ ๊ฒฝ์ฐ, ์๋ช ์ ๊ฒ์ฆํ์ง ์์ผ๋ฉด ์์กฐ๋ ํ ํฐ์ ์ ๋ขฐํ๋ ๋ณด์ ๋ฌธ์ ๋ฐ์.
- ์:
python๋ณต์ฌํธ์งimport jwt token = jwt.encode({'user_id': 123}, "secret", algorithm="HS256")
- ํด๊ฒฐ์ฑ
:
- JWT ์๋ช ์ ํญ์ ๊ฒ์ฆํ๊ณ , ์ ๋ขฐํ ์ ์๋ ํค(Key)๋ก ๊ฒ์ฆํ ๊ฒ.
- ์งง์ ๋ง๋ฃ ์๊ฐ ์ค์ ๋ฐ Refresh Token ํ์ฉ.
- โ , โก, โฃ ํ๋ฆผ:
- Base64 ์ธ์ฝ๋ฉ์ ์ํธํ๊ฐ ์๋๋ผ ๋จ์ํ ๋ณํ์ด์ง๋ง, JWT ์์ฒด๋ ์๋ช ์ ํฌํจํ๋ฏ๋ก ๋ณดํธ๋จ.
- JWT๋ ์ธ์ฆ์ด ํ์ํ๋ฉฐ, ์ธ์ ๊ธฐ๋ฐ ์ธ์ฆ๋ณด๋ค ๋ณด์์ฑ์ด ๋ ๋์ ๊ฒฝ์ฐ๊ฐ ๋ง์.
- JWT๋ ๋ง๋ฃ ์๊ฐ์ด ์ค์ ๋ ์ ์์ผ๋ฉฐ, Refresh Token์ ํตํด ๊ฐฑ์ ๊ฐ๋ฅ.
โ 88. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค ํ๋ ๋ฌธ์
๋ฌธ์ 88. ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ธ๋ฑ์ค๋ฅผ ์๋ชป ์์ฑํ์ ๋ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋?
- ์ธ๋ฑ์ค๊ฐ ๋ง์์๋ก ์ฟผ๋ฆฌ ์ฑ๋ฅ์ด ํญ์ ํฅ์๋๋ค.
- ๋ฐ์ดํฐ ๋ณ๊ฒฝ(INSERT, UPDATE, DELETE) ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
- ๋ชจ๋ ํ ์ด๋ธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์ ์ฉํด์ผ ํ๋ค.
- ์ธ๋ฑ์ค๊ฐ ๋ง์ผ๋ฉด ๋ฐ์ดํฐ ์ ์ฅ ๊ณต๊ฐ์ด ์ค์ด๋ ๋ค.
โ ์ ๋ต: โก ๋ฐ์ดํฐ ๋ณ๊ฒฝ(INSERT, UPDATE, DELETE) ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
๐ ํด์ค:
- ์ธ๋ฑ์ค(Index) ๋ฌธ์ ์ :
- ์ฝ๊ธฐ(SELECT) ์๋๋ ํฅ์๋์ง๋ง, ์ฐ๊ธฐ(INSERT, UPDATE, DELETE) ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์.
- ์ธ๋ฑ์ค๊ฐ ๋ง์์ง์๋ก ์ฐ๊ธฐ ์์ ์ ๋ชจ๋ ์ธ๋ฑ์ค๋ฅผ ๊ฐฑ์ ํด์ผ ํ๋ฏ๋ก ์ฑ๋ฅ ์ ํ ๋ฐ์.
- ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ์์ฃผ ์ฌ์ฉ๋๋ ์ฟผ๋ฆฌ์์ WHERE ์กฐ๊ฑด์ด ์ ์ฉ๋๋ ์ปฌ๋ผ์๋ง ์ธ๋ฑ์ค๋ฅผ ์์ฑ.
- ์ฝ๊ธฐ(Read-heavy) vs ์ฐ๊ธฐ(Write-heavy) ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ง์ถฐ ์ธ๋ฑ์ค ์ ๋ต์ ์กฐ์ .
- โ , โข, โฃ ํ๋ฆผ:
- ์ธ๋ฑ์ค๊ฐ ๋ง๋ค๊ณ ํญ์ ์ฑ๋ฅ์ด ํฅ์๋์ง๋ ์์.
- ๋ชจ๋ ํ ์ด๋ธ์ ์ธ๋ฑ์ค๋ฅผ ์ ์ฉํ๋ ๊ฒ์ ๋นํจ์จ์ .
- ์ธ๋ฑ์ค๋ ์ถ๊ฐ์ ์ธ ์ ์ฅ ๊ณต๊ฐ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ์ฆ๊ฐํ ์ ์์.
โ 89. ์ปจํ ์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 89. ์ปจํ ์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธํ ๋ ๊ฐ์ฅ ์ค์ํ ์์๋?
- ์ปจํ ์ด๋๊ฐ ์คํ ์ค์ธ์ง ์ฌ๋ถ๋ง ํ์ธํ๋ค.
- ์ปจํ ์ด๋ ๊ฐ ๋คํธ์ํฌ ํต์ ์ด ์ํํ์ง ๊ฒ์ฆํ๋ค.
- ๋ชจ๋ ์ปจํ ์ด๋๋ฅผ ๋์ผํ ํ๊ฒฝ์์ ์คํํด์ผ ํ๋ค.
- ์ปจํ ์ด๋ ๋ก๊ทธ๋ฅผ ์๋์ผ๋ก ๋ถ์ํ์ฌ ์ค๋ฅ๋ฅผ ํ์ธํ๋ค.
โ ์ ๋ต: โก ์ปจํ ์ด๋ ๊ฐ ๋คํธ์ํฌ ํต์ ์ด ์ํํ์ง ๊ฒ์ฆํ๋ค.
๐ ํด์ค:
- ์ปจํ
์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ํ
์คํธ ํต์ฌ:
- ์ปจํ ์ด๋ ๊ฐ ๋คํธ์ํฌ ํต์ ์ ๊ฒ์ฆํ๋ ๊ฒ์ด ์ค์ํจ.
- ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์์๋ ์ฌ๋ฌ ๊ฐ์ ์ปจํ ์ด๋๊ฐ ์๋ก ํต์ ํด์ผ ํ๋ฏ๋ก, ๋คํธ์ํฌ ์ฅ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ ์ฒด ์๋น์ค์ ์ํฅ์ ๋ฏธ์นจ.
- ํ
์คํธ ๋ฐฉ๋ฒ:
- curl ๋๋ nc(netcat)๋ฅผ ์ฌ์ฉํ์ฌ ์ปจํ ์ด๋ ๊ฐ ํต์ ํ ์คํธ.
- Kubernetes ํ๊ฒฝ์์๋ kubectl exec์ ํ์ฉํ์ฌ ๋คํธ์ํฌ ์ํ ํ์ธ.
- โ , โข, โฃ ํ๋ฆผ:
- ์ปจํ ์ด๋ ์คํ ์ฌ๋ถ๋ง ํ์ธํ๋ ๊ฒ์ ์ถฉ๋ถํ ํ ์คํธ๊ฐ ์๋.
- ๋์ผํ ํ๊ฒฝ์์ ์คํํ๋๋ผ๋ ๋คํธ์ํฌ ๋ฌธ์ ๋ ๋ฐ์ํ ์ ์์.
- ๋ก๊ทธ ๋ถ์๋ ์ค์ํ์ง๋ง, ์๋ํ๋ ๋คํธ์ํฌ ํ ์คํธ๊ฐ ํ์ํจ.
โ 90. ๋คํธ์ํฌ ๋ณด์ ํ ์คํธ์์ Man-in-the-Middle ๊ณต๊ฒฉ ๋ฌธ์
๋ฌธ์ 90. ๋คํธ์ํฌ ๋ณด์ ํ ์คํธ์์ Man-in-the-Middle(MITM) ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ธฐ ์ํ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์?
- ๋ชจ๋ ์์ฒญ์ ์ํธํํ์ง ์๊ณ ์ผ๋ฐ HTTP๋ฅผ ์ฌ์ฉํ๋ค.
- TLS/SSL์ ์ ์ฉํ๊ณ ์ธ์ฆ์ ๊ฒ์ฆ์ ์ํํ๋ค.
- ๋คํธ์ํฌ ํจํท์ ๋ก๊ทธ ํ์ผ์ ์ ์ฅํ์ฌ ๋ถ์ํ๋ค.
- ๋์ผํ ๋คํธ์ํฌ์์๋ง ๋ชจ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ ์ํ๋๋ก ์ ํํ๋ค.
โ ์ ๋ต: โก TLS/SSL์ ์ ์ฉํ๊ณ ์ธ์ฆ์ ๊ฒ์ฆ์ ์ํํ๋ค.
๐ ํด์ค:
- MITM(Man-in-the-Middle) ๊ณต๊ฒฉ ๋ฐฉ์ง ๋ฐฉ๋ฒ:
- TLS/SSL์ ์ ์ฉํ์ฌ ๋ฐ์ดํฐ ์ํธํ.
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ธ์ฆ์๋ฅผ ๊ฒ์ฆ(Certificate Pinning)ํ๋๋ก ์ค์ .
- HTTPS๊ฐ ์ ์ฉ๋์๋์ง ํ์ธํ๊ณ , Strict-Transport-Security (HSTS) ์ค์ .
โ ์ฌํ ๊ฐ๋ ์ ๋ฆฌ
โ
ํ
์คํธ ์๋ํ ์ต์ ํ - ํ
์คํธ ๊ณ์ธตํ(Test Pyramid) ๋ฐ ๋ณ๋ ฌ ์คํ ์ ๋ต
โ
API ๋ณด์ - JWT ์๋ช
๊ฒ์ฆ ํ์ ๋ฐ ๋ง๋ฃ ์๊ฐ ๊ด๋ฆฌ
โ
DB ์ฑ๋ฅ - ์ธ๋ฑ์ค ๊ณผ๋ค ์ฌ์ฉ ์ ์ฐ๊ธฐ ์ฑ๋ฅ ์ ํ ๊ฐ๋ฅ์ฑ ๊ณ ๋ ค
โ
์ปจํ
์ด๋ ํ
์คํธ - ๋คํธ์ํฌ ์ฐ๊ฒฐ ๋ฐ ํต์ ๊ฒ์ฆ์ด ํต์ฌ
โ
๋คํธ์ํฌ ๋ณด์ - MITM ๊ณต๊ฒฉ ๋ฐฉ์ง๋ฅผ ์ํ TLS/SSL ์ ์ฉ
โ 1. ํ๋ฌํ ํ ์คํธ(Flaky Test) ๋ฌธ์
๋ฌธ์ 1. ํ๋ฌํ ํ ์คํธ(Flaky Test)์ ์ฃผ์ ์์ธ์ ๋ฌด์์ธ๊ฐ?
- ๋ชจ๋ ํ ์คํธ๊ฐ ๋ณ๋ ฌ๋ก ์คํ๋๊ธฐ ๋๋ฌธ์ด๋ค.
- ํ ์คํธ ์คํ ๊ฒฐ๊ณผ๊ฐ ํญ์ ์ผ๊ด๋๊ฒ ๋์ค์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ์๋ํ๋ UI ํ ์คํธ๊ฐ ๋๋ฌด ๋น ๋ฅด๊ฒ ์คํ๋๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ชจ๋ ํ ์คํธ๊ฐ ๋๊ธฐ์ ์ผ๋ก ์คํ๋๊ธฐ ๋๋ฌธ์ด๋ค.
โ ์ ๋ต: โก ํ ์คํธ ์คํ ๊ฒฐ๊ณผ๊ฐ ํญ์ ์ผ๊ด๋๊ฒ ๋์ค์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
๐ ํด์ค:
- Flaky Test๋?
- ๊ฐ์ ํ ์คํธ๋ฅผ ์คํํ ๋ ๊ฒฐ๊ณผ๊ฐ ์ผ๊ด๋์ง ์๊ณ ์ฑ๊ณต/์คํจ๊ฐ ๋ฐ๋ณต๋๋ ํ ์คํธ.
- ๋ฐ์ ์์ธ:
- ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฌธ์ : UI ์์๊ฐ ๋ก๋ฉ๋๊ธฐ ์ ์ ํ ์คํธ ์คํ.
- ํ๊ฒฝ ์ฐจ์ด: ๋ก์ปฌ๊ณผ CI/CD์์ ์คํ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฆ.
- ์๋ฒ ์๋ต ์ง์ฐ: ๋คํธ์ํฌ ์์ฒญ ์๋ ๋ถ์์ .
- ํ ์คํธ ๊ฐ ์ข ์์ฑ: ํ๋์ ํ ์คํธ๊ฐ ๋ค๋ฅธ ํ ์คํธ ๊ฒฐ๊ณผ์ ์ํฅ์ ์ค.
- ํด๊ฒฐ ๋ฐฉ๋ฒ:
- Explicit Wait (๋ช ์์ ๋๊ธฐ) ์ ์ฉ.
- ํ ์คํธ ๊ฐ ๋ ๋ฆฝ์ฑ ํ๋ณด.
- Mocking ๋ฐ Stubbing์ ํ์ฉํ์ฌ ์ธ๋ถ ์์กด์ฑ ์ ๊ฑฐ.
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
ํ๋ฌํ
ํ
์คํธ์ ์ ์
โ
ํ
์คํธ ๋
๋ฆฝ์ฑ ํ๋ณด ๋ฐฉ๋ฒ
โ
Mocking๊ณผ Stubbing์ ์ฐจ์ด
โ 2. API Rate Limiting ๋ฌธ์
๋ฌธ์ 2. API ์๋ฒ๊ฐ ์ด๋น 1,000๊ฐ์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋๋ก ์ค๊ณ๋์์ ๋, ์ ์ ํ Rate Limiting ์ ์ฉ ๋ฐฉ๋ฒ์?
- ๋ชจ๋ ์ด๊ณผ ์์ฒญ์ ๋ฌด์กฐ๊ฑด ์ฐจ๋จํ๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋ผ ๋ ๋๋ค ๋๊ธฐ ์๊ฐ์ ์ถ๊ฐํ๋ค.
- ์ด๊ณผ ์์ฒญ ์ 429 Too Many Requests ์๋ต์ ๋ฐํํ๊ณ Retry-After ํค๋๋ฅผ ์ค์ ํ๋ค.
- API ์์ฒญ์ด ๋ง์์ง๋ฉด ์๋์ผ๋ก ์๋ฒ๋ฅผ ํ์ฅํ์ฌ ์ฒ๋ฆฌํ๋๋ก ํ๋ค.
โ ์ ๋ต: โข ์ด๊ณผ ์์ฒญ ์ 429 Too Many Requests ์๋ต์ ๋ฐํํ๊ณ Retry-After ํค๋๋ฅผ ์ค์ ํ๋ค.
๐ ํด์ค:
- Rate Limiting(์์ฒญ ์ ํ)์ด๋?
- ํน์ ์๊ฐ ๋ด์ ํ์ฉ๋ ์์ฒญ ์๋ฅผ ์ด๊ณผํ๋ฉด ์ถ๊ฐ ์์ฒญ์ ์ ํํ๋ ๊ธฐ์ .
- ์ ์ ํ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ:
- 429 Too Many Requests ์๋ต์ ๋ฐํ.
- Retry-After ํค๋๋ฅผ ํฌํจํ์ฌ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์๋ํ ์๊ฐ์ ์๋ฆผ.
- ํ ํฐ ๋ฒํท(Token Bucket), ์ฌ๋ผ์ด๋ฉ ์๋์ฐ(Sliding Window) ์๊ณ ๋ฆฌ์ฆ ํ์ฉ ๊ฐ๋ฅ.
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
API Rate Limiting ๊ฐ๋
โ
429 Too Many Requests ์๋ต ์ฝ๋ ์๋ฏธ
โ
Rate Limiting ์๊ณ ๋ฆฌ์ฆ ์ข
๋ฅ (Token Bucket, Sliding Window)
โ 3. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค ์ต์ ํ ๋ฌธ์
๋ฌธ์ 3. ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ธ๋ฑ์ค๋ฅผ ๊ณผ๋ํ๊ฒ ์์ฑํ์ ๋ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋?
- ๋ชจ๋ ์ฟผ๋ฆฌ์ ์คํ ์๋๊ฐ ํฅ์๋๋ค.
- ๋ฐ์ดํฐ ๋ณ๊ฒฝ(INSERT, UPDATE, DELETE) ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
- ์ธ๋ฑ์ค๊ฐ ๋ง์์๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ํฌ๊ธฐ๊ฐ ์ค์ด๋ ๋ค.
- ๋ชจ๋ ํ ์ด๋ธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ๋ฑ์ค๋ฅผ ์ ์ฉํด์ผ ํ๋ค.
โ ์ ๋ต: โก ๋ฐ์ดํฐ ๋ณ๊ฒฝ(INSERT, UPDATE, DELETE) ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
๐ ํด์ค:
- ์ธ๋ฑ์ค(Index)์ ์ญํ :
- SELECT ์ฑ๋ฅ์ ๋์ด์ง๋ง, ์ฐ๊ธฐ ์ฑ๋ฅ(INSERT, UPDATE, DELETE)์ ๋ฎ์ถ ์ ์์.
- ์ ์ ํ ์ธ๋ฑ์ค ์ ์ฉ ์ ๋ต:
- ์์ฃผ ์ฌ์ฉ๋๋ ๊ฒ์ ์ปฌ๋ผ(WHERE ์ ํฌํจ)์๋ง ์ธ๋ฑ์ค๋ฅผ ์ ์ฉ.
- ์ฝ๊ธฐ(SELECT) ์ค์ฌ ์์คํ ์์๋ ์ธ๋ฑ์ค๋ฅผ ์ ๊ทน ํ์ฉํ์ง๋ง, ์ฐ๊ธฐ(INSERT) ์ค์ฌ ์์คํ ์์๋ ์ต์ํํด์ผ ํจ.
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
์ธ๋ฑ์ค์ ์ฅ์ ๊ณผ ๋จ์
โ
SELECT vs INSERT/UPDATE ์ฑ๋ฅ ์ฐจ์ด
โ
์ ์ ํ ์ธ๋ฑ์ค ์ ์ฉ ์ ๋ต
โ 4. JWT ๋ณด์ ๋ฌธ์
๋ฌธ์ 4. JWT(JSON Web Token)๋ฅผ ์ฌ์ฉํ ๋ ๋ฐ๋์ ๊ณ ๋ คํด์ผ ํ ๋ณด์ ์กฐ์น๋?
- JWT๋ฅผ Base64๋ก ์ธ์ฝ๋ฉํ๋ฉด ์์ ํ๋ค.
- JWT์ ์๋ช ์ ๊ฒ์ฆํ์ง ์์ผ๋ฉด ์๋ณ์กฐ ๊ณต๊ฒฉ์ ๋นํ ์ ์๋ค.
- JWT๋ ๋ง๋ฃ ์๊ฐ์ด ํ์ ์์ผ๋ฉฐ, ๋ฌด์ ํ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
- JWT๋ ์ธ์ ๊ธฐ๋ฐ ์ธ์ฆ๋ณด๋ค ํญ์ ๋ณด์์ฑ์ด ๋๋ค.
โ ์ ๋ต: โก JWT์ ์๋ช ์ ๊ฒ์ฆํ์ง ์์ผ๋ฉด ์๋ณ์กฐ ๊ณต๊ฒฉ์ ๋นํ ์ ์๋ค.
๐ ํด์ค:
- JWT ๋ณด์ ์ทจ์ฝ์ :
- ์๋ช ์ ๊ฒ์ฆํ์ง ์์ผ๋ฉด ๊ณต๊ฒฉ์๊ฐ ์๋ณ์กฐ๋ ํ ํฐ์ ์ฌ์ฉํ ์ ์์.
- ์์ ์ฝ๋:
python๋ณต์ฌํธ์งimport jwt token = jwt.encode({'user_id': 123}, "secret", algorithm="HS256")
- ๋ณด์ ๊ฐํ ๋ฐฉ๋ฒ:
- JWT ์๋ช ์ ๋ฐ๋์ ๊ฒ์ฆํ ๊ฒ.
- ๋ง๋ฃ ์๊ฐ(Expiration Time, exp) ์ค์ ํ์.
- Refresh Token์ ํ์ฉํ์ฌ ๋ณด์ ๊ฐํ.
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
JWT ๊ตฌ์กฐ (Header, Payload, Signature)
โ
JWT ์๋ช
(Signature) ๊ฒ์ฆ ์๋ฆฌ
โ
JWT vs ์ธ์
๊ธฐ๋ฐ ์ธ์ฆ ๋น๊ต
โ 5. AI/ML ํ ์คํธ ๋ฌธ์
๋ฌธ์ 5. AI/ML ๋ชจ๋ธ์ ์ฑ๋ฅ์ ๊ฒ์ฆํ ๋ ๊ฐ์ฅ ์ค์ํ ํ๊ฐ ์งํ๋?
- ๋ชจ๋ธ์ด ํญ์ ๊ฐ์ ์ถ๋ ฅ์ ๋ฐํํ๋์ง ํ์ธํ๋ค.
- ๋ชจ๋ธ์ ์ ๋ฐ๋(Precision)์ ์ฌํ์จ(Recall)์ ์ธก์ ํ๋ค.
- AI ๋ชจ๋ธ์ ์คํ ์๋๋ฅผ ํ๊ฐํ๋ค.
- ์ ๋ ฅ ๋ฐ์ดํฐ๊ฐ ํญ์ ๋์ผํ์ง๋ฅผ ํ์ธํ๋ค.
โ ์ ๋ต: โก ๋ชจ๋ธ์ ์ ๋ฐ๋(Precision)์ ์ฌํ์จ(Recall)์ ์ธก์ ํ๋ค.
๐ ํด์ค:
- AI/ML ๋ชจ๋ธ ํ๊ฐ ์งํ:
- ์ ๋ฐ๋(Precision): ๋ชจ๋ธ์ด ๊ธ์ ์์ธกํ ๊ฒ ์ค์์ ์ค์ ๋ก ๋ง์ ๋น์จ.
- ์ฌํ์จ(Recall): ์ค์ ์ ๋ต ์ค์์ ๋ชจ๋ธ์ด ๋งํ ๋น์จ.
- F1 Score: Precision๊ณผ Recall์ ์กฐํ ํ๊ท .
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
Precision, Recall, F1 Score ๊ฐ๋
โ
AI ๋ชจ๋ธ ํ๊ฐ ๋ฐฉ๋ฒ (Confusion Matrix)
โ
๋ชจ๋ธ์ ๊ณผ์ ํฉ(Overfitting) ๋ฌธ์
โ 6. ์ปจํ ์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 6. ์ปจํ ์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์ํํ ๋ ๊ฐ์ฅ ์ค์ํ ๊ณ ๋ ค์ฌํญ์?
- ์ปจํ ์ด๋๊ฐ ์คํ ์ค์ธ์ง ์ฌ๋ถ๋ง ํ์ธํ๋ค.
- ์ปจํ ์ด๋ ๋ด๋ถ์ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์๊ฐ์ผ๋ก ๋ชจ๋ํฐ๋งํ๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ด ํญ์ ๋จ์ผ ๋ ธ๋์์ ์คํ๋๋์ง ํ์ธํ๋ค.
- ๋คํธ์ํฌ ์์ฒญ์ ์ค์ด๊ธฐ ์ํด ์ปจํ ์ด๋ ๊ฐ ํต์ ์ ์ฐจ๋จํ๋ค.
โ ์ ๋ต: โก ์ปจํ ์ด๋ ๋ด๋ถ์ CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์๊ฐ์ผ๋ก ๋ชจ๋ํฐ๋งํ๋ค.
๐ ํด์ค:
- ์ปจํ
์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฑ๋ฅ ํ
์คํธ ํต์ฌ:
- CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ชจ๋ํฐ๋ง:
- ํน์ ์ปจํ ์ด๋๊ฐ ๊ณผ๋ถํ ์ํ์ธ์ง ํ์ธ.
- docker stats, kubectl top pod ํ์ฉ.
- ๋คํธ์ํฌ ํธ๋ํฝ ๋ถ์:
- ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ ํต์ ์ด ๋ณ๋ชฉ์ ์ผ์ผํค๋์ง ํ๊ฐ.
- ์คํ ๋ฆฌ์ง I/O ์ฑ๋ฅ:
- ๋ณผ๋ฅจ ๋ง์ดํธ๊ฐ ์ฑ๋ฅ ์ ํ๋ฅผ ์ ๋ฐํ๋์ง ๊ฒํ .
- CPU ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ชจ๋ํฐ๋ง:
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
์ปจํ
์ด๋ ์ฑ๋ฅ ํ
์คํธ ๋๊ตฌ (Prometheus, Grafana, K6)
โ
CPU & ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ํฐ๋ง ๋ช
๋ น์ด (docker stats, kubectl top pod)
โ
์ปจํ
์ด๋ ๊ฐ ๋คํธ์ํฌ ๋ณ๋ชฉ ์์ธ ๋ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ
โ 7. ๋คํธ์ํฌ ๋ณด์ ํ ์คํธ์์ MITM ๊ณต๊ฒฉ ๋ฌธ์
๋ฌธ์ 7. ๋คํธ์ํฌ ๋ณด์ ํ ์คํธ์์ Man-in-the-Middle(MITM) ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ธฐ ์ํ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์?
- ๋ชจ๋ ์์ฒญ์ ์ผ๋ฐ HTTP๋ก ์ฒ๋ฆฌํ๋ค.
- TLS/SSL์ ์ ์ฉํ๊ณ ์ธ์ฆ์ ๊ฒ์ฆ์ ์ํํ๋ค.
- ๋คํธ์ํฌ ํจํท์ ๋ก๊ทธ ํ์ผ์ ์ ์ฅํ์ฌ ๋ถ์ํ๋ค.
- ๋์ผํ ๋คํธ์ํฌ์์๋ง ๋ชจ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ ์ํ๋๋ก ์ ํํ๋ค.
โ ์ ๋ต: โก TLS/SSL์ ์ ์ฉํ๊ณ ์ธ์ฆ์ ๊ฒ์ฆ์ ์ํํ๋ค.
๐ ํด์ค:
- MITM(Man-in-the-Middle) ๊ณต๊ฒฉ์ด๋?
- ๊ณต๊ฒฉ์๊ฐ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ํต์ ์ ๊ฐ๋ก์ฑ์ด ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๊ฑฐ๋ ํ์ทจํ๋ ๊ณต๊ฒฉ.
- ๋ฐฉ์ง ๋ฐฉ๋ฒ:
- TLS/SSL ์ ์ฉ: HTTPS ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ํต์ ์ ์ํธํ.
- ์ธ์ฆ์ ๊ฒ์ฆ: Certificate Pinning ์ ์ฉํ์ฌ ์ ๋ขฐํ ์ ์๋ ์ธ์ฆ์๋ง ํ์ฉ.
- HSTS(Strict-Transport-Security) ํ์ฑํ: ํด๋ผ์ด์ธํธ๊ฐ HTTPS๋ฅผ ๊ฐ์ ์ฌ์ฉํ๋๋ก ์ค์ .
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
MITM ๊ณต๊ฒฉ ๊ฐ๋
๋ฐ ์ฌ๋ก
โ
TLS/SSL ์ธ์ฆ์ ๊ฒ์ฆ ๋ฐฉ๋ฒ
โ
Certificate Pinning ๋ฐ HSTS์ ์ญํ
โ 8. ์ฑ๋ฅ ํ ์คํธ์์ TPS์ ์๋ต ์๊ฐ ๊ด๊ณ ๋ฌธ์
๋ฌธ์ 8. ์ฑ๋ฅ ํ ์คํธ์์ ์ด๋น ํธ๋์ญ์ ์(TPS)์ ์๋ต ์๊ฐ(Response Time)์ ๊ด๊ณ์ ๋ํ ์ค๋ช ์ผ๋ก ์ฌ๋ฐ๋ฅธ ๊ฒ์?
- TPS๊ฐ ์ฆ๊ฐํ๋ฉด ์๋ต ์๊ฐ๋ ํญ์ ์ฆ๊ฐํ๋ค.
- TPS๊ฐ ์ฆ๊ฐํด๋ ์๋ต ์๊ฐ์๋ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
- TPS๊ฐ ์ง๋์น๊ฒ ์ฆ๊ฐํ๋ฉด ์๋ต ์๊ฐ์ด ์ฆ๊ฐํ ์ ์๋ค.
- ์๋ต ์๊ฐ์ TPS์ ๊ด๊ณ์์ด ํญ์ ์ผ์ ํ๋ค.
โ ์ ๋ต: โข TPS๊ฐ ์ง๋์น๊ฒ ์ฆ๊ฐํ๋ฉด ์๋ต ์๊ฐ์ด ์ฆ๊ฐํ ์ ์๋ค.
๐ ํด์ค:
- TPS(Transactions Per Second)๋?
- ์์คํ ์ด 1์ด ๋์ ์ฒ๋ฆฌํ ์ ์๋ ํธ๋์ญ์ ์ ์.
- TPS์ ์๋ต ์๊ฐ ๊ด๊ณ:
- ์ด๋น ์์ฒญ์ด ๋ง์์ง์๋ก ์๋ฒ ๋ถํ๊ฐ ์ฆ๊ฐํ์ฌ ์๋ต ์๊ฐ์ด ๊ธธ์ด์ง ๊ฐ๋ฅ์ฑ์ด ์์.
- ์:
- TPS๊ฐ 1,000์ผ ๋ ์๋ต ์๊ฐ์ด 100ms์์ง๋ง,
- TPS๊ฐ 5,000์ด ๋๋ฉด ์๋ต ์๊ฐ์ด 500ms๋ก ์ฆ๊ฐํ ์ ์์.
- ์ฑ๋ฅ ์ต์ ํ ๋ฐฉ๋ฒ:
- ๋ถํ ๋ถ์ฐ(Load Balancing) ์ ์ฉ.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ ์ต์ ํ ๋ฐ ์บ์ฑ(Cache) ํ์ฉ.
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
TPS, ์๋ต ์๊ฐ, ์ฒ๋ฆฌ๋ ๊ด๊ณ ์ดํด
โ
๋ถํ ํ
์คํธ(Load Testing) ๊ฐ๋
โ
์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํ ๋ก๋ ๋ฐธ๋ฐ์ฑ ๋ฐ ์บ์ฑ ์ ๋ต
โ 9. ์ ๊ทผ์ฑ ํ ์คํธ์์ ์คํฌ๋ฆฐ ๋ฆฌ๋ ๋ฌธ์
๋ฌธ์ 9. ์ ๊ทผ์ฑ ํ ์คํธ(Accessibility Testing)์์ ์คํฌ๋ฆฐ ๋ฆฌ๋(Screen Reader)๊ฐ ์ค์ํ ์ด์ ๋?
- ๋น์๊ฐ์ ์ฌ์ฉ์(์๊ฐ ์ฅ์ ์ธ)๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ ์ ์๋๋ก ๋๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ชจ๋ ์น์ฌ์ดํธ์์ ํ์๋ก ์ ์ฉํด์ผ ํ๋ ์์์ด๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ณด์ ์ทจ์ฝ์ ์ ์ฐพ๋ ๋ฐ ๋์์ ์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ์ธก์ ํ๋ ๊ธฐ์ค์ด๊ธฐ ๋๋ฌธ์ด๋ค.
โ ์ ๋ต: โ ๋น์๊ฐ์ ์ฌ์ฉ์(์๊ฐ ์ฅ์ ์ธ)๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ ์ ์๋๋ก ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๐ ํด์ค:
- ์คํฌ๋ฆฐ ๋ฆฌ๋(Screen Reader)๋?
- ์๊ฐ ์ฅ์ ์ธ์ด ์น์ฌ์ดํธ ๋ฐ ๋ชจ๋ฐ์ผ ์ฑ์ ์ฌ์ฉํ ์ ์๋๋ก UI ์์๋ฅผ ์์ฑ์ผ๋ก ์๋ดํ๋ ์ํํธ์จ์ด.
- ์ฃผ์ ์คํฌ๋ฆฐ ๋ฆฌ๋:
- Windows: NVDA, JAWS
- Mac: VoiceOver
- Android: TalkBack
- ํ
์คํธ ๋ฐฉ๋ฒ:
- ์น ํ์ด์ง์ aria-label, alt ์์ฑ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋์๋์ง ํ์ธ.
- ํค๋ณด๋๋ง์ผ๋ก ๋ชจ๋ ๊ธฐ๋ฅ์ ์ํํ ์ ์๋์ง ํ ์คํธ.
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
์ ๊ทผ์ฑ ํ
์คํธ์ ์ค์์ฑ
โ
์ฃผ์ ์คํฌ๋ฆฐ ๋ฆฌ๋ ๋๊ตฌ ๋ฐ ํ
์คํธ ๋ฐฉ๋ฒ
โ
WCAG(Web Content Accessibility Guidelines) ํ์ค
โ 10. AI/ML ๋ชจ๋ธ์ ํธํฅ(Bias) ๋ฌธ์
๋ฌธ์ 10. AI/ML ๋ชจ๋ธ์์ ํธํฅ(Bias)์ ์ค์ด๊ธฐ ์ํ ๊ฐ์ฅ ์ ์ ํ ๋ฐฉ๋ฒ์?
- ๋ชจ๋ธ์ด ํญ์ ๊ฐ์ ์ถ๋ ฅ์ ๋ฐํํ๋์ง ํ์ธํ๋ค.
- ๋ฐ์ดํฐ์ ์ ๋ค์ํํ๊ณ ๊ณต์ ์ฑ ์งํ(Fairness Metric)๋ฅผ ์ ์ฉํ๋ค.
- AI ๋ชจ๋ธ์ ์ฌ๋ฌ ๋ฒ ์คํํ์ฌ ํ๊ท ๊ฐ์ ๊ณ์ฐํ๋ค.
- ๋ชจ๋ธ์ ์คํ ์๋๋ฅผ ๋ฐ๋ณต ์ธก์ ํ์ฌ ๋์ผํ ์๊ฐ ๋ด์ ๋์ํ๋์ง ํ์ธํ๋ค.
โ ์ ๋ต: โก ๋ฐ์ดํฐ์ ์ ๋ค์ํํ๊ณ ๊ณต์ ์ฑ ์งํ(Fairness Metric)๋ฅผ ์ ์ฉํ๋ค.
๐ ํด์ค:
- AI ๋ชจ๋ธ์ ํธํฅ(Bias)์ด๋?
- ํน์ ์ฑ๋ณ, ์ธ์ข , ์ฐ๋ น๋๊ฐ ๋ชจ๋ธ ์์ธก์์ ์ฐจ๋ณ์ ์ผ๋ก ๋ค๋ค์ง๋ ๋ฌธ์ .
- ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ๋ฐ์ดํฐ์ ๋ค์ํ: ์ฌ๋ฌ ๊ทธ๋ฃน์ด ๊ณตํํ๊ฒ ํฌํจ๋๋๋ก ๋ฐ์ดํฐ์ ์ ๊ตฌ์ฑ.
- ๊ณต์ ์ฑ ์งํ(Fairness Metric) ์ ์ฉ: Equalized Odds, Demographic Parity ๋ฑ ํ์ฉ.
- ํธํฅ ์ ๊ฑฐ ์๊ณ ๋ฆฌ์ฆ ์ ์ฉ: ๋ชจ๋ธ ํ๋ จ ์ ๋ฐ์ดํฐ ๊ท ํ์ ๋ง์ถ๋ ๊ธฐ๋ฒ ํ์ฉ.
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
AI ๋ชจ๋ธ์ ํธํฅ(Bias) ๊ฐ๋
โ
๋ฐ์ดํฐ์
๋ค์์ฑ ํ๋ณด ๋ฐฉ๋ฒ
โ
Fairness Metric (Equalized Odds, Demographic Parity
โ 11. ํ ์คํธ ์๋ํ์์ ๋ณ๋ ฌ ์คํ ๋ฌธ์
๋ฌธ์ 11. ํ ์คํธ ์๋ํ์์ ๋ณ๋ ฌ ์คํ(Parallel Execution)์ ์ ์ฉํ ๋ ๋ฐ์ํ ์ ์๋ ์ฃผ์ ๋ฌธ์ ๋?
- ํ ์คํธ ์คํ ์๋๊ฐ ๋๋ ค์ง๋ค.
- ์๋ก ๋ค๋ฅธ ํ ์คํธ๊ฐ ๋์ผํ ๋ฆฌ์์ค๋ฅผ ๋์์ ์ฌ์ฉํ์ฌ ์ถฉ๋์ด ๋ฐ์ํ ์ ์๋ค.
- ๋ณ๋ ฌ ์คํ์ ์ ์ฉํ๋ฉด ํ ์คํธ ๊ฒฐ๊ณผ๊ฐ ํญ์ ์ผ๊ด๋๊ฒ ๋์จ๋ค.
- ํ ์คํธ ์คํ ์์๋ฅผ ๊ณ ์ ํด์ผ ํ๋ค.
โ ์ ๋ต: โก ์๋ก ๋ค๋ฅธ ํ ์คํธ๊ฐ ๋์ผํ ๋ฆฌ์์ค๋ฅผ ๋์์ ์ฌ์ฉํ์ฌ ์ถฉ๋์ด ๋ฐ์ํ ์ ์๋ค.
๐ ํด์ค:
- ๋ณ๋ ฌ ์คํ(Parallel Execution)์ ์ฅ์ :
- ํ ์คํธ ์คํ ์๋๋ฅผ ๋ํญ ๋จ์ถํ์ฌ CI/CD ํ์ดํ๋ผ์ธ์ ๋น ๋ฅด๊ฒ ์คํํ ์ ์์.
- ๋ฐ์ํ ์ ์๋ ๋ฌธ์ :
- ๊ณต์ ๋ฆฌ์์ค ์ถฉ๋: ํ ์คํธ๊ฐ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ API๋ฅผ ๋์์ ํธ์ถํ๋ฉด ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ.
- ๋๊ธฐํ ๋ฌธ์ : ํน์ ํ ์คํธ๊ฐ ์๋ฃ๋์ง ์์๋๋ฐ ๋ค๋ฅธ ํ ์คํธ๊ฐ ์คํ๋๋ฉด ์๊ธฐ์น ์์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์.
- ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ํ ์คํธ ๊ฐ ๋ฐ์ดํฐ ๊ฒฉ๋ฆฌ (Test Data Isolation).
- Mocking์ ํ์ฉํ์ฌ ์ธ๋ถ ์์กด์ฑ์ ์ค์.
- Thread-safeํ ํ ์คํธ ์ฝ๋ ์์ฑ.
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
๋ณ๋ ฌ ์คํ(Parallel Execution) ๊ฐ๋
๊ณผ ์ฅ์
โ
๊ณต์ ๋ฆฌ์์ค ์ถฉ๋ ๋ฌธ์ ์ ํด๊ฒฐ ๋ฐฉ๋ฒ
โ
Mocking๊ณผ ๋ฐ์ดํฐ ๊ฒฉ๋ฆฌ๋ฅผ ํ์ฉํ ์ต์ ํ ์ ๋ต
โ 12. API ๋ณด์ ํ ์คํธ์์ CSRF ๋ฌธ์
๋ฌธ์ 12. CSRF(Cross-Site Request Forgery) ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๋ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์?
- ์ฌ์ฉ์ ์ ๋ ฅ๊ฐ์ ํํฐ๋งํ๊ณ ๊ฒ์ฆํ๋ค.
- ๋ชจ๋ ์์ฒญ์ HTTPS๋ก ์ํธํํ๋ค.
- HTTP ์์ฒญ์ CSRF ํ ํฐ์ ์ถ๊ฐํ๊ณ ์๋ฒ์์ ์ด๋ฅผ ๊ฒ์ฆํ๋ค.
- ์๋ฒ๊ฐ ์์ฒญ์ ๋ฐ์ ๋ IP ์ฃผ์๋ฅผ ๊ฒ์ฌํ๋ค.
โ ์ ๋ต: โข HTTP ์์ฒญ์ CSRF ํ ํฐ์ ์ถ๊ฐํ๊ณ ์๋ฒ์์ ์ด๋ฅผ ๊ฒ์ฆํ๋ค.
๐ ํด์ค:
- CSRF(Cross-Site Request Forgery)๋?
- ๊ณต๊ฒฉ์๊ฐ ์ฌ์ฉ์์ ์ธ์ฆ๋ ์ธ์ ์ ์ ์ฉํ์ฌ ์ํ์ง ์๋ ์์ฒญ์ ์๋ฒ์ ๋ณด๋ผ ์ ์๋๋ก ์ ๋ํ๋ ๊ณต๊ฒฉ.
- ๋ฐฉ์ง ๋ฐฉ๋ฒ:
- CSRF ํ ํฐ ์ฌ์ฉ:
- ์๋ฒ๊ฐ ์์ฒญ๋ง๋ค ๊ณ ์ ํ CSRF ํ ํฐ์ ๋ฐ๊ธํ๊ณ , ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ฅผ ํจ๊ป ์ ์กํ๋๋ก ์๊ตฌ.
- SameSite ์ฟ ํค ์ค์ :
- SameSite=Strict ๋๋ SameSite=Lax๋ฅผ ์ค์ ํ์ฌ ๋ค๋ฅธ ์ฌ์ดํธ์์ ์์ฒญ์ ๋ณด๋ด์ง ๋ชปํ๋๋ก ์ ํ.
- Referrer ๊ฒ์ฆ:
- ์์ฒญ ์ถ์ฒ(Referrer)๋ฅผ ํ์ธํ์ฌ ์ ๋ขฐํ ์ ์๋ ๋๋ฉ์ธ์ธ์ง ๊ฒ์ฆ.
- CSRF ํ ํฐ ์ฌ์ฉ:
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
CSRF ๊ณต๊ฒฉ ๊ฐ๋
๊ณผ ์ค์ ์ฌ๋ก
โ
CSRF ํ ํฐ์ ์ญํ ๊ณผ ์ ์ฉ ๋ฐฉ๋ฒ
โ
SameSite ์ฟ ํค ์ค์ ์ ์ค์์ฑ
โ 13. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ ํ๋ ๋ฌธ์
๋ฌธ์ 13. ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํด ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์?
- ๋ชจ๋ ํ ์ด๋ธ์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ค.
- ์์ฃผ ์ฌ์ฉ๋๋ ์ฟผ๋ฆฌ์ ๋ํ ์คํ ๊ณํ(Execution Plan)์ ๋ถ์ํ๊ณ ์ ์ ํ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ค.
- ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ํด ํญ์ ORDER BY๋ฅผ ์ฌ์ฉํ๋ค.
- ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ๊ฐ์ ธ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํํฐ๋งํ๋ค.
โ ์ ๋ต: โก ์์ฃผ ์ฌ์ฉ๋๋ ์ฟผ๋ฆฌ์ ๋ํ ์คํ ๊ณํ(Execution Plan)์ ๋ถ์ํ๊ณ ์ ์ ํ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ค.
๐ ํด์ค:
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ ํ๋ ํต์ฌ:
- ์คํ ๊ณํ(Execution Plan) ๋ถ์:
- ์ฟผ๋ฆฌ๊ฐ ์คํ๋ ๋ ์ด๋ค ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋์ง ํ์ธํ๊ณ ์ต์ ํ.
- ์ธ๋ฑ์ค ์ต์ ํ:
- WHERE, JOIN, GROUP BY ์ ์์ ์์ฃผ ์ฌ์ฉ๋๋ ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ์ฌ ์ฑ๋ฅ ๊ฐ์ .
- ์บ์ฑ ํ์ฉ:
- Redis ๋๋ Memcached๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋ณต์ ์ธ ์ฟผ๋ฆฌ ์คํ์ ์ค์.
- ์คํ ๊ณํ(Execution Plan) ๋ถ์:
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํ ๊ณํ(Execution Plan) ๋ถ์ ๋ฐฉ๋ฒ
โ
์ธ๋ฑ์ค ํ๋ ์ ๋ต (Clustered Index vs. Non-Clustered Index)
โ
์บ์ฑ(Cache) ํ์ฉ ๋ฐฉ๋ฒ
โ 14. ๋คํธ์ํฌ ๋ถํ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 14. ๋คํธ์ํฌ ๋ถํ ํ ์คํธ(Network Load Testing)์์ ์ธก์ ํด์ผ ํ ์ฃผ์ ์งํ๋?
- ํด๋ผ์ด์ธํธ์ CPU ์ฌ์ฉ๋
- ์๋ฒ์ IP ์ฃผ์
- ์์ฒญ ์ง์ฐ ์๊ฐ(Latency)๊ณผ ์ฒ๋ฆฌ๋(Throughput)
- ์๋ต ๋ฐ์ดํฐ ํฌ๊ธฐ๋ง ์ธก์ ํ๋ค.
โ ์ ๋ต: โข ์์ฒญ ์ง์ฐ ์๊ฐ(Latency)๊ณผ ์ฒ๋ฆฌ๋(Throughput)
๐ ํด์ค:
- ๋คํธ์ํฌ ๋ถํ ํ
์คํธ ํต์ฌ ์งํ:
- ์ง์ฐ ์๊ฐ(Latency): ์์ฒญ์ ๋ณด๋ธ ํ ์๋ต์ ๋ฐ๊ธฐ๊น์ง์ ์๊ฐ.
- ์ฒ๋ฆฌ๋(Throughput): ์ด๋น ์ฒ๋ฆฌํ ์ ์๋ ์์ฒญ ์(TPS).
- ์๋ฌ์จ(Error Rate): ์์ฒญ ์ค ์คํจํ ์์ฒญ์ ๋น์จ.
- ๋ถํ ํ
์คํธ ๋๊ตฌ:
- JMeter, Gatling, K6 ๋ฑ ์ฌ์ฉ.
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
๋คํธ์ํฌ ๋ถํ ํ
์คํธ ๊ฐ๋
๊ณผ ์งํ
โ
Latency vs. Throughput ์ฐจ์ด
โ
๋ถํ ํ
์คํธ ๋๊ตฌ (JMeter, K6, Gatling)
โ 15. AI/ML ๋ชจ๋ธ์ ๊ณผ์ ํฉ ๋ฌธ์
๋ฌธ์ 15. AI/ML ๋ชจ๋ธ์์ ๊ณผ์ ํฉ(Overfitting)์ ๋ฐฉ์งํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฅ ์ ์ ํ ๊ฒ์?
- ํ๋ จ ๋ฐ์ดํฐ์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ๋์ผํ๊ฒ ์ค์ ํ๋ค.
- ๋ฐ์ดํฐ์ ์ ํฌ๊ธฐ๋ฅผ ์ค์ฌ ๋ชจ๋ธ์ ๋น ๋ฅด๊ฒ ํ์ต์ํจ๋ค.
- ์ ๊ทํ(Regularization) ๊ธฐ๋ฒ์ ์ ์ฉํ๊ณ ๊ต์ฐจ ๊ฒ์ฆ(Cross Validation)์ ์ํํ๋ค.
- ๋ชจ๋ธ์ด ํ๋ จ ๋ฐ์ดํฐ๋ฅผ ์๋ฒฝํ๊ฒ ์์ธกํ๋๋ก ์กฐ์ ํ๋ค.
โ ์ ๋ต: โข ์ ๊ทํ(Regularization) ๊ธฐ๋ฒ์ ์ ์ฉํ๊ณ ๊ต์ฐจ ๊ฒ์ฆ(Cross Validation)์ ์ํํ๋ค.
๐ ํด์ค:
- ๊ณผ์ ํฉ(Overfitting)์ด๋?
- ๋ชจ๋ธ์ด ํ๋ จ ๋ฐ์ดํฐ์๋ ์ ํํ์ง๋ง ์๋ก์ด ๋ฐ์ดํฐ์๋ ์ผ๋ฐํ๋์ง ๋ชปํ๋ ๋ฌธ์ .
- ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ์ ๊ทํ(Regularization): L1, L2 ์ ๊ทํ ์ ์ฉํ์ฌ ๋ชจ๋ธ์ด ํน์ ํจํด์ ๊ณผ์ ํฉ๋์ง ์๋๋ก ์กฐ์ .
- ๊ต์ฐจ ๊ฒ์ฆ(Cross Validation): ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๊ฐ์ Fold๋ก ๋๋์ด ํ์ต ๋ฐ ํ๊ฐ๋ฅผ ๋ฐ๋ณต.
- Dropout ์ ์ฉ: ๋ด๋ด ๋คํธ์ํฌ์์ ์ผ๋ถ ๋ ธ๋๋ฅผ ๋ฌด์์๋ก ๋นํ์ฑํํ์ฌ ์ผ๋ฐํ ์ฑ๋ฅ ํฅ์.
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
AI/ML ๋ชจ๋ธ์ ๊ณผ์ ํฉ(Overfitting) ๊ฐ๋
โ
์ ๊ทํ(Regularization) ๋ฐ ๊ต์ฐจ ๊ฒ์ฆ(Cross Validation) ๊ธฐ๋ฒ
โ
Dropout๊ณผ ๋ฐ์ดํฐ ์ฆ๊ฐ(Data Augmentation) ๋ฐฉ๋ฒ
โ 16. ํ ์คํธ ์๋ํ์์ CI/CD ํ์ดํ๋ผ์ธ ๋ฌธ์
๋ฌธ์ 16. CI/CD ํ์ดํ๋ผ์ธ์์ ์๋ํ ํ ์คํธ๋ฅผ ํจ์จ์ ์ผ๋ก ์คํํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์?
- ๋ชจ๋ ํ ์คํธ๋ฅผ ํ ๋ฒ์ ์คํํ์ฌ ์๋๋ฅผ ๋์ธ๋ค.
- ํ ์คํธ ์ ํ์ ๊ณ์ธตํํ๊ณ (๋จ์ ํ ์คํธ → ํตํฉ ํ ์คํธ → UI ํ ์คํธ) ๋ณ๋ ฌ๋ก ์คํํ๋ค.
- ์๋ํ ํ ์คํธ๋ณด๋ค ์๋ ํ ์คํธ๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ํํ๋ค.
- ๋ชจ๋ ํ ์คํธ๋ฅผ ๊ฐ๋ฐ ๋จ๊ณ๊ฐ ๋๋ ํ ํ ๋ฒ๋ง ์คํํ๋ค.
โ ์ ๋ต: โก ํ ์คํธ ์ ํ์ ๊ณ์ธตํํ๊ณ (๋จ์ ํ ์คํธ → ํตํฉ ํ ์คํธ → UI ํ ์คํธ) ๋ณ๋ ฌ๋ก ์คํํ๋ค.
๐ ํด์ค:
- CI/CD์์ ํ
์คํธ ์คํ ์ต์ ํ:
- ํ
์คํธ ํผ๋ผ๋ฏธ๋(Test Pyramid) ์ ์ฉ:
- ๋จ์ ํ ์คํธ(Unit Test) → ํตํฉ ํ ์คํธ(Integration Test) → UI ํ ์คํธ(End-to-End Test) ์์ผ๋ก ์คํ.
- ๋ณ๋ ฌ ์คํ(Parallel Execution) ํ์ฉ:
- ๋น ๋ฅธ ํผ๋๋ฐฑ์ ์ํด ๊ฐ๋ฅํ ํ ์คํธ๋ฅผ ๋ณ๋ ฌ ์คํ.
- ํ
์คํธ ์คํจ ์ ๋น ๋ฅธ ํผ๋๋ฐฑ ์ ๊ณต:
- ์คํจํ ํ ์คํธ๋ฅผ ์ฐ์ ์ ์ผ๋ก ์์ ํ์ฌ ์ ์ฒด ๋ฐฐํฌ ์ง์ฐ ๋ฐฉ์ง.
- ํ
์คํธ ํผ๋ผ๋ฏธ๋(Test Pyramid) ์ ์ฉ:
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
ํ
์คํธ ํผ๋ผ๋ฏธ๋(Test Pyramid) ๊ฐ๋
โ
CI/CD์์ ์๋ํ ํ
์คํธ ์ต์ ํ ๋ฐฉ๋ฒ
โ
๋ณ๋ ฌ ์คํ(Parallel Execution)์ ์ฅ์ ๊ณผ ๊ณ ๋ ค ์ฌํญ
โ 17. API ์ธ์ฆ ๋ฐ ๋ณด์ ํ ์คํธ ๋ฌธ์
๋ฌธ์ 17. API ์ธ์ฆ์์ OAuth 2.0์ ์ฌ์ฉํ ๋ ๊ฐ์ฅ ์ค์ํ ๋ณด์ ๊ณ ๋ ค ์ฌํญ์?
- Access Token์ ๋ง๋ฃ ์์ด ์ ์งํ์ฌ ์ฑ๋ฅ์ ๋์ธ๋ค.
- Refresh Token์ ์ฌ์ฉํ์ฌ Access Token์ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฐฑ์ ํ๋ค.
- API ํค๋ฅผ URL ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํ๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์ง์ Access Token์ ์์ฑํ๋๋ก ํ๋ค.
โ ์ ๋ต: โก Refresh Token์ ์ฌ์ฉํ์ฌ Access Token์ ์ฃผ๊ธฐ์ ์ผ๋ก ๊ฐฑ์ ํ๋ค.
๐ ํด์ค:
- OAuth 2.0 ๋ณด์ ๊ณ ๋ ค ์ฌํญ:
- Access Token์ ๋ง๋ฃ ์๊ฐ์ด ์์ด์ผ ํจ.
- Refresh Token์ ์ฌ์ฉํ์ฌ Access Token์ ๊ฐฑ์ ํด์ผ ํจ.
- API ํค๋ฅผ URL์ ์ง์ ํฌํจํ๋ฉด ๋ณด์ ์ํ์ด ์์ → HTTP ํค๋ ๋๋ Body์ ํฌํจํด์ผ ํจ.
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
OAuth 2.0์ Access Token๊ณผ Refresh Token ์ฐจ์ด
โ
API ํค๋ฅผ ์์ ํ๊ฒ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ
โ
OAuth 2.0 ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก
โ 18. ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ๋ฌธ์
๋ฌธ์ 18. ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ์์ "๋ํฐ ๋ฆฌ๋(Dirty Read)"๊ฐ ๋ฐ์ํ ์ ์๋ ๊ฒฉ๋ฆฌ ์์ค์?
- Read Uncommitted
- Read Committed
- Repeatable Read
- Serializable
โ ์ ๋ต: โ Read Uncommitted
๐ ํด์ค:
- ๋ํฐ ๋ฆฌ๋(Dirty Read)๋?
- ํ๋์ ํธ๋์ญ์ ์ด ์ปค๋ฐ๋์ง ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ํธ๋์ญ์ ์์ ์ฝ์ ์ ์๋ ๋ฌธ์ .
- ๊ฒฉ๋ฆฌ ์์ค๋ณ Dirty Read ๋ฐ์ ์ฌ๋ถ:
- Read Uncommitted: Dirty Read ๋ฐ์ ๊ฐ๋ฅ โ
- Read Committed: Dirty Read ๋ฐฉ์ง โ
- Repeatable Read: Dirty Read ๋ฐฉ์ง + ๋์ผํ ๋ฐ์ดํฐ ์ฝ๊ธฐ ์ ์ง โ
- Serializable: ๊ฐ์ฅ ๋์ ๊ฒฉ๋ฆฌ ์์ค, Dirty Read ์๋ฒฝ ๋ฐฉ์ง โ
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์
๊ฒฉ๋ฆฌ ์์ค ๊ฐ๋
โ
Dirty Read, Non-Repeatable Read, Phantom Read ์ฐจ์ด
โ
ํธ๋์ญ์
ACID ์์น
โ 19. ๋คํธ์ํฌ ์ฑ๋ฅ ํ ์คํธ์์ Latency์ Throughput ๋ฌธ์
๋ฌธ์ 19. ๋คํธ์ํฌ ์ฑ๋ฅ ํ ์คํธ์์ "Latency"์ "Throughput"์ ์ฐจ์ด์ ๋ํ ์ค๋ช ์ผ๋ก ์ฌ๋ฐ๋ฅธ ๊ฒ์?
- Latency๋ ์ด๋น ์ฒ๋ฆฌํ ์ ์๋ ์์ฒญ ์์ด๋ฉฐ, Throughput์ ์๋ต ์๋๋ฅผ ์๋ฏธํ๋ค.
- Latency๊ฐ ๋ฎ์์๋ก ์๋ต ์๋๊ฐ ๋น ๋ฅด๋ฉฐ, Throughput์ด ๋์์๋ก ๋ง์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ค.
- Throughput์ด ์ฆ๊ฐํ๋ฉด ํญ์ Latency๋ ์ฆ๊ฐํ๋ค.
- Latency์ Throughput์ ๋์ผํ ๊ฐ๋ ์ด๋ค.
โ ์ ๋ต: โก Latency๊ฐ ๋ฎ์์๋ก ์๋ต ์๋๊ฐ ๋น ๋ฅด๋ฉฐ, Throughput์ด ๋์์๋ก ๋ง์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ค.
๐ ํด์ค:
- Latency(์ง์ฐ ์๊ฐ):
- ์์ฒญ์ด ์ ์ก๋ ํ ์๋ต์ ๋ฐ์ ๋๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ.
- ๋จ์: ๋ฐ๋ฆฌ์ด(ms).
- Throughput(์ฒ๋ฆฌ๋):
- ์ด๋น ์ฒ๋ฆฌํ ์ ์๋ ์์ฒญ ์(TPS, RPS).
- ๋จ์: ์์ฒญ/์ด(Requests Per Second).
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
Latency์ Throughput์ ์ฐจ์ด
โ
์ฑ๋ฅ ํ
์คํธ ์งํ (TPS, RPS, P99 Latency)
โ
๋ถํ ํ
์คํธ(Load Testing) ๋ฐฉ๋ฒ
โ 20. ์ปจํ ์ด๋ ํ๊ฒฝ์์ ๋ก๊น ๋ฐ ๋ชจ๋ํฐ๋ง ๋ฌธ์
๋ฌธ์ 20. ์ปจํ ์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํจ๊ณผ์ ์ธ ๋ก๊น ๋ฐ ๋ชจ๋ํฐ๋ง ๋ฐฉ๋ฒ์?
- ๊ฐ ์ปจํ ์ด๋ ๋ด๋ถ์์ ๊ฐ๋ณ์ ์ผ๋ก ๋ก๊ทธ๋ฅผ ์ ์ฅํ๋ค.
- ์ค์ ์ง์คํ ๋ก๊น ์์คํ ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์ปจํ ์ด๋์ ๋ก๊ทธ๋ฅผ ์์งํ๋ค.
- ์ปจํ ์ด๋๊ฐ ์ข ๋ฃ๋๋ฉด ๋ก๊ทธ๋ฅผ ์๋์ผ๋ก ์ญ์ ํ๋ค.
- ๋คํธ์ํฌ ํธ๋ํฝ์ ๋ถ์ํ์ง ์๊ณ ์ ํ๋ฆฌ์ผ์ด์ ๋ก๊ทธ๋ง ํ์ธํ๋ค.
โ ์ ๋ต: โก ์ค์ ์ง์คํ ๋ก๊น ์์คํ ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์ปจํ ์ด๋์ ๋ก๊ทธ๋ฅผ ์์งํ๋ค.
๐ ํด์ค:
- ์ปจํ
์ด๋ ํ๊ฒฝ์์ ๋ก๊น
๋ฐ ๋ชจ๋ํฐ๋ง ํต์ฌ:
- ๋ก๊น
:
- ๊ฐ๋ณ ์ปจํ ์ด๋๊ฐ ์๋ ์ค์ ์ง์คํ ๋ก๊น ์์คํ (ELK Stack, Loki, Fluentd) ํ์ฉ.
- ๋ชจ๋ํฐ๋ง:
- Prometheus, Grafana๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค ์ฌ์ฉ๋(CPU, Memory, Network)์ ์ค์๊ฐ ๋ชจ๋ํฐ๋ง.
- ๋ก๊น
:
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
์ปจํ
์ด๋ ๋ก๊น
์์คํ
(ELK Stack, Loki)
โ
Prometheus & Grafana๋ฅผ ํ์ฉํ ๋ชจ๋ํฐ๋ง
โ
์ปจํ
์ด๋ ๋ก๊ทธ ์์ง ๋ฐฉ์ (Stdout vs. Sidecar)
๐ฅ ๊ณ ๊ธ QA ๊ฐ๋ ์์ฝ
๐ ์ด๋ฒ์ ๋ค๋ฃฌ 5๊ฐ์ง ํต์ฌ ๊ฐ๋
โ
CI/CD์์ ์๋ํ ํ
์คํธ ์ต์ ํ (Test Pyramid, ๋ณ๋ ฌ ์คํ ํ์ฉ)
โ
OAuth 2.0 ๋ณด์ (Access Token๊ณผ Refresh Token ์ฐจ์ด์ )
โ
๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์
๊ฒฉ๋ฆฌ ์์ค (Read Uncommitted → Dirty Read ๊ฐ๋ฅ)
โ
๋คํธ์ํฌ ์ฑ๋ฅ ์งํ (Latency vs. Throughput ๊ฐ๋
๋ฐ ์ฐจ์ด์ )
โ
์ปจํ
์ด๋ ํ๊ฒฝ์ ๋ก๊น
๋ฐ ๋ชจ๋ํฐ๋ง ์ ๋ต (ELK, Prometheus, Grafana ํ์ฉ)
โ 21. ํ ์คํธ ์๋ํ์์ ๋์ ํ ์คํธ ๋ฐ์ดํฐ ๋ฌธ์
๋ฌธ์ 21. ์๋ํ ํ ์คํธ์์ ๋์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์?
- ๋ชจ๋ ํ ์คํธ์์ ๋์ผํ ํ๋์ฝ๋ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ค.
- ํ ์คํธ ์คํ๋ง๋ค ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ ์ ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํ ํ ์ญ์ ํ์ง ์๋๋ค.
- ์ฌ์ฉ์ ์ ๋ ฅ ๊ฐ์ ํ ์คํธ ์ฝ๋ ๋ด์ ์ง์ ์์ฑํ๋ค.
โ ์ ๋ต: โก ํ ์คํธ ์คํ๋ง๋ค ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ ์ ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
๐ ํด์ค:
- ํ
์คํธ ๋ฐ์ดํฐ ๊ด๋ฆฌ์ ์ค์์ฑ:
- ํ ์คํธ ์คํ ๊ฐ ์ผ๊ด์ฑ์ ์ ์งํ๋ฉด์ ๋ ๋ฆฝ์ ์ธ ํ ์คํธ ํ๊ฒฝ์ ์ ์งํด์ผ ํจ.
- ๋์ ํ
์คํธ ๋ฐ์ดํฐ ๊ด๋ฆฌ ๋ฐฉ๋ฒ:
- Setup & Teardown ํจํด ์ ์ฉ:
- ํ ์คํธ ์คํ ์ (setUp()) ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์์ฑ.
- ํ ์คํธ ์คํ ํ(tearDown()) ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ์ฌ ์ ๋ฆฌ.
- Mocking & Stubbing ํ์ฉ:
- ์ธ๋ถ ์์คํ ์ด๋ DB์ ์ง์ ์ ๊ทผํ์ง ์๊ณ , ๊ฐ์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ.
- Setup & Teardown ํจํด ์ ์ฉ:
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
๋์ ํ
์คํธ ๋ฐ์ดํฐ ๊ด๋ฆฌ ๋ฐฉ๋ฒ (Setup & Teardown)
โ
Mocking & Stubbing ๊ฐ๋
๊ณผ ํ์ฉ ๋ฐฉ๋ฒ
โ
ํ๋์ฝ๋ฉ๋ ํ
์คํธ ๋ฐ์ดํฐ์ ๋ฌธ์ ์
โ 22. API Rate Limiting์์ Sliding Window ๊ธฐ๋ฒ ๋ฌธ์
๋ฌธ์ 22. API Rate Limiting์ ์ ์ฉํ ๋ "Sliding Window" ๊ธฐ๋ฒ์ ์ฃผ์ ํน์ง์?
- ํน์ ์๊ฐ ๋์ ํ์ฉ๋ ์์ฒญ ์๋ฅผ ์ด๊ณผํ๋ฉด ๋ชจ๋ ์์ฒญ์ ์ฐจ๋จํ๋ค.
- ๊ณผ๊ฑฐ ์ผ์ ์๊ฐ ๋ด ์์ฒญ ๊ฐ์๋ฅผ ์ค์๊ฐ์ผ๋ก ๊ณ์ฐํ์ฌ ์ ํ์ ์ ์ฉํ๋ค.
- ์์ฒญ์ ๋ฐ์ ์์๋๋ก ์ผ์ ์๊ฐ ๋์ ์ง์ฐ์ํจ ํ ์ฒ๋ฆฌํ๋ค.
- ์์ฒญ์ด ๋ง์์ง๋ฉด ์๋์ผ๋ก ์๋ฒ๋ฅผ ํ์ฅํ์ฌ ์ฒ๋ฆฌํ๋ค.
โ ์ ๋ต: โก ๊ณผ๊ฑฐ ์ผ์ ์๊ฐ ๋ด ์์ฒญ ๊ฐ์๋ฅผ ์ค์๊ฐ์ผ๋ก ๊ณ์ฐํ์ฌ ์ ํ์ ์ ์ฉํ๋ค.
๐ ํด์ค:
- Sliding Window ๊ธฐ๋ฒ์ ํน์ง:
- ํน์ ์๊ฐ ๊ฐ๊ฒฉ(์: 1๋ถ) ๋์ ํ์ฉ๋ ์์ฒญ ์๋ฅผ ์ค์๊ฐ์ผ๋ก ์ ๋ฐ์ดํธํ์ฌ API ์์ฒญ์ ์ ํ.
- ์์ฒญ์ด ์ผ์ ๊ฐ๊ฒฉ์ผ๋ก ๋ถํฌ๋๋๋ก ์ ๋ํ์ฌ ์๋ฒ ๋ถํ๋ฅผ ๊ท ๋ฑํ๊ฒ ๋ถ์ฐ.
- ๊ธฐ์กด ๋ฐฉ๋ฒ๊ณผ์ ์ฐจ์ด:
- Fixed Window: ํน์ ์๊ฐ(์: 1๋ถ) ๋์ ์์ฒญ ๊ฐ์๋ฅผ ์ ํ (ํ๊ณ: ์๋์ฐ๊ฐ ๊ฐฑ์ ๋ ๋ ๊ธ๊ฒฉํ ์์ฒญ ์ฆ๊ฐ ๊ฐ๋ฅ).
- Token Bucket: ์ผ์ ์๋๋ก ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋๋ก ์ ํ.
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
API Rate Limiting ๊ธฐ๋ฒ (Fixed Window vs. Sliding Window vs. Token Bucket)
โ
Sliding Window์ ์ค๋ฌด ์ ์ฉ ๋ฐฉ์
โ
Rate Limiting์ด ํ์ํ ์ด์
โ 23. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ๋๋ฝ ๋ฌธ์
๋ฌธ์ 23. ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ๋๋ฝ(Deadlock)์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋์ ์ํฉ์?
- ๋ ๊ฐ์ ํธ๋์ญ์ ์ด ๋์ผํ ์์๋ก ๋์ผํ ๋ฆฌ์์ค๋ฅผ ์ ๊ทธ๊ณ ์ฌ์ฉํ๋ค.
- ํ๋์ ํธ๋์ญ์ ์ด ์คํ ์ค์ผ ๋, ๋ค๋ฅธ ํธ๋์ญ์ ์ด ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ์คํ๋๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ชจ๋ ์ฟผ๋ฆฌ๋ฅผ READ ONLY๋ก ์คํํ๋ค.
- ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ฉด ๋ฐ๋๋ฝ์ด ๋ฐ์ํ๋ค.
โ ์ ๋ต: โ ๋ ๊ฐ์ ํธ๋์ญ์ ์ด ๋์ผํ ์์๋ก ๋์ผํ ๋ฆฌ์์ค๋ฅผ ์ ๊ทธ๊ณ ์ฌ์ฉํ๋ค.
๐ ํด์ค:
- ๋ฐ๋๋ฝ(Deadlock)์ด๋?
- ๋ ๊ฐ ์ด์์ ํธ๋์ญ์ ์ด ์๋ก๊ฐ ๋ณด์ ํ ๋ฆฌ์์ค๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉด์ ๋ฌดํ์ ๋๊ธฐํ๋ ์ํ.
- ๋ฐ์ ์์ธ:
- ํธ๋์ญ์ A๊ฐ ๋ฆฌ์์ค X๋ฅผ ์ ๊ทผ ํ, ๋ฆฌ์์ค Y๋ฅผ ์์ฒญ.
- ํธ๋์ญ์ B๊ฐ ๋ฆฌ์์ค Y๋ฅผ ์ ๊ทผ ํ, ๋ฆฌ์์ค X๋ฅผ ์์ฒญ → ๊ต์ฐฉ ์ํ ๋ฐ์.
- ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ํธ๋์ญ์ ์ด ํญ์ ๋์ผํ ์์๋ก ๋ฆฌ์์ค๋ฅผ ์ ๊ทธ๋๋ก ๊ฐ์ .
- ํธ๋์ญ์ ํ์์์์ ์ค์ ํ์ฌ ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ๊ฐ์ ํด์ .
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
๋ฐ๋๋ฝ(Deadlock)์ ์ ์์ ๋ฐ์ ์กฐ๊ฑด
โ
๋ฐ๋๋ฝ ๋ฐฉ์ง ๋ฐฉ๋ฒ (Lock Ordering, Timeout ์ค์ )
โ
๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์
๊ฒฉ๋ฆฌ ์์ค๊ณผ์ ๊ด๊ณ
โ 24. ๋คํธ์ํฌ ์ฑ๋ฅ ํ ์คํธ์์ P99 Latency ๋ฌธ์
๋ฌธ์ 24. ๋คํธ์ํฌ ์ฑ๋ฅ ํ ์คํธ์์ "P99 Latency"๊ฐ ์๋ฏธํ๋ ๊ฒ์?
- 99%์ ์์ฒญ์ด ํน์ ์๋ต ์๊ฐ ๋ด์ ์ฒ๋ฆฌ๋๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ํ๊ท ์๋ต ์๊ฐ์ ์๋ฏธํ๋ค.
- ์ต์ ์๋ต ์๊ฐ์ ์๋ฏธํ๋ค.
- ์ด๋น ์ฒ๋ฆฌํ ์ ์๋ ์์ฒญ ์(TPS)๋ฅผ ์๋ฏธํ๋ค.
โ ์ ๋ต: โ 99%์ ์์ฒญ์ด ํน์ ์๋ต ์๊ฐ ๋ด์ ์ฒ๋ฆฌ๋๋ ๊ฒ์ ์๋ฏธํ๋ค.
๐ ํด์ค:
- P99 Latency๋?
- 99๋ฒ์งธ ๋ฐฑ๋ถ์์(Percentile 99) ์๋ต ์๊ฐ.
- 99%์ ์์ฒญ์ด P99 ๊ฐ ์ดํ์ ์๋ต ์๊ฐ ๋ด์ ์ฒ๋ฆฌ๋์์์ ์๋ฏธ.
- ์ฑ๋ฅ ํ๊ฐ ์ ์ค์์ฑ:
- ํ๊ท ์๋ต ์๊ฐ(Mean Latency)๋ณด๋ค P99 Latency๊ฐ ์ค์ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ ์ ํํ๊ฒ ๋ฐ์.
- ์:
- P50 Latency = 50%์ ์์ฒญ์ด ์ด ์๊ฐ๋ณด๋ค ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ๋จ.
- P99 Latency = 99%์ ์์ฒญ์ด ์ด ์๊ฐ๋ณด๋ค ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ๋จ.
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
P50, P90, P99 Latency ๊ฐ๋
โ
ํ๊ท ์๋ต ์๊ฐ vs. ๋ฐฑ๋ถ์ ์๋ต ์๊ฐ์ ์ฐจ์ด
โ
์ฑ๋ฅ ์ต์ ํ ์ P99 Latency ๊ณ ๋ ค ๋ฐฉ๋ฒ
โ 25. ์ปจํ ์ด๋ ๋คํธ์ํฌ ๋ชจ๋ธ ๋ฌธ์
๋ฌธ์ 25. ์ปจํ ์ด๋ ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ "Bridge Network" ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ์ด์ ๋?
- ๋ชจ๋ ์ปจํ ์ด๋๊ฐ ๊ฐ์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ฅผ ๊ณต์ ํ๋๋ก ์ค์ ํ๊ธฐ ์ํด์.
- ์ปจํ ์ด๋ ๊ฐ ๊ฒฉ๋ฆฌ๋ ๋คํธ์ํฌ๋ฅผ ์ ๊ณตํ๋ฉด์๋ ๋ด๋ถ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด์.
- ์ปจํ ์ด๋๊ฐ ํธ์คํธ์ ๋คํธ์ํฌ๋ฅผ ์ง์ ์ฌ์ฉํ๋๋ก ํ๊ธฐ ์ํด์.
- ์ปจํ ์ด๋ ๊ฐ ๋คํธ์ํฌ ํต์ ์ ์ฐจ๋จํ๊ธฐ ์ํด์.
โ ์ ๋ต: โก ์ปจํ ์ด๋ ๊ฐ ๊ฒฉ๋ฆฌ๋ ๋คํธ์ํฌ๋ฅผ ์ ๊ณตํ๋ฉด์๋ ๋ด๋ถ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด์.
๐ ํด์ค:
- Bridge Network๋?
- Docker์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ์ปจํ ์ด๋ ๊ฐ ๋คํธ์ํฌ ๊ฒฉ๋ฆฌ ๋ฐ ๋ด๋ถ ํต์ ์ ์ํ ๋คํธ์ํฌ ๋ชจ๋ธ.
- ์ฃผ์ ํน์ง:
- ๊ฐ์ ๋คํธ์ํฌ ๋ด ์ปจํ ์ด๋๋ผ๋ฆฌ๋ ํต์ ๊ฐ๋ฅ.
- ์ธ๋ถ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ์ํ๋ฉด ํฌํธ ๋งคํ(port mapping) ํ์.
- ๋ค๋ฅธ ๋คํธ์ํฌ ๋ชจ๋ธ๊ณผ์ ๋น๊ต:
- Host Network: ์ปจํ ์ด๋๊ฐ ํธ์คํธ์ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ฅผ ์ง์ ์ฌ์ฉ.
- Overlay Network: ์ฌ๋ฌ ๋ ธ๋(cluster)์์ ์คํ๋๋ ์ปจํ ์ด๋ ๊ฐ ํต์ ์ง์.
๐ ๋ฐ๋์ ์์์ผ ํ ๊ฐ๋
:
โ
Bridge Network, Host Network, Overlay Network ์ฐจ์ด
โ
์ปจํ
์ด๋ ๊ฐ ๋คํธ์ํฌ ํต์ ๋ฐฉ์
โ
ํฌํธ ๋งคํ(Port Mapping)๊ณผ ๋คํธ์ํฌ ๋ณด์ ๊ณ ๋ ค ์ฌํญ
# ์ถ๊ฐ CS ์ง์
๐ต 1xx (์ ๋ณด ์๋ต, Informational)
์์ฒญ์ด ์๋ฝ๋์์ผ๋ฉฐ ์ฒ๋ฆฌ๊ฐ ๊ณ์ ์งํ ์ค์ผ ๋ ์ฌ์ฉ๋ผ.
- 100 Continue
ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ ํค๋๋ฅผ ์ ์กํ๊ณ , ์๋ฒ๊ฐ ์ด๋ฅผ ๋ฐ์๋ค์ฌ ๋ณธ๋ฌธ์ ๊ณ์ ์ ์กํ๋ผ๊ณ ์๋ ค์ค. - 101 Switching Protocols
ํด๋ผ์ด์ธํธ๊ฐ ํ๋กํ ์ฝ ๋ณ๊ฒฝ์ ์์ฒญํ๊ณ , ์๋ฒ๊ฐ ์ด๋ฅผ ์น์ธํจ. (์: HTTP → WebSocket) - 102 Processing (WebDAV)
์๋ฒ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌ ์ค์ด๋ฉฐ ์์ง ์๋ต์ ์ค ์ ์์์ ์๋ฆผ. - 103 Early Hints
ํด๋ผ์ด์ธํธ๊ฐ ์บ์๋ ๋ฆฌ์์ค๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ์ ธ์ค๋๋ก ์ ๋ํ๋ ์ํ ์ฝ๋.
๐ข 2xx (์ฑ๊ณต, Success)
์์ฒญ์ด ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ๋์์์ ์๋ฏธํด.
- 200 OK
์์ฒญ์ด ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋จ. (GET: ๋ฐ์ดํฐ ๋ฐํ, POST: ๋ฆฌ์์ค ์์ฑ๋จ) - 201 Created
์์ฒญ์ด ์ฑ๊ณต์ ์ผ๋ก ์ฒ๋ฆฌ๋์์ผ๋ฉฐ, ์๋ก์ด ๋ฆฌ์์ค๊ฐ ์์ฑ๋จ. - 202 Accepted
์์ฒญ์ด ์๋ฝ๋์์ง๋ง, ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋์ง ์์. (๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฑ) - 203 Non-Authoritative Information
์์ฒญ์ ์ฑ๊ณตํ์ง๋ง, ์๋ต์ด ์๋ณธ ์๋ฒ๊ฐ ์๋ ๋ค๋ฅธ ์์ค์์ ์ ๊ณต๋จ. - 204 No Content
์์ฒญ์ ์ฑ๊ณตํ์ง๋ง, ์๋ต ๋ณธ๋ฌธ์ด ์์. (์: DELETE ์์ฒญ) - 205 Reset Content
ํด๋ผ์ด์ธํธ๊ฐ ์ ๋ ฅ ์์์ ์ด๊ธฐํํ๋๋ก ์ง์ํ๋ ์๋ต. - 206 Partial Content
์ผ๋ถ ๋ฒ์๋ง ๋ฐํ๋จ. (์: ํ์ผ ๋ค์ด๋ก๋ ์ค ์ผ๋ถ๋ง ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ) - 207 Multi-Status (WebDAV)
์ฌ๋ฌ ๊ฐ์ ์ํ ์ฝ๋๊ฐ ํฌํจ๋ ์ ์๋ ์๋ต.
๐ก 3xx (๋ฆฌ๋ค์ด๋ ์ , Redirection)
์์ฒญํ ๋ฆฌ์์ค๊ฐ ์ด๋๋์๊ฑฐ๋, ํด๋ผ์ด์ธํธ๊ฐ ๋ค๋ฅธ URL๋ก ์ด๋ํด์ผ ํ ๋ ์ฌ์ฉ๋ผ.
- 300 Multiple Choices
์์ฒญ์ ๋ํด ์ฌ๋ฌ ๊ฐ์ ์๋ต์ด ๊ฐ๋ฅํ๋ฉฐ, ํด๋ผ์ด์ธํธ๊ฐ ์ ํํด์ผ ํจ. - 301 Moved Permanently
๋ฆฌ์์ค๊ฐ ์๊ตฌ์ ์ผ๋ก ์ด๋๋จ. (SEO์์ ์ค์, ์๋ ๋ฆฌ๋ค์ด๋ ์ ๊ฐ๋ฅ) - 302 Found (Temporary Redirect)
๋ฆฌ์์ค๊ฐ ์ผ์์ ์ผ๋ก ์ด๋๋จ. (๊ธฐ์กด์๋ ์์ ๋ฆฌ๋ค์ด๋ ์ ์ผ๋ก ์ฌ์ฉ๋์์) - 303 See Other
ํด๋ผ์ด์ธํธ๊ฐ ๋ค๋ฅธ URL๋ก ์์ฒญํด์ผ ํจ. (์: POST ํ GET์ผ๋ก ์ด๋) - 304 Not Modified
ํด๋ผ์ด์ธํธ๊ฐ ์บ์๋ ๋ฒ์ ์ ์ฌ์ฉํ ์ ์์. - 307 Temporary Redirect
302์ ์ ์ฌํ์ง๋ง, ์์ฒญ ๋ฉ์๋๋ฅผ ์ ์งํด์ผ ํจ. - 308 Permanent Redirect
301๊ณผ ์ ์ฌํ์ง๋ง, ์์ฒญ ๋ฉ์๋๋ฅผ ์ ์งํด์ผ ํจ.
๐ด 4xx (ํด๋ผ์ด์ธํธ ์ค๋ฅ, Client Error)
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ์๋ชป๋์๊ฑฐ๋ ๊ถํ์ด ์์ ๋ ์ฌ์ฉ๋ผ.
- 400 Bad Request
์์ฒญ์ด ์๋ชป๋์๊ฑฐ๋ ์๋ฒ๊ฐ ์ดํดํ ์ ์์. - 401 Unauthorized
์ธ์ฆ์ด ํ์ํ์ง๋ง ์ ๊ณต๋์ง ์์. - 402 Payment Required (๊ฑฐ์ ์ฌ์ฉ๋์ง ์์)
๊ฒฐ์ ๊ฐ ํ์ํจ. - 403 Forbidden
์ธ์ฆ์ ๋์์ง๋ง, ์ ๊ทผ ๊ถํ์ด ์์. - 404 Not Found
์์ฒญํ ๋ฆฌ์์ค๋ฅผ ์ฐพ์ ์ ์์. - 405 Method Not Allowed
์์ฒญํ HTTP ๋ฉ์๋๊ฐ ํ์ฉ๋์ง ์์. (์: GET๋ง ๊ฐ๋ฅํ๋ฐ POST ์์ฒญํ ๊ฒฝ์ฐ) - 406 Not Acceptable
ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ํ์์ด ์ง์๋์ง ์์. - 407 Proxy Authentication Required
ํ๋ก์ ์ธ์ฆ์ด ํ์ํจ. - 408 Request Timeout
์์ฒญ ์๊ฐ์ด ์ด๊ณผ๋จ. - 409 Conflict
์์ฒญ์ด ํ์ฌ ๋ฆฌ์์ค ์ํ์ ์ถฉ๋ํจ. (์: ๋ฐ์ดํฐ ์ค๋ณต, ๋์ ์์ ์ถฉ๋) - 410 Gone
๋ฆฌ์์ค๊ฐ ์๊ตฌ์ ์ผ๋ก ์ญ์ ๋จ. (404์ ์ ์ฌํ์ง๋ง, ์ญ์ ๋ ๊ฒ์ด ํ์คํ ๊ฒฝ์ฐ) - 411 Length Required
Content-Length ํค๋๊ฐ ํ์ํจ. - 412 Precondition Failed
์์ฒญ์ด ์ง์ ๋ ์กฐ๊ฑด์ ์ถฉ์กฑํ์ง ๋ชปํจ. - 413 Payload Too Large
์์ฒญ ๋ณธ๋ฌธ์ด ์๋ฒ๊ฐ ์ฒ๋ฆฌํ๊ธฐ์๋ ๋๋ฌด ํผ. - 414 URI Too Long
์์ฒญ URL์ด ๋๋ฌด ๊น. - 415 Unsupported Media Type
์๋ฒ๊ฐ ์์ฒญํ ์ฝํ ์ธ ํ์ ์ ์ง์ํ์ง ์์. - 416 Range Not Satisfiable
์์ฒญํ ๋ฒ์๊ฐ ์ ํจํ์ง ์์. - 417 Expectation Failed
Expect ํค๋์ ์๊ตฌ ์กฐ๊ฑด์ ์ถฉ์กฑํ ์ ์์. - 418 I'm a teapot (๋๋ด ์ฝ๋, RFC 2324)
์๋ฒ๊ฐ ์ฐป์ฃผ์ ์๋ผ์ ์ปคํผ๋ฅผ ๋์ผ ์ ์์. - 421 Misdirected Request
์๋ฒ๊ฐ ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์์. - 425 Too Early
์๋ฒ๊ฐ ์ฌ์์ฒญ์ ๋ฐ๊ธฐ ์ ์ ์๋ต์ ๋ณด๋ด๊ธฐ์๋ ์ด๋ฆ. - 426 Upgrade Required
ํด๋ผ์ด์ธํธ๊ฐ ํ๋กํ ์ฝ์ ์ ๊ทธ๋ ์ด๋ํด์ผ ํจ. - 428 Precondition Required
์์ฒญ์ ์ ํ ์กฐ๊ฑด์ด ํ์ํจ. - 429 Too Many Requests
ํด๋ผ์ด์ธํธ๊ฐ ๋๋ฌด ๋ง์ ์์ฒญ์ ๋ณด๋. (Rate Limiting) - 431 Request Header Fields Too Large
์์ฒญ ํค๋๊ฐ ๋๋ฌด ํผ. - 451 Unavailable For Legal Reasons
๋ฒ์ ์ด์ ๋ก ์ธํด ์ ๊ทผ์ด ์ ํ๋จ.
โซ 5xx (์๋ฒ ์ค๋ฅ, Server Error)
์๋ฒ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ ๋ ์ฌ์ฉ๋ผ.
- 500 Internal Server Error
์๋ฒ ๋ด๋ถ ์ค๋ฅ. (์ผ๋ฐ์ ์ธ ์๋ฒ ์๋ฌ) - 501 Not Implemented
์๋ฒ๊ฐ ์์ฒญ๋ ๊ธฐ๋ฅ์ ์ง์ํ์ง ์์. - 502 Bad Gateway
์๋ฒ๊ฐ ๋ค๋ฅธ ์๋ฒ๋ก๋ถํฐ ์๋ชป๋ ์๋ต์ ๋ฐ์. - 503 Service Unavailable
์๋ฒ๊ฐ ๊ณผ๋ถํ ์ํ์ด๊ฑฐ๋ ์ ์ง๋ณด์ ์ค์ด๋ผ ์ฌ์ฉ ๋ถ๊ฐ๋ฅํจ. - 504 Gateway Timeout
์๋ฒ๊ฐ ๋ค๋ฅธ ์๋ฒ๋ก๋ถํฐ ์๋ต์ ๋ฐ์ง ๋ชปํจ. - 505 HTTP Version Not Supported
์๋ฒ๊ฐ ์์ฒญ๋ HTTP ๋ฒ์ ์ ์ง์ํ์ง ์์. - 506 Variant Also Negotiates
์์ฒญ๋ ์ฝํ ์ธ ํ์์ด ๋ฌดํ ๋ฃจํ์ ๋น ์ง. - 507 Insufficient Storage (WebDAV)
์๋ฒ์ ์ ์ฅ ๊ณต๊ฐ์ด ๋ถ์กฑํจ. - 508 Loop Detected (WebDAV)
์์ฒญ์ด ๋ฌดํ ๋ฃจํ๋ฅผ ๊ฐ์งํจ. - 510 Not Extended
์ถ๊ฐ ํ์ฅ์ด ํ์ํจ. - 511 Network Authentication Required
๋คํธ์ํฌ ์ธ์ฆ์ด ํ์ํจ.
# SOAP API
SOAP API๋ Simple Object Access Protocol์ ์ฝ์๋ก, ์ฃผ๋ก ์น ์๋น์ค ๊ฐ ํต์ ์ ์ํด ์ฌ์ฉ๋๋ ํ๋กํ ์ฝ์ด์ผ. SOAP๋ ๋ฉ์์ง ํ์๊ณผ ํต์ ๊ท์ฝ์ ์๊ฒฉํ๊ฒ ์ ์ํ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ด, ๋ณด์์ฑ๊ณผ ํ์คํ๊ฐ ์ค์ํ ๊ธฐ์ ์์คํ ์ด๋ ์ ๋ถ ์์คํ ์์ ๋ง์ด ์ฌ์ฉ๋ผ.
์ด์ ์ข ๋ ๊น์ด ์ดํดํ ์ ์๋๋ก ํ๋์ฉ ์ค๋ช ํด ์ค๊ฒ.
๐ SOAP API์ ํน์ง
- XML ๊ธฐ๋ฐ
- SOAP๋ **XML (Extensible Markup Language)**์ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ณ , ๊ตฌ์กฐ์ ๋ด์ฉ์ ์ค๋ช ํด.
- ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ XML ํ์์ผ๋ก ์ง๋ ฌํ๋๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํ๋ซํผ๊ณผ ์ธ์ด ๊ฐ ํธํ์ด ์ฌ์.
- HTTP ๋๋ ๋ค๋ฅธ ์ ์ก ํ๋กํ ์ฝ ์ฌ์ฉ ๊ฐ๋ฅ
- ๋๋ถ๋ถ HTTP๋ HTTPS๋ฅผ ์ฌ์ฉํ์ง๋ง, FTP๋ SMTP ๊ฐ์ ๋ค๋ฅธ ํ๋กํ ์ฝ๋ ์ฌ์ฉํ ์ ์์ด.
- ์๊ฒฉํ ํ์ค ๋ฐ ๊ตฌ์กฐ
- SOAP์ W3C (World Wide Web Consortium)์์ ํ์ค์ผ๋ก ์ ์๋ ํ๋กํ ์ฝ๋ก, ๋ช ํํ ๋ฉ์์ง ๊ตฌ์กฐ๊ฐ ์์ด.
- ๋ฉ์์ง๋ ํญ์ ํน์ ํ XML ํฌ๋งท์ ๋ฐ๋ฅด๋ฉฐ, ์๋ชป๋ ๊ตฌ์กฐ๋ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํด.
- WSDL (Web Service Description Language) ์ง์
- SOAP์ ์๋น์ค์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ WSDL ํ์ผ๊ณผ ํจ๊ป ์ ๊ณต๋ผ.
- WSDL์ ์ด๋ค ๊ธฐ๋ฅ(๋ฉ์๋)๋ค์ด ์๋์ง, ์ด๋ค ํ์์ ์์ฒญ๊ณผ ์๋ต์ ์ฃผ๊ณ ๋ฐ๋์ง ๋ช ์ํ๋ ์ญํ ์ ํด.
๐ SOAP ๋ฉ์์ง ๊ตฌ์กฐ
SOAP ๋ฉ์์ง๋ ๋ณดํต XML๋ก ์์ฑ๋๊ณ , ๋ค ๊ฐ์ง ์ฃผ์ ์์๋ก ๊ตฌ์ฑ๋ผ.
- Envelope: ์ ์ฒด ๋ฉ์์ง๋ฅผ ๊ฐ์ธ๋ ๋ฃจํธ ์์
- Header: ์ถ๊ฐ ์ ๋ณด(๋ฉํ๋ฐ์ดํฐ, ์ธ์ฆ ๋ฑ)๋ฅผ ํฌํจ (์ ํ์ ์์)
- Body: ์์ฒญ ๋๋ ์๋ต ๋ด์ฉ์ ํฌํจ
- Fault: ์ค๋ฅ๋ ์์ธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๋ฐํ๋๋ ์ค๋ฅ ์ ๋ณด
โจ SOAP API ์์
๐ SOAP vs REST ๋น๊ต
ํน์งSOAPREST
ํ๋กํ ์ฝ | ํ๋กํ ์ฝ (W3C ํ์ค) | ์ํคํ ์ฒ ์คํ์ผ |
๋ฉ์์ง ํ์ | XML | JSON, XML, ํ ์คํธ ๋ฑ |
์ ์ก ํ๋กํ ์ฝ | HTTP, SMTP, FTP ๋ฑ ๋ค์ | HTTP (GET, POST, PUT, DELETE ๋ฑ) |
๋ณด์ | ๋์ ๋ณด์ (WS-Security ๋ฑ ์ง์) | HTTPS ๊ธฐ๋ฐ ๋ณด์ |
์ํ ์ ์ง | ์ํ ๋น์ ์ฅ (Stateless) | ์ํ ์ ์ง ๋ฐ ์ํ ๋น์ ์ฅ ๋ชจ๋ ๊ฐ๋ฅ |
์๋ | ์๋์ ์ผ๋ก ๋๋ฆผ (XML ๋ณํ์ผ๋ก ์ธํ ์ค๋ฒํค๋) | ๊ฐ๋ณ๊ณ ๋น ๋ฆ |
์ ์ฐ์ฑ | ๋ฎ์ (์๊ฒฉํ ๊ตฌ์กฐ) | ๋์ (๋ค์ํ ๋ฐ์ดํฐ ํ์ ์ง์) |
์ ์ฉ ๋ถ์ผ | ๊ธฐ์ /๊ธ์ต/์ ๋ถ ์์คํ ๋ฑ ๋ณด์์ด ์ค์ํ ๊ณณ | ์น ์ ํ๋ฆฌ์ผ์ด์ API |
๊ณ์ฝ(WSDL) | WSDL ํ์ผ ํ์ | ๊ณ์ฝ ์์ด ์์ ๋กญ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ |
๐ SOAP API๊ฐ ์ฌ์ฉ๋๋ ๊ณณ
- ์ํ, ๊ธ์ต ์๋น์ค
- ๋ณด์์ด ๋งค์ฐ ์ค์ํ ๊ณณ์์ SOAP์ ์ฃผ๋ก ์ฌ์ฉ๋ผ.
- WS-Security๋ SSL ๊ฐ์ ์ถ๊ฐ ๋ณด์ ๊ธฐ๋ฅ๋ค์ ํ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ด์ผ.
- ๊ธฐ์
๋ด๋ถ ์์คํ
ํตํฉ (Enterprise Application Integration)
- SAP, Oracle ๊ฐ์ ์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ์ฌ์ ํ SOAP ๊ธฐ๋ฐ ํต์ ์ ๋ง์ด ์ฌ์ฉํด.
- ์ ๋ถ ๋๋ ๊ณต๊ณต ์๋น์ค API
- ๊ณต๊ณต ์๋น์ค์์๋ ํ์คํ๋ ํต์ ๋ฐฉ์์ด ์ค์ํ๋ฐ, SOAP์ด WSDL๋ก ๋ช ํํ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ๋ผ.
- ๋ ๊ฑฐ์ ์์คํ
- ์ค๋๋ ์์คํ ์ ์ฌ์ ํ SOAP ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์.
๐ SOAP์ ์ฅ์
- ์๊ฒฉํ ํ์ค์ผ๋ก ์ธํด ์์ ์ฑ๊ณผ ๋ณด์์ด ๋์.
- ๋ค์ํ ์ ์ก ํ๋กํ ์ฝ์ ์ง์ (HTTP, SMTP, FTP ๋ฑ)
- WSDL๋ก ์ธํฐํ์ด์ค๋ฅผ ๋ฌธ์ํํ์ฌ ์๋ํ๋ ํด๋ผ์ด์ธํธ ์์ฑ์ด ๊ฐ๋ฅ
- XML ๊ธฐ๋ฐ์ผ๋ก ํ๋ซํผ ๋ ๋ฆฝ์ ์ผ๋ก ๋์
โ ๏ธ SOAP์ ๋จ์
- XML ๊ธฐ๋ฐ์ด๋ผ ๋ฐ์ดํฐ ํฌ๊ธฐ๊ฐ ์ปค์ง๊ณ ์ฒ๋ฆฌ ์๋๊ฐ ๋๋ฆผ.
- REST API์ ๋นํด ๊ตฌํ์ด ๋ณต์กํ๊ณ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์.
- HTTP ๊ธฐ๋ฐ ์์ฒญ์์ ๋ฉ์๋(GET, POST ๋ฑ)๋ฅผ ํ์ฉํ๊ธฐ ์ด๋ ต๊ณ ๋นํจ์จ์ .
๐ก ์ ๋ฆฌ
SOAP์ ์๊ฒฉํ ํ์ค๊ณผ ๋ณด์ ์๊ตฌ์ฌํญ์ด ์ค์ํ ์ํฐํ๋ผ์ด์ฆ ํ๊ฒฝ์์ ์ฌ์ ํ ๋ง์ด ์ฌ์ฉ๋ผ.
ํ์ง๋ง ์ต๊ทผ์๋ REST API๋ GraphQL์ฒ๋ผ ๋ ๊ฐ๋ณ๊ณ ๋น ๋ฅธ API ๋ฐฉ์์ด ๋ฑ์ฅํ๋ฉด์ ์๋์ ์ผ๋ก ๋ ์ฌ์ฉ๋๊ณ ์์ด.
๊ทธ๋๋ ๊ธ์ต, ์ ๋ถ ์์คํ
๋ฑ์์๋ ๋ณด์๊ณผ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์ SOAP์ด ์ฌ์ ํ ๊ฐ๋ ฅํ ์ ํ์ด์ผ! ๐
ํน์ ๋ ๊ถ๊ธํ ์ ์์ผ๋ฉด ๋ฌผ์ด๋ด!
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค(Index)๋?
**์ธ๋ฑ์ค(Index)**๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฒ์ ์๋๋ฅผ ํฅ์์ํค๊ธฐ ์ํด ์ฌ์ฉ๋๋ ์๋ฃ๊ตฌ์กฐ์ผ.
๋ง์น ์ฑ
์ **์์ธ(Index)**์ฒ๋ผ, ํน์ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋๋ก ๋ฏธ๋ฆฌ ์ ๋ฆฌ๋ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ์ญํ ์ ํด.
๐ ์ธ๋ฑ์ค์ ํต์ฌ ๊ฐ๋
1๏ธโฃ ์ธ๋ฑ์ค ์์ด ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ ๋ฐฉ๋ฒ (Full Table Scan)
- ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํน์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋, ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ์๋ถํฐ ๋๊น์ง ๊ฒ์ํ๋ **"Full Table Scan"**์ ์ํํด.
- ํ ์ด๋ธ์ ํฌ๊ธฐ๊ฐ ์์ ๋ ๊ด์ฐฎ์ง๋ง, ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๋ฉด ๊ฒ์ ์๋๊ฐ ๋๋ ค์ง๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํด.
์์
๐ ์ง์ ํ
์ด๋ธ์์ employee_id = 1004์ธ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ๊ฒฝ์ฐ
๐ด (์ธ๋ฑ์ค๊ฐ ์๋ ๊ฒฝ์ฐ)
- DB๋ employees ํ ์ด๋ธ์ ๋ชจ๋ ํ์ ์ฒ์๋ถํฐ ๋๊น์ง ๊ฒ์ฌ (Full Table Scan)
- ๋ฐ์ดํฐ๊ฐ ๋ง์์๋ก ๊ฒ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆผ
2๏ธโฃ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๋ฐฉ์
- ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ์ ์์น๋ฅผ ๋ฏธ๋ฆฌ ์ ๋ฆฌํ์ฌ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์๋๋ก ํด์ฃผ๋ ์๋ฃ๊ตฌ์กฐ์ผ.
- ๋ง์น **์ฑ ์ ๋ชฉ์ฐจ(์์ธ)**์ฒ๋ผ, ์ํ๋ ํ์ด์ง(๋ฐ์ดํฐ)์ ์์น๋ฅผ ๋ฐ๋ก ์ฐพ์ ์ ์์ด.
์์
๐ ์ฑ
์ ์ฝ์ ๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด?
- "๋ฐ์ดํฐ๋ฒ ์ด์ค" ๊ด๋ จ ๋ด์ฉ์ ์ฐพ์ ๋, ์ฒ์๋ถํฐ ๋ชจ๋ ํ์ด์ง๋ฅผ ์ฝ๋ ๊ฒ ์๋๋ผ ์์ธ์์ "๋ฐ์ดํฐ๋ฒ ์ด์ค"์ ์์น๋ฅผ ํ์ธํ ํ ๋ฐ๋ก ์ฐพ์๊ฐ.
๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ๋น์ทํ ๊ฐ๋ !
- ํน์ ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ฉด, ํด๋น ์ปฌ๋ผ์ ๊ฒ์ํ ๋ Full Table Scan์ ํผํ๊ณ , ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํ์ฌ ๋ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์์ด.
- ์์ ๊ฐ์ด ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ฉด, employee_id ์ปฌ๋ผ์ ๊ฒ์ํ ๋ ๊ฒ์ ์๋๊ฐ ํจ์ฌ ๋นจ๋ผ์ง.
๐ ์ธ๋ฑ์ค์ ์๋ฃ๊ตฌ์กฐ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ค๋ ์ฃผ๋ก ๋ค์๊ณผ ๊ฐ์ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํด.
1๏ธโฃ B-Tree (Balanced Tree)
๐ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ์ธ๋ฑ์ค ๊ตฌ์กฐ (MySQL, PostgreSQL, Oracle ๋ฑ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ)
- B-Tree๋ ๊ท ํ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๋์ด ์์ด, ๊ฒ์, ์ฝ์ , ์ญ์ ๊ฐ ๋ชจ๋ **O(log n)**์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง.
- ๋ฃจํธ ๋ ธ๋์์ ์์ํ์ฌ ๋ฆฌํ ๋ ธ๋๊น์ง ๋ด๋ ค๊ฐ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์.
โ ํน์ง
- ์ ๋ ฌ๋ ๊ตฌ์กฐ๋ผ์ ๋ฒ์ ๊ฒ์(RANGE QUERY) ๋ ๋น ๋ฅด๊ฒ ์ํ ๊ฐ๋ฅ
- ๋ฐ์ดํฐ ์ฝ์ /์ญ์ ์ ์๋์ผ๋ก ๊ท ํ์ ์ ์ง
- ๋๋ถ๋ถ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ธฐ๋ณธ ์ธ๋ฑ์ค๋ก ์ฌ์ฉ๋จ
โ ์ ํฉํ ๊ฒฝ์ฐ
- WHERE ์กฐ๊ฑด์์ ํน์ ๊ฐ์ ๊ฒ์ํ ๋
- ORDER BY, GROUP BY ์ฐ์ฐ์ด ๋ง์ ๋
- ๋ฒ์ ๊ฒ์ (BETWEEN, >, < ๋ฑ)์ ์ํํ ๋
2๏ธโฃ Hash Index
๐ ํด์(Hash) ํจ์๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ๋ ๋ฐฉ์
- ๊ฒ์ ์๋๊ฐ ๋งค์ฐ ๋น ๋ฅด์ง๋ง, = (๊ฐ์) ์ฐ์ฐ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- BETWEEN, LIKE ๊ฐ์ ๋ฒ์ ๊ฒ์์๋ ์ ํฉํ์ง ์์
โ ์ ํฉํ ๊ฒฝ์ฐ
- WHERE email = 'test@example.com' ๊ฐ์ ์ ํํ ๊ฐ ์กฐํ
- ๋ฐ์ดํฐ์ ๋ฒ์ ๊ฒ์์ด ํ์ํ์ง ์์ ๊ฒฝ์ฐ
- MEMORY ์์ง์์ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ (MySQL InnoDB๋ Hash Index๋ฅผ ์ง์ํ์ง ์์)
โ ๋ถ์ ํฉํ ๊ฒฝ์ฐ
- BETWEEN, LIKE, ORDER BY ๋ฑ์ ์ฌ์ฉํ ๊ฒฝ์ฐ
- ๋ฐ์ดํฐ๊ฐ ๊ท ์ผํ๊ฒ ๋ถํฌ๋์ง ์์ผ๋ฉด ์ฑ๋ฅ์ด ์ ํ๋จ
๐ ์ธ๋ฑ์ค์ ์ข ๋ฅ
1๏ธโฃ ๊ธฐ๋ณธ ์ธ๋ฑ์ค (Primary Index)
- ๊ธฐ๋ณธ ํค(PRIMARY KEY) ์ปฌ๋ผ์ ์๋์ผ๋ก ์์ฑ๋๋ ์ธ๋ฑ์ค
- ์ค๋ณต์ ํ์ฉํ์ง ์๊ณ , NULL ๊ฐ์ ๊ฐ์ง ์ ์์
2๏ธโฃ ๊ณ ์ ์ธ๋ฑ์ค (Unique Index)
- ํน์ ์ปฌ๋ผ์ ๊ฐ์ด ์ค๋ณต๋์ง ์๋๋ก ๋ณด์ฅํ๋ ์ธ๋ฑ์ค
3๏ธโฃ ๋ณตํฉ(๋ค์ค) ์ธ๋ฑ์ค (Composite Index)
- ์ฌ๋ฌ ๊ฐ์ ์ปฌ๋ผ์ ๋ฌถ์ด์ ํ๋์ ์ธ๋ฑ์ค๋ก ์์ฑ
- WHERE name = 'John' AND age = 30 ๊ฐ์ ๊ฒ์์ ์ต์ ํ๋จ
4๏ธโฃ ์ ์ฒด ํ ์คํธ ์ธ๋ฑ์ค (Full-Text Index)
- ๋๋์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ ๋ ์ฌ์ฉํ๋ ์ธ๋ฑ์ค
- MySQL์ FULLTEXT, Elasticsearch ๊ฐ์ ๊ฒ์ ์์ง์์ ์ฌ์ฉ๋จ
5๏ธโฃ ๊ณต๊ฐ(Spatial) ์ธ๋ฑ์ค
- ์ขํ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ๊ฒ์ํ ๋ ์ฌ์ฉ (GIS ๋ฐ์ดํฐ ์ฒ๋ฆฌ)
โ ๏ธ ์ธ๋ฑ์ค์ ๋จ์
1๏ธโฃ ์ถ๊ฐ์ ์ธ ์ ์ฅ ๊ณต๊ฐ ํ์
- ์ธ๋ฑ์ค๊ฐ ๋ง์์ง์๋ก ๋์คํฌ ๊ณต๊ฐ์ ๋ง์ด ์ฐจ์งํ๊ฒ ๋จ.
- ํนํ, ๋์ฉ๋ ํ ์ด๋ธ์์๋ ์ธ๋ฑ์ค๋ฅผ ์ ์คํ๊ฒ ๊ด๋ฆฌํด์ผ ํจ.
2๏ธโฃ INSERT, UPDATE, DELETE ์ฑ๋ฅ ์ ํ
- ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ (INSERT)ํ๊ฑฐ๋ ์์ (UPDATE)ํ๋ฉด, ์ธ๋ฑ์ค๋ ํจ๊ป ๊ฐฑ์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ ์ ์์.
- ์ธ๋ฑ์ค๊ฐ ๋ง์์๋ก ์ฐ๊ธฐ ์ฑ๋ฅ์ด ์ ํ๋จ.
3๏ธโฃ ๋๋ฌด ๋ง์ ์ธ๋ฑ์ค๋ ์คํ๋ ค ์ฑ๋ฅ์ ์ ํ์ํด
- ๋ชจ๋ ์ปฌ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ฉด ๊ฒ์ ์๋๋ ๋นจ๋ผ์ง ์ ์์ง๋ง, ๋ฐ์ดํฐ ์ฝ์ /์์ ์ ์ฑ๋ฅ์ด ๋๋ ค์ง ์ ์์.
- ์์ฃผ ์กฐํํ๋ ์ปฌ๋ผ์๋ง ์ธ๋ฑ์ค๋ฅผ ์ค์ ํ๋ ๊ฒ์ด ์ค์ํจ.
โ ๊ฒฐ๋ก : ์ธ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น?
โ ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ฉด ์ข์ ๊ฒฝ์ฐ
- WHERE ์กฐ๊ฑด์์ ์์ฃผ ๊ฒ์ํ๋ ์ปฌ๋ผ
- ORDER BY, GROUP BY๋ฅผ ์์ฃผ ์ฌ์ฉํ๋ ์ปฌ๋ผ
- JOIN ์ฐ์ฐ ์ ์ฐ๊ฒฐํ๋ ์ปฌ๋ผ (Foreign Key)
- BETWEEN, IN ๊ฐ์ ๋ฒ์ ๊ฒ์์ ์ํํ๋ ์ปฌ๋ผ
โ ์ธ๋ฑ์ค๋ฅผ ๋จ๋ฐํ๋ฉด ์ ๋๋ ๊ฒฝ์ฐ
- ์์ฃผ ๋ณ๊ฒฝ(INSERT/UPDATE/DELETE)๋๋ ์ปฌ๋ผ
- LOW SELECTIVITY (์ค๋ณต ๊ฐ์ด ๋ง์ ์ปฌ๋ผ, ์: ์ฑ๋ณ, ๊ตญ๊ฐ ์ฝ๋)
- ๋๋ฌด ๋ง์ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๋ฉด ์ฑ๋ฅ์ด ์คํ๋ ค ์ ํ๋ ์ ์์
::์ถ์ฒ::
https://github.com/VSFe/Tech-Interview?tab=readme-ov-file
https://github.com/WooVictory/Ready-For-Tech-Interview
https://github.com/gyoogle/tech-interview-for-developer
https://github.com/JaeYeopHan/Interview_Question_for_Beginner
๋์์ด ๋๋ค๋ฉด ๋๊ธ์ด๋ ๊ณต๊ฐ ๋ฒํผ ํ ๋ฒ์ฉ ๋๋ฅด๊ณ ๊ฐ์ฃผ์ธ์! ๋ก๊ทธ์ธ ์ํด๋ ๋ฉ๋๋ค ^_^