내가 완강하고 나서 궁금했던 것들을 구글링한것이다.
bulid.gradle :
Project오브젝트(객체)로, Project 오브젝트는 Project 인터페이스를 구현하는 구현체이다. Project 오브젝트는 Project 단위에서 필요한 작업을 수행하기 위해 모든 메서드와 프로퍼티를 모아놓은 슈퍼 객체이다.
index.html : 스프링 부트에 web 의존성을 추가하고 localhost:8080으로 접근하면 기본적으로 resources 폴더에 있는 static 에 위치한 index.html 파일을 읽게됩니다.
Model 객체 :
Controller에서 생성한 데이터를 담아서 View로 전달할 때 사용하는 객체.
Servlet(서블릿): 자바를 사용하여 웹을 만들기 위해 필요한 기술
스프링 웹 개발 기초
정적 컨텐츠 : 단순히 html 코드를 그대로 출력 시키는 것
스프링 컨테이너에서 관련 컨트롤러를 찾기 못하고 내장 톰켓 서버는 resources:static/ 폴더 하위에 있는 hello-static.html 을 찾게되고
토씨하나 바꾸지 않고 그대로 웹브라우저로 전송을 한다.
MVC와 템플릿 엔진 : Server에서 html파일로 변형 후 전달
Model : 어플리케이션이 무엇을 할 것인지 정의한다.
View : 화면에 무엇을 보여주기 위한 역할을 한다.
Controller : Model이 데이터를 어떻게 처리할지 알려주는 역할을 한다.
웹 MVC 각 컴포넌트 역할
MVC 구조와 의의
템플릿 엔진 : 서버에서 프로그래밍을 통해 동적으로 바꾸어서 보내주는 역할
1. 컴포넌트 스캔 원리
@Component 를 포함하는 @Controller, @Service, @Repository도 스프링 빈으로 자동 등록된다.
생성자에 @Autowired 가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다. 이렇게 객체 의존관계를 외부에서 넣어주는 것을 DI (Dependency Injection), 의존성 주입이라 한다.
스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다(유일하게 하나만 등록해서 공유한다) 따라서 같은 스프링 빈이면 모두 같은 인스턴스다.
2. 자바 코드를 통한 직접 등록
주로 정형화 되지 않거나, 상황에 따라 구현 클래스를 변경해야 하는 경우에 사용한다.
DI란: 객체간의 의존성을 자신이 아닌 외부에서 주입해 주는 것이다.
repository에서 db와 연결할 때 ->
JPA란 JAVA에서 관계형 DB를 사용하는 방식을 정의한 인터페이스.
스프링 데이터 JPA : 리포지토리에 구현 클래스 없이 인터페이스 만으로 개발을 완료할 수 있음. 그리고 반복 개발해온 기본 CRUD 기능도 스프링 데이터 JPA가 모두 제공함.따라서 개발자는 핵심 비즈니스 로직을 개발하는데, 집중할 수 있다.
AOP(관점 지향 프로그래밍) : 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다.
AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미다. 이때, 소스 코드상에서 다른 부분에 계속 반복해서 쓰는 코드들을 발견할 수 있는 데 이것을 흩어진 관심사 (Crosscutting Concerns)라 부른다.
흩어진 관심사를 Aspect(부가기능을 모듈화함)로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지다.