ssung_항해일지/항해99_Spring_입문, 숙련, 심화

spring - 19일차

ssungcohol 2023. 2. 22. 23:34

문제

- 예외처리(상태코드 반환)의 예제 코드를 보고 따라 쳤는데, 안됌.. 똑같은데 실행 안돼..

    @ExceptionHandler(IllegalArgumentException.class)
    public  ResponseEntity<Object> handleIllegalArgument(IllegalArgumentException e) {
        log.warn("handleIllegalArgument", e);
        ErrorCode errorCode = CommonErrorCode.INVALID_PARAMETER;
        return handleExceptionInternal(errorCode, e.getMessage());
    }

 

handelExceptrionInternal(errorCode, e.getMessage());

 

이 부분에서 errorCode 값이 계속 에러 발생..

 

원인

 - import를 잘못된 경로의 것을 주입해주고 있었음...

 

알게 된 것

- 하나하나 주입할 때 꼼꼼하게 맞는걸 주입하도록 하자..

 - 이거 하나로 일출을 보내~~ 개발자 특권이란게 이런건가~


JVM (Java Virtual Machine)

 - 자바를 실행하기 위한 가상 컴퓨터. 즉, 컴퓨터 안에 자바를 실행해주는 또 하나의 컴퓨터가 있다

 - 자바는 OS에 종속적이지 않다는 특징이 있는데, 이 OS 종속을 받지 않게 하기 위해서 JVM이 필요

 - Java 소스코드, 즉 원시코드는 CPU가 인식을 하지 못하기 때문에 Java compiler가 자바 파일(.Java)을 클래스 파일(.class) 즉, 자바 바이트 코드(Java bytecode)로 변환해준다.

 - 이 때. JVM은 OS가 자바 바이트 코드를 이해할 수 있도록 해석을 해주기에 OS에 상관없이 자바가 실행 가능한 것

 

JVM의 구조

  • 클래스로더 - JVM내로 클래스 파일을 로드하고 링크를 통해 배치하는 작업을 수행하는 모듈
    즉, 클래스를 처음으로 참조할 때, 해달 클래스를 로드하고 링크하는 역할
  • 메모리 (런타임 데이터 영역) - JVM이 운영체제 위해서 실행될 때, 할당 받는 메모리 영역이며, 이 영역들을 스레드가 공유하는 공간인지 아닌지로 나눌 수 있음
  • 실행엔진 - 메모리에 적재된 바이트 코드를 기계어로 변경하여 명령어 단위로 실행 및 바이트 코드를 운영체제에 맞게 해석해주는 역할이고, 두 가지 방식이 사용된다
    • 인터프리터 - 런타임 중에 바이트코드를 한 줄씩 읽고 실행, 컴파일러보다 속도가 느림
    • JIT(Just In Time) - 인터프리터의 속도 이슈를 해결하기 위해 사용 (자주 사용, 바이트 콛, 런타임, 기계어, 컴파일)
    • GC - 더 이상 사용되지 않는 인스턴스를 찾아 메모리에서 삭제

 

특징

  • 스택 기반의 가상 머신
  • 심볼릭 레퍼런스 - 참고 클래스의 메모리 주소를 참조 관계로 구성하는 것이 아닌 대상의 이름만을 지칭한 것
  • 가비지 컬렉션
  • 기본 자료형을 명확하게 정의하여 플랫폼 독립성 보장
    (C++ 등의 전통적인 언어는 플랫폼에 따라 int형의 크기가 변한다. JVM은 안변함)
  • 네트워크 바이트 오더 - 데이터가 상위 바이트부터 메모리에 적재하여, 가장 최상위 바이트가 가장 낮은 메모리 주소에 저장되는 방식 (리틀, 빅 엔디안 중 빅 엔디안 사용)

Java의 실행방식

  1. 프로그램 실행 시 JVM이 OS로부터 필요한 메모리 할당
  2. 자바 파일(자바 코드) => 자바 컴파일러 => 자바 바이트 코드
  3. 자바 바이트 코드를 클래스 로더를 통해 JVM이 필요한 시점에 로딩
  4. 기계어로 해석된 바이트 코드는 런타임 데이터 영역(메모리)에 배치되어 수행
  5. 이때 JVM은 필요에 따라 CG 작업 수행

참고 자료

  1. https://steady-coding.tistory.com/587
 

[Java] JVM이란?

java-study에서 스터디를 진행하고 있습니다. 자바 코드 실행 과정 위 그림은 자바 코드의 실행 과정을 간략하게 보여 준다. 프로그램이 실행되면 JVM은 OS로부터 이 프로그램이 필요로 하는 메모리

steady-coding.tistory.com

2. https://doozi0316.tistory.com/entry/1%EC%A3%BC%EC%B0%A8-JVM%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%9E%90%EB%B0%94-%EC%BD%94%EB%93%9C%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94-%EA%B2%83%EC%9D%B8%EA%B0%80

3. https://code-lab1.tistory.com/92

 

[JAVA] JVM(Java Virtual Machine)이란?

JVM(Java Virtual Machine)이란? JVM은 Java Virtual Machine, 즉 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다. JVM은 OS와 Java 애플리케이션 사이의 중개자 역할을 한다. JVM은 자바 바이트코드를 실행할

code-lab1.tistory.com

4. https://happy-coding-day.tistory.com/entry/JVM-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-1

728x90

'ssung_항해일지 > 항해99_Spring_입문, 숙련, 심화' 카테고리의 다른 글

spring - 21일차  (0) 2023.02.25
spring - 20일차  (0) 2023.02.24
spring - 18일차  (0) 2023.02.21
spring - 17일차  (0) 2023.02.21
spring - 15일차  (0) 2023.02.19