software engineering/์†Œํ”„ํŠธ์›จ์–ด๊ฐœ๋ฐœ๋ณด์•ˆ

[Secure] ์บก์Šํ™” ๋ณด์•ˆ์•ฝ์ 

jjingle 2023. 11. 7. 14:35

์บก์Šํ™” ๋ณด์•ˆ์•ฝ์ 

์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ ๋˜๋Š” ๊ธฐ๋Šฅ์„ฑ์„ ๋ถˆ์ถฉ๋ถ„ํ•˜๊ฒŒ ์บก์Šํ™”ํ•˜๊ฑฐ๋‚˜ ์ž˜๋ชป ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๋ฐœ์ƒํ•˜๋Š” ๋ณด์•ˆ์•ฝ์ ์œผ๋กœ ์ •๋ณด ๋…ธ์ถœ, ๊ถŒํ•œ ๋ฌธ์ œ ๋“ฑ์ด ๋ฐœ์ƒ
  • ์ž˜๋ชป๋œ ์„ธ์…˜์— ์˜ํ•œ ๋ฐ์ดํ„ฐ ์ •๋ณด ๋…ธ์ถœ
  • ์ œ๊ฑฐ๋˜์ง€ ์•Š๊ณ  ๋‚จ์€ ๋””๋ฒ„๊ทธ ์ฝ”๋“œ
  • Public ๋ฉ”์†Œ๋“œ๋กœ๋ถ€ํ„ฐ ๋ฐ˜ํ™˜๋œ Private ๋ฐฐ์—ด
  • Private ๋ฐฐ์—ด์— Public ๋ฐ์ดํ„ฐ ํ• ๋‹น

 

* ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP; Object Oriented Programming)

: ํ”„๋กœ๊ทธ๋žจ์„ ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ์™€ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ,

'๊ฐ์ฒด'๋ผ๋Š” ๊ธฐ๋ณธ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„๊ณ  ๊ฐ์ฒด๋“ค์˜ ์ƒํ˜ธ์ž‘์šฉ์œผ๋กœ ์„œ์ˆ ํ•˜๋Š” ๋ฐฉ์‹

ํŠน์ง• ์„ค๋ช…
์บก์Šํ™”
(Encapsulation)
- ์„œ๋กœ ๊ด€๋ จ์„ฑ์ด ๋งŽ์€ ๋ฐ์ดํ„ฐ์™€ ์ด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํ•จ์ˆ˜๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํŠน์„ฑ
- ์ •๋ณด ์€๋‹‰ : ์บก์Šํ™”์—์„œ ํ•œ๋‹จ๊ณ„ ๋” ๋‚˜์•„๊ฐ€ Class ๋‚ด๋ถ€ ์ •๋ณด๋ฅผ ์€๋‹‰ํ•˜๊ณ  ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ์˜ ์ ‘๊ทผ์„ ์ฐจ๋‹จํ•˜์—ฌ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ ๋‚ด์šฉ์„ ๋ณดํ˜ธํ•˜๋Š” ๋ณด์•ˆ์ ์ธ ๊ธฐ๋Šฅ(public, protected, private)
์ถ”์ƒํ™”
(Abstraction)
- ์‹ค์ œ ์„ธ๊ณ„์˜ ํ•„์š”ํ•œ ํŠน์„ฑ์œผ๋กœ ๊ฐ„๊ฒฐํ•˜๊ณ  ๋ช…ํ™•ํ•œ ๋ชจ๋ธ๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ์œ ์ง€ ๋ณด์ˆ˜์˜ ์šฉ์ด์„ฑ์„ ๋†’์ด๋Š” ํŠน์„ฑ
(๊ณผ์ • / ๋ฐ์ดํ„ฐ / ์ œ์–ด ์ถ”์ƒํ™”)
์ƒ์†์„ฑ
(Inheritance)
- ์žฌ ์‚ฌ์šฉ์„ฑ์˜ ์ฆ๋Œ€๋ฅผ ์œ„ํ•˜์—ฌ ๊ณตํ†ต์ ์ธ ์†์„ฑ๊ณผ ํ–‰์œ„๋ฅผ ์ƒ์œ„ ํด๋ž˜์Šค(๋ถ€๋ชจ)์— ์ •์˜ํ•˜๊ณ  ํ•˜์œ„ ํด๋ž˜์Šค(์ž์‹)๊ฐ€ ํ•ด๋‹น ๋‚ด์šฉ์„ ์ƒ์†๋ฐ›์•„ ๊ทธ๋Œ€๋กœ ํ™œ์šฉํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ํŠน์ง•
๋‹คํ˜•์„ฑ
(Polymorphism)
- ํ•œ๊ฐ€์ง€ ํƒ€์ž…์— ๋Œ€ํ•ด ๋‹ค์–‘ํ•œ ํƒ€์ž…์„ ๋Œ€์ž…ํ•˜๊ฑฐ๋‚˜ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ
- ์ฆ‰, ์œ ์—ฐ์„ฑ์„ ๋ถ€์—ฌํ•œ ์„ฑ์งˆ(Overriding, Overloading ๋ฉ”์„œ๋“œ ๋‹คํ˜•์„ฑ)

 

 

* ์บก์Šํ™”

  • ํŠน์ง•
    • ๋‹ด๋Š”๋‹ค -> ๋ณ€๊ฒฝ๋˜๋Š” ๋ฒ”์œ„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Œ, ๋ฌถ์Œ ๋‹จ์œ„๋กœ ๋‹ค๋ฅธ ๊ณณ์— ์‚ฌ์šฉ ๊ฐ€๋Šฅ(์žฌ์‚ฌ์šฉ ์ด‰์ง„)
    • ์ˆจ๊ธด๋‹ค -> ๊ฒฐํ•ฉ๋„ ๋‚ฎ์ถค
    • ๋ณดํ˜ธํ•œ๋‹ค -> ๋ถ€์ž‘์šฉ ์ „ํŒŒ ๊ฐ์†Œ, ์ž„์˜ ๋ณ€๊ฒฝ ํ†ต์ œ
  • ์ •๋ณด์€๋‹‰
    • private : ํด๋ž˜์Šค ๋‚ด๋ถ€(๋ฉ”์†Œ๋“œ)์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • public : ์–ด๋””์„œ๋“  ์ ‘๊ทผ ๊ฐ€๋Šฅ(์ ‘๊ทผ์ œํ•œX)
    • default : ๋™์ผ ํŒจํ‚ค์ง€ ๋‚ด์—์„œ์˜ ์ ‘๊ทผ ํ—ˆ์šฉ (์ ‘๊ทผ์ œ์–ด์ž ์„ ์–ธํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ์ž๋™ ์„ค์ •)
    • protect : private + ์ƒ์†๊ด€๊ณ„์— ์žˆ์œผ๋ฉด ์ ‘๊ทผ์„ ํ—ˆ์šฉ

 

* ์ž˜๋ชป๋œ ์„ธ์…˜์— ์˜ํ•œ ๋ฐ์ดํ„ฐ ์ •๋ณด ๋…ธ์ถœ

1. ์›์ธ

  • ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด ํ•„๋“œ์— ๊ฒฝ์Ÿ์กฐ๊ฑด(Race Condition) ๋ฐœ์ƒ ๊ฐ€๋Šฅ
  • Java์˜ ์„œ๋ธ”๋ฆฟ(Servlet) ๋“ฑ์— ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฉค๋ฒ„๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋˜๋ฉฐ, ์„œ๋กœ ๋‹ค๋ฅธ ์„ธ์…˜์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณต์œ ๋˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒ

2. ์˜ํ–ฅ

  • ์„œ๋ธ”๋ฆฟ, jsp, Controller ๋“ฑ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ์กด์žฌํ•˜๋Š” ๊ฐ์ฒด๋“ค์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์— ์˜ํ•ด ๊ณต์œ ๋˜๋ฉด์„œ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—๊ฒŒ ์ •๋ณด๋ฅผ ๋…ธ์ถœ

3. ๋Œ€์‘

  • ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, ๋ณ€์ˆ˜ ๋ฒ”์œ„(Scope)์— ์ฃผ์˜ํ•˜์—ฌ ์‚ฌ์šฉ
  • Java์—์„œ HttpServlet ํด๋ž˜์Šค์˜ ํ•˜์œ„ํด๋ž˜์Šค๋‚˜ jsp, Controller์—์„œ ๋ฉค๋ฒ„ ํ•„๋“œ ์„ ์–ธ์„ ๊ธˆ์ง€ํ•˜๊ณ , ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ง€์—ญ ๋ณ€์ˆ˜ ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉ

 

* ์ œ๊ฑฐ๋˜์ง€ ์•Š๊ณ  ๋‚จ์€ ๋””๋ฒ„๊ทธ ์ฝ”๋“œ

1. ์›์ธ

  • ๋””๋ฒ„๊น…์„ ๋ชฉ์ ์œผ๋กœ ์‚ฝ์ž…๋œ ์ฝ”๋“œ๊ฐ€ ์ œ๊ฑฐ๋˜์ง€ ์•Š๊ณ  ๋‚จ์•„์žˆ๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒ

2. ์˜ํ–ฅ

  • ๋””๋ฒ„๊ทธ ์ฝ”๋“œ๋Š” ์„ค์ • ๋“ฑ์˜ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ฑฐ๋‚˜ ์‹œ์Šคํ…œ์„ ์ œ์–ดํ•˜๊ฒŒ ํ—ˆ์šฉํ•˜๋Š” ๋ถ€๋ถ„์„ ๋‹ด๊ณ   ์žˆ์„ ์ˆ˜ ์žˆ์Œ
  • ๊ณต๊ฒฉ์ž๊ฐ€ ์‹๋ณ„ ๊ณผ์ •์„ ์šฐํšŒํ•˜๊ฑฐ๋‚˜, ์˜๋„ํ•˜์ง€ ์•Š์€ ์ •๋ณด์™€ ์ œ์–ด ์ •๋ณด๊ฐ€ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์Œ

3. ๋Œ€์‘

  • ์†Œํ”„ํŠธ์›จ์–ด ๋ฐฐํฌ ์ „, ๋ฐ˜๋“œ์‹œ ๋””๋ฒ„๊ทธ ์ฝ”๋“œ๋ฅผ ํ™•์ธ ๋ฐ ์‚ญ์ œ
  • Java ๊ฐœ๋ฐœ์ž์˜ ๊ฒฝ์šฐ, ์›น ์‘์šฉํ”„๋กœ๊ทธ๋žจ์„ ์ œ์ž‘ํ•  ๋•Œ ๋””๋ฒ„๊ทธ ์šฉ๋„์˜ ์ฝ”๋“œ๋ฅผ main()์— ๊ฐœ๋ฐœํ•œ ํ›„, ๋””๋ฒ„๊น…์ด ๋๋‚˜๋ฉด main() ๋ฉ”์„œ๋“œ ์‚ญ์ œ

 

* Public ๋ฉ”์†Œ๋“œ๋กœ๋ถ€ํ„ฐ ๋ฐ˜ํ™˜๋œ Private ๋ฐฐ์—ด

1. ์›์ธ

  • private์œผ๋กœ ์„ ์–ธ๋œ ๋ฐฐ์—ด์„ public์œผ๋กœ ์„ ์–ธ๋œ ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒ

2. ์˜ํ–ฅ

  • ๋ฐฐ์—ด ์ฃผ์†Œ๊ฐ’์ด ์™ธ๋ถ€์— ๊ณต๊ฐœ๋˜์–ด ๊ถŒํ•œ์ด ์—†๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์บก์Šํ™”๋œ ์ค‘์š” ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘์ ์œผ๋กœ ์ˆ˜์ • ๊ฐ€๋Šฅ

3. ๋Œ€์‘

  • private๋กœ ์„ ์–ธ๋œ ๋ฐฐ์—ด์„ public ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋„๋ก ์กฐ์น˜
  • ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” ๋ฐฐ์—ด์˜ ๋ณต์ œ๋ณธ์„ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜, ์ˆ˜์ •์„ ์ œ์–ดํ•˜๋Š” ๋ณ„๋„์˜ public ๋ฉ”์†Œ๋“œ๋ฅผ ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉ
  • ๋ฐฐ์—ด์˜ ์›์†Œ๊ฐ€ String ํƒ€์ž… ๋“ฑ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝ์ด ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋Š” Private๋ฐฐ์—ด์˜ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ž‘์„ฑ

 

* Private ๋ฐฐ์—ด์— Public ๋ฐ์ดํ„ฐ ํ• ๋‹น

1. ์›์ธ

  • public์œผ๋กœ ์„ ์–ธ๋œ ๋ฐ์ดํ„ฐ ๋˜๋Š” ๋ฉ”์†Œ๋“œ์˜ ์ธ์ž๋ฅผ private ๋ฐฐ์—ด์— ์ €์žฅํ•œ ๊ฒฝ์šฐ ๋ฐœ์ƒ

2. ์˜ํ–ฅ

  • private ๋ฐฐ์—ด์„ ์™ธ๋ถ€์—์„œ ์ง์ ‘ ์ ‘๊ทผํ•˜์—ฌ ๋ฐฐ์—ด ์ˆ˜์ •๊ณผ ๊ฐ์ฒด ์†์„ฑ์„ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

3. ๋Œ€์‘

  • public์œผ๋กœ ์„ ์–ธ๋œ ๋ฉ”์„œ๋“œ์˜ ์ธ์ž๋ฅผ private ์„ ์–ธ๋œ ๋ฐฐ์—ด์— ์ €์žฅํ•˜์ง€ ์•Š๋„๋ก ์กฐ์น˜
  • ์ž…๋ ฅ๋œ public ๋ฐฐ์—ด์˜ reference๊ฐ€ ์•„๋‹Œ, ๋ฐฐ์—ด์˜ "๊ฐ’"์„ private ๋ฐฐ์—ด์— ํ• ๋‹นํ•˜์—ฌ private ๋ฉค๋ฒ„๋กœ์„œ์˜ ์ ‘๊ทผ๊ถŒํ•œ์„ ์œ ์ง€
  • ๋ฐฐ์—ด ๊ฐ์ฒด์˜ ์›์†Œ๊ฐ€ String ํƒ€์ž… ๋“ฑ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋Š” ์ธ์ž๋กœ ๋“ค์–ด์˜จ ๋ฐฐ์—ด์˜ ๋ณต์‚ฌ๋ณธ์„ ์ƒ์„ฑํ•˜์—ฌ ํ• ๋‹น