이론적인 부분 및 core2로 JPA맛보기

전영덕·2023년 4월 29일
0

Springboot

목록 보기
2/13

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

  • 컨트롤러 : 웹 MVC의 컨트롤러 역할
  • 서비스 : 핵심 비즈니스 로직 구현
  • 레퍼지터리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리한다.
  • 도메인 : 비즈니스 도메인 객체

Core2 프로젝트 시작 및 셋팅하는 법

  • 근데 이건 전체JPA까지 알아보는 맛보기이다. 세부적으로는 다음에 배운다. 그러니까 일단 넘어가자.

  • 어제와 같이 만들고 가져와서 알집풀기후 임포트하기까지는 똑같다

  • 그다음 com.codingbox.core2 > application properties 어제꺼 복사후 저장 : save as UTF-8로 저장
    static > index.html만든다.
    Boot Dashboard에서 core2 스타트한다.

2. MemberController

  • 생성자에 @Autowired가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다.
  • 이렇게 객체 의존관계를 외부에서 넣어주는 것을 DI (Dependency injection)의존성 주입이라 한다.
  • 이전에는 개발자가 직접 주입했고, 여기서는 @Autowired에 의해 스프링이 주입해준다.

3. 제어역전(기술면접에도 나옴, 정보처리기사에도 나옴)

  • IoC : Inversion of Control
  • 개발자가 프레임워크의 기능을 호출하는 형태가 아니라 프레임워크가 개발자의 코드를 호출하기 때문에, 개발자는 전체를 직접 구현하지 않고 자신의 코드를 부분적으로 "끼워넣기"하는 형태로 구현할 수 있다.
  • 프레임워크가 객체의 생성, 소멸과 같은 라이프 사이클을 관리하며, 스프링으로부터 필요한 객체를 얻어올 수도 있다.
  • 객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 하여 가독성 및 코드 중복, 유지보수를 편하게 할 수 있게 한다.

4. Spring Container

  • 스프링 컨테이너는 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공하는 역할을 합니다.
    여기서 말하는 자바 객체를 스프링에서는 빈(Bean)이라고 부른다.
  • 개발자는 객체를 생성하고 소멸할 수 있는데, 스프링 컨테이너가 이 역할을 대신해 준다. 즉, 제어의 흐름을 외부에서 관리한다.
  • 또한, 객체들 간의 의존 관계를 스프링 컨테이너가 런 타임 과정에서 알아서 만들어준다.
  • 스프링은 실행 시 객체들을 담고있는 Container가 있다. 그게 스프링 컨테이너다.

// jsp할때는 서버가 일단 올라간다음 이것저것 누르다가 에러가 났다면 , 여기에서는 서버에 올리자마자 뭔가 오류가 있는 것을 알 수 있다.

5. @Autowired

  • 필요한 의존 객체의 "타입"에 해당하는 Bean을 찾아 주입한다. 기본 값이 true이기 때문에 의존성 주입을 할 대상을 찾지 못한다면 애플리케이션 구동에 실패한다.

6. POJO

  • Plain Old Java Object : 단순한 자바 오브젝트
  • 객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고 필요에 따라 재활용 될 수 있는 방식으로 설계된 오브젝트를 말한다.

7. 컴퍼넌트 스캔의 대상

  • component scan의 대상은 main메서드가 있는 class의 동일 패키지 또는 하위 패키지만 Spring이 scan을 하는 대상이 된다.

// 어노테이션 컨트롤러 , 서비스, 레퍼지토리는 각각 ctrl눌러서 눌러보면 모두 @component라고 되어있다.
// @component에 의해 spring contatiner에 담기게 된다.

8. DI 3가지 방법

  • Field Injection (필드 주입)
  • Setter Injection (수정자 주입)
  • Constructor Injection (생성자 주입) : 제일 권장하는 방법은 이것이니까 위에 2개는 잊어버려도 당장은 괜찮다. 위에코드를 보게되면 잘못됐다!라고해도됨

DBMS계정추가하기 - cmd

Microsoft Windows [Version 10.0.19044.2846]
(c) Microsoft Corporation. All rights reserved.

C:\Users\전영덕>sqlplus system/1234

SQL*Plus: Release 11.2.0.2.0 Production on 금 4월 14 12:46:02 2023

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL> create user spring identified by spring;

User created.

SQL> grant connect, resource to spring;

Grant succeeded.
  • 계정 만들고 디비버에서 table 만들어준다

jdbc라이브러리를 땡겨와야하니까 build.gradle에 추가한다.
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation group: 'com.oracle.database.jdbc', name: 'ojdbc6', version: '11.2.0.4'
이렇게 2줄 추가해준다.

DB커넥션을 맺는 여러가지 방법중에 하나를 쓸것이다

스프링 부트에서도 MyBatis쓰는것도 가능하고 순수 쿼리문도 가능하다.
근데잘 안사용한다.
DB에 관련된 것은 주로 JPA를 사용한다.

com.codingbox.core2.member.repository에 JdbcMemberRepository 생성

DB셋팅에 관한 부분도 application.properties

9. SOLID(기술면접으로 많이나옴)

  • 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리(앞글자 하나씩 따서 정리함)
  • SRP : Single responsibility principle : 단일 책임 원칙
  • OCP : Open-closed principle : 개방-폐쇄 원칙
  • LSP : Liskov substitution principle : 리스코프 치환 원칙
  • ISP : Interface segregation principle : 인터페이스 분리 원칙
  • DIP : Dependency inversion principle : 의존 관계 역전 원칙

9-1. 단일 책임 원칙

  • 한 클래스는 하나의 책임만 가져야 한다.
  • 하나의 책임이라는 것은 모호하다.
  • 클 수 있고, 작을 수 있다.
  • 기준은 변경이다. 변경이 있을 때 파급효과가 적으면 단일 책임원칙을 잘 따른 것이다.

9-2. 개방-폐쇄 원칙

  • 확장에는 열려있고, 수정, 변경에는 단혀있다.

9-3. 리스코프 치환 원칙

  • 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 , 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
  • 다형성에서 하위 클래스는 인터페이스 규약을 다 지켜야한다는 것, 인터페이스를 구현한 구현체를 믿고 사용하려면, 이 원칙이 필요하다.
  • 단순히 컴파일에 성공하는 것을 넘어서는 이야기

9-4. 인터페이스 분리 원칙

  • 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
  • 자동차 인터페이스 -> 운전 인터페이스, 정비 인터페이스
  • 인터페이스를 분리하면 정비 인터페이스 자체가 변하더라도 운전 인터페이스는 영향을 주지 않는다.
  • 인터페이스가 명확해지고, 대체 가능성이 높아진다.

9-5. DIP 의존관계 역전 원칙

  • 프로그래머는 추상화에 의존해야하지, 구체화에 의존하면 안된 다. 의존성 주입은 이 원칙을 따르는 방법 중 하나다.
  • 쉽게 이야기해서 구현 클래스에 직접적으로 의존하지말고, 인터페이스에 의존하라는 뜻이다.

10. JPA

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

jpa가 jdbc를 포함하고있기 때문에 그래들페이지에서 주석처리와 jpa 추가하는 것을 해주었다.

그러고선 프로퍼티즈 새싹모양가서 옵션설정을 해주어야한다.

Entity이거 어노테이션 할 때 javax.persistence에서 땡겨와야한다.!

jdbc레퍼지터리 상단의 @repository부분 주석처리하고 jpa로 한다.
멤버서비스.java에서
@Transactional 이거 추가해주어야한다.근데 여기선 자바엑스 퍼시스턴스 가아니라 다른거 어노테이션부분으로 땡겨와야한다.

0개의 댓글