안녕하세요~

Spring Framework와 SpringBoot의 차이에 대해서 알아보겠습니다.

사실 차이라기보단 SpringBoot의 장점이나 특징 정도로 생각하면 될 것 같은 포스팅입니다.

 

 


 

SpringBootSpring을 조금 더 쉽게 이용하기 위한 도구라고 볼 수 있습니다.

 

SpringBoot를 사용하면 오는 장점으로는 다음과 같습니다.

 

 

1. SpringBoot 버전에 따른 라이브러리 버전 자동 관리

기존 Spring에서는 Maven이나 Gradle을 통해 라이브러리의 의존성을 관리했습니다.

개발하다보면은 가장 화나는 부분이 라이브러리의 버전 관리인데, SpringBoot를 사용하면 부트 버전에 해당하는 스프링 라이브러리 뿐만 아니라 의존 관계에 있는 서드파티 라이브러리들도 호환되는 버전으로 다운로드해줍니다.

 

2. 내장 Tomcat 및 테스트 환경

SpringBoot 내에 Tomcat 서버(WAS)를 내장하고 있기 때문에, 별도의 설정이 필요하지 않으며 빠르게 어플리케이션 실행이 가능합니다.

JUnit 등의 테스트 관련 라이브러리도 내장하고 있기 때문에 쉬운 테스트도 가능합니다.

 

3. 독립적으로 실행 가능한 Jar

개발 후 어플리케이션 배포를 위해서, 웹 프로젝트는 보통 WAR 파일로 패키징을 해야합니다. 

SpringBoot는 JAR 파일로 패키징하여 사용이 가능합니다.

 

4. 자동 설정

Spring같은 경우는 예를 들어 DB와 연결을 할 때 JDBCTemplate를 Bean으로 선언하고, DataSource를 설정하는 등의 번거로운 작업이 필요합니다. 하지만 SpringBoot는 이와 같은 설정을 자동으로 설정해줍니다.

이 자동 설정으로 인해 개발 시간을 단축시켜 줍니다.

 

 


 

Spring과 비교되는 SpringBoot의 특징에 대해서 알아보았습니다.

 

감사합니다.

 

안녕하세요. Spring의 특징에 대해서 포스팅해보려고 합니다.

 

 


 

 

Spring Framework

Spring은 Java를 기반으로 웹 어플리케이션을 만들 수 있는 프레임워크입니다. 현재 우리나라 기준, Java 백엔드 개발자는 Spring Framework를 많이 사용하고 있습니다.

 

Spring의 큰 특징으로 꼽히는 IOC, DI, AOC에 대해서 알아보겠습니다.

 

 

 

# IOC = Inversion Of Control = 제어의 역전

일반적으로, 처음 Java로 코딩을 할 때에는 사용자가 직접 각 객체들을 직접 생성하고 조작하는 작업( 객체 생성 후 메소드 호출 )을 했습니다. 즉 각 객체들의 흐름을 사용자가 제어하는 구조였습니다.

하지만, IOC가 적용된 경우 객체의 생성 및 관리를 다른 주체에게 위임합니다. (Spring에서는 IOC Container라는 컨테이너에게 위임합니다.)

 

이와 같이 사용자가 직접 객체를 생성하는 것이 아니라 어떤 주체에게 넘기는 것.

즉 사용자의 제어권을 다른 주체에게 넘기는 것을 IOC = 제어의 역전이라고 합니다.

 

 

# DI = Dependency Injection = 의존성 주입

어떤 객체를 사용하는 주체가 객체를 직접 생성하는 것이 아니라, 객체를 외부에서 생성해서 사용하려는 객체에 주입시켜주는 방식을 말합니다.

예를 들어 A Class에서 B Class의 객체를 직접 생성해야 할 때, 의존성이 높아지게 됩니다. ( 변경 사항이 생기는 경우, 서로에게 영향을 많이 끼친다. )

하지만 외부 (Spring)에서 객체를 생성하여 A에게 주입해주는 방식을 사용하면 A와 B의 의존성이 줄어듭니다.

 

 

# AOC = Aspect Oriented Programming = 관점 지향 프로그래밍

공통적으로 사용하는 기능을 재사용하는 것을 말합니다. 예를 들어 모든 로직에는 공통적으로 로그가 많이 발생합니다.

어플리케이션 전체에 분산된 공통적인 기능이 한 곳에서 관리된다는 점이 장점입니다.

 

 

 

Spring Framework를 사용하는 이유를 정리해보자면..

  1. DI를 통해 모듈간의 결합도(의존도)를 낮출 수 있습니다.
  2. 다양한 요구사항에 따른 어플리케이션을 만들 수 있도록 지원합니다. 
  3. AOC 를 통해 수평적인 제어가 가능합니다.

 

 


 

 

Spring Framework의 특징 및 사용하는 이유에 대해서 서술해보았습니다.

기본기는 진짜 꾸준히 공부해야하는 것 같습니다 ㅜㅜ!

 

 

 

 

참조:

http://melonicedlatte.com/2021/07/11/174700.html

 

'Spring & Spring Boot' 카테고리의 다른 글

Spring 과 SpringBoot의 차이  (0) 2021.08.24

 

안녕하세요~ Java Virtual Machine에 대해 포스팅해보려고 합니다. 

 

Java는 운영체제에 독립적이라는 특징을 가지고 있는데요,

이는 운영체제와 상관 없이 어디서 개발하더라도 어디서든 실행할 수 있다는 것(WORA)을 말합니다.

이는 JVM 덕분입니다!

 

 

JVM = Java Virtual Machine

JVM 은 자바 바이트 코드(Class 파일)를 OS에 특화된 코드로 변환하여 실행합니다. 

-> 특정 OS에 특화된 코드로 변경하기 때문에 JVM은 플랫폼에 종속적이지만, 이 JVM 덕분에 Java 자체는 플랫폼에 독립적이게 됩니다.

 

 

JVM은 크게 4가지로 구성됩니다.

1. Class Loader

2. Execution Engine

3. Runtime Data Area (Memory)

4. Native

 

 

1. Class Loader

.Java 파일을 자바컴파일러가 컴파일 하면, .class 파일이 생성됩니다. ( 자바 바이트 코드 )

이렇게 생성된 클래스 파일들을 메모리(Runtime Data Area)에 적재시키는 역할을 합니다.

 

2. Execution Engine

Class Loader에 의해 메모리에 적재된 .class 파일들을 기계어로 변경해 명령어 단위로 실행하는 역할을 합니다. 

 

3. Runtime Data Area

실행된 인스턴스(데이터)들이 적재되는 JVM의 Memory 영역입니다.

 

Runtime Data Area는 다음과 같은 영역으로 구분되어 있습니다.

Area Data
Method Area Field의 정보(클래스 전역 변수의 이름, 데이터 타입, 접근 제어자 등)
Method의 정보(이름, Return Type, 접근 제어자, 파라미터 등)
Type 정보( 인터페이스인지, 클래스인지)
static 변수 등이 저장되는 영역입니다.
Heap Area 객체, 배열이 생성되는 영역입니다.
Stack Area 지역 변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값이 생성되는 영역입니다.

< Animal an = new Animal(); 이란 소스 작성을 하면,
an은 Stack 영역에 생성되고 new로 생성된 Animal 인스턴스는 Heap 영역에 생성됩니다. an은 Heap 영역의 주소 값을 가지고 있습니다.

한줄정리: Stack 영역에 생성된 an이 Heap 영역에 생성된 인스턴스를 참조한다.>
PC Register Thread가 생성될 때 마다 생성되는 영역으로,
현재 쓰레드가 실행되는 부분의 주소와 명령을 저장하고 있는 영역입니다.
Native Method Stack 자바 외의 언어로 작성된 Native 코드를 위한 메모리 영역입니다.

 

Heap, Method 영역은 모든 쓰레드가 공유하는 영역입니다. 

 

 

 

출처: https://webdevtechblog.com/jvm-java-virtual-machine-architecture-94b914e93d86

이와 같은 역할을 하는 JVM을 포함하여 Library와 함께 Java RunTime Environment를 구성합니다.

따라서 JRE 만 설치하면 모든 플랫폼에서 Java 어플리케이션을 실행할 수 있게 됩니다.

 

 

JVM이 동작하는 전체적인 흐름을 요약하자면 다음과 같습니다.

 

1. Java Compiler가 Java 파일을 Class 파일로 변환합니다.

2. Class Loader가 Class 파일을 Runtime Data Area 에 적재시킵니다.

3. Execution Engine이 적재된 Class들을 기계어로 변환하여 명령어 단위로 실행(인터프리터)합니다.

(4. Garbage Collector 가 Heap 영역에 적재된 객체들 중 참조되지 않고 있는 객체를 제거해 메모리를 관리합니다.)

 

 

 


 

 

JVM의 동작 방식에 대해 알아봤습니다! 

추후에 Heap 영역과 관련된 Garbage Collection 에 대해 포스팅하겠습니다~

 

감사합니다.

 

 

 

참조:

https://jeong-pro.tistory.com/148

https://webdevtechblog.com/jvm-java-virtual-machine-architecture-94b914e93d86

 

안녕하세요. 

Java의 특징들에 대해 다시 공부해볼 겸 포스팅을 한 번 해보려고 합니다.

 

Java는 대표적인 객체 지향 프로그래밍 언어 중 하나로, 특징은 다음과 같습니다.

1. 객체 지향 프로그래밍 (OOP) 

2. 메모리를 자동으로 관리함

3. 운영 체제에 독립적

4. 멀티 쓰레드 지원

 

그중에서 객체 지향 프로그래밍에 대해 포스팅해보겠습니다.

 

 

 


 

 

객체 지향 프로그래밍이란, (= OOP = Object Oriented Programming )

프로그래밍이 필요한 데이터를 하나의 '객체'로 보고 상태(속성)와 행위(Method)를 가진 객체로 구현하는 프로그래밍 방식을 말합니다.

 

예를 들어 "동물"을 객체 지향 프로그래밍의 관점으로 본다면,

일반적으로 동물들은 공통적으로 눈, 코, 입을 가지고 있고 ( 상태 ) 먹기, 잠자기, 숨쉬기와 같은 행위 (Method)를 합니다.

 

이와 같이 추상화 시킨 '동물' 객체를 Class라고 합니다.

 

 

 

객체 지향 프로그래밍의 대표적 특징 4가지는 다음과 같습니다.

 

1) 상속

다른 클래스의 속성과 메소드를 물려받는 것을 말합니다.

 

예를 들어 '동물' 클래스의 특징을 모두 가지고 있는 '고양이'는 '동물' 클래스를 상속받을 수 있겠죠?

 

 

2) 다형성

객체는 여러 형태로 재구성될 수 있다 는 것을 말합니다.

 

예를 들어 '동물' 은 고양이로도 표현될 수 있고, 강아지로도 표현될 수 있겠죠?

 

3) 추상화

객체의 공통된 속성과 기능을 묶어 정의하는 것을 말합니다.

 

'동물' 은 고양이, 강아지에게도 공통된 속성을 가지고 있는 것을 확인할 수 있습니다.

 

4) 캡슐화

객체의 속성과 메소드를 하나로 묶고, 실제 구현 내용을 외부로부터 감추는 것을 말합니다.

 

 

객체 지향 프로그래밍의 장점은 다음과 같습니다.

1. 상속을 통해 코드의 재사용성이 좋습니다.

2. 클래스 단위로 모듈화가 가능하여 대형 프로젝트에 적합합니다.

 

단점은 다음과 같습니다.

1. 처리속도가 상대적으로 느립니다.

2. 객체가 많으면 용량이 커집니다.

 

 


 

이상으로 객체 지향 프로그래밍에 대해 포스팅해보았습니다.

 

+ Recent posts