23.04.17(Spring)

MH S·2023년 4월 17일

Spring

목록 보기
4/13

직렬화

  • 객체를 데이터 스트림으로 만드는 것

역직렬화

  • 스트림을 객체로 만드는 것

직렬화와 역직렬화를 하는 이유

  • 다른 기종간의 데이터 송수신

프레임워크를 쓰는 이유
협업 > 구조가 같으니 협업이 쉬움
안정성 > 확인해야할 사항들을 프레임워크가 체크함
보안 > 웹 관련 공격을 막을 방법을 미리 세팅해 놓음
신입 > 가이드가 없으면 신입은 코드를 짜기가 어려움

메타 / 합성 어노테이션
메타 어노테이션 : 어노테이션에 붙을 수 있는 어노테이션
합성 어노테이션 : 어노테이션을 여러개 붙인 것

실습

https://start.spring.io/

설정 후 다운받고 vscode 로 실행

위 파일 실행시 포트 번호를 쓰고 있을 경우

다음 경로의 파일을 클릭 후

위와 같이 포트를 수정후 BeanApplication.java 실행

다음과 같이 화면이 나옴.


라이브러리 다운 경로

Spring Bean

스프링 어노테이션 - Bean 등록

@Bean - 외부 라이브러리 객체
@Component - 내가 만든 객체
@Configuration - 설정
@Controller - 주소 매핑
@Service - 비지니스 로직
@Repository - db,데이터소스
@Autowired - 타입으로 주입(없으면 이름으로), setter/생성자/필드

private -> 객체가 생성되고 나서 setter 로 수정 가능
private final -> 객체가 생성되고나서 변경 불가능

TempConfig.java

package com.example.bean;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.fasterxml.jackson.databind.ObjectMapper;

@Configuration
public class TempConfig {
    @Bean
    public ObjectMapper objectMapper() {
        // 객체를 JSON으로
        // JSON을 객체로 만듬
        return new ObjectMapper();
    }

}

TempController.java

package com.example.bean;

import java.util.ArrayList;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

@Controller
public class TempController {

    private final TempComponent tempComponent;
    private final ObjectMapper objectMapper;

    public TempController(TempComponent tempComponent, ObjectMapper objectMapper) {
        this.tempComponent = tempComponent;
        this.objectMapper = objectMapper;
    }

    @GetMapping
    @ResponseBody
    public String temp() throws JsonProcessingException {
        tempComponent.print();
        String writeValueAsString = objectMapper.writeValueAsString(new ArrayList<>());
        System.out.println(writeValueAsString);
        return "안녕하세요";
    }
}

tempComponent.java

package com.example.bean;

import org.springframework.stereotype.Component;

@Component
public class TempComponent {

    public void print() {
        System.out.println("작동확인");
    }
}

결과 화면


스프링 IOC 컨테이너가 관리
ComponentScan 으로 Bean/ Component 를 찾아서 객체를 생성
생성한 객체를 필요한 곳에 알아서 놓어준다. DI

Arm.java

package com.example.bean;

import org.springframework.stereotype.Component;

@Component
public class Arm {
    String name = "팔";
}

Leg.java

package com.example.bean;

import org.springframework.stereotype.Component;

@Component
public class Leg {
    String name = "다리";
}

Robot.java

package com.example.bean;

import org.springframework.stereotype.Component;

@Component
public class Robot {
    private final Arm arm;
    private final Leg leg;

    public Robot(Arm arm, Leg leg) {
        this.arm = arm;
        this.leg = leg;
    }

}

TempController.java

package com.example.bean;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.fasterxml.jackson.core.JsonProcessingException;

@Controller
public class TempController {

    @Autowired
    private Robot robot;

    @GetMapping
    @ResponseBody
    public String temp() throws JsonProcessingException {
        System.out.println(robot.toString());
        return "안녕하세요";
    }
}

결과 화면

0개의 댓글