Home > CS > 2024 > ๐Ÿ’พ [CS] ์Šคํƒ ํŠธ๋ ˆ์ด์Šค(Stack Trace)๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

๐Ÿ’พ [CS] ์Šคํƒ ํŠธ๋ ˆ์ด์Šค(Stack Trace)๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?
CS

๐Ÿ’พ [CS] ์Šคํƒ ํŠธ๋ ˆ์ด์Šค(Stack Trace)๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

  • ์Šคํƒ ํŠธ๋ ˆ์ด์Šค(Stack Trace)๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ์˜ˆ์™ธ(Exception)๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ์ง€์ ๊ณผ ๊ทธ ์˜ˆ์™ธ๋กœ ์ด์–ด์ง„ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ฒฝ๋กœ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋””๋ฒ„๊น… ์ •๋ณด์ž…๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์–ด๋–ค ์˜ˆ์™ธ๊ฐ€ ์–ด๋””์„œ ๋ฐœ์ƒํ–ˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์˜ˆ์™ธ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฐœ์ƒํ–ˆ๋Š”์ง€๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1๏ธโƒฃ ์Šคํƒ ํŠธ๋ ˆ์ด์Šค(Stack Trace)์˜ ์—ญํ• .

1๏ธโƒฃ ๋””๋ฒ„๊น….

  • ์Šคํƒ ํŠธ๋ ˆ์ด์Šค(Stack Trace)๋ฅผ ํ†ตํ•ด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ์œ„์น˜๋ฅผ ์ •ํ™•ํžˆ ์ฐพ์•„๋‚ด๊ณ , ๋ฌธ์ œ๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2๏ธโƒฃ ๋ฌธ์ œ์˜ ์›์ธ ํŒŒ์•….

  • ์Šคํƒ ํŠธ๋ ˆ์ด์Šค(Stack Trace)๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์ „๊นŒ์ง€ ์–ด๋–ค ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ์™€ ์›์ธ์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘์š”ํ•œ ๋‹จ์„œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

4๏ธโƒฃ ํ˜ธ์ถœ ๊ฒฝ๋กœ ์ดํ•ด.

  • ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ฒฝ๋กœ๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ฃผ์–ด, ์ฝ”๋“œ์˜ ํ๋ฆ„์„ ํŒŒ์•…ํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃ ์Šคํƒ ํŠธ๋ ˆ์ด์Šค์˜ ๊ตฌ์กฐ.

  • ์Šคํƒ ํŠธ๋ ˆ์ด์Šค(Stack Trace)๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์˜ˆ์™ธ์˜ ์ข…๋ฅ˜์™€ ๋ฉ”์‹œ์ง€, ๊ทธ๋ฆฌ๊ณ  ํ•จ์ˆ˜ ํ˜ธ์ถœ ์Šคํƒ์˜ ๋ชฉ๋ก์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
    • ๊ฐ ํ•ญ๋ชฉ์€ ๋‹ค์Œ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
        1. ์˜ˆ์™ธ์˜ ์ข…๋ฅ˜์™€ ๋ฉ”์‹œ์ง€
        1. ํ˜ธ์ถœ๋œ ๋ฉ”์„œ๋“œ์˜ ๋ชฉ๋ก.

1๏ธโƒฃ ์˜ˆ์™ธ์˜ ์ข…๋ฅ˜์™€ ๋ฉ”์‹œ์ง€.

  • ์˜ˆ์™ธ์˜ ์œ ํ˜•๊ณผ ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด ์˜ˆ์™ธ์˜ ์›์ธ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃ ํ˜ธ์ถœ๋œ ๋ฉ”์„œ๋“œ์˜ ๋ชฉ๋ก.

  • ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ์‹œ์ ๊นŒ์ง€์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ฒฝ๋กœ๋ฅผ ์œ„์—์„œ๋ถ€ํ„ฐ ์•„๋ž˜๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฐ€์žฅ ์œ„์˜ ํ•ญ๋ชฉ์€ ์˜ˆ์™ธ๊ฐ€ ์‹ค์ œ๋กœ ๋ฐœ์ƒํ•œ ๋ฉ”์„œ๋“œ์ด๋ฉฐ, ๊ทธ ์•„๋ž˜๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ๊นŒ์ง€ ํ˜ธ์ถœ๋œ ๋ฉ”์„œ๋“œ๋“ค์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

3๏ธโƒฃ ์Šคํƒ ํŠธ๋ ˆ์ด์Šค ์˜ˆ์‹œ (Java)

  • ์•„๋ž˜์˜ ์ฝ”๋“œ๋Š” Java ํ”„๋กœ๊ทธ๋žจ์—์„œ NullPointerException์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ์˜ ์Šคํƒ ํŠธ๋ ˆ์ด์Šค ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.
public class StackTraceExample {
    public static void main(String[] args) {
        firstMethod();
    }
    
    public static void firstMethod() {
        secondMethod();
    }
    
    public static void secondMethod() {
        String str = null;
        str.length(); // ์—ฌ๊ธฐ์—์„œ NullPointerException ๋ฐœ์ƒ
    }
}

๐Ÿ‘‰ ์ถœ๋ ฅ๋˜๋Š” ์Šคํƒ ํŠธ๋ ˆ์ด์Šค.

Excption in thread "main" java.lang.NullPointerException
    at StackTraceExample.secondMethod(StackTraceExample.java:14)
    at StackTraceExample.firstMethod(StackTraceExample.javee:9)
    at StackTraceExample.main(StackTraceExample.java:5)

4๏ธโƒฃ ์Šคํƒ ํŠธ๋ ˆ์ด์Šค์˜ ๊ตฌ์„ฑ ์š”์†Œ.

1๏ธโƒฃ ์˜ˆ์™ธ์˜ ์ข…๋ฅ˜์™€ ๋ฉ”์‹œ์ง€.

  • Exception in thread "main" java.lang.NullPointerException
    • ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ NullPointerException์ด ๋ฐœ์ƒํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

2๏ธโƒฃ ํ˜ธ์ถœ๋œ ๋ฉ”์„œ๋“œ์˜ ๋ชฉ๋ก.

  • at StackTraceExample.secondMethod(StackTraceExample.java:14)
    • secondMethod ๋ฉ”์„œ๋“œ์˜ 14๋ฒˆ์งธ ์ค„์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
  • at StackTraceExample.firstMethod(StackTraceExample.java:9)
    • firstMethod๊ฐ€ secondMethod๋ฅผ ํ˜ธ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค.
  • at StackTraceExample.main(StackTraceExample.java:5)
    • main ๋ฉ”์„œ๋“œ๊ฐ€ firstMethod๋ฅผ ํ˜ธ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์Šคํƒ ํŠธ๋ ˆ์ด์Šค(Stack Trace)๋Š” ๊ฐ€์žฅ ์ตœ๊ทผ์— ํ˜ธ์ถœ๋œ ๋ฉ”์„œ๋“œ(์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ๋ฉ”์„œ๋“œ)๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ, ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์ „์— ํ˜ธ์ถœ๋œ ๋ฉ”์„œ๋“œ๋“ค์„ ์ˆœ์ฐจ์ ์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

5๏ธโƒฃ ์Šคํƒ ํŠธ๋ ˆ์ด์Šค์˜ ์ค‘์š”์„ฑ.

1๏ธโƒฃ ์˜ค๋ฅ˜์˜ ์›์ธ ํŒŒ์•….

  • ์Šคํƒ ํŠธ๋ ˆ์ด์Šค๋ฅผ ๋ณด๋ฉด, ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ์ •ํ™•ํ•œ ์œ„์น˜์™€ ์–ด๋–ค ํ•จ์ˆ˜์—์„œ ํ˜ธ์ถœ๋œ ๊ฒƒ์ธ์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ด๋ฅผ ํ†ตํ•ด ์˜ค๋ฅ˜์˜ ์›์ธ์„ ์‹ ์†ํ•˜๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์˜ ์Šคํƒ ํŠธ๋ ˆ์ด์Šค(Stack Trace)์—์„œ๋Š” secondMethod์˜ str.length() ํ˜ธ์ถœ์—์„œ NullPointerException์ด ๋ฐœ์ƒํ–ˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๊ทธ ์ดํ›„์—๋Š” firstMethod๊ฐ€ ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ–ˆ๊ณ , ์ตœ์ข…์ ์œผ๋กœ main ๋ฉ”์„œ๋“œ์—์„œ firstMethod๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

2๏ธโƒฃ ๋””๋ฒ„๊น… ์‹œ๊ฐ„ ๋‹จ์ถ•.

  • ์Šคํƒ ํŠธ๋ ˆ์ด์Šค(Stack Trace)๋Š” ์˜ˆ์™ธ์˜ ์›์ธ์„ ์ •ํ™•ํ•˜๊ฒŒ ์ง€๋ชฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•˜๋Š” ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋””๋ฒ„๊ฑฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ๋ฌธ์ œ์˜ ๊ทผ๋ณธ ์›์ธ์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3๏ธโƒฃ ํ˜ธ์ถœ ๊ฒฝ๋กœ ์ดํ•ด.

  • ์ฝ”๋“œ์˜ ํ๋ฆ„์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋‘์›€์„ ์ค๋‹ˆ๋‹ค.
    • ํŠนํžˆ, ๋ณต์žกํ•œ ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ํƒ€์‚ฌ์˜ ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์Šคํƒ ํŠธ๋ ˆ์ด์Šค(Stack Trace)๋Š” ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ค‘์š”ํ•œ ๋‹จ์„œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

6๏ธโƒฃ ์Šคํƒ ํŠธ๋ ˆ์ด์Šค ์ฝ๋Š” ๋ฐฉ๋ฒ•.

1๏ธโƒฃ ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธ.

  • ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€๋Š” ๋ฌธ์ œ์˜ ์ข…๋ฅ˜์™€ ์›์ธ์— ๋Œ€ํ•ด ์ฒซ ๋ฒˆ์งธ ํžŒํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, NullPointException์€ ๋„ ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃ ๊ฐ€์žฅ ์œ„์˜ ํ˜ธ์ถœ ์œ„์น˜ ์ฐพ๊ธฐ.

  • ์Šคํƒ ํŠธ๋ ˆ์ด์Šค(Stack Trace)์—์„œ ๊ฐ€์žฅ ์œ„์˜ ํ˜ธ์ถœ ์œ„์น˜๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ์ •ํ™•ํ•œ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • ์ด ๋ถ€๋ถ„๋ถ€ํ„ฐ ๋ฌธ์ œ๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

3๏ธโƒฃ ํ˜ธ์ถœ ์ˆœ์„œ๋Œ€๋กœ ํ™•์ธ.

  • ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ์ฝ”๋“œ์˜ ํ๋ฆ„์„ ์ดํ•ดํ•˜๋ ค๋ฉด ํ˜ธ์ถœ ์ˆœ์„œ๋Œ€๋กœ ๊ฐ ๋ฉ”์„œ๋“œ๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด ๊ณผ์ •์„ ํ†ตํ•ด ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๋ถ€๋ถ„์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

7๏ธโƒฃ ์Šคํ… ํŠธ๋ ˆ์ด์Šค๋ฅผ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•.

1๏ธโƒฃ ๋กœ๊น…(logging)๊ณผ ํ•จ๊ผ ์‚ฌ์šฉ.

  • ์‹ค์ œ๋กœ ๋ฐฐํฌ๋œ ์†Œํ”„ํŠธ์›จ์–ด์—์„œ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋กœ๊ทธ์— ์Šคํƒ ํŠธ๋ ˆ์ด์Šค(Stack Trace)๋ฅผ ๊ธฐ๋กํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ๋ณด๊ณ ํ–ˆ์„ ๋•Œ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์‰ฝ๊ฒŒ ๋ฌธ์ œ์˜ ์›์ธ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Java์—์„œ๋Š” ์˜ˆ์™ธ๋ฅผ ์žก์„ ๋•Œ e.printStackTrace()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํƒ ํŠธ๋ ˆ์ด์Šค(Stack Trace)๋ฅผ ์ถœ๋ ฅํ•˜๊ฑฐ๋‚˜, ๋กœ๊น… ํ”„๋ ˆ์ž„์›Œํฌ(logging framework)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ ํŒŒ์ผ์— ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2๏ธโƒฃ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์—์„œ ์Šคํƒ ํŠธ๋ ˆ์ด์Šค ํ™œ์šฉ.

  • ์˜ˆ์™ธ๋ฅผ ์žก์•„์„œ ์ฒ˜๋ฆฌํ•  ๋•Œ, ์Šคํƒ ํŠธ๋ ˆ์ด์Šค๋ฅผ ์ถœ๋ ฅํ•จ์œผ๋กœ์จ ๋””๋ฒ„๊น…์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํŠนํžˆ, ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ์˜ˆ์™ธ๋ฅผ ๋””๋ฒ„๊น…ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

8๏ธโƒฃ ์š”์•ฝ.

  • ์Šคํƒ ํŠธ๋ ˆ์ด์Šค(Stack Trace)๋Š” ํ”„๋กœ๊ทธ๋žจ์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์˜ˆ์™ธ์˜ ์›์ธ๊ณผ ํ˜ธ์ถœ ๊ฒฝ๋กœ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋””๋ฒ„๊น… ์ •๋ณด์ž…๋‹ˆ๋‹ค.
  • ์˜ˆ์™ธ์˜ ์ข…๋ฅ˜์™€ ๋ฉ”์‹œ์ง€, ๊ทธ๋ฆฌ๊ณ  ํ•จ์ˆ˜ ํ˜ธ์ถœ ์Šคํƒ ๋ชฉ๋ก์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋ฌธ์ œ๋ฅผ ์ถ”์ ํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์ฝ”๋“œ์˜ ํ๋ฆ„์„ ์ดํ•ดํ•˜๊ณ , ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ์ •ํ™•ํ•œ ์œ„์น˜์™€ ์›์ธ์„ ํŒŒ์•…ํ•˜์—ฌ ๋””๋ฒ„๊น… ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์Šคํƒ ํŠธ๋ ˆ์ด์Šค(Stack Trace)๋Š” ํŠนํžˆ ๋กœ๊น…(logging)๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฉด, ๋ฐฐํฌ๋œ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ฌธ์ œ๋ฅผ ์ง„๋‹จํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.