오랜만에 실습을 하기 전 되돌아보는 기념으로 지피티와 이야기를 나누던 중, 한 가지 잘못 알고 있던 지식을 발견했다.
바로 컴파일러와 프레임워크에 대한 구분이다.
스프링부트가 컴파일러...였던가? 라는 의문이 들었고, 내가 컴파일러와 프레임워크에 대해 잘못 생각했음을 알았다.
흔히 학교에서 배우는 개발은 언어다.
그럼 그 언어는 어떻게 실행시킬까?
언어는 크게 3가지로 나뉜다. 기계어 <-> 어셈블리어 <-> 고급 언어
내가 작성한 Java 코드는 고급 언어에 속한다.
그렇기에 컴퓨터가 내가 작성한 자바 코드를 이해하려면 자바 소스 코드를 자바 바이트 코드로,
자바 바이트 코드를 네이티브 기계어로 바꿔줘야 한다.
그럼 그 기계어를 통해 CPU가 프로세스와 스레드를 실행한다.
여기서 소스 코드를 바이트 코드로 바꿀 때 자바 컴파일러가 사용된다.
바이트 코드를 기계어 바꿀 때는 VM이라 불리는 버츄얼 머신을 사용해야 한다.
정리하면 내가 인텔리제이에서 런을 돌릴 때, 인텔리제이는 컴파일러로 소스코드를 바이트 코드로 컴파일하고
컴파일된 코드(바이트코드 .class)를 JVM으로 또 컴파일하면 기계어가 되어 실제 PC와 상호작용한다.
그래서 컴파일러는 번역기라고 생각하면 된다.

프레임워크는 번역을 하지 않는다.
이미 실행 중인 프로그램 안에서 프로그램의 실행 흐름을 바꾼다고 이해해야 한다.
지피티는 아래와 같이 설명한다


스프링 부트에 익숙해 맨 아래 스프링 프레임워크를 통해 제대로 이해했다.
우리가 클라이언트로부터 요청이 들어오면 어떤 파일부터 읽어야 하는지 컨트롤러에 순서도를 만드는 게, 하나의 프레임워크의 역할이었다.
결국 프레임워크는 프로그램이 실행 중일 때 어떤 구성원을 다음 실행 예정지로 올릴지를 결정하기 위해 만들어둔 것이었다.
그럼 내가 비쥬얼 스튜디오 코드에 메인 함수에 여러 함수 만들어서 순서대로 실행되게 코드 작성해 두면 그것도 프레임워크인가?
라고 생각할 수 있다.
하지만 그건 프레임워크가 아니라 그냥 프로그램이다.
핵심은 결국 흐름을 주도하는 주체의 차이다.
아래 내용을 보면 확실히 이해할 수 있다.



'2026 Dev Log' 카테고리의 다른 글
| [SpringBoot] 자동 배포 2026 최종본 (Docker + GitHub Actions) (0) | 2026.05.14 |
|---|---|
| [SpringBoot] 2026 CRUD 서비스 로직 (0) | 2026.05.04 |
| [Springboot] entity <-> DTO 변환 방법 (0) | 2026.04.30 |
| [Spring Boot] Service 파일 CRUD (0) | 2026.04.29 |
| Port 8080 is already in use (1) | 2026.03.04 |