Application performance improvement
์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ๊ฐ์
์ถ์ ๋น๋: ์
๋น์ถ ํ๊ทธ: ํด๋ฆฐ ์ฝ๋, ์ฝ๋ ๋ถ์ ๋๊ตฌ, ์ํํธ์จ์ด ํ์ง ํ๊ฐ ํญ๋ชฉ, ์ ํ ๊ธฐ์ ๊ฒํ
์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ์ธก์
- ์ฒ๋ฆฌ๋, ์๋ต์๊ฐ, ๊ฒฝ๊ณผ ์๊ฐ, ์์ ์ฌ์ฉ๋ฅ
- ์์คํ ํ๋ซํผ๊ณผ ์ ์ฌํจ
์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ๋ถ์ ๋๊ตฌ
๋๊ตฌ ์ข ๋ฅ
- ์ฑ๋ฅ/๋ถํ/์คํธ๋ ์ค ์ ๊ฒ ๋๊ตฌ: ์ฑ๋ฅ ์ธก์
- ๋ชจ๋ํฐ๋ง ๋๊ตฌ: ์์ ์ ์ด์์ ์ง์ํจ
์ฃผ์ ๋๊ตฌ
- ์ฑ๋ฅ ์ ๊ฒ(์คํ ์์ค): JMeter, LoadUI, OpenSTA
- ๋ชจ๋ํฐ๋ง ๋๊ตฌ: Scouter, Zabbix
์ฑ๋ฅ ์ ํ ์์ธ ๋ถ์
DB ๊ด๋ จ ์ฑ๋ฅ ์ ํ
- DB Lock: ๋๋์ ๋ฐ์ดํฐ ๊ณผ๋ํ ์ ๋ฐ์ดํธ
- DB Fetch: ๋ง์ ์์ ๋ฐ์ดํฐ ์์ฒญ, ๋ถํ์ํ ํ์ ์ด ์์ฃผ ๋ฐ์
๋ด๋ถ ๋ก์ง ์ฑ๋ฅ ์ ํ
- ์ธํฐ๋ท ์ ์ ๋ถ๋
- ๋๋, ํฐ ์ฉ๋์ ํ์ผ ์ /๋ค์ด๋ก๋
- ์ค๋ฅ ์ฒ๋ฆฌ ๋ก์ง๊ณผ ์ค์ ์ฒ๋ฆฌ ๋ก์ง์ ๋ถ๋ฆฌํ์ง ์์ ๊ฒฝ์ฐ
์ธ๋ถ ์์ธ
- ํ์์์ ๋ฐ์(ํธ์ถ์ด ์ทจ์, ๋ฉ์ถค)
- ์๋ชป๋ ํ๊ฒฝ ์ค์
- ์ค๋ ๋ํ์ด๋ ํ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๋๋ฌด ์๊ฒ ์ค์
- ๋คํธ์ํฌ ๊ด๋ จ ์ฅ๋น ๊ฐ ๋ฐ์ดํฐ ์ ์ก ์คํจ ๋๋ ์ ์ก ์ง์ฐ
์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ๊ฐ์
Bad Code vs Clean Code
Bad Code
- ์ ์ ๋์ง ์๊ณ ์ฝํ ์คํ๊ฒํฐ ์ฝ๋
- ๋ณต์ก๋ ์ฆ๊ฐ
- ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ์ฑ ๋์
Clean Code
- ๊ฐ๋ ์ฑ์ด ๋๊ณ ๊น๋ํจ
- ๋จ์ํ๊ณ ์์กด์ฑ ๋ฎ์
- ์ค๋ณต์ด ์ต์ํ๋ ์ฝ๋
- ์ดํด๊ฐ ์ฝ๊ณ ํ๋ก๊ทธ๋๋ฐ ์๋๊ฐ ๋น ๋ฆ
- ํน์ง: ๊ฐ๋ ์ฑ, ๋จ์์ฑ, ์์กด์ฑ ์ต์ํ, ์ค๋ณต์ฑ ์ต์ํ, ์ถ์ํ
- ์ถ์ํ: ์์ ๊ฐ์ฒด๋ฅผ ํตํด ํ์ ๊ฐ์ฒด๋ค์ ๊ณตํต ํน์ฑ์ ๋ํ๋ด๊ณ ํ์ ๊ฐ์ฒด์์ ์์ธํ ๋ด์ฉ์ ๊ตฌํ
์ต์ ํ ๊ธฐ๋ฒ
- ํด๋์ค๋ ํ๋์ ์ฑ ์๋ง = ์์ง๋ ๋์ด๊ธฐ
- ํด๋์ค๊ฐ ์์กด์ฑ ์ต์ํ = ๊ฒฐํฉ๋ ์ฝํ๊ฒ ํ๊ธฐ
- ์ฌ๋ฐ๋ฅธ ์ฝ๋ฉ ์คํ์ผ = ์ฝ๋ ๊ฐ๋ ์ฑ ๋์ด๊ธฐ
- ๊ธฐ์ตํ๊ธฐ ์ฝ๊ณ ๋ฐ์์ด ์ฌ์ด ์ฉ์ด๋ก ์ด๋ฆ ์ ์
- ์ ์ ํ ์ฃผ์๋ฌธ์ผ๋ก ๋ณด์ถฉ
์์ค ์ฝ๋ ํ์ง ๋ถ์ ๋๊ตฌ
๋ถ์ ๋ฐฉ๋ฒ
- ์ธ์คํ์
- ์ ์ ๋ถ์
- ๋์ ๋ถ์
- ์ฆ๋ช
- ๋ฆฌํฉํ ๋ง
์ธ๋ถ ์ค๋ช
- ์ฝ๋ ์ธ์คํ์ : ์ฝ๋์ ์กด์ฌํ๋ ๊ฒฐํจ์ ํ์ธ
- ์ฆ๋ช : ํ์ง์ด ์์ฃผ ์ค์ํ ๊ฒฝ์ฐ ํ์ฉ (๋ฏธ์ ํฌ๋ฆฌํฐ์ปฌํ ์ ๋ฌด)
- ๋ฆฌํฉํ ๋ง(Refactoring): ์ฝ๋์ ๊ธฐ๋ฅ ๋ณ๊ฒฝ ์์ด ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํด์ ์์ ์ฑ๊ณผ ๊ฐ๋ ์ฑ ํ๋ณด
์์ค์ฝ๋ ์ ์ /๋์ ๋ถ์ ๋๊ตฌ
์ ์ ๋ถ์ ๋๊ตฌ
- ์คํ ์์ด ์ฝ๋ ์์ฒด๋ง์ผ๋ก ํ์ง ๋ถ์
- ๋๊ตฌ ์ข
๋ฅ
- PMD: Java ๋ฐ ๋ค๋ฅธ ์์ค์ฝ๋ ๋ฒ๊ทธ, ๋ฐ๋์ฝ๋ ๋ถ์
- Cppcheck: C/C++ ๋ฉ๋ชจ๋ฆฌ ๋์, ์ค๋ฒํ๋ก์ฐ ๋ถ์
- SonarQube: ์์ค์ฝ๋ ํตํฉ ํ๋ซํผ ํ๋ฌ๊ทธ์ธ ํ์ฅ
- Checkstyle: Java ์ฝ๋ ์ฝ๋ฉ ํ์ค ์ค์ ๊ฒ์ฌ๋๊ตฌ
๋์ ๋ถ์ ๋๊ตฌ
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํด์ ํ์ง ๋ถ์
- ๋๊ตฌ ์ข
๋ฅ
- Avalanche: Valgrind ํ๋ ์์ํฌ ๋ฐ STP ๊ธฐ๋ฐ ์ทจ์ฝ์ ๋ถ์
- Valgrind: ์๋ํ๋ ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์ค๋ ๋ ๊ฒฐํจ ๋ฐ๊ฒฌ, ๋ถ์
์ํํธ์จ์ด ์ ์ง๋ณด์
๊ฐ์
- ์ง์์ ์ผ๋ก ์ํํธ์จ์ด ๊ธฐ๋ฅ์ ๊ฐ์ ํ๊ณ ์ค๋ฅ๋ฅผ ์ ๊ฑฐํด์ ๋ง์กฑ๋๋ฅผ ํฅ์ํ๋ ํ๋
- ์ ์ง๋ณด์๊ฐ ์ด๋ ค์ด ์ฝ๋: ์ธ๊ณ์ธ ์ฝ๋, ์คํ๊ฒํฐ ์ฝ๋, ๋ฌธ์ํ๋์ง ์์ ํ๋ก๊ทธ๋จ
๋ถ์์ฉ
- ์ฝ๋ ๋ถ์์ฉ: ์ฝ๋ ๋ณ๊ฒฝ์ผ๋ก ์ธํ ๋ฌธ์
- ๋ฐ์ดํฐ ๋ถ์์ฉ: ์๋ฃ๊ตฌ์กฐ ๋ณ๊ฒฝ์ผ๋ก ์ธํ ๋ฌธ์
- ๋ฌธ์ ๋ถ์์ฉ: ์ฝ๋, ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ๋งค๋ด์ผ์ ์ ์ฉํ์ง ์์ ๋ฐ์ํ๋ ๋ฌธ์
์ ์ง๋ณด์ ์ ํ
- ํ์ ๋ณด์: ๋ฒ๊ทธ๋ ์ ์ฌ์ ์ค๋ฅ ์์
- ์์ ๋ณด์: ๋ชจ๋ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ์๋ฒฝํ๊ฒ ํด๊ฒฐ (๊ฐ์ฅ ๋ง์ ๋น์ฉ ์๋ชจ)
- ์ ์ ๋ณด์: ์ด์ ํ๊ฒฝ์ ๋ณํ๋ฅผ ๋ฐ์
- ์๋ฐฉ ๋ณด์: ์ฌ์ฉ์ ์๊ตฌ๋ฅผ ๋ฏธ๋ฆฌ ์์ธกํด์ ๋ฐ์
๋น์ฉ ์ธก์ ๋ฐฉ๋ฒ
BL(Belady์ Lehman)
M = P + K * E^(c-d)
COCOMO(COnstructive Cost Model)
M = ACT * DE * EAF
Vessey & Webber
M = ACT * 2.4 * [KDSI]^(1.05)
์ฉ์ด ์ค๋ช
- M: ์ ์ง๋ณด์๋ฅผ ์ํ ๋ ธ๋ ฅ(์ธ์/์)
- P: ์์ฐ์ ์ธ ํ๋์ ๋๋ ๋น์ฉ
- K: ํต๊ณ๊ฐ์์ ๊ตฌํ ์์
- c: ๋ณต์ก๋
- d: ์ํํธ์จ์ด ์ง์ ์ ๋
- ACT(Annual Change Traffic): ์ ์ง๋ณด์ ๋น์จ
- DE(Development Effort): ์์ฐ์ ์ธ ํ๋์ ๋๋ ๋น์ฉ
- EAF(Effort Adjust Factor): ๋ ธ๋ ฅ ์กฐ์ ์์น
- KDSI(Kilo Delivered Source Instruction): 1000๋ผ์ธ ๋จ์๋ก ๋ฌถ์ ์ ์ฒด ๋ผ์ธ์ ์
์ํํธ์จ์ด ํ์ง ํ๊ฐ
SQA (Software Quality Assurance)
- ์ํํธ์จ์ด ํ์ง ๋ณด์ฆ
- ๊ธฐ๋ฅ๊ณผ ์ฌ์ฉ์ ์๊ตฌ์ฌํญ์ด ์ผ์นํ๋์ง๋ฅผ ํ์ธ
์ ํ ๊ธฐ์ ๊ฒํ (FTR)
- ์๊ตฌ์ฌํญ ์ผ์น ์ฌ๋ถ, ํ์ค ์ค์ ๋ฐ ๊ฒฐํจ ๋ฐ์ ์ฌ๋ถ๋ฅผ ๊ฒํ ํ๋ ์ ์ ๋ถ์ ๊ธฐ๋ฒ
- ์์น
- ์์ ๋ฅผ ์ ํ
- ๋ ผ์๊ณผ ๋ฐ๋ฐ์ ์ ํ
- ์ฐธ๊ฐ์์ ์๋ฅผ ์ ํ
- ์ ํ์ ๊ฒํ ์๋ง ์ง์ค
- ํด๊ฒฐ์ฑ ์ด๋ ๊ฐ์ ์ฑ ์ ๋ํด์ ๋ ผํ์ง ์์
์ํํธ์จ์ด ํ์ง ๋ชฉํ ํญ๋ชฉ
- ์ ํ์ฑ(Correctness): ์ฌ์ฉ์์ ์๊ตฌ์ฌํญ ์ถฉ์กฑ
- ์ ๋ขฐ์ฑ(Reliability): ์ ํํ๊ณ ์ผ๊ด๋ ๊ฒฐ๊ณผ๋ก ์๊ตฌ๋ ๊ธฐ๋ฅ ์ค๋ฅ์์ด ์ํ
- ํจ์จ์ฑ(Efficiency): ์๊ตฌ๋๋ ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ์ํ ์ต์ํ์ ์์ ์๋ชจ
- ๋ฌด๊ฒฐ์ฑ(Integrity): ํ์ฉ๋์ง ์์ ์ฌ์ฉ์ด๋ ์๋ฃ ๋ณ๊ฒฝ์ ์ ์ด
- ์ ์ง๋ณด์ ์ฉ์ด์ฑ(Maintainability): ํ์ง ๊ฐ์ , ์ค๋ฅ ์์ ์ ์ฉ์ดํจ
- ์ฌ์ฉ ์ฉ์ด์ฑ(Usability): ์ํํธ์จ์ด๋ฅผ ์ฝ๊ฒ ์ด์ฉ
- ๊ฒ์ฌ ์ฉ์ด์ฑ(Testability): ์ํํธ์จ์ด๋ฅผ ์ฝ๊ฒ ์ํ
- ์ด์์ฑ(Portability): ๋ค์ํ ํ๋์จ์ด ํ๊ฒฝ์์ ์ด์ฉ ๊ฐ๋ฅํ๊ฒ ๋ณ๊ฒฝ
- ์ํธ ์ด์ฉ์ฑ(Interoperability): ๋ค๋ฅธ ์ํํธ์จ์ด์ ๋ฌด๋ฆฌ ์์ด ์ ๋ณด ๊ตํ
- ์ ์ฐ์ฑ(Flexibility): ์ํํธ์จ์ด๋ฅผ ์ฝ๊ฒ ์์
- ์ฌ์ฌ์ฉ์ฑ(Reusability): ์ํํธ์จ์ด๋ฅผ ๋ค๋ฅธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ
์์คํ ์ ๋ขฐ๋ ์ธก์
์ฃผ์ ์งํ
- ํ๊ท ๋ฌด์ฅ์ ์๊ฐ(MTBF: Mean Time Between Failure)
- ํ๊ท ์ฅ์ ๋ฐ์ ๊ฐ๊ฒฉ ํ๊ท
MTBF = MTTF + MTTR
- ํ๊ท ์ฅ์ ์๊ฐ(MTTF: Mean Time To Failure)
- ์๋ฆฌ ๋ถ๊ฐ๋ฅ ์ ํ์ ๋์์๊ฐ ํ๊ท
MTTF = ์ด ๋์ ์๊ฐ / ์ฌ์ฉ ํ์
- ํ๊ท ๋ณต๊ตฌ ์๊ฐ(MTTR: Mean Time To Repair)
- ๊ณ ์ฅ์์ ๋ถํฐ ์๋ฆฌ์๋ฃ๊น์ง ์๋ฆฌ์๊ฐ ํ๊ท
MTTR = ์ด ๊ณ ์ฅ์๊ฐ / ์ฌ์ฉํ์
- ๊ฐ์ฉ์ฑ(Availability)
Availability = MTTF / MTBF