[스프링- 입문]김영한 입문 강의

박준수·2022년 11월 6일
0

[스프링-입문]

목록 보기
4/4

내가 완강하고 나서 궁금했던 것들을 구글링한것이다.

bulid.gradle :
Project오브젝트(객체)로, Project 오브젝트는 Project 인터페이스를 구현하는 구현체이다. Project 오브젝트는 Project 단위에서 필요한 작업을 수행하기 위해 모든 메서드와 프로퍼티를 모아놓은 슈퍼 객체이다.

  • 기능 : 프로그램으로 필요한 라이브러리를 자동으로 다운로드하고 통합한다. 즉, 라이브러리의 버전 정보를 알 수 있다.

index.html : 스프링 부트에 web 의존성을 추가하고 localhost:8080으로 접근하면 기본적으로 resources 폴더에 있는 static 에 위치한 index.html 파일을 읽게됩니다.

Model 객체 :
Controller에서 생성한 데이터를 담아서 View로 전달할 때 사용하는 객체.

  • Servelt의 request.setAttribute()와 유사한 역할.
  • addAttribute("키", "값") 메소드를 사용하여 전달할 데이터 세팅.

Servlet(서블릿): 자바를 사용하여 웹을 만들기 위해 필요한 기술

스프링 웹 개발 기초

  • 정적 컨텐츠 : 단순히 html 코드를 그대로 출력 시키는 것
    스프링 컨테이너에서 관련 컨트롤러를 찾기 못하고 내장 톰켓 서버는 resources:static/ 폴더 하위에 있는 hello-static.html 을 찾게되고
    토씨하나 바꾸지 않고 그대로 웹브라우저로 전송을 한다.

  • MVC와 템플릿 엔진 : Server에서 html파일로 변형 후 전달

Model : 어플리케이션이 무엇을 할 것인지 정의한다.
View : 화면에 무엇을 보여주기 위한 역할을 한다.
Controller : Model이 데이터를 어떻게 처리할지 알려주는 역할을 한다.
웹 MVC 각 컴포넌트 역할
MVC 구조와 의의
템플릿 엔진 : 서버에서 프로그래밍을 통해 동적으로 바꾸어서 보내주는 역할

  • API : 객체를 주면 json 방식으로 데이터 만들어서 http 응답에 반응함.

일반적인 웹 애플리케이션 계층 구조

  • 컨트롤러: 웹 MVC의 컨트롤러 역할
  • 서비스: 핵심 비즈니스 로직 구현
  • 리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리
  • 도메인: 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨

Getter 와 Setter

스프링 빈과 의존관계

  • 스프링 빈 : 스프링 컨테이너가 관리하는 자바 객체를 빈(bean)이라 한다.
    컨테이너에서의 관리를 통해 객체를 여러번 생성할 필요가 없고, 공용으로 사용할 수 있다.

1. 컴포넌트 스캔 원리

@Component 를 포함하는 @Controller, @Service, @Repository도 스프링 빈으로 자동 등록된다.
생성자에 @Autowired 가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다. 이렇게 객체 의존관계를 외부에서 넣어주는 것을 DI (Dependency Injection), 의존성 주입이라 한다.
스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록한다(유일하게 하나만 등록해서 공유한다) 따라서 같은 스프링 빈이면 모두 같은 인스턴스다.

2. 자바 코드를 통한 직접 등록

주로 정형화 되지 않거나, 상황에 따라 구현 클래스를 변경해야 하는 경우에 사용한다.

DI란: 객체간의 의존성을 자신이 아닌 외부에서 주입해 주는 것이다.

repository에서 db와 연결할 때 ->

  • 순수 JDBC : 겁나 복잡하고 같은 코드 반복
  • JDBCtemplate : 같은 코드 반복 없애재민 SQL문 사용
  • JPA : JPA는 기존의 반복 코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행해준다.
    • JPA를 사용하면, SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환을 할 수 있다.
    • JPA를 사용하면 개발 생산성을 크게 높일 수 있다.

JPA란 JAVA에서 관계형 DB를 사용하는 방식을 정의한 인터페이스.

스프링 데이터 JPA : 리포지토리에 구현 클래스 없이 인터페이스 만으로 개발을 완료할 수 있음. 그리고 반복 개발해온 기본 CRUD 기능도 스프링 데이터 JPA가 모두 제공함.따라서 개발자는 핵심 비즈니스 로직을 개발하는데, 집중할 수 있다.

AOP(관점 지향 프로그래밍) : 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다.

  • AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미다. 이때, 소스 코드상에서 다른 부분에 계속 반복해서 쓰는 코드들을 발견할 수 있는 데 이것을 흩어진 관심사 (Crosscutting Concerns)라 부른다. 

  • 흩어진 관심사를 Aspect(부가기능을 모듈화함)로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지다.

profile
방구석개발자

0개의 댓글