REST(REpresetnataional Safe Transferful) API란?

HTTP URI + HTTP Method 
HTTP URI를 통해 제어할 자원(Resource)를 명시하고,
HTTP Method (GET, POST, PUT, DELETE)를 통해 해당 자원 (Resourse)을 제어하는 명령을 내리는 방식의 아키텍처 

JSON 포맷

구현절차

 

실습

  • RESTful service 개발
  • postman을 통한 테스트

 

@RequestParam

파라미터 처리하는 어노테이션

 

Command 객체를 이용해 폼 전송 처리

RequestParam이 너무 많으면 하나의 객체로 받는 것

value가 true이 이므로 자동으로 boolean 타입으로 형 변환 해준다.

Name이 많으면 List 타입으로 바꿔준다.

 

 

실습

  • get 방식, post 방식 처리
  • path variable 처리 .. 글 상세보기 구현
  • command 객체 (vo를 사용) 파라미터 처리
  • modelandview로 jsp 페이지에 데이터 전달

 

DispathcherServlet

  • 웹 어플리케이션 최전방에서 사용자 요청을 접수
  • URL을 기준으로 요청을 처리할 Controller를 찾음
  • 해당 COntroller를 호출 및 실행

1) Front Controller가 Controller를 결정해준다.

2) URL기준으로 찾을때 대부분 자동으로 처리해준다.

 

Controller

  • 사용자 요청(URL 기반)에 해당하는 Controller의 특정 메소드가 호출됨
  • Controller는 요청의 파라미터가 있으면 처리하고 
  • 비즈니스 처리를 위해서 서비스 컴포넌트를 주입 받아서 실행
  • 실행된 결과를 전달받아(화면에 대한 정보와 함께=view) DispathcherServlet에게 반환

사용되는 Annotation

  • @Controller
  • @RequestMapping
  • @AutoWired

@RequestMapping

 

클래스 Lv + 메서드 Lv 합치는 방법 

/bbs/list를 한번에 클래스Lv에서 선언
@RequestMapping("/bbs/list") + http method(get,post,put,delete)

요청 URL을 파라미터로 사용(경로변수)

articleid : 아티클아이디(=URL 변수) 웹 페이지 마다 다르다.

@AutoWired로 자동으로 객체생성 xml에 넣어서 따라서 Controller에서 별도로 작성할 필요x

 

정리

MVC(Model-View-Controller) 패턴의 개념

Model - View - Controller, MVC 는 소프트웨어 공학에서 사용되는 아키텍처 패턴으로 MVC 패턴의 주 목적은 Business logic과 Presentation logic을 분리하기 위함이다.

MVC 패턴을 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있음.

  • Model : 애플리케이션의 정보(데이터, Busniness Logic 포함)
  • View : 사용자에게 제공할 화면 (Presentation Logic)
  • Controller : Model과 View 사이의 상호 작용을 관리

컨트롤러(Controller)

  • 클라이언트의 요청을 받았을 때 그 요청에 대해 실제 업무르 수행하는 모델 컴포넌트를 호출하는 일을 함(=service객체)
  • 클라이언트가 보낸 데이터가 있다면 모델을 호출할 때 전달하기 쉽게 데이터를 적절히 가공하는 일을 함
  • 모델이 업무 수행을 완료하면, 그 결과를 가지고 화면을 생성하도록 뷰에게 전달(데이터 형태)
  • Servlet과 JSP를 사용하여 작성할 수 있음

뷰(View)

  • (SPA) 주로 Json 형태로 가져와서 HTML/CSS/JS 로 바인딩 하는 형태이다. 
  • HTML과 JSP를 사용하여 작성

모델(Model)

  • 주로 데이터 처리를 담당한다.(DB에서 데이터를 가져온다), DAO클래스, Service 클래스에 해당, VO(Domain객체)

Front Controller 패턴 아키텍처

: 미리 내장 되어 있는 로직, Front Controller가 미리 Controller를 공통 내용을 미리 작성해주므로 편리하다.

  • Front Controller는 클라이언트가 보낸 요청을 받아서 공통적인 작업을 먼저 수행
  • Front Controller는 적절한 세부 Controller에게 작업을 위임
  • 각각의 애플리케이션 Controller는 클라이언트에게 보낼 를 선택해서 최종 결과를 생성하는 작업
  • Front Controller 패턴은 인증이나 권한 체크처럼 모든 요청에 대하여 공통적으로 처리해야 하는 로직이 있을 경우 전체적으로 클라이언트의 요청을 중앙 집중적으로 관리하고자 할 경우에 사용

 

Spring MVC의 특징

  • Spring은 DI나 APO 같은 기능뿐만 아니라, 서블릿 기반의 웹 개발을 위한 MVC 프레임워크를 제공
  • Spring MVC는 모델2 아키텍처와 Front Controller 패턴을 프레임워크 차원에서 제공 (=내장)
    • DispatcherServlet이라는 클래스를 계층의 맨 앞단에 놓고, 서버로 들어오는 모든 요청을 받아서 처리하도록 구성
    • 예외 발생했을때 처리하는 것도 Front Controller이다.
  • Spring MVC 프레임워크는 Spring을 기반으로 하고 있기 때문에 Spring이 제공하는 트랜잭션처리나 DI 및 AOP등을 손쉽게 사용 

Spring MVC의 주요 구성 요소

 

*3번 Controller가 개발자가 개발해야할 부분.

Layered Architecture 

계층화 아키텍쳐

  • 효율적인 개발과 유지보수를 위해 계층화하여 개발
  • 대부분의 중/대규모 어플리케이션에 적용
  • 각 레이어는 독립된 R&R을 가짐
  • Layered Architecture는 인접한 레이어로만 통신이 가능하다.
  • Spring에서 기본적으로 제공하는 방식은 아님
  • 3가지 영역으로 구분됨
    • Client(화면)와 DB가 끝단에 위치

 

MVC 패턴

Presentation을 좀 더 구체화 한 패턴

  • Layered Architecture를 사용한 대표적 패턴
  • 어플리케이션을 Model, View, Controller로 구분
  • UI를 가지는 대부분의 어플리케이션은 MVC혹은 변형된 MVC 패턴을 사용
    • ex) Angular, Android, IOS, SpringMVC

Model

바인딩 하기전 데이터를 가지고있는 것

데이터 저장, 처리

Controller

중간에서 바인딩, 제어를 해주는 것 - >화면 (UI)

View

사용자 요청(입력)을 처리

모델과 화면을 서로 연결 시켜줌

 

 

사례

전자정부 프레임워크

 

컴포넌트 자동등록

=bean

어노테이션(Annotation)을 사용

@Component와 하위 어노테이션을 사용

<context:component-scan base-apckage="패키지 명"/>

패키지 명 이후 하위 패키지를 검색해 @Component 어노테이션을 포함하는 모든 클래스를 빈으로 자동 등록

Context:component-scan

bean이 될 수 있는 모든 Component들을 자동으로 찾아 bean Container에 등록

단 의존성 관계 등록은 따로 하지 않음

@Autowired

Component간의 의존관계는 Autowired라는 Annotation으로 적용

Component-scan과 수동(Setter, 생성자) DI는 혼용해서 사용가능

 

실습

1. 게시판의 글쓰기 기능 구현(가상 구현)

  • BbsService.registArticle(Article)
  • AricleDAO.insertArticle(Article)

2.Service, DAO, VO .. Layering

3.@Service, @repository 어노테이션 등록

  • <context:component-scan../>사용

4.@Autowired 사용으로 DI 구현

 

Context NameSpace 사용

 

 

Layered Architecture 사례 : MVC 패턴

 

m.blog.naver.com/PostView.nhn?blogId=mering_k&logNo=221421049987&proxyReferer=https:%2F%2Fwww.google.com%2F

 

Layered Architecture & @Component 예시

- Layered Architecture(계층화 아키텍쳐) - 효율적인 개발과 유지보수를 위해 계층화 하여 개발 - 각 레...

blog.naver.com

 

1. 객체지향 디자인 원칙에서 객체간의 결합도는 강할수록 좋다. (X)

  • 객체간의 결합도는 약할수록 좋다. DI는 객체간의 결합도를 약하게 만들어준다.

2. DI는 서버쪽 기술에서만 사용된다(X)

  • 클라이언트 기술인 Angular에서 DI기술이 사용된다.

 

Dependency Injection

DI의 개념

각 클래스간의 의존관계를 빈 설정(Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것을 말함
  • 개발자는 단지 빈 설정파일에서 의존관계가 필요하다는 정보를 추가하면됨.
  • 객체 레퍼런스를 컨테이너로부터 주입 받아서, 실행 시에 동적으로 의존관계가 생성됨
  • 컨테이너가 흐름의 주체가 되어 애플리케이션 코드에 의존관계를 주입해주는 것

DI (Dependency Injection)

  • 코드가 단순해진다.
  • 컴포넌트 간의 결합도가 제거된다. (디자인 패턴적 관점)
new를 일일이 하는 것이 아니라 자동으로 생성해주는 것. 

Setter Injection을 가장 많이 쓴다.

 

Spring DI 컨테이너의 개념

Spring DI 컨테이너가 관리하는 객체를 빈(Bean)이라고 하고, 이 빈(Bean)들을 관리하는 의미로 컨테이너를 빈 팩토리(Bean Factory) 라고 부른다.

 

  • 객체의 생성과 객체 사이의 런타임(Run-time) 관계를 DI 관점에서 볼 때는 컨테이너를 Bean Factory라고 한다.
  • Bean Factory에 여러 가지 컨테이너 기능을 추가하여 애플리케이션 컨텍스트(Appplication Context)라고 부른다.

 

Bean Factory와 Applicatiopn Context

Bean Factory 

  • Bean을 등록, 생성, 조회, 반환 관리함
  • 보통은 Bean Factory를 바로 사용하지 않고, 이를 확장한 Application Context를 사용함
  • GetBean() 메서드가 정리되어 있음.
    • Lookup을 지원하는 

Applicatiopn Context

최근엔 사용을 덜 함 -> 개발이 쉬워짐

  • Bean을 등록, 생성 조회 반환 하는 기능은 Bean Factory와 같음
  • Spring의 각종 부가 서비스를 추가 제공함
  • Spring이 제공하는 Apllicaiton Context 구현 클래스가 여러 가지 종류가 있음

 

 

 

 

IoC의 개념

IoC(제어권의 역전)이란, 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미한다.

컴포넌트 의존 관계 결정, 설정 및 생명주기를 해결하기 위한 디자인 패턴

자주 사용하는 객체는 미리 메모리에 올려놓아 효율성을 올리는 방식이다. 스프링 컨테이너가 IoC를 구현한다.

 

 

IoC컨테이너

스프링 프레임워크도 객체에 대한 생성 및 생명주기를 관리할 수 있는 기능을 제공하고 있음, 즉, IoC컨테이너 기능을 제공한다. 

  • IoC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리한다.
  • POJO의 생성, 초기화, 서비스, 소멸에 대한 권한을 가진다.
  • 개발자들이 직접 POJO를 생성할 수 있지만 컨테이너에게 맡긴다.

 

IoC분류

DL(Dependency Lookup) 의존성 검색 

저장소에 저장되어 있는 Bean에 접근하기 위해 컨테이너가 제공하는 API를 이용하여 Bean을 Lookup 하는 것

 

DI(Dependency Injection) 의존성 주입

각 클래스간의 의존관계를 빈 설정(Bean Definition) 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것

 

Spring Toll Suite4 생성

life-with-coding.tistory.com/369

 

[STS] Spring Tool Suite4에서 Legacy Project 생성

인트로 STS4(Spring Tools Suite4)에 Spring Legacy Project를 띄우기 위해서는 STS3이 필요합니다. STS4에서는 Legacy Project를 지원하지 않기 때문에 별도로 설치해주어야합니다. Spring Legacy Project(Sprin..

life-with-coding.tistory.com

실습예제

 

 

 

src/main/resources/spring-context.xml 코드

bean 부분 중요

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id="helloDAO" class="kr.co.acomp.hello.HelloDAO"></bean>
</beans>

 

src/main/java

->kr.co.acomp.hello

-->HelloDAO.java

package kr.co.acomp.hello;

public class HelloDAO {
	
	public int addTwoNumber(int a, int b){
		return a+b;
	}

}

src/main/java

->kr.co.acomp.hello

-->HelloMain.java

package kr.co.acomp.hello;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class HelloMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//HelloDAO dao = new HelloDAO();
		//int result =- dao.addTwoNumber(3, 5);
		
		//DI 문법
		AbstractApplicationContext ctx =
				new ClassPathXmlApplicationContext("/spring-context.xml");
		HelloDAO dao = ctx.getBean("helloDAO",HelloDAO.class);
		int result = dao.addTwoNumber(5,67);
		System.out.println(result);
	}

}
  • STS의 프로젝트 자동 생성 기능을 사용
  • Dynamic Web Project 생성
  • Dynamic Web module Version .. 3.1 로 생성 
필기
메이븐기반으로 Spring을 생성하거나 또는 Spring을 생성 후 Maven으로 생성 가능하다.
하지만 디렉토리구조가 달리지므로 메이븐->Spring 방법이 더 효율적
Spring Boot는 아예 처음 부터 Maven 기반이다.

 

프로젝트 생성

New -> New Project -> maven (SKD설정) -> GroupId, ArtifactId 설정

GroupId
당신의 프로젝트를 모든 프로젝트 사이에서 고유하게 식별하게 해 주는 것이다.
따라서, groupId에는 네이밍 스키마를 적용하도록 한다.
groupId는 package 명명 규칙을 따르도록 한다.
즉, 최소한 당신이 컨트롤하는 도메인 네임이어야한다.
하위 그룹은 얼마든지 추가가능하다.
ex ) org.apache.maven
org.apache.commons

ArtifactId
버전 정보를 생략한 jar파일의 이름이다.
이름은 원하는 것으로 아무거나 정해도 괜찮다.
단, 소문자로만 작성하도록한다.
단, 특수문자는 사용하지 않는다.
만약 써드 파티 jar 파일이라면, 할당된 이름을 사용해야한다.

 

의존성(Dependency) 추가

https://mvnrepository.com 

 

Maven Repository: Search/Browse/Explore

Kotlin Standard Library JDK 7 extension Last Release on Feb 3, 2021

mvnrepository.com

Spring Dependencies 추가

상위 경로에서 카피해서 복붙하면된다.  <dependencies> ... </dependencies>

 

 

+ Recent posts