Pace Check
들어가기에 앞서 1) 3기 수업 자료
3기 수업내용을 개선하여 4기 수업 자료를 다시 만들었습니다. 수업 순서와 딱 맞진않겠지만, 참조하시길 바래요
d25_introduction_to_spring_mvc.md
d25_introduction_to_spring_mvc.pdf
들어가기에 앞서 2) Intellij 설정
본 영상에서 8분 40초 ~ 15분 59초 : Your First Java Program
Java Tutorial for Beginners
1. 과제 시작 전 설명
<aside>
📝 (사전 안내) 스프링부트 핵심 가이드 책 P.90 까지 읽고 진행하면 작업에 수월
</aside>
<aside>
📝 (사전 설정) 먼저, Intellij 처음 설치한 경우, 첫 프로젝트 설정을 위한 가이드
- 처음 Intellij 를 설치하셨다면, 여러분들에게 필요한것은 3가지 입니다.
- JDK (Java Development Kit) 설치 (모든 개발 및 실행의 근간인 JDK)
- Gradle Restart (build.gradle 내 설정되어있는 라이브러리 설치 및 프로젝트 세팅)
- Enabled Annotation Processing
바로 아래 이 3가지 설정 방법 및 관련한 설명들을 해드리겠습니다.
</aside>
(1) JDK (Java Development Kit) 설치 (모든 개발 및 실행의 근간인 JDK)
- JDK / JRE 중 어떤걸 설치해야하나요? JDK (왜? java, javac 등 개발도구 모두 포함)
- 8년전까지만해도 Oracle 공식 홈페이지에서 Oracle JDK 를 설치해야했지만
- Intellij 에서 이제 자체적으로 JDK 다운로드/설치를 제공
- 아래 스크린샷을 따라가면, JDK 를 다운받아 설정할 수 있다. 간편
(2) Gradle Restart (build.gradle 내 설정되어있는 라이브러리 설치 및 프로젝트 세팅)
- 프론트엔드 개발자분들은 다음과 같이 생각하면됩니다.
- build.gradle = package.json (라이브러리 의존성, 프로젝트 세부 설정)
- 심화 :
implementation 이나 runtimeOnly 같은 옵션들이 있다.
- Gradle Restart = npm install (라이브러리 설치)
- application(.properties|.yml|.yaml) = 여러 config 파일들 (라이브러리 설정)
- 프론트엔드(Javascript)는 라이브러리마다 각자 다른 config 파일로 관리되지만
- 백엔드(Spring)는 모두 application(.properties|.yml|.yaml) 내 관리
- 아래 스크린샷 참조 → 아래 그림 우측 상단에 보면, Gradle 탭이 보입니다.
- “새로고침” 버튼을 누르면 Gradle Restart 를 통해
- 필요 라이브러리들을 모두 설치하며
- Spring Boot 실행을 위한 설정이 모두 완료됩니다. (npm run start 가능해집니다.)
- 아래 그림에서 좌측 상단에 있는 “컴퓨터 전원버튼” 이 생겨난다.

(3) Enabled Annotation Processing
- Spring 을 사용함에 있어서, 크게 2개 타입의 Annotation 을 접할것이다.
- Spring 에서 제공하는 Annotation (예, @Controller, @Repository 등)
- Lombok 에서 제공하는 Annotation (예, @Setter, @Getter 등)
- 과거에는 외부 라이브러리 Lombok 이 컴파일 시 인식될 수 있도록 아래 옵션 설정
- 현재는 Enabled Annotation Processing 설정 미체크시에도 정상 동작 케이스 확인

2. 프로젝트 세팅 및 절차 가이드
<aside>
📝 과제 진행 방법 + 제출 방법 → 아래 Github 링크의 README 로 확인 가능
</aside>
-
Spring Boot Initializer 를 통해 Spring 프로젝트 초기 세팅

본 Java 기본 문법 및 JVM 수업으로 학생들은 무엇을 얻을 수 있을까?
JVM 의 동작 원리를 이해해야,
→ Java 를 통한 어플리케이션(Spring, Android) 개발 시 모든 런타임 이슈(메모리 이슈)에 대해 대응할 수 있다.
- 문제 발생 시 메모리 덤프를 떠서 GC Heap 영역을 어떻게 비워낼지 전략 수립
- GC 메모리 설정도 세부적으로 조율이 가능
- JVM 메모리 영역에 대한 인지를 통해 Java 구동을 위한 JVM 메모리 옵션을 적절히 설정가능하다.
- 클래스, 객체, 정적 클래스/메서드가 저장되는 메모리 공간을 알고, 세부 설정이 가능하다.
객체를 만들때, 정적 클래스를 만들때 적재되는곳에 따라 JVM 메모리 세부 설정
- 새로 생성되는 객체의 빈도가 많은 경우 Young Generation(Eden, Survivor) 영역 증가
- 자주 사용되는 객체의 빈도가 많은 경우 Old Generation 영역 증가
- 목차
-
- Java 동작 원리 이해하기
- 1.1. 컴파일과 런타임 과정
- 1.1.1. JRE (Java Runtime Environment) : Java “구동”을 위한 모든것
- 1.1.2. JDK (Java Development Kit) : JRE + Java “개발”을 위한 모든것 (컴파일러 등)
- 1.2. 컴파일 에러와 런타임 에러 (Checked / Unchecked Exception)
- 1.2.1. 자바 프로그램 “외부”에서 발생하는것 : (Need to be) Checked Exception
- 1.2.2. 자바 프로그램 “내부 로직”에서 발생하는것 : Unchecked Exception
- 1.2.3. 언제 Unchecked Exception 와 Checked Exception 를 사용할까?
- 1.3. JVM : Java Virtual Machine (Runtime Engine) (JS 배웠던때를 회상하며…)
- 1.3.1. JVM : Java Virtual Machine 의 구성
- 1.3.2. 심화 : Thread 와 Singleton - 수업에서 다루지 않는다.
Java 라는 언어의 (객체지향적) 특징을 “제대로 이해”하고 있어야,
→ 필요에 맞는 적합한 문법을 구사하여, Self-descriptive(그 자체로 설명가능한, 문서가 필요없는) 혹은 재사용성이 높은 코드를 작성할 수 있다. 제대로 된 문법 구사는 생산성의 증가를 의미하기도 한다.
Java 코드를 잘 작성한다는건