🎨 Programming/Spring

[Spring] 개념 및 Spring BooT

ryang x2 2020. 11. 3. 18:42
728x90
반응형

# EJB(Enterprise JavaBeans) 

- 동시 접속자수가 10,000이상 사이트 구축시 고려하는 컴퍼넌트 기술입니다. 

- 안정적인 트랜젝션이 필요한 사이트 구축시 사용합니다.

- 접속자수가 많은 공공기관, 기상청, 병무청, 금융... 기업등에서 집중적으로 사용합니다. 

- 속도는 느리지만 개발자에게 많은 자동화된 기능을 제공해서 분산 시스템 구축을 쉽게 해줍니다. 

- 기초기술(JSP, BEANS, Servlet, Trasnsaction, Connection Pooling)을 알아야 EJB를 사용할 수 있습니다. 

- Weblogic, zeus등을 주로 사용합니다. 

 

● 단점

- 복잡한 프로그래밍 모델을 사용합니다. 

- 필요없이 중복 또는 종속적인 코드가 많이 발생합니다. 

- 객체지향이지 않습니다. 

- 개발 생산성이 떨어집니다. 


# Spring 

- 쿠기와 부하 측면에서 경량급 컴퍼넌트입니다. 

- 확장이 높습니다. 

- 의존성 주입(DI)을 지원합니다. 

- 애플리케이션 객체의 생명 주기와 설정을 포함하고 관리한다는 점에서 일종의 컨테이너라고 부르기도 합니다. 

- 간단한 컴포넌트로 복잡한 애플리케이션을 구성하고 설정할 수 있습니다. 

 

 단점

- 따로 배워야합니다. 

- 초기세팅이 어렵습니다. 

 

# Spring BooT

스프링 프레임워크를 사용하는 프로젝트를 간편하게 설정할 수 있는 스프링 프레임워크 서브 프로젝트라고 할 수 있습니다. 

 

 특징

- 단독 실행 가능한 스프링 애플리케이션을 생성합니다. 

- 최소한의 초기 스프링 구성으로 가능한 빨리 시작하고 실행할 수 있도록 설계되었습니다. 

- 웹 컨테이너를 내장하고 있어 최소한 설정으로 쉽게 웹 어플리케이션을 만들 수 있습니다. 

 

 주소 관련 Annotation

@RestController : 적용된 CLASS가 REST API로 동작 하도록 설정합니다. 

@RequestMapping : 외부에 주소를 노출하는 지 설정합니다. 

* @RequestMapping, @Controller, HTTP GET, POST, PUT, DELETE등 적용 가능. method를 지정하지 않으면 전부 동작합니다. 

 

@GetMapping : RequestMapping method를 분리한 하위 개념으로 Get Method에만 동작합니다.

@PostMapping : RequestMapping method를 분리한 하위 개념으로 Post Method에만 동작합니다.(insert 할 때)

@PutMapping : RequestMapping method를 분리한 하위 개념으로 Put Method에만 동작합니다.(update 할 때 - @PatchMapping 포함)

@DeleteMapping : RequestMapping method를 분리한 하위 개념으로 Delete Method에만 동작합니다.

 

★ 스프링 부트는 객체를 리턴하면 자동으로 JSON라이브러리가 JSON형식으로 출력합니다. 

 

예시 1)

@RestController
@RequestMapping("/api") // localhost:8080/api
public class GetController {

    // localhost:8080/api/getMethod
    @RequestMapping(method= RequestMethod.GET, path = "/getMethod")
    public String getRequest(){
        return "getMethod 호출";
    }
}

예시 2)

@RestController
@RequestMapping("/api") // localhost:8080/api
public class GetController {

    // localhost:8080/api/getParameter?id=apple&pass=1234
    @GetMapping("/getParameter")
    public String getPara(@RequestParam String id, @RequestParam String pass){
        System.out.println("id : " + id);
        System.out.println("pass : " + pass);
        return "getPara() 호출";
    }
}

console

예시 3)

/*
        id
        name
        email
        age
     */

    // localhost:8080/api/getMultiParameter?id=apple&name=김사과&email=apple@apple.com&age=20
    @GetMapping("/getMultiParameter")
    public String getMultiPara(
            @RequestParam String id, @RequestParam String name,
            @RequestParam String email, @RequestParam int age
    ){
        System.out.println("id : " + id);
        System.out.println("name : " + name);
        System.out.println("email " + email);
        System.out.println("age " + age);
        return "ok";
    }

console

예시 4) 객체로 만들어보기

package com.koreait.day1.model;

public class MultiParam {
    String id;
    String name;
    String email;
    int age;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
    // localhost:8080/api/getMultiParameter?id=apple&name=김사과&email=apple@apple.com&age=20
    @GetMapping("/getMultiParameter")
    
    public MultiParam getMultiPra(MultiParam multiParam){ // 한개일때는 @RequestParam 써주지않아도된다!
        System.out.println("id : " + multiParam.getId());
        System.out.println("name : " + multiParam.getName());
        System.out.println("email " + multiParam.getEmail());
        System.out.println("age " + multiParam.getAge());
        return multiParam;
    }
}

* 스프링 부트는 객체를 리턴하면 자동으로 JSON라이브러리가 JSON형식으로 출력합니다. 

 

 

예시 5) POST 방식으로 받을 시

package com.koreait.day1.controller;

import com.koreait.day1.model.MultiParam;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api")
// "/api" - 메소드의 mapping되는 주소만 다르면 된다 // 주소가 같더라도 메소드형식만 다르면된다.
public class PostController {
//    localhost:8080/api/postMethod
    @PostMapping(value = "/postMethod")
    public MultiParam postMethod(@RequestBody MultiParam multiParam){
        // RequestBody : POST는 데이터를 받을 때 body를 통해서 받기 때문에 이름이 body 이다

        return multiParam;
    }
}

 

 

 

 

 

728x90
반응형