7.springBoot/1)개념_springBoot

springBoot_개념_Day_02

구이제이 2024. 4. 3. 15:38

1.인텔리제이 shop

2

3

4.

 

5. 

6.

7. html5 

8.






요청 > 컨트롤러 > 서비스 > 레포지토리 > DB

 

서비스 + 레포지토리 = DAO

DTO

 

ㅡㅡ

 

#관심사의 분류 

DTO

DAO

서비스




JDBC - DAO처리 - DB (DTO는 수레)

JDBC는 하나에 싹들어가있습니다.

그러나, 스프링부트느 



하나에 다들어가있으면 전체가 수정해야되는 어려움

스프링부트는 관심사의 분류를 시키는 것

 

자주사용하는 것

핵심인데 변경안되는 것

자주변경해야하는 것(화면뷰, 나머지 회원 일처리는 자주안바뀐다.)

 

ㅡ자주쓰는 것, 자주쓰지 않는 것

ㅡ입력과 출력

 

관심사의 분류(JDBC가 밑에 것을 하나로 처리했다면, 지금은 분류해서 씁니다.)

1.입력

2.처리

3.출력

 

최소의 효율로 전체적인 이득을 취하는 코딩




#

 

프래임(공통적으로 쓰는것, 레포지토리의 각각의 것들의 공통을 모아놓았습니다.)

레포지토리

서비스

 

스프링빈(스프링컨테이너에서 생성되고 관리되는 객체)

 

1.스프링 빈(Bean)

스프링 IoC(Inversion of control, 제어의 역전)

프레임워크는(IOC컨테이너는) 생성되고 관리 해주는다.

개발자는 주입만 해주고 받기만한다.

IoC 컨테이너가 애플리케이션의 객체를 관리하고 필요한 곳에 

주입(DI, Dependency Injection)

 

스프링 빈을 정의 - xml, annotation, 자바설정 클래스 등을 사용

 

#

한 클래스를 레포지지토리로만들고 인터페이스로 만들면,

스프링이 구현객체를 만들어서 우리가필요한 곳에 주입시킨다.



2. SQL 맵퍼(mapping - DB와 자바 객체간에 맵핑을 담당)

 

mapping - DB와 자바 객체간에 맵핑을 담당

(프레임워크, 라이브러리)

 

sql쿼리를 자바코드에서 분리하여 관리(관심사의 분리)

한사람의 자료(레코드)를 자바객체에 맵핑을 해줍니다.

db테이블에 레코드를 자바 객체로 맵핑하는 기능을 제공하는것이 SQL맵퍼

 

sql맵퍼는 (Mybatis, Hibernate(JPA구현한 객체), …..) 등이 있습니다.

 

메소드 호출( insert(), select(), …)  통해서 쿼리를 실행

구현객체는 개발자가x 스프링 프레임워크가 ioc컨테이너 의해서 객체를 생성한다.

스프링이기능으로 만들어줌, 만들어진 결과만 주입하고 받아오면 되는 개발자.

(스프링이 interface CartRepository 이런 형태로 된것들을 만든다.)

 




Mapper=repogitory

Integer는 맵퍼클래스, 포장해논객체, (int는 아닙니다.)

selectAll(searchAll, findAll)

 

#

스프링이 인터페이스에 

이 메소드 추상메소드를 맵퍼한테 던저줍니다. 맵퍼는 메소드를 보고 처리한다.



#

맵퍼(=레포지토리)는 항상 인터페이스로만 구현해야됩니다.

 





DAO역할을 분리하는 frame과 repository(반드시인터페이스)

service는 서비스 역할합니다.(서비스는 반드시 클래스)




솔리드원칙(SOLID)

1.단일책임의원칙

2.

3.

4.인터페이스분리원칙

5.

 

하나의 클래스와 하나의 메소드는 하나의 책임만 담당한다.



#

인터페이스분리원칙

묶어서 사용 - 중복을 제거하자

이것은 조금만이라도 달라도 분리하자라는 원칙

한 부분이라도 다른 부분이 있다면, 분리하자

 

#

인터페이스를 왜쓰는가?

다형성을 만들수있고, 

개발은 급하게 해달라고 하는데, 결정은 안해줄떄, 인터페이스로 이용해서 처리

인터페이스는 주 기능을 결정

역할과 기능을 정확하게 구분해준다.

 

#

인터페이스를 상속받으려면 extend

인퍼페이스를 구현하려면 implement



#

익명구현객체




mybatis 설명



<!DOCTYPE mapper

    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

    "https://mybatis.org/dtd/mybatis-3-mapper.dtd">











  1. 스프링 빈(Bean)

        스프링 IoC(Inversion of Control, 제어의 역전) 컨테이너에 의해 생성되고

        관리되는 객체

        IoC 컨테이너가 애플리케이션의 객체를 관리하고 필요한 곳에 주입(DI, Dependency Injection)

        스프링 빈을 정의 - xml, annotation, 자바설정 클래스 등을 사용

 

  2. SQL 매퍼(Mybatis, Hibernate,...)

       db와 자바 객체 간의 매핑을 담당하는 역할을 하는 프레임워크 또는 라이브러리

       sql쿼리를 자바 코드에서 분리하여 관리

       db 테이블의 레코드를 자바 객체로 매핑하는 기능을 제공

       메소드 호출을 (insert(), select()...)통해서 쿼리문을 실행

 

  3. 비즈니스 로직 : 업무의 핵심을 담당

                애플리케이션에서 특정한 업무나 기능을 수행하기 위해 필요한 처리와 규칙

                데이터를 처리, 계산, 검증, 변환, 유효성을 검사

                애플리케이션이 실제로 서비스를 실행할 때 필요한 로직

  4.  서비스 계층

            컨트롤러 한테 요청 받아서 해당 요청에 대한 비즈니스 로직을 수행하고

            데이터 액세스 계층을 통해서 데이터를 처리한 후 결과를 반환하는 역할

 

5. @Service

        해당 클래스가 서비스 계층(Service Layer)의 구현체임을 나타냄

        서비스 빈

        스프링의 IoC(Inversion of Control) 컨테이너가 이를 스캔해서 빈으로 등록하고 관리

        주로 controller와 데이터 액세스 계층(DAO, repository)간의 중간 단계로서

         비즈니스 로직을 수행하고 데이터 처리를 담당

         해당 클래스의 인스턴스(객체)를 필요로 하는 곳에 의존성 주입(Dependency Injection)을

         통해 사용

 

6. @Autowired

        스프링 프레임워크에서 사용되는 의존성 주입(Dependency Injection)을 자동화

        1) 필드 주입 : 의존성을 주입할 필드에 @Autowired 사용

                    의존성이 하나일 때 주로 사용

        2) 생성자 주입(Constructor Injection) : 의존성을 주입할 생성자에 @Autowired 사용

                주로 의존성이 여러 개일 때 사용되며, 의존성 주입을 보장하기 위해 권장되는 방식

        3) 세터 주입(Setter Injection) : 의존성을 주입할 세터 메소드에  @Autowired 사용

                이 방식은 선택적인 의존성을 가질 때 사용

7. @Repository : 스프링 프레임워크에서 사용, DAO 클래스

            스프링이 예외 처리와 트랜잭션 관리를 포함한 다양한 기능을 지원

             자동 빈 등록 : 스프링의 컴포넌트 스캔 기능을 이용해서 @Repository이

             붙은 클래스들을 빈으로 자동 등록

             db나 외부 API와의 상호 작용을 담당하는 클래스에 사용

 

 8. @Mapper

        마이바티의 xml mapper 파일과 대응되는 mapper interface를 나타냄




#스프링부트가 구동되는 원리