AI교육과정 - Spring.3

단비·2022년 12월 7일
0

AI교육과정

목록 보기
42/69
  • Intellij - MySQL 사용법
    • 우측 database 탭 - + 버튼 클릭 - mysql 선택 - localhost: root / password: 1234
    • build.gradle 파일 https://mvnrepository.com/artifact/com.mysql/mysql-connector-j/8.0.31
      1. 하기 코드 복사 후 dependencies 코드 안에 넣기

      2. 우측 상단에 생긴 코끼리 reflesh아이콘을 눌러줘야 반영됨

        ![Untitled](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/bc91df1e-56b4-4ae1-841e-38147c7fcd21/Untitled.png)

        Untitled

    • application.properties 파일
      #MySQL 설정
      spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
      
      #DB Source URL
      spring.datasource.url=jdbc:mysql://localhost:3306/aidev?useSSL=false&userUnicode=true&serverTimezone=Asia/seoul
      
      #DB username
      spring.datasource.username=root
      
      #DB password
      spring.datasource.password=1234

  • Gradle
    • 의존성 관리의 다양한 방법을 제공하는 기술
    • maven은 xml을 사용, gradle은 groovy라는 언어를 사용
    • 오픈소스 별도 도구(개발 시 자동으로 빌드를 도와주는 프로그램)
  • ORM(Object-Relational Mapping)
    • 객체와 관계형 DB를 매핑
    • 객체를 마치 자바 컬렉션에 저장할 수 있고, 적절한 SQL을 생성해서 DB객체에 저장
  • JPA(Java Persistence API)
    • 자바의 ORM 기술 표준

    • 객체를 DB에 저장하고 관리할 때 개발자가 직접 SQL을 작성하지 않아도 됨

    • JPA가 개발자 대신 적절한 SQL을 생성해서 DB에 전달하고 객체를 자동으로 Mapping

    • 스프링 부트는 ORM 프레임워크(Hibernate)가 탑제되어 있음

      https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa/2.7.6

    • build.gradle의 dependencies 에 붙여넣기

    • JPA 쿼리문 확인하기

      • application.properties 파일

        spring.jpa.show-sql=true
        spring.jpa.database=mysql
        
        spring.datasource.url=jdbc:mysql://localhost:3306/aidev?useUnicode=true&serverTimezone=Asia/Seoul
        spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
        spring.datasource.username=root
        spring.datasource.password=1234
    • lombok

      테이블을 구조화한 클래스(Entity, DTO, VO)에서 getter/setter 메소드와 toString(), equals(), hashCode() 등의 메소드를 어노테이션으로 사용할 수 있도록 해주는 라이브러리

      @Data: 자동으로 getter/setter를 지원

      @AllArgsConstructor: 모든 매개변수를 지원하는 생성자를 지원

      @NoArgsConstructor: 매개변수를 갖지 않는 생성자를 지원

      @Entity: DB 테이블과 연결

      @Builder: 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현의 결과를 만들 수 있도록 패턴을 사용(체이닝→함수형 프로그래밍)

      https://mvnrepository.com/artifact/org.projectlombok/lombok

      • build.gradle의 dependencies 에 붙여넣기

        🤩 builder의 매개변수의 괄호안에 값을 넣지 않을 경우 getter로 사용됨

      • setter의 경우 .build()로 닫아줘야함

        AdminUser adminUser = AdminUser.builder().userid() //getter
        AdminUser adminUser = AdminUser.builder().userid("apple").userpw("1111").name("김사과").build(); //setter
    • JPA Hibernate Entity 생성하기

      • 어노테이션 @Table: DB 테이블의 이름을 명시(테이블명과 클래스명이 동일한 경우 생략)
        admin_user(DB) == AdminUser(Java)
        스네이크표기         카멜표기
        @Entity: DB의 테이블을 뜻하는 클래스 @Id: primary key를 뜻함 @GeneratedValue: primary key의 키 생성 전략(Strategy)을 설정할 때 사용 @Column: DB 필드명을 명시(DB필드명과 클래스 필드명이 동일한 경우 생략) @Transient: DB에는 존재하지 않은 필드에 명시
    • JPA Repository

      • Spring Data JPA의 구현체인 Hibernate를 이용하기 위한 API

        😎 Hibernate란

      • 하기 sql 구문을 자동 실행하여 sql 문 없이 사용 가능

        Hibernate: insert into admin_user (last_login_at, name, reg_date, status, userid, userpw) values (?, ?, ?, ?, ?, ?)
      • JpaRepository의 제네릭 타입으로는 <Eintity, PK타입>을 지정

      • 자동으로 스프링의 빈(Bean)으로 등록됨

      • 꼭 존재해야 하는 것은 아님

        public interface 인터페이스명 extends JpaRepository<테이블명, PK타입>{
        		SQL 쿼리를 대신할 메소드 정의
        }
      • save(): sql문 저장

      • delete(): 지정된 테이블필드 삭제

    • Test(Junit)

      @Test

      • Java의 단위 테스팅 도구
      • Test Class를 그대로 남김으로써 추후 개발자들에게 테스트 방법 및 클래스의 History를 넘겨줄 수 있음
    • DI(Dependency Injection) : 의존성 종속 ☆★

      • 클래스 간의 의존 관계를 스프링 컨테이너가 자동으로 연결해주는 것

        예) 클래스A가 클래스 B, C와 상호작용을 한다면 객체 A는 객체 B,C와 의존관계다

      • DI가 필요한 이유: 객체 간의 의존성

      • DI유형(의존 관계에 있는 Bean을 주입하는 방법)
        1. Setter Injection
        - setter/getter 메소드의 setter 메소드를 통해 의존 관계에 있는 객체를 주입
        2. Constructor Injection
        - 생성자를 통해 의존 관계에 있는 객체를 주입
        3. Method Injection
        - 메소드를 통해 의존 관계에 있는 객체를 주입

        @Autowired

      • 스프링 DI에서 사용하는 어노테이션

      • 스프링에서 빈 인스턴스가 생성된 이후에 @Autowired를 설정한 메소드가 자동으로 호출되고 인스턴스가 자동으로 주입

  • 😏 Optional
    • Integer나 Double 클래스와 같이 ‘T’ 타입의 객체를 포장하는 Wrapper Class

      (Optional의 인스턴스는 모든 타입의 참조 변수를 저장 가능)

    • NullPointerException 예외를 예방하기 위한 좋은 방법

    • 시작(객체생성) → 중간(Optional 객체 반환) → 끝(체이닝 종료) 3단계로 구현

    • 함수형 프로그래밍, 메소드 체이닝을 가능하게 함

      객체생성

    1. of()

      • null 이 아닌 명시된 값을 저장한 optional 객체를 반환
      • null 이 저장될 경우, NullPointerException 예외를 발생시킴
    2. ofNullable()

      • null 이 아닌 명시된 값을 저장한 optional 객체를 반환
      • null 이 저장될 경우, 비어있는 optional 객체를 반환
    3. empty()
      - 비어있는 optional 객체를 반환

      중간

    4. filter()

      • 입력값이 참이면 기존 optional 객체를 그대로 반환
      • 입력값이 거짓이면 비어있는 optional 객체를 반환

      😶 입력값은 functional interface로 매개변수를 특정 연산으로 체크하여 boolean값을 반환함(특정 연산이란 람다식으로 표현)

    5. map()
      - optional 객체에 저장된 값을 map() 내의 함수를 통해 반환하고, 변환값을 담은 optional 객체에 반환

    6. ifPresent()

      • optional 객체가 비어있지 않다면, 저장된 값을 가지고 ifPresent() 내의 연산을 수행
      • optional 객체가 비어있다면 그대로 반환(아무 연산 수행X)
    7. isPresent()

      • optional 객체가 비어있지 않다면, true를 반환
      • optional 객체가 비어있다면, false를 반환
    8. get()

      • optional 객체가 비어있지 않다면, 저장된 값을 꺼내 반환
      • optional 객체가 비어있다면, NoSuchElementException을 반환
    9. orElse()

      • optional 객체가 비어있지 않다면, 그대로 반환(아무 연산 수행X)
      • optional 객체가 비어있다면, 기본값으로 제공할 객체를 지정

      👻 orElse는 optional 객체가 비어있지 않던, 비어있던 무조건 실행

    10. orElseGet()

      • optional 객체가 비어있지 않다면, 그대로 반환(아무 연산 수행X)
      • optional 객체가 비어있다면, 기본값으로 제공할 공급자 함수를 지정(람다 표현식의 결과값 반환)

      👻 orElseGet은 비어있을 때만 실행

    11. orElseThrow()

      • optional 객체가 비어있지 않다면, 그대로 반환(아무 연산 수행X)
      • optional 객체가 비어있다면, 기본값으로 제공할 예외 공급자 함수 지정하여 예외 Throw
profile
tistory로 이전! https://sweet-rain-kim.tistory.com/

0개의 댓글