1. Framework

  • Frame의 대표적인 의미는 ‘뼈대, ‘틀’, ‘구조’ 이다
  • 일상 생활에서 그림이나 액자. 자동차의 뼈대 등을 프레임이라고 부른다
  • Frame은 어던 대상의 큰 틀이나 외형적인 구조를 의미한다
  • 프로그래밍 분야에서의  Frame도 비슷한 의미를 가지고 있다

 2. 프로그램 종류별 Frame

 1) Web의 초기에는 HTML 문서를 구성하는 태그 중에서 frame이라는 태그가 존재했다

  • 아래 예를 보면 frameset과 frame 태그를 이용해서 HTML 문서의 틀만 구성하고 있는 것을 볼 수 있다
<frameset cols="33%,*,33%">
    <frame name="left" src="/left_menu"/>
    <frame name="center" src="/context"/>
    <frame name="right" src="/right_menu"/>
</frameset>

 2) Java에서 Frame과 유사한 의미를 가지는 Framework 가 있다

  • Java에서는 Collection Framework 가 있다
  • Java에서 자주 사용하는 Map이나 Set, List 등의 Collection들은 데이터를 저장하기 위해 널리 알려져 있는 자료구조를 바탕으로 비슷한 유형의 데이터들을 가공 및 처리하기 쉽도록 표준화 된 방법을 제공하는 클래스의 집합이다
  • Java 클래스 유형 중에서 기본적인 뼈대로만 구성되어 있는 것은 추상 메서드만 정의되어 있는 Interface 이다
  • Collection은 Map, Set, List 같은 인터페이스와 그 인터페이스들을 구현한 구현체들의 집합이다

3. 프로그램에서의 Framework 역활

  • 기본적으로 프로그래밍을 하기 위한 틀이나 구조를 제공하므로 생산성이 향상된다
  • 정해진 규약에 따라 작성하므로 애플리케이션을 체계적으로 관리가 가능하다
  • 코드의 재사용성이 높고, 확장성이 좋다
  • 서로 다른 애플리케이션 간의 통신, 데이터 저장소에 데이터를 저장 등... 다양한 기능들을 라이브러리 형태로 제공한다
  • 개발자에게 애플리케이션의 핵심 로직의 개발에 집중할 수 있도록 편의를 제공한다

4. Framework 와 Library

  • Framework 와 Library는 애플리케이션 구현을 위해 필요한 여러가지 기능들을 제공하는 의미에서는 유사하다
  • 애플리케이션에 대한 제어권에 따라 구분할 수 있다

Spring Frame 예) 

@SpringHelloApplication
@RestController
@RequestMapping(path = "/v1/message")
public class SampleApplication {
    @GetMapping
    public String getMessage() {  // (2)
        String message = "hello world";
        return StringUtils.upperCase(message);       
    }

    public static void main(String[] args) {
        SpringApplication.run(SampleApplication.class, args);
    }
}
  • Library
    - StringUtils 클래스는 Apache Commons Lang3 라이브러리의 유틸리티 클래스 중 하나이다
    - StringUtils 클래스의 upperCase() 메서드는 파라미터로 전달된 문자열(message 변수)을 대문자로 변환한다
    - 개발자가 작성한 코드 안에서 필요한 기능을 해당 라이브러리를 호출해서 사용하는 것이 Library 이다
    - 필요한 부분에 개발자가 직접 해당하는 라이브러리를 사용한다
    - Library는 애플리케이션의 주도권이 개발자에게 있다
  • Framework
    - 위의 예) 에서 사용한 애너테이션이나 main() 메서드 내의 SpringApplication.run() 메서드는 Spring Framework에서 지원하는 기능들이며, 라이브러리와는 다르게 코드 상에는 보이지 않는 상당히 많은 일을 한다
    - getMessage() 메서드 내부의 코드처럼 개발자가 메서드 내에 코드를 작성해 두면, Spring Framework에서 개발자가 작성한 코드를 사용해서 애플리케이션의 흐름을 만들어낸다
    - Framework 자체 규약이 있으며, 규약에 맞춰 코드를 작성해야 한다
    -  Framework는 애플리케이션의 주도권이 개발자에게 있다

 

5. Spring Boot

 1) Spring Boot 사용 목적

  • XML 기반의 복잡한 설계 방식을 지양한다
    - 기존에 사용하던 Spring의 복잡한 설정에서 탈피할 수 있다
  • 의존 라이브러리를 자동으로 관리한다
    - Spring Boot의 starter 모듈 자동구성 기능으로 라이브러리의 수동 설정의 불편함을 제거하였다
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-jdbc'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    implementation 'com.h2database:h2'
}

 

라이브러리 자동 설정

  • 애플리케이션 설정을 자동으로 구성한다
     - Spring Boot은 스타터(Starter) 모듈을 통해 설치되는 의존 라이브러리를 기반으로 애플리케이션의 설정을 자동으로 구성한다
implementation 'org.springframework.boot:spring-boot-starter-web'

       - 위와 같은 starter를 작성하면 Spring Boot은 애플리케이션이 웹 애플리케이션이라고 인식하고 웹 애플리케이션을 띄울 서블릿 컨테이너(디폴트: Tomcat) 설정을 자동으로 구성한다

implementation 'org.springframework.boot:spring-boot-starter-jdbc’

       - 위와 같은 starter를 작성하면 Spring Boot은 애플리케이션에 데이터베이스 연결이 필요하다고 인식하고 JDBC 설정을 자동으로 구성한다
       - Spring Boot에서 지원하는 자동 구성으로 인해 애플리케이션에 대한 설정을 직접해야하는 번거로움을 최소화할 수 있다
       - 자동 구성을 활성화 하기 위해서 아래와 같은 애너테이션을 코드에 추가해면 된다

@SpringBootApplication  // Spring Boot에서 자동 구성 설정을 활성화해 준다
public class SampleApplication {
    public static void main(String[] args) {
        SpringApplication.run(SampleApplication.class, args);
    }
}
  • 프로덕션급 애플리케이션의 빌드를 쉽게 할 수 있다
    - Spring Boot을 사용하면 개발한 애플리케이션 구현 코드를 손쉽게 빌드할 수 있다
    - build > bootJar(더블 클릭) 하면 libs > 파일명.jar 와 같이 애플리케이션 실행 파일이 생성된다
    - 직접 빌드 결과물을 War 파일 형태로 WAS(Web Application Server)에 올릴 필요가 없다

※ WAS(Web Application Server)

 - Java 기반의 웹 애플리케이션을 배포하는 일반적인 방식은 개발자가 구현한 애플리케이션 코드를 WAR(Web application ARchive) 파일 형태로 빌드한 후에 WAS(Java에서는 서블릿 컨테이너라고도 한다)라는 서버에 배포해서 해당 애플리케이션을 실행하는 것이다

 - Java에서 사용되는 대표적인 WAS에는 Tomcat이 있다

 - WAS는 구현된 코드를 빌드해서 나온 결과물을 실제 웹 애플리케이션으로 실행되게 해주는 서버이다

 

  • 내장된 WAS를 통해 배포를 쉽게 할 수 있다
     - Spring Boot은 Apache Tomcat이라는 WAS를 내장하고 있기때문에 별도의 WAS를 구축할 필요가 없다
     - Spring Boot을 통해 빌드된 jar 파일을 이용해서 아래와 같은 명령어를 cmd에서 입력 해주면 서비스 가능한 웹 애플리케이션을 실행 할 수 있다
java -jar sample-app.jar

 

 

 

 

※ 참조 링크

▶ 자바 서블릿 :https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%EC%84%9C%EB%B8%94%EB%A6%BF

 

자바 서블릿 - 위키백과, 우리 모두의 백과사전

서블릿은 여기로 연결됩니다. 다른 뜻에 대해서는 서블렛 문서를 참고하십시오. 자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하

ko.wikipedia.org

서블릿 컨테이너 : https://ko.wikipedia.org/wiki/%EC%9B%B9_%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88

 

웹 컨테이너 - 위키백과, 우리 모두의 백과사전

웹 컨테이너(web container, 또는 서블릿 컨테이너)는 웹 서버의 컴포넌트 중 하나로 자바 서블릿과 상호작용한다. 웹 컨테이너는 서블릿의 생명주기를 관리하고, URL과 특정 서블릿을 맵핑하며 URL

ko.wikipedia.org

아파치 톰캣 : https://ko.wikipedia.org/wiki/%EC%95%84%ED%8C%8C%EC%B9%98_%ED%86%B0%EC%BA%A3

 

아파치 톰캣 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전.

ko.wikipedia.org

https://tomcat.apache.org/

 

Apache Tomcat® - Welcome!

The Apache Tomcat® software is an open source implementation of the Jakarta Servlet, Jakarta Server Pages, Jakarta Expression Language, Jakarta WebSocket, Jakarta Annotations and Jakarta Authentication specifications. These specifications are part of the

tomcat.apache.org

 

'Spring Framework' 카테고리의 다른 글

Spring Framework - AOP  (0) 2022.06.22
Spring Framework - DI - Spring Container  (0) 2022.06.19
Spring Framework - IoC / DI - 기초  (0) 2022.06.17
Spring Framework 특징  (0) 2022.06.15
Spring Framework - 환경 구성  (0) 2022.06.14

1. Spring Framework 실습환경 구성

  • JDK-11 설치되어 있어야 한다
  • JAVA_HOME 설정되어 있어야 한다
  • IntelliJ Community Edition이 설치되어 있어야 한다

2. Spring Boot 기반 샘플 프로젝트 생성

  • Spring Initializr 기능을 이용하여 IntelliJ Community Editiond에서 프로젝트 생성한다
  • https://start.spring.io/ 스프링 부트 기반의 프로젝트를 만들어 주는 사이트로 이동한다

  • 아래와 같이 설정한다
    - Project 항목은 최근에 Gradle 을 많이 사용한다
    메이븐(Maven)과 그래들(Gradle)의 개념 및 비교 — 슬기로운 개발생활😃 (tistory.com)
    - Spring Boot 항목은 자동 설정된 상태 그대로 사용한다
    - SNAPSHOT는 만들고 있는 버젼을 의미한다
    - 3.0.0(M3)는 기능 개발은 되었지만 출시 소프트웨어가 결정되지 않았음을 의미한다
    - Project Metadata 항목은 사용자에 맞게 변경해 준다
      → Group : 기업이나 도메인 명을 주로 작성한다
      → Artifact : 결과물의 이름을 작성한다(프로젝트명)
      → Name : Artifact 명으로 자동 작성된다
      → Description
      → Package name : Group + Artifact 결합으로 자동생성
      → Packaging
         : 일반적으로 Spring Boot 애플리케이션은 WAS를 내장하고
           있는 Jar 파일 형태로 배포해서 실행한다
         : 개발한 코드들을 빌드해서 하나의 빌드 결과물로 만들어
           낸다는 의미이다        
      → Java : 컴퓨터에 설치된 버젼을 선택한다

 

  •  우측의 ADD DEPRNDENCIES를 클릭하여 아래의 모듈을 선택한다
    - 어떤 스프링 기반의 라이브러리를 사용할 것인지를 결정한다
    - Lombok
     : @Getter, @Setter 등의 애노테이션을 통해 자주 사용하는 Java 코드를 자동으로 구성해주는 라이브러리이다
    - Spring Web
  • 하단의 GENERATE를 클릭하여 샘플 프로젝트를 다운한다

  • 별도의 project 폴더를 만들고 다운받은 파일을 압축해제 한다

 

3. 탬플릿 프로젝트 열기

  • IntelliJ를 열고 다운로드 한 폴더를 open 한다

  • 신뢰할 수 있는 파일인지 묻는다면 ok하고 진행한다
  • 템플릿 프로젝트를 오픈하면 Gradle 빌드 툴이 자동으로 빌드 작업을 한다

  • 빌드가 진행됨에 따라 External Libraries 하위에 의존 라이브러리들이 생성된다

  • External Libraries 하위에 의존 라이브러리들이 보이지 않을 경우 아래와 같이 진행하여 라이브러리를 생성한다
    - 우측의 메뉴에서 Gradle 탭을 눌러서 오픈한다

- 프로젝트 이름에서 마우스 오른쪽 버튼을 눌러 컨텍스트 메뉴를 오픈한다
- Reload Gradle Project를 클릭한다
- External Libraries 하위에 의존 라이브러리가 있는지 확인한다
- 그래도 나타나지 않으면 IntelliJ를 종료 후 다시 진행해 본다

 

 

 

 

 

 

 

4. Lombok 설정

  • IntelliJ 상단의 File 메뉴에서 Setting 을 오픈한다

  • [Build, Execution, Deployment] > [Compiler] > [Annotation Processors] 메뉴를 선택한다
  • [Enable annotation processing] 체크 박스에 체크한 후, [Apply] > [OK] 버튼을 차례로 클릭한다

  • [Enable annotation processing] 체크 박스에 체크를 해야 Lombok을 정상적으로 사용할 수 있다

 

5. Spring Boot Application 동작 확인

  • IntelliJ에서 Section2Week3Application.java 파일을 더블 클릭해서 오픈한다

  • 파일을 실행시킨다
  • 실행 라인에 .Section2Week3Application  : Started Section2Week3Application in 2.013 seconds (JVM running for 2.383) 문구가 출력되면 정상 실행된 것이다 

  • 죄측의 실행아이콘이 계속 돌고 있는 것은 애플리케이션 자체가 내장 WAS에서 실행이 되고 있음을 의미하는 지극히 정상적인 동작이다
  • 위 화면의 아래에서 4번째 줄에 출력된 port 번호를 확인한 후 Crome 창을 열고 localhost:8080 을 입력한다
    - 아래와 같이 에러가 뜨면 성공이다
    - 현재 아무것도 작성한 내용이 없으므로 에러가 뜨는 것이 정상이다

  • IntelliJ 에서 실행을 중단한 후 다시  localhost:8080 화면을 새로고침 한다
    - 아래와 같이 출력되면 정상이다
    - 스프링부트 파일을 실행 중단하였으므로 8080 port에 연결할 수 없는 것이다

  • 간단히 출력화면을 보고 싶다면 다음과 같이 작성 후 실행해 본다
    - [src] > [main] > [resources] > [static] > 마우스 우클릭 > 새로만들기 > HTML > 이름을 hello 로 입력 후 Enter
    - 아래와 같이 HTML 화면이 나오면 body에 아래와 같이 작성한다
<body>
    <h1>Hello SpringBoot World!!!</h1>
</body>

  • main > java 파일을 재실행 한 후 새로 작성한 HTML파일이 실행되도록 Crome에서 localhost:8080/hello.html 을 입력한다

실행 화면

'Spring Framework' 카테고리의 다른 글

Spring Framework - AOP  (0) 2022.06.22
Spring Framework - DI - Spring Container  (0) 2022.06.19
Spring Framework - IoC / DI - 기초  (0) 2022.06.17
Spring Framework 특징  (0) 2022.06.15
Spring Framework - 정의  (0) 2022.06.15

+ Recent posts