* 해당 글은 백엔드 자바 강의이후 회고 글입니다.
https://bootcamp.likelion.net/school/kdt-backendj-21th
백엔드 부트캠프 21기: Java : 멋사 부트캠프
실전 스킬 기반 백엔드 개발자 취업 완벽 대비 교육
bootcamp.likelion.net
어지간한건 알고 있었지만 역시나 내가 잘 몰랐던 부분도 존재한다.
기본적인 자바 설치 및 환경변수 세팅 이런것들은 수십번도 더 해본거라 굳이 정리할 필요까지는 없어보였으나
그 이후 설치된 자바 JDK 폴더 구성에서 내가 몰랐던 사실들이 존재했다.
일단 아래 폴더 구성을 보자.

위의 폴더는 JDK 21 버전을 설치하면 볼 수 있는 폴더 구조인데 보통 환경변수 세팅 때문에라도 bin 폴더 정도는 얼추 알고있어도 그외의 폴더들에 대해서는 그닥 신경을 쓰지 않았던것도 사실이다.
이번 회고를 기회로 오늘 강의에서 잘 몰랐는데 새로 알았던 부분들을 정리해보자.
- bin 폴더에는 자바 실행 프로그램들이 담겨있다.(dll, exe 등) 여기서 bin 폴더는 환경 변수를 통해 path 로 연결되어 있는 상태이다.
- conf 폴더는 JVM/보안/런타임 설정 등 참조파일들이 들어있다. 폴더 내부에 들어있는 .properties 파일들이 모두 다 이에대한 속성 파일들이다.
- include 폴더는 기본적으로 C/C++ 에서 사용되는 각종 자료형들을 자바 버전별로 알맞게 사용할 수 있도록 이름을 변경시켜 놓은 폴더들이다. 자세하게 어떻게 변경되어있는지는 아직 모르겠다. C 도 해봤고 JAVA 도 해봤는데 자료형의 이름이 크게 달랐던건 없던것 같은데 이건 추가적으로 알아봐야 할것 같다.
- jmods 폴더는 자바 모듈 시스템 파일이 들어가있는 폴더이다 JDK 9 버전부터 포함되었다고 한다.
- legal 폴더는 각종 라이센스와 법적 문서들이 포함되어있는 폴더이다.
- lib 폴더는 자바의 기본 라이브러리가 포함되어있는 폴더이다.(Core 라이브러리 -> 클래스 참조 파일들의 묶음)
위의 폴더들 중에서 bin 파일을 제외하면 직접 수정할일이 없다. 직접 호출하는 폴더는 bin 폴더 하나뿐이다.
+ bin 폴더 상세
- dll 파일은 실행 파일이 사용하는 기능들을 모아둔 곳으로 실행 시 필요에 의해 동적으로 참조되는 파일이다. 즉, 단독으로 실행되지 않는다. 여기서 참조란 상대방과 주소로 접속하여 연결관계로 CRUD 를 할 수 있는 관계를 뜻한다.(C&C 관계) 또한 이는 동적으로 연동될 수 있다.(연결되기도 하고 끊기기도 하고 여러개를 동시에 참조 할 수도 있고)
- exe 파일은 자바 실행 프로그램으로서 dll 파일과 달리 단독으로 실행된다.
bin 폴더와 lib 폴더의 경우에는 대강 알고 그외 다른 폴더들에 대해서는 딱히 관심을 가지지 않고 있었는데 덕분에 JDK 폴더 내부에 대해 잘 몰랐던 것들을 알게된것 같다.
그외에 새로 알게된것들?
- 내부 클래스가 존재하는 클래스를 컴파일하는 경우 발생하는 일
이미 자바 스프링을 통해 개인으로든 협업으로든 웹 사이트를 만들어본적은 있기때문에 개인사정 때문에 잠시 개발 공부를 손에서 놓게 됐었던 시간이 꽤 길긴 했어도 다행히 머릿속에 이런저런 기억들이 남아있어 실습 도중에 강사님께서 강의를 위해 작성하시는 기본적인 코드들을 내 마음대로 조금씩 변형해서 가지고 놀아보기도 했다.
// 그냥 내 마음대로 가지고 놀아봤음 ㅇㅅㅇ
class AA{
public static void main(String\[] args){
NumInstance a = new NumInstance(1);
NumInstance b = new NumInstance(3);
System.out.println(a.getNumber() + b.getNumber());
}
}
class NumInstance {
private int number;
public NumInstance(int number){
this.number = number;
}
public int getNumber(){
return this.number;
}
}
- 그냥 혼자 객체 지향적으로 자바 코드 작성하는거 기억나서 끄적여봄 ㅇㅇ
- NumInstance 라는 클래스를 만들고 이 클래스에게 숫자 하나를 기억하고 저장하는 역할을 부여
- AA 클래스에서 NumInstance 객체 2개를 만들어 생성자를 통해 각각 숫자 1,3 저장
- 숫자가 저장된 NumInstance 객체에서 getter 메서드를 통해 저장된 숫자를 불러오는 동시에 출력문에서 두 숫자를 더한 결과값을 출력
이런식으로 강사님께서 강의를 천천히 진행하는 동안 이래저래 혼자 코드를 가지고 놀고있던 도중 강사님의 강의를 통해 또 하나 내가 몰랐던 사실을 알게되었다.
만약 아래와 같은 형태의 코드가 있다고 하자.
class AA {
class BB{}
}
위의 코드는 AA 클래스에 내부 클래스(Inner class) 로 BB 클래스가 있는 형태이다.
물론 위의 클래스는 main 메서드가 없기 때문에 실행은 불가능하지만 컴파일은 가능하다.
그래서 컴파일을 해보면 그 결과로 클래스 파일이 아래와 같은 형태의 이름을 가지게된다.
AA$BB.class
애초에 지금까지 자바를 다루면서 내부 클래스를 사용하게 되는 경우가 잘 없어서 몰랐던 것도 있기는 하다만 이건 꽤 놀라웠다.
내부 클래스가 존재하는 클래스를 컴파일하면 이런식으로 $ 기호를 구분선으로 내부 클래스의 이름까지 함께 붙어서 class 파일이 생성된다는 것은 이번에 처음 알았다.
그리고 또 한 가지 더
- 존재하지 않는 패키지 경로를 가진 소스 코드를 컴파일 하는 경우
사실 존재하지 않는 패키지 경로에 있는 소스 코드를 컴파일 할 경우 컴파일 과정에서 에러가 발생한다는 것 정도는 잘 알고있었다.
아래의 코드를 한번 보자.
package com.test01;
class AA {
}
위의 코드를 컴파일 하면 아래와 같은 에러가 발생한다.
Caused by: java.lang.NoClassDefFoundError: AA (wrong name: com/test01/AA)
이 에러는 AA 클래스가 com.test01 패키지 경로에서 발견되지 않기 때문에 발생하는 에러이다. 이 정도는 뭐 익히 알고있었고 이 경로에 맞는 패키지 구조를 만든 다음 AA 소스코드 파일을 그 경로에 넣어주면 깔끔하게 해결 할 수 있는 문제다.
그런데 이 패키지 경로를 직접 하나하나 만들 필요 없이 아래와 같은 명령어를 cmd 창에 입력해주면 컴파일 과정에서 자동으로 패키지 경로를 생성할 수 있다는 것은 모르고있었다.
javac -d . AA.java
위의 컴파일 명령어를 하나하나 뜯어보면 다음과 같다.
-d 옵션과 소스코드 파일 사이에 있는 . 은 현재 위치를 뜻한다. 즉, 현재 위치에 있는 AA.java 파일을 컴파일 하는데 -d 옵션을 통해 소스코드 파일 내부에 작성해놓은 패키지 경로를 자동으로 생성하며 소스코드를 컴파일 하라는 의미의 명령어이다.
- -d : 출력 위치 지정 ( -d <directory> Specify where to place generated class files)
- . : 현재 폴더 위치
- 현재 위치(.) 를 기준으로 패키지 구조에 맞게 폴더를 만들고 class 파일을 배치하라.
이와같이 특정 패키지 경로에 속해있는 파일을 실행하고자 할 경우 아래와 같이 패키지 경로를 명시해준 상태에서 실행시켜야 한다.
java com.test01.AA'부트캠프 > 후기 챌린지' 카테고리의 다른 글
| [멋쟁이사자처럼부트캠] 백엔드 자바 21기 (2026.01.13) (1) | 2026.01.22 |
|---|---|
| [멋쟁이사자처럼부트캠] 백엔드 자바 21기 (2026.01.09) (0) | 2026.01.09 |
| [멋쟁이사자처럼부트캠] 백엔드 자바 21기 (2026.01.08) (1) | 2026.01.08 |
| [멋쟁이사자처럼부트캠] 백엔드 자바 21기 (2026.01.07) (0) | 2026.01.07 |
| [멋쟁이사자처럼부트캠] 백엔드 자바 21기 (2026.01.06) (1) | 2026.01.06 |