JVM언어의 특징?
장점과 단점
장점
JVM
자바의 코드는 기계어가 아닌, 바이트 코드이고 바로 이 바이트 코드를 실행시키기 위한 가상의 CPU가 필요한데 바로 이것이 Java Virtual Machine이 되는 것이다. 이 JVM 안에서 실행되기 때문에 OS 환경에 따라서 소스가 변경되지 않아도 된다는 장점이 있다. 즉, 이식성이 높다.
GC
가비지 컬렉션이 자동으로 더 이상 사용하지 않는 메모리 영역을 시스템 자원으로 돌려주는 기능이다. 즉, 메모리의 저장되어 있는 데이터를 관리 해준다.
프레임워크(Framework)
Spring Framework 전략
Portable Service Abstraction
서비스 추상화
복잡한 기술을 인터페이스를 분리하여 개발자가 인터페이스만 바라볼 수 있게
DI/IoC
의존성 주입
의존성 주입을 개발자가 코드 상에 하지 않고, 어노테이션을 이용하여 스프링이 의존성을 주입하고 의존성 주입에 필요한 인스턴스의 라이프 사이클을 관리하는 것을 말한다. DI를 다른 말로 IoC(Invert of Controll, 역전제어)라고 도 한다.
AOP
관점지향 프로그래밍
트랜잭션이나, 로깅, 보안과 같이 공통적으로 필요로하는 모듈들을 비즈니스 로직 모듈에서 분리해서 공통으로 관리할 수 있다. 횡단 관심사에 대한 부분들을 따로 모듈화하는 것을 말한다.
PSA(서비스 추상화)
POJO(Plain Old Java Object)
Intellij IDE에서 새로운 프로젝트를 생성한다. "Create New Project" 클릭 후, "maven" 프로젝트를 선택하고 생성한다.
프로젝트 생성 완료 후, Spring Boot 기본 설정을 pom.xml 파일에 아래 코드를 추가 한다.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
</parent>
이 프로젝트의 부모 프로젝트를 spring-boot-starter-parent
로 설정해주는 것이다.(의존성 관리와 관계 있는 선언)
<dependencies>
<!-- <https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web> -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
의존성을 추가해준다.
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
Build Plugin도 추가해준다.
src - main - java에 Package(com.ibricks)를 생성하고, Application.class
을 생성 후, main 함수를 정의 후에 SpringApplication 객체를 정의한다.
package com.ibricks;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public Application {
public static void main(String[] args){
SpringApplication.run(Application.class, args);
}
}
Application.class 파일 실행을 하게 되면 Spring Boot(Apache-Tomcat)가 실행된다. http://localhost:8080
으로 접근하면 Error화면 이지만, Tomcat에서 Response해주는 화면을 확인 할 수 있다.
Maven 기본 프로젝트와 동일한 구조를 가진다.
src/main/java → java source 위치
src/resouce → java source를 제외한 모든 것
스프링은 자동으로 컴포넌트들을 구성할 수 있는 자동-구성 기능이 있어서 별도의 XML 구성이나 자바 구성이 없어도 된다.
자동 구성은 **자동 연결(Autowiring)**과 컴포넌트 검색(Component scanning)이라는 기법을 기반으로 한다. 컴포넌트 검색을 사용하여 스프링은 자동으로 애플리케이션의 classpath에 지정된 컴포넌트를 찾은 후 스프링 애플리케이션 컨텍스트의 빈으로 생성할 수 있다. 그리고 스프링은 자동 연결을 사용하여 의존 관계가 있는 컴포넌트를 자동으로 다른 빈에 주입한다.