윈도우 환경에서 빌드하고 실행하기

빌드하기에 앞서 java --version확인을 하시고, 인텔리제이 실행은 종료하여야합니다.

  • 명령 프롬프트(cmd)로 이동합니다.
  • 명령 프롬프트에서 gradlew build로 빌드합니다.

  • 빌드하면 build 디렉토리가 생성됩니다.
  • cd build/libs로 이동하여 .jar 파일을 확인합니다.

  • .jar 파일을 실행하면, 화면이 정상적으로 뜨는 것을 확인할 수 있습니다.

  • 빌드를 다시 하고 싶은 경우는, gradlew clean을 하면 build 폴더를 지우고 다시 빌드할 수 있습니다.


이 글은 김영한 님의 스프링 입문 강의를 복습하기 위해 작성된 글 입니다.

참고: https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8

맨처음 프로젝트 실행시 에러페이지가 뜨는 것을 확인했었습니다.

이 에러 페이지를 해결하고 동작하는 화면을 확인해보겠습니다.

Welcome Page 만들기

  • resources/static/index.html 해당경로에 index.html 파일 만들기
    • static/indext.html을 올려두면 스프링 부트 기능으로 Welcome page로 설정된다
<!DOCTYPE HTML> 
<html> 
<head> 
<title>Hello</title> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
</head> 
<body> Hello <a href="/hello">hello</a> </body> 
</html>

thymeleaf 템플릿 엔진

  • 템플릿 엔진은 정적페이지(파일)을 원하는대로 수정할 수 있도록 해준다.
  • thymeleaf 사이드: https://www.thymeleaf.org/

Controller, templates 작업 후 연결하기

  • Controller
@Controller 
public class HelloController { 
    @GetMapping("hello") public String hello(Model model) { 
        model.addAttribute("data", "hello!!"); 
        return "hello"; 
    } 
}
  • view  
    • resources/templates/hello.html
<!DOCTYPE HTML> 
<html xmlns:th="http://www.thymeleaf.org"> 
<head> 
<title>Hello</title> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
</head> 
<body> 
<p th:text="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p> 
</body> 
</html>

thymeleaf 템플릿엔진 동작 확인하기

동작 이해하기

  • 컨트롤러에서 리턴 값으로 문자를 반환하면 viewResolver 가 화면을 찾아서 처리한다.
    • 스프링 부트 템플릿엔진 기본 viewName 매핑
    • resources:templates/+{viewName}+.html

이 글은 김영한 님의 스프링 입문 강의를 복습하기 위해 작성된 글 입니다.

참고: https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8

Gradle은 의존관계가 있는 라이브러리를 함께 다운로드 합니다.

따라서, 처음 프로젝트에 추가한 spring-boot-starter-web, spring-boot-starter-thymeleaf 이외에도 External Linraries에서는 의존관계가 있는 라이브러리들이 받아져 있는 것을 확인 할 수 있습니다.

라이브러리를 파악해보면 아래와 같습니다.

스프링 부트 라이브러리

  • spring-boot-starter-web
    • spring-boot-starter-tomcat: 톰캣 (웹서버)
    • spring-webmvc: 스프링 웹 MVC
  • spring-boot-starter-thymeleaf: 타임리프 템플릿 엔진(View)
  • spring-boot-starter(공통): 스프링 부트 + 스프링 코어 + 로깅
    • spring-boot
      • spring-core
    • spring-boot-starter-logging
      • logback, slf4j

테스트 라이브러리

  • spring-boot-starter-test
    • junit: 테스트 프레임워크
    • mockito: 목 라이브러리
    • assertj: 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
    • spring-test: 스프링 통합 테스트 지원

이 글은 김영한 님의 스프링 입문 강의를 복습하기 위해 작성된 글 입니다.

참고: https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8

스프링부트로 프로젝트를 하면서 공부를 하려고합니다. 김영한님의 스프링 입문 강의로 시작합니다.

 

1.  IDE 준비하기

기존에 IntelliJ를 사용중이기에 따로 설치하지 않고 바로 이용합니다. 개인 상황에 맞추어 IntelliJ나 Eclipse를 설치합니다. 요즘 추세로는 IntelliJ가 편리하여 주로 사용된다고 합니다.

 

2. 자바 11 설치하기

프로젝트에서 Java 11을 사용하기 위해서 JDK 11 버전을 다운받습니다.

저는 Window 환경이라 아래의 블로그를 참고하여 설치를 하였습니다. 개인 컴퓨터 환경에 따라 설치를 진행하시면 됩니다.

- (참고) https://crazykim2.tistory.com/478

 

[JAVA] Window10의 JAVA SE 11 설치하기

안녕하세요 포스팅이 늦은 것 같지만 이번에 윈도우를 포맷하면서 자바를 다시 설치하게 되었습니다 자바 개발을 처음하거나 자바를 설치한지 오래되어서 기억이 안 나는 분들을 위해 자바 설

crazykim2.tistory.com

 

3. Springboot 프로젝트 만들기

- Spring Initializr에서 프로젝트를 만들어줍니다. 

- https://start.spring.io/

- 위, 사이트는 스프링부트를 기반으로 스프링 프로젝트를 만들어주는 사이트입니다.

- Maven / Gradle :  필요한 라이브러리를 관리하고, 빌드 라이프 사이클을 관리해주는 도구

- 요즘은 Gradle 을 주로 사용한다고 합니다.

- 언어와 버전은 위와 같이 설정하였습니다. 

라이브러리를 추가합니다.

- Spring Web: 웹 프로젝트를 진행하기 때문에 추가

- Thymeleaf: html을 만들어주는 템플릿 엔진

- GENERATE 하여 다운로드 받고 인텔리제이에서  프로젝트를 실행하여줍니다.

 

4. 프로젝트 실행

프로젝트를 열면 라이브러리들을 받느라 시간이 소요됩니다. 잠시 기다리면서 JDK와 Bjild and run 설정을 확인해줍니다.

- Build and run을 위처럼 IntelliJ IDEA로 설정해 줍니다.

- Project Settings 에서  SDK  버전을 확인해 줍니다. 저는 18로 설정되어있어 11로 변경해주었습니다.

- 메인함수를 실행하고 localhost:8080에 아래와 같은 화면이 뜨면 성공입니다.

 


이 글은 김영한 님의 스프링 입문 강의를 복습하기 위해 작성된 글 입니다.

참고: https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8

이 글에서는 Java의 등장배경을 살펴보고, 자바 코드의 실행과정과 JVM 동작원리 및 개념을 살펴보려고 합니다.

 

JAVA 등장배경

JAVA는 가전제품 내에 탑재해 동작하는 프로그램을 위해 개발한 언어라고 합니다. 개발 당시에는 UNIX 기반의 배경을 가지고 있었기 때문에 C/C++ 특성상 여러 하드웨어를 커버하기에는 같은 기능의 소스를 각 하드웨어에 맞게 작성해야하는 번거로움이 있어 JAVA를 개발하게 되었다고 합니다.

이러한 배경에서 탄생한 언어인 JAVA는 어느 하드웨어(CPU)던, 어느 운영체제(OS)이던 상관없이 컴파일된 코드(바이트코드)가 플랫폼에 독립적인 특징을 갖습니다. 즉, 어느 플랫폼이던 작성한 소스를 변경할 필요 없이 다 실행시킬 수 있다는 장점을 갖게됩니다.

이러한 특징은 JVM(Java VIrtual Machine)이 있기 때문에 가능합니다. 그렇다면 JVM(Java Virtual Machine)의 어떠한 기능 때문에 OS에 독립적으로 실행시킬 수 있는지 자바 코드의 실행과정을 통해 알아보겠습니다. 

 

JAVA 코드의 실행과정

JVM 자바 가상 머신을 단순하게 말하면 컴파일된 코드(바이트코드)를 실행시켜주는 가상의 컴퓨터라고 생각하면 이해하기 쉽습니다. JVM 을 파악하기 전에 소스코드가 JVM에 전달되어 실행되는 과정을 먼저 정리해보겠습니다.

 

[컴파일 타임 환경]

1. 자바 클래스 파일 (.java) 을 자바 컴파일러를 통해 자바 바이트 코드 (.class)로 컴파일합니다. 

 

[런타임 환경]

2. 컴파일된 바이트코드를 JVM의 클래스로더(Class Loader)에게 전달합니다. 

3. 클래스 로더는 동적로딩(Dynamic Loading)을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역(Rumtime Data area), 즉 JVM의 메모리에 올립니다.

* 클래스 로더 세부 동작
1. 로드: 클래스 파일을 가져와서 JVM의 메모리에 로드
2. 검증: 자바 언어 명세(Java Language Specification) 및 JVM 명세에 명시된 대로 구성되어 있는지 검사
3. 준비: 클래스가 필요로 하는 메모리를 할당 (필드, 메서드, 인터페이스 등)
4. 분석: 클래스의 상수 풀 내 모든 심볼릭 레퍼런스를 다이렉트 레퍼런스로 변경
5. 초기화: 클래스 변수들을 적절한 값으로 초기화 (static 필드)

4. 실행엔진(Execution Engine)은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행. 이때 실행 엔진은 두가지 방식으로 변경

1. 인터프리터: 바이트 코드 명령어를 하나씩 읽어서 해석하고 실행. 
    - 하나하나의 실행은 빠르나, 전체적인 실행속도가 느린다는 단점이 있음
2. JIT 컴파일러(Just-In-Time Compiler): 인터프리터의 단점을 보완하기 위해 도입된 방식으로 바이트 코드 전체를 컴파일하여 바이너리 코드로 변경하고 이후에는 해당 메서드를 더이상 인터프리팅 하지 않고, 바이너리 코드로 직접 실행하는 방식. 
    - 하나씩 인터프리팅하여 실행하는 것이 아니라 바이트 코드 전체가 컴파일된 바이너리 코드를 실행하는 것이기 때문에 전체적인 실행속도는 인터프리팅 방식보다 빠름

 

[참고 자료]

- https://steady-snail.tistory.com/67

 

[JAVA] JVM 동작원리 및 기본개념

JAVA라는 언어를 통해 코딩을 하고 있는 사람으로서 JAVA의 간단한 탄생배경 그리고 JAVA의 시작과 끝이라고 할 수 있는 JVM을 한 번 짚고넘어가려고 해요 우선 JAVA의 탄생배경을 좀 알고가면 이해

steady-snail.tistory.com

- https://aljjabaegi.tistory.com/387

 

알기쉽게 정리한 JAVA의 컴파일과정 및 JVM 메모리 구조, JVM GC

알기쉽게 정리한 JAVA의 컴파일과정 및 JVM 메모리 구조, JVM GC 자바 개발자들이 간과 하기 쉬운 JAVA의 메모리 구조에 대해 포스팅 해보려고 합니다. 이와 관련하여 JAVA의 컴파일 과정과 Garbage Collec

aljjabaegi.tistory.com

- https://gyoogle.dev/blog/computer-language/Java/%EC%BB%B4%ED%8C%8C%EC%9D%BC%20%EA%B3%BC%EC%A0%95.html

 

[Java] 컴파일 과정 | 👨🏻‍💻 Tech Interview

[Java] 컴파일 과정 들어가기전 자바는 OS에 독립적인 특징을 가지고 있다. 그게 가능한 이유는 JVM(Java Vitual Machine) 덕분이다. 그렇다면 JVM(Java Vitual Machine)의 어떠한 기능 때문에, OS에 독립적으로

gyoogle.dev

 

'Lang > Java' 카테고리의 다른 글

[Java] Java 프로그래밍이란 무엇인가?  (0) 2022.09.30

프로그래밍이란 무엇인가?

프로그램은 어떤 값을 입력하고, 결과를 제공해주는 것이다.

프로그램을 만들려면 언어가 필요하다.

사람과 컴퓨터 사이에 소통하기 위한 언어를 '프로그래밍 언어'라고 하며 Java도 프로그래밍 언어 중 하나이다.

 

객체지향 프로그래밍 언어란 무엇인가?

자바와 같은 언어를 객체지향 언어라고 한다.

지금까지 대부분의 프로그래밍 언어들은 현실과 동떨어져 있었다. 하지만 객체지향 언어의 등장으로 현실 세계를 프로그램으로 표현할 수 있게 된다. 

class로 현실에 있는 사물 혹은 추상적인 것을 표현하게된다.

 

클래스란 무엇인가?

자바의 가장 작은 단위이다.

상태(state)와 행동(behavior)을 가지고 있다.

클래스 안에 변수를 선언하면 이를 상태라 하고 메소드를 선언하면 행동이라고 볼 수 있다.​

 

메소드란 무엇인가?

클래스 내에서 행동에 속하는 부분으로 특정한 작업을 수행하는 단위이다.

 

코드로 이해하기

/*형식*/
[접근 제어자] class [클래스 이름] {
	
	[접근 제어자] [리턴 타입] [메소드 이름] ([매개 변수]) {
	// 중간 내용
	}
}

public class Calculator{
	public int add(int num1, int num2){
    	 int sum;
         sum = num1 + num2;
         return sum;    
    }
}

 

 

'Lang > Java' 카테고리의 다른 글

[Java] JAVA 등장배경과 자바코드 실행과정  (0) 2022.09.30

+ Recent posts