noSQL
프론트 랭귀지는 다를 수 있음
직접적으로 sql은 쓰지 않을 수 있음
프론트 백앤드 둘 다 가능 자바스트립트
엔진이 다름 프론트 : 리액트 등등
백엔드 : ?
package com.example.di_aop.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
//view가 없음 , 리턴타입이 문자열
//프로그램의 결과물을 view로 던지는게 아니고 클라이언트한데 객체를 보냄
//클라이언트는 객체를 이해 못함
//공인된 xml,json 포멧 으로 보내줘야함
//자바객체 -> 다른 랭귀지 (C#) 이해못함
//객체를 xml문자 포맷으로 보내주면 xml을 다시 C#객체로 바꿀 수 있다
//자바스크립트가 나온 후에 json
//json 방식을 사용 왜냐 그렇게 방대한 데이터를 가지고 오지 않으니까
@RestController
public class DIController {
@GetMapping("/home")
public A home() {
return new A();
}
}
class A{
public int x;
public int y;
}


서로간에 호출 -> 의존
s2가 s1에 의존
딸 아빠로 생각
딸이 아빠를 호출 (용돈달라고)
아빠가 있어야 딸이 있음(강한 결함)
아빠가 완성되어 있어야함 => s2가 완성되어 있어야 함
학생이 강사한테 의존
강사가 있어야 학생이 태어나는건 아님(약한 결합)
협업이 중요해지면서 모듈화 -> 약한결합으로 만들어져야함
완전의존적인 코드

Cat이 완성되지 않으면 Person이 에러남
여기서 의존성을 줄인다는건 -> 디커플링
new 뒤에는 무조건 생성자가 옴 -> 결합도가 높아짐
Cat이 없다는건

package com.example.di_aop.s2;
public interface Animal {
void move();
}
Animal 인터페이스가 있기때문에 Cat 이 dog로 바껴도 Person class의 코드가 바뀌지 않아도 됨 -> 결합도가 낮아짐
new 연산자를 없앤다 -> 외부에서 주입한다
API - Animal, Cat, Person 을 묶에서 주는 것(패킹)을 jar파일
자바객체지향을 어디서 썻는지 -> 의존성을 낮추기 위해 사용(인터페이스 문법)
package com.example.di_aop.s1;
import com.example.di_aop.s2.Animal;
//딸
public class Person {
Animal a;
public void walk() {
//Cat과 결합도를 낮추기 위해 Cat데이터 타입 사용X <-- interface로 해결
a.move();
}
public Person() {}
//Cat과 결합도를 낮추기 위해 Cat()생성자 사용 X
//cat에 의존하지 않기 때문에 null point 발생가능
//호출하는 곳에서 DI를 사용할 수 있도록 생성자를 제공
public Person(Animal a) {
this.a = a; //cat 을 주입할 수 있도록 코드추가
}
}
package com.example.di_aop.s1;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.di_aop.s2.Cat;
@RestController
public class PersonController {
@GetMapping("/person")
public String Person() {
Person p = new Person(new Cat());//생성자를 통해서 DI
p.walk();
return "yes";
}
}
Spring에서
interface를 통해서 접근해야한다는건 변함 없음
대신 생성자, setter 대신 @Autowired사용
주입될 객체가 이미 존재해야한다(Spring에서는 bean)
Component 가 붙어있는 클래스
Component 애노테이션 -> 컨트롤러, 서비스, 레파지토리(대신 Mapper)
Spring에도 dao가 있어야하지만 mybatis를 사용하기 때문에 Mapper사용
Spring : DI, AOP(관점지향프로그램 특정 메소드가 호출되기 전에 호출할 수 있고 후에 호출할 수도 있음 왜 안쓰냐 1.SMVC에는 필터가 있어서 -> 또, 웹에서는 특정한 메소드를 호출할 일이 거의 없음 대부분 doGet, doPost를 가로채니깐.. 2.AOP를 자동으로 구현할 수 있는 API가 있음 intercepher인터셉트)
SpringMVC : 서블릿 안쓰려고
MB
필터는 서블릿을 가로챔
인터셉터는 컨트롤러를 가로챔
둘 다 요청을 가로챔
AOP는 메소드를 가로챔
AOP관련 라이브러리
org.springframework.boot
spring-boot-starter-aop