블로그 만들기 진행하면서 나오는 이론 정리
1) IoC : Inversion of Controll 제어의 역전
주도권이 스프링에게 있다는 말이다.
<설명하기 전에 알아야 할 개념>
class : 설계도
object : 실체화가 가능한 것
Instance : 오브젝트가 이 세상에 튀어나오는 순간 실체화가 된 것
오브젝트를 new 해서 >> 예 : 의자 s = new 의자(); (의자를 new 했기 때문에 실체화 됨)
heap이라는 공간(을 가리키는 주소 >> s)에 올리게 되면 s는 new를 올린 해당 스택(메서드) 내부에서 관리한다. 그런데 이때, 다른 메소드에서 s를 가져와서 공유하기 힘들다.
그래서 클래스로 만들어 놓은 다양한 오브젝트들(의자, 사자, 기린 등)을 스프링이 스캔해서 이 객체들을 직접 heap 메모리에 띄운다. >> 객체를 스프링이 관리한다 >> IoC
2) DI Dependency Injection 의존성 주입
위에서 스캔한 객체를 내가 원하는 모든 클래스의 메소드에서 가져와서 사용할 수 있다. 즉, 싱글톤으로 관리가 된다. (싱글톤? 스캔하면 딱 한번만 메모리에 뜨고 딱 한번 뜬 의자를 공유해서 쓸 수 있다.)
이때 필요한 곳에서 가겨가서 쓰는 것 >> DI
Git 개념
프로젝트를 Git을 이용해 관리가 가능하다.
1) Git 용어
init : 사진을 찍기 위해 사진사를 고용
add. : 순간의 장면을 사진기로 촬영하는 것(기록). 스냅샷.
push/commit : 사진첩에 보관한다.
Git == 사진첩에 보관된 사진을 원할 때 꺼내서 그 순간을 회상할 수 있다.
2) Git의 3가지 영역
작업영역 : 일반적인 폴더의 느낌. 프로젝트를 만들어서 저장하는 폴더. (시간이 흐르는 장면)
인덱스(Index) : 기능이 완성이 된 후, 한 기능에 대한 스냅샷을 찍음.(add)
헤드 : commit. 사진첩에 스냅샷 옮겨 동기화 하기. (브랜치(가지)가 있고 점이 찍히면서 기록됨) 내가 가리키고 있는 지점을 헤드의 커서가 가리킨다.
Git을 관리하는 방법 >> 위 3가지 영역을 일치시키는 것(동기화)
@RequiredArgsCostructor
private final String name;
이런식으로 붙이는 이유 >> 불변성을 위해서 DB에서 가져오기 위한 것으로 데이터가 변할 필요가 없으면 저렇게 하는데 만약 update 가 필요한 경우 하면 안된다.
@AllArgsConstructor >> 모든 페이지에서 생성자를 만들때
@NoArgsConstructor >> 빈생성자
변수 중에 몇몇의 값을 포함하지 않게 되는 경우, 생성자로 만들어 줄 때는 새로 오버라이딩 해주기 보다는 빌더로 저렇게 만들어주면 된다. 순서를 지키지 않아도 된다.
왜 사용하는지 :
각자 언어가 다를 때, 상대의 언어를 배워서 소통하는게 아니라 공용어를 지정해서 그걸로 소통을 하자는 프로토콜
모든 사람은 데이터를 전송 시 자기나라 언어를 영어로 번역/ 데이터로 응답 받을 때 영어를 자기나라 언어로 번역해서 한다.
자바----------------------자바
java obj를 보내도 이해할 수 있음
자바----------------------파이썬
java obj를 보내면 이해할 수 없음
공용어를 만듦 >> JSON (데이터를 실어 보낸다 : 중간데이터)
자바---------------------파이썬
java obj>>JSON.....JSON>>파이썬obj
통신할 때, 자바오브젝트 >> JSON ; 전송한다는 의미
어떻게 사용할지 :
@Controller에서 Body 데이터를 request 받을 때 Json으로 받는다. >> MIME 타입이 JSON이다 response할 때 자바오브젝트를 Json으로 바꿔서 던져준다.