| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- 냄새라도
- 디스크i/o
- JPA
- 로그백
- 설정세팅
- 문제선택근거
- 단위테스트
- Transaction
- SpringLegacy
- model
- DDD
- 사면초가
- AOP
- MVC요청플로우
- springsecurity
- OOP
- 공통기술
- SEQUENCE
- JDBC
- 이벤트핸들러등록
- string
- index
- TDD
- 클린아키텍처
- 공통규약
- MVC
- 커뮤니티서버
- 전전긍긍
- 이벤트핸들러this
- Ajax
- Today
- Total
개발이군고구마
[JVM] 자바에서 생성한 코드는 어떻게 실행되는가 본문
EC2에 스프링 프로젝트를 클론 받고 빌드 후 배포하면서 문득 무지성으로 스프링 "서버를 띄웠다" 는 것을 깨달았다.

그래, 나는 지금까지 아무 생각없이 기계처럼 손가락만 까딱 벌레 표시를 눌러왔던 계야...
지금이라도 알고가자, 어떻게 스프링의 코드들이 서버에서 실행되는지!

1. JDK 설치
우선 java 코드를 실행하기 위해선 JDK 가 필요하다.
JDK는 자바 컴파일러, 클래스 라이브러리, 개발 도구 등을 포함하고 있어 자바 프로그래밍을 위한 필수적인 요소 라고 할 수 있겠다.
JDK 안에는 프로그램을 실행시키도록 만들어둔 파일인 .jar 을 가지고 있는 JRE와
어떤 운영체제든 java를 실행시킬 수 있게 만드는 가상머신 JVM 프로그램을 포함한다.
현재 작업하고 있는 Spring 프로젝트는 jdk 21을 기반으로 만들어졌기 때문에, EC2에도 jdk 21을 설치해준다.
# Ubuntu
sudo apt-get update
sudo apt-get install openjdk-17-jdk -- 21로 변경
☑️ EC2 서버에 java 로 작성한 spring 프로그램을 작동시킬 수 있는 준비가 완료되었다.
2. 깃 클론
이후 작업을 했던 프로젝트를 가져온다.
깃 프로그램도 EC2에 설치되기 전이라면 이 부분도 명령어로 가져와야하며, 클론을 받을 때 깃 접근 인증이 필요하다.
(나의 경우엔 access token 값을 입력하였다. 글씨 안보임 주의)
$ sudo apt-get install git
$ git clone [git repository 주소]
가장 상위 폴더를 중심으로 깃 프로젝트 폴더가 생성된다.
☑️ 깃 레파지토리에 올려둔 코드 작업들이 이제 EC2 안에 폴더로 들어오게 되었다.
3. 빌드
이제 그 폴더에 있는 코드들을 실행시킬 '준비'를 해야한다.
폴더 -> gradle 파일이 있는 곳에서 빌드 명령어를 입력한다.
./gradlew build -x test (테스트 폴더를 제외하고 빌드 진행하였다)
👋🏻 여기서 잠깐 문법 학습
❓ 컴파일이란
컴파일은 소스 코드를 바이너리 코드 (.class 바이트코드 형태) 로 변환하는 과정
❓ 빌드란
소스 코드 파일을 실행 가능한 소프트웨어 산출물(.jar) 로 변환하는 과정
=> 빌드는 컴파일 이후에 이루어지는데 어떻게 보면 [빌드 > 컴파일] 이렇게 상위개념으로 이해하면 될 것 같다.
☑️ 소스 코드들은 .jar 파일로 만들어져 실행될 준비를 마쳤다.
4. 실행
jar 파일이 생성된 곳으로 이동하여 (build/libs) jar 파일을 실행해달라고 명령한다.
java -jar build/libs/xxxx-0.0.1-SNAPSHOT.jar
-> 이후 변환된 jar 파일은 JVM 내부에 Runtime 영역으로 보내진다.
-> 소스 코드들은 각각 heap/stack/method 영역으로 나뉘고
-> 최종적으로 인터프리터가 그 바이트코드들을 읽으며
-> 프로그램이 실행되는 구조
'SERVER > Java' 카테고리의 다른 글
| 자바 I/O (2) - (문자) 파싱 구현체 만들기 (0) | 2026.01.07 |
|---|---|
| 자바 I/O (1) - 원리 (0) | 2025.12.29 |
| [자료구조] LIST 원리 (0) | 2025.12.26 |
| [자료구조] MAP 원리 (0) | 2025.12.19 |
| [JVM] Static (자바 메모리 구조) (0) | 2025.02.10 |

