Java Spring Boot - Spring Framework

4 분 소요

Spring Framework

  • Framework: Frame(틀) + Work(작업) → 정해진 규칙안에서 작업할 수 있도록 제공되는 환경
  • Open Source
    • 무료로 소스 코드가 공개된 것
    • 기업체 중심으로 개발된 오픈소스 프레임워크들이 통일성이 없기 때문에 정부 주도로 프레임워크를 제작 → eGov F/W, 전자 정부 표준 프레임워크 (자바 스프링 기반)
  • Web Application = Servlet/JSP, EJB(Java에서 개발) → Struts F/W → Spring F/W → Spring Boot F/W (EJB 대체 목적)
  • Ioc (Inversion of Control) 컨테이너 : 제어의 역전
    • 주도권: 사용자 → 스프링
    • Member m - new member(); 와 같은 객체 생성을 컨테이너가 대체
  • DI (Dependency Injection) 지원 : 주도권 이전을 위해 사용
  • Filter : 요청/응답 선행, 후행처리
    • 문지기 : 임무(검열), 기본 필터, 필터 추가사용, 직접 필터 생성
    • 성 : 톰캣 (filter → web.xml) / 스프링 컨테이너 필터 (인터셉터)
    • 왕의집 : 스프링 컨테이너
  • Annotation
    • Compile checking : 주석 + 힌트, 리플렉션
    • Java : @Override → 부모클래스에서 정의가 되어 있는지 힌트 체킹
    • Spring :
      • @Component → 클래스 메모리에 로딩
      • @Autowired → 로딩된 객체를 해당 변수에 할당
  • MessageConvert : 기본값 JSON
  • BufferedReader (@RequestBody), BufferedWriter (@ResponseBody)

Springboot with JPA

  • JPA : Java Persistence API

  • ORM (Object Relational Mapping) 기술

  • 반복적인 CRUD 작업을 생략하게 해줌

  • 영속성 컨텍스트를 가지고 있음

  • DB와 OOP의 불일치성을 해결하기 위한 방법론 제공

  • OOP 관점에서 모델링 가능

    • Inheritance, Composition, Association Relation
  • 방언 처리가 용이하여 Migration 하기 좋음

    → 유지보수에 좋다

Spring 기본 개념

— Framework 개요

  • 개념 : 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하도록 구성하여 특정 문제를 해결하기 위한 일련의 협업화된 형태로 클래스들 및 기반구조를 제공하는 것
  • 특징 :
    • 디자인 패턴이 적용된 라이브러리 기반의 구조화된 산출물
    • 특정 개념들의 추상화를 제공하는 다양한 클래스와 재사용 가능한 컴포넌트로 구성
    • 추상적인 개념들이 문제를 해결하기 위해서 협업하는 방법을 정의 (통합성, 일관성 제공)
  • 디자인 패턴 : 자주 사용하는 효율적인 설계 구조를 정형화해서 설계 템플릿을 구성하는 것
  • 라이브러리 : 자주 사용하는 기능들을 모아 재사용하기 위한 클래스들의 집합으로 단순 호출하여 사용
  • 프레임워크와 라이브러리 차이점 : 어플리케이션 제어 흐름에 대한 주도성 (제어의 역전)

— Spring Framework 개념

  • Java Enterprise (JAVA EE) 개발을 보다 쉽고 편하게 개발 할 수 있는 Light Weight 오픈소스 어플리케이션 프레임워크 ⇒ Server/JSP, JDBC, message, EJB 등
  • 공공기관의 웹서비스 개발위한 전자 정부 표준 프레임워크 (eGov Framework)의 기반 기술

— POJO (Plain Old Java Object)

  • 특정 인터페이스에 종속되지 않는 자바빈과 같은 사용자 정의 자바 클래스

  • 특정 라이브러리, 컨테이너에 독립적, 생산성 향상, 테스트 작업시 유연함

    ※ JavaBean Component

    1. 기본생성자
    2. private 멤버변수 (name → getName(return) / setName(this.name=name) )
    3. public setter()/getter() → 메서드형식 반드시 규칙준수

— EJB (Enterprise JavaBeans)

  • 기업환경의 시스템 구현위한 서버측 컴포넌트 기술
  • Session Bean, Entity Bean, Message Driven Bean ⇒ 규칙준수 : 상속, 재정의, 라이프사이클
  • 시스템의 업무로직을 처리하기 위한 인프라 서비스 기술을 제공하는 서버(WAS)에 종속
    • EJB WAS : EJB Container 생명주기 관리
  • 문제 : 유료 사용비용이 비싸다 ⇒ EJB 대체를 위해 Spring이 탄생

— 스프링 주요 특징

  • POJO : 일반 자바 클래스

  • DI (Dependency Injection) 개념 : 의존성 주입

    • 각 클래스 사이의 의존관계를 빈설정 (bean definition) 정보를 참조하여 컨테이너가 자동적으로 연결해주는 것
    • 컨테이너 API에 종속되는 것을 줄일 수 있음
    • 의존성 주입 종류 :
      • Setter Injection : setter 메서드를 이용하는 방법
      • Constructor Injectrion : 생성자를 이용하는 방법
      • Method Injection : 일반 메서드를 이용하는 방법
  • IoC (Inversion of control) 개념

    (핵심) :

    제어의 역행

    • 개발자가 객체를 생성하지 않고 Framework 에서 생성 제공 (주입)
    • 의존관계 (Dependency)
    • 객체의 생성에서부터 생명주기의 관리까지 모든 제어권의 변경
  • AOP (Aspect Oriented Programming) 개념

    (핵심)

    공통관심사 분리

    • 예를 들어 세션을 분리 설계해놓으면 세션이 필요한 기능에 따라 공통 적용이 가능하다
    • 관련용어: Joinpoint, Advice, Pointcut, Aspect, Weaving, Target
  • 편리한 MVC 구조

  • Transaction 지원

  • WAS 종속적이지 않는 독립적 개발환경

  • 스프링 설정 파일 작성 : XML, Properties, Annotation 선택 가능

Spring Boot

  • 개발환경 설정 단순화 (편리)
  • 개발환경 : STS (Spring Tool Suite) 다운로드 추가 설치
  • STS: JDK, WAS(Tomcat) 포함 + plug in 추가 설치
  • 의존관계 라이브러리 자동관리: maven, gradle
  • 배포단위: jar, war
  • 환경설정: xml, properties, yaml

스프링부트 프로젝트 폴더 기본구조

  • project
    • pom.xml
    • 의존관계 라이브러리 관련 설정 파일
    • 프로젝트 생성시의 의존관계 체킹시에 자동 추가
    • 개발중에 직접 추가 설정
    • Local repository 위치: C:\Users\Playdata.m2\repository>
    • Web repository: https://mvnrepository.com/
    • .m2 압축 복사 사용 가능 (다운로드 문제시에 사용가능)
  • src/main/java> java source 파일
  • src/main/resources>
    • application.properties
    • 프로젝트 관련 환경설정
  • src/main/resources/static>
    • html, css, js 등 정적 파일
  • src/main/resources/templates>
    • spring boot view : thymeleaf 기본 지원

Lombok

  • Domain 클래스에 대한 코드 자동완성 제공
  • https://projectlombok.org/
  • 추가 설치 라이브러리: lombok.jar
  • Domain class : Member.java
  • 자동으로 제공하는 setter(), constructor 생성자는 parameter data에 대한 설정 만을 자동 지정(초기화 목적 자동) ⇒ setter(), constructor에서 부가적인 코드를 구현해야한다면 자동완성 사용 불가

Spring Controller .vs. Servlet 코드 비교

— Spring Controller

@Controller
public class HomeController {
	@RequestMapping("/add")
	@ResponseBody
	public int addSum(int op1, int op2) {
		return op1 + op2;
	}
}

— Servlet

public class HomeController extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
		String data1 = request.getParameter("op1");
		String data2 = request.getParameter("op2");
		
		int op1 = Integer.parseInt(data1);
		int op2 = Integer.parseInt(data2);
		
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		out.println("<html>...<body>");
		out.println(op1 + opt2);
		out.println("</body></html>");
	}
}

Lombok 주요 어노테이션

@Data

@Setter
@Getter

@AllArgsConstructor
@Builder

@ToString
@ToString(exclude = "memberPw")
@ToString(exclude = {"memberPw", "mobile"})

@EqualsAndHashCode()
@EqualsAndHashCode(of = "포함속성명")
@EqualsAndHashCode(exclude = {"제외속성명", "제외속성명", "제외속성명"})

Emmet html tag editor

— 자동완성을 통해 html 작성 속도를 향상시켜주는 플러그인

  • STS 설치 : eclipse marketplace를 통해 진행

  • https://docs.emmet.io/

  • 대표 작성 태그

    • > : 자손 태그

    • + : 형제 태그

    • *숫자 : 반복 횟수

    • () : 그룹핑

    • ^ : 한단계 상위

    • ^^ : 두단계 상위

  • 예시

    table + tab
    tr * 5 + tab
    (tr>(th+td))*5 + tab
    div>ul>li*5
    (div>ul>li*5)*2
    

댓글남기기