직렬화
역직렬화
직렬화와 역직렬화를 하는 이유
프레임워크를 쓰는 이유
협업 > 구조가 같으니 협업이 쉬움
안정성 > 확인해야할 사항들을 프레임워크가 체크함
보안 > 웹 관련 공격을 막을 방법을 미리 세팅해 놓음
신입 > 가이드가 없으면 신입은 코드를 짜기가 어려움
메타 / 합성 어노테이션
메타 어노테이션 : 어노테이션에 붙을 수 있는 어노테이션
합성 어노테이션 : 어노테이션을 여러개 붙인 것

설정 후 다운받고 vscode 로 실행

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

다음 경로의 파일을 클릭 후

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

다음과 같이 화면이 나옴.

라이브러리 다운 경로
스프링 어노테이션 - Bean 등록
@Bean - 외부 라이브러리 객체
@Component - 내가 만든 객체
@Configuration - 설정
@Controller - 주소 매핑
@Service - 비지니스 로직
@Repository - db,데이터소스
@Autowired - 타입으로 주입(없으면 이름으로), setter/생성자/필드
private -> 객체가 생성되고 나서 setter 로 수정 가능
private final -> 객체가 생성되고나서 변경 불가능
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();
}
}
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 "안녕하세요";
}
}
package com.example.bean;
import org.springframework.stereotype.Component;
@Component
public class TempComponent {
public void print() {
System.out.println("작동확인");
}
}


스프링 IOC 컨테이너가 관리
ComponentScan 으로 Bean/ Component 를 찾아서 객체를 생성
생성한 객체를 필요한 곳에 알아서 놓어준다. DI
package com.example.bean;
import org.springframework.stereotype.Component;
@Component
public class Arm {
String name = "팔";
}
package com.example.bean;
import org.springframework.stereotype.Component;
@Component
public class Leg {
String name = "다리";
}
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;
}
}
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 "안녕하세요";
}
}
