[스프링]입문

박준수·2022년 10월 27일
0

[스프링-입문]

목록 보기
1/4
  1. 스프링은 프레임워크다.
  2. 스프링은 오픈소스이다.
  3. 스프링은 IOC 컨테이너를 가진다.
  • IOC란 ...
    Inversior of Controll => 제어의 역전
    자바에서는 new를 썻는데 새로운 공간을 계속 만들고 싶지않아!!
  • 개발자가 가지고 있는(만들어놓은) 수많은 object를 Spring이 이 object들을 읽어서 heap메모리 공간에 띄운다. (스프링이 관리)

원래는 A객체에서 B객체에 있는 메소드를 사용하고 싶으면 B객체를 직접 A객체 내애서 생성하고 메소드를 호출한다. 하지만 IOC가 적용된 경우, 객체의 생성을 특별한 관리 위임 주체에게 맡긴다. (짬때리기) 이 경우 사용자는 객체를 직접 생성하지 않고, 객체의 생명주기를 컨트롤하는 주체는 다른 주체가 된다.

클래스 내부의 객체 생성 -> 의존성 객체의 메소드 호출에서

스프링에게 제어를 위임하여 스프링이 만든 객체를 주입 -> 의존성 객체의 메소드 호출


  • DI란...
    Dependency injection => 의존성 주입
  • heap메모리에 띄어진 object를 여기저기서 가져다 쓸 수 있다.
  1. 스프링은 엄청나게 많은 필터를 가지고 있다.
  • 필터란 ...
  • 권한이 있으면 들어보네주고 없으면 안돼!
    스프링 컨테이너 --> 인터셉터(AOP)
  1. 스프링은 엄청나게 많은 어노테이션을 가지고 있다(리플렉션, 컴파일 체킹)

컴파일 체킹이란 ...
어노테이션(주석 + 힌트) <- 컴파일러가 무시하지 않음
@overiding이 되어있으면 컴파일러가 부모 클래스에 맞는 메소드가 있는지 확인 없으면 에러 --> 컴파일 체킹

  • 프링에서의 어노테이션 --> 객체 생성

ex)
@component -> 클래스/ 메모리에 로딩 (IOC 스캔해서 heap메모리에 올림)
@Autowired -> 로딩된 객체/ 해당 변수에 집어넣어
힙 메모리에 object를 쭉 읽다가 같은 오브젝트가 있다면 DI!

클래스를 스캔(읽어들일때)할 때 분석(리플렉션)을 한다. 이때 메서드 , 필드, 어노테이션의 유무를 체킹하는데 그 후 있다면 '무엇'인가를 해라 라고 설정 할 수도 있다.
리플렉션은 런타임시 분석


  1. 스프링은 MessageConverter를 가지고 있다. 기본값은 현재 Json이다.

자바 프로그램 -> JSON -> 파이썬 프로그램


  1. 스프링은 BufferedReader, BufferedWriter을 쉽게 상용할 수 있다.

Byte Stream(1byte:8bit)으로 통신을 할 때 문자열로 가변길이의 문자를 받을 수 있다.

@RequestBody --> BufferedReader
@ResponseBody --> BufferedWriter


그외...

Spring Bean

Spring에서는 직접 new를 이용하여 생성한 객체가 아니라 Spring에 의하여 관리당하는 자바 객체를 사용한다. 이렇게 Spring에 의하여 생성되고 관리되는 자바 객체를 Bean이라고 한다.

Spring Bean을 Spring IOC Container에 등록하는 방법

  1. 자바 어노테이션을 사용한다.
  • @Component Annotation이 등록되어 있는 경우에는 Spring이 Annotation을 확인하고 자체적으로 Bean 으로 등록합니다.
@Controller
public class HelloController {
    // Http Get method 의 /hello 경로로 요청이 들어올 때 처리할 Method를 아래와 같이 @GetMapping Annotation을 사용하여 Mapping을 사용할 수 있습니다.
    @GetMapping("hello")
    public String hello(Model model){
        model.addAttribute("data", "This is data!!");
        return "hello";
    }
}
  1. Bean Configuration File에 직접 Bean 등록하는 방법
  • @Configuration과 @Bean Annotation 을 이용하여 Bean을 등록할 수 있습니다.
@Configuration
public class HelloConfiguration {
    @Bean
    public HelloController sampleController() {
        return new SampleController;
    }
}

DAO(Data Access Object) : 데이터베이스의 data에 접근하기 위한 객체

  • DataBase에 접근하기 위한 로직 & 비지니스 로직을 분리하기 위해 사용한다.

DTO(Data Transfer Object) : 계층 간 데이터 교환을 하기 위해 사용하는 객체

  • 유저가 입력한 데이터를 DB에 넣는 과정
    • 유저가 자신의 브라우저에서 데이터를 입력하여 form에 잇는 데이터를 DTO에 넣어서 전송한다.
    • 해당 DTO를 받은 서버가 DAO를 이용하여 데이터베이스로 데이터를 집어넣는다.

VO(Value Object) 값 오브젝트

스프링에서 자주 쓰이는 어노테이션

REST API : http에 요청을 보낼때 어떤 uri를 사용할지 어떤 메소드를 사용할지에 대한 약속, 규칙, 형식

Annotation : 메타-테이터(Meta-Data) -> 데이터를 위한 데이터를 의미하며, 풀어 이야기하면 한 데이터에 대한 설명을 의미하는 데이터. (자신의 정보를 담고 있는 데이터)

"이 속성을 어떤 용도로 사용할까, 이 클래스에게 어떤 역할을 줄까?"를 결정해서 붙여준다고 볼 수 있습니다.
이 기능을 잘 활용한다면, 비즈니스 로직과는 별로도 시스템 설정과 관련된 부가적인 사항들은 @(어노테이션)에게 위임하고 개발자는 비즈니스 로직 구현에 집중할 수 있습니다.

profile
방구석개발자

0개의 댓글