본문 바로가기
  • 개발공부 및 일상적인 내용을 작성하는 블로그 입니다.
부트캠프/후기 챌린지

[멋쟁이사자처럼부트캠] 백엔드 자바 21기 (2026.01.06)

by 방구석 취준생 2026. 1. 6.

* 해당 글은 백엔드 자바 강의이후 회고 글입니다.

https://bootcamp.likelion.net/school/kdt-backendj-21th

 

백엔드 부트캠프 21기: Java : 멋사 부트캠프

실전 스킬 기반 백엔드 개발자 취업 완벽 대비 교육

bootcamp.likelion.net

 

꽤나 중요한 내용이 나왔던 오늘

기본적인 메모리 구조를 알고있다면 자바 스프링으로 웹 백엔드 개발을 하는데 있어 각종 기능들의 성능향상을 시도해볼 수 있다.

그런면에 있어 오늘 강의 내용중 프로그램이 실행될 때 사용되는 메모리가 어떤 구조로 되어있고 어떻게 동작하는지에 대한 내용은 강의에서 기초적인 수준으로만 진행되었지만 그래도 앞으로 JVM 과 GC 의 구체적인 동작에 대한 내용 등 심화과정을 이해하는데는 충분한 도움이 될 것으로 보인다.

 

프로그램이 실행될 때 OS 의 동작

프로그램이 실행될 때 OS 는 해당 프로그램을 실행하기 위해 프로세스를 생성하고 해당 프로세스에 프로그램을 실행시키는데 필요한 메모리 공간을 할당해준다. 이때 프로세스가 할당받은 메모리 공간을 Memory Map 이라고 한다.

좀 더 자세하게는 아래와 같다.

프로세스의 메모리 배치 맵 : 프로그램에 의해 작성 된 코드를 실행파일로 만들어 OS에서실행할 때, 메모리에 각각의 데이터 영역을 분리하여 할당 된 지도를 말한다.

출처 : https://ko.wikipedia.org/wiki/%EB%A9%94%EB%AA%A8%EB%A6%AC_%EB%A7%B5

 

Memory Map 의 구조

CS(Code Segment)

  • 코드를 함수 단위로 메모리 번지수를 지정해서 해시 테이블 형태로 관리하는 영역. 즉, 코드를 관리하는 곳

DS(Data Segment)

  • 코드 내부에서 사용되는 각종 데이터들을 관리하는 영역, 마찬가지로 해시 테이블 형태로 관리된다. 

Static

  • 정적 영역, 코드에 static 이 존재한다면 모두 이 영역에서 관리된다. 데이터의 경우에도 마찬가지로 static 키워드가 붙어있다면 DS 가 아닌 static 영역에서 메모리 번지수를 부여해서 관리한다.
  • static, struct, union, class, function(함수, 메서드) 등이 선언되면 관리하는 정적 공간(binding)
  • static 멤버는 선언과 동시에 주소가 바인드되어 클래스명.멤버로 바로 호출이 가능하고 non-static 멤버는 주소를 생성한 후, 생성된 주소를 통해 멤버 호출이 가능하다.

Heap

  • 자유 영역 공간, 프로그램이 실행될 때 다른곳에서 사용하지 않는 공간에 메모리를 확보해서 실행했다가, 실행이 끝나면 소멸되는 곳(동적 할당)
  • 프로그램에 따라 명시적으로 할당된 메모리를 제거해주거나, 자바의 경우 JVM 의 GC 에서 자동으로 처리해준다.

Stack

  • 고정 영역(크기도 고정), 실제 내용이 저장되는 곳, 이 영역이 꽉 차면 병목현상이 발생하여 다른 메모리들도 움직일 수 없게된다. (StackOverFlow)
  • 왠만하면 Stack 영역에 할당되는 데이터들은 줄이는 방향으로 작업을 한다고 한다.

JVM 의 경우(기본)

JVM 은 OS 에 종속적이지 않고 OS 위에서 돌아가고 있기 때문에 플랫폼에 독립적이다.

즉, OS에서 제공해주는 메모리 맵을 사용하지 않는다.(플랫폼에 독립적이라는 말은 OS 에서 제공해주는 메모리 공간을 사용하지 않는다는 뜻)

자바는 OS 에서 제공해주는 메모리 맵이 아닌, JVM 이 자체적으로 가지고있는 가상 메모리를 사용하기 때문에 OS(플랫폼) 에 독립적이라고 할 수 있다.

  • JVM 에서 제공해주는 메모리는 전체 100% 공간이 heap 으로 구성되어 있다. 그렇기 때문에 자바 프로그램이 종료되면 동적으로 할당받은 메모리가 사라지는 구조이기 때문에 메모리에 남아있는것이 없게된다.(GC 처리)
  • 사용자 -> Java 실행 -> OS -> CreateProcess API -> java.exe(자바 전용 실행환경에서만 동작함 - JVM) -> Java Runtime(JVM)
  • 객체지향은 플랫폼에 독립적인지 그렇지 않은지도 봐야한다. 독립적이다 라는것은 자신들만의 전용 실행환경(자바의 경우 JVM) 이 있다는 것을 의미한다.

* API 문서 확인하는 방법은 일단 생략, 뭐 예전에 많이 봤던 편이기도 하고 계속 자바를 다루다 보면 자연스럽게 많이 이용하게 될 거라서....