티스토리 뷰

Build Automation Tool

Java와 Build Automation Tool

Build Automation Tool

  • Java로 이뤄진 프로젝트는 *.java 파일에 정의된 Java Source 코드로 구성됨
  • javac: java source code를 java bytecode로 바꾸기(compile) 위한 도구/명령어. JDK에 포함되어 있음. java compiler의 약자
  • compile: 소스코드를 기계어로 바꾸는 과정
  • build: 기계어가 실행되어 프로그램이 실행되는데 필요한 모든 과정
    • java source code를 java bytecode로 변환
    • test디렉토리의 java bytecode 실행
    • 실행 결과에 문제가 없다면 프로젝트를 구성하는 모든 파일들을 합쳐서 하나의 파일로 제작 (패키징)
  • Build Automation Tool : Maven, Gradle, ...

Maven 알아보기

  • Java를 위한 build automation tool
    • C#, Ruby 등의 다른 언어에서도 사용 가능
  • Project Object Model (POM)
    • xml의 형태로 프로젝트를 정의
    • pom.xml을 분석해 프로젝트 빌드

Gradle

  • Java를 위한 build automation tool
    • C, C++, JS에서도 사용 가능
  • build.gradle
    • groovy라는 언어로 프로젝트 정의
    • sub-project 등을 포함시키는 용도의 settings.gradle도 있다
    • kotlin을 사용하여 정의할수도 있다 (build.gradle.kts)

Spring Boot 실행하기

일반적인 웹 서비스의 배포 구조

클라이언트가 요청을 보낸 후 신호가 서버로 들어온 이후의 과정

  • 예시) 189.206.151.236:80
    • 189.206.151.236 : IP주소. 인터넷상에서 하나의 컴퓨터(물리적 컴퓨터. 서버)를 가리킴
    • 80 : 포트번호. 컴퓨터 내부에 있는 프로세스에 배분.
  • 포트번호를 보고 웹서버에 요청이 들어옴
    • 요청을 컴퓨터(서버)내의 filesystem(HDD, SDD 등)의  폴더에 있는 파일로 돌려주거나
    • 요청을 web application server라는 프로그램으로 전달
      • 주의 : web server와 web application server는 다름!
      • web server: http요청을 받아서 그 요청을 전달하거나 파일을 다시 전송하는 목적의 서버 (apache, NGINX ...)
      • web application server:  서버 소프트웨어의 종류에 따라 애플리케이션(서비스)를 제공하기 위한 기능을 갖춘 서버 (tomcat ...)
  • web application server
    • tomcat: java로 만들어진 web archive 파일을 열기 위한 application server
    • spring framework의 결과물은 *.war파일,  spring boot framework의 결과물은 *.jar 파일
    • war 파일을 받아서 web application server가 기능을 제공하거나, spring boot 그대로 기능을 제공하거나

서버의 구성 방법

  • Hardware > Web Server > Filesystem 또는 Web Application Server
  • Hardware > (Docker) > Spring Boot

Java와 Jar

Jar

  • Spring Boot 프로젝트를 빌드하면 jar 파일이 나온다
  • jar(java archive)
    • java로 작성 후 컴파일된 java bytecode와 실행을 위해 필요한 다양한 자원을 배포를 위하여 모아놓은 파일의 형태
    • 쉽게 말하자면 한 형태의 압축파일
    • 터미널에서 java -jar 명령으로 실행 가능
  • main 함수: 프로그램의 entry point(시작점)

web application의 구조

multi-tier application architecture

  • presentation layer : 사용자와 직접적으로 맞닿는 부분. 
  • logic layer : business logic layer, business logic tier. 사용자의 입력을 확인하고 그에 따른 액션을 취해주는 부분.
  • data layer : 데이터를 저장하고 불러오는 부분. 사용자의 데이터 그 자체를 의미하지는 않음. 데이터의 표현만 주고 받음.

Spring Boot의 구조

  • dispatcher servlet: framework 내부에 구현되어 있는 부분. http서버의 요청을 받아내는 부분
  • controller: dispatcher servlet의 요청을 직접적으로 받아서 service로 보내는 부분
  • service: controller가 검증한 요청을 받아 사용자의 입력에 따른 데이터의 조작을 결정하는 부분 (logic layer)
  • repository: 데이터의  표현을 받아서 저장하고, 데이터의 표현을 불러와 돌려주는 역할을 하는 부분 (data layer). database와 소통
  • view resolver
  • database : spring boot 외부에 있음!

Spring IoC

Java의 Interface 

Interface와 Abstract Class의 활용에 관해서는 design pattern을 공부

  • interface를 잘 활용하면 서로 다른 구현체가 같은 목적을 위해 동작하도록 만들 수 있다
  • 사용하고자 하는 객체의 실제 자료형과 무관하게 동작하게 만들 수 있다
  • 함수의 인자와 반환 값은 interface를 활용하자
  • ex) ArrayList, Vector, HashSet 모두 Collection 인터페이스의 구현체이기 때문에, Collection 인터페이스의 Iterable로 자료형(멤버변수의 자료형)을 지정해 줄 경우 위 자료형 모두가 멤버변수로 들어올 수 있음
  • ex) InputStream의 구현체는 많지만 다 InputStream의 기능을 가지고 있다 = InputStream을 필요로 하는 기능에는 구분 없이 사용할 수 있다

Spring IoC Container와 DI

IoC (Inversion of Control, 제어 역전)

  • 개발자와 framework가 있다고 가정
    • Spring 이전의 전통적인 개발: 정의되어있는 라이브러리의 코드들을 개발자가 가져다 사용
    • 제어 역전(Spring framework 이후): framework의 역할이 명확하다면, 개발자의 코드를 framework가 가져다 사용하도록 제어가 역전 (application framework)

Dependency Injection

  • Spring IoC Container : Spring에서 IoC를 담당하는 부분. 개발자가 작성한 코드와 설정 정보를 합쳐서 만들어져야 하는 객체를 만들어줌.
    • Spring framework를 잘 사용한 코드는 new 키워드의 사용이 최소화
    • new를 통해서 기능을 하는 객체를 선언하기보다, 객체의 역할을 정의하면 생성자가 객체를 직접적으로 만들어서 배치하도록
    • spring framework: 개발자가 작성한 코드와 설정 정보를 합쳐서 완전한 web service를 만드는 framework
  • bean: 개발자가 작성한 코드에 설정을 넣어줌으로써 완성된 객체(의 단위).
    • spring ioc container가 관리하는 객체
    • Spring IoC Container안에 bean 객체가 여러개 들어있다고 생각하면 됨
  • business logic을 작성할 때 IoC Container에서 만들어져 있는 bean객체를 전달받아 사용하면 new해서 객체를 만들 필요가 없음
  • Dependency Injection : 이미 존재하는 bean을 필요한 시점에 다시 주입시켜 사용할 수 있게 만들어 주는 것
  • Spring에서 구현을 요구하는 부분들을 interface로 정의
  • 이후 사용자가 정의한 구현체 bean을 실제 서비스에서 사용
  • @Component 어노테이션이 class위에 붙으면 해당 class는 Spring IoC에서 관리하는 객체(bean)이 됨
  • @Configuration, @Bean 어노테이션도 확인해 볼 것
    • @Bean 어노테이션을 활용해 함수를 bean으로 만들 수 있음

Spring과 Spring Boot의 차이

Spring framework

  • xml의 형태로 설정을 만들었음 (bean 설정도 xml파일로 작성해야 함)
  • 자바 명령어를 통해 자기 자신을 실행할 수 없음
  • 실행을 위해 web application server(tomcat과 같은 제2의 프로그램)을 활용해서 war파일을 배포하는 과정이 추가로 필요
  • war형태로 결과물이 나옴

Spring Boot

  • spring boot starter라는 패키지에 설정이 정의되어 있음. 

tomcat의 서버 기능이 포함되어 있어 jar형태로 결과물이 나오며, 자바 명령어로 jar파일을 바로 실행 가능

'Java > project lion JSB the origin' 카테고리의 다른 글

Ch.6 Spring Boot 기능활용(1)  (0) 2022.03.04
Ch.5 CRUD & Data (2)  (0) 2022.03.01
Ch.4 CRUD & Data (1)  (0) 2022.02.19
Ch.3 Spring Boot Basics (2)  (0) 2022.02.13
Ch.1 Basics  (0) 2022.01.29
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함