스프링 부트 -1

김정현·2024년 7월 23일
0

Spring Boot

목록 보기
1/3
post-thumbnail

스프링 부트

1. 소개

2. 설정

context-path ='/'

// 포트번호 변경

springboot dev tools - 서버 자동 재시작, 라이브 리로드
(템플릿쪽 변경 사항 -> 브라우저 새로고침)

프로필
spring.profiles.active
-기본값 default
설정 값에 따라서 application-환경변수명.properties로 동작

실행 시 환경 변수 설정 방법
-D환경변수명=값
--환경변수명=값

dev는 개인설정

application-dev.* 

깃이그노어에 추가

jar

gradle build / mvn package
-> 컴파일 -> 테스트 -> jar

gradle jar

gradle bootJar : 컴파일 -> jar
gradle bootRun : 스프링 부트 시작

java -jar jar 파일

예) 프로필 prod
java -jar -Dspring.profiles.active=prod jar 파일명
java -jar jar 파일명 --spring.profiles.active=prod

컨트롤 + C

YAML - Yet Another Markup Language
- YAML Ain't Markup Language

  • 확장자
    yml
    yaml


이걸


이렇게

설정 파일(yml, properties)에 환경 변수로 치환되는 부분을 직접 설정
${환경 변수명}
-민감한 설정은 직접 코드로 작성 X, 환경 변수로 실행 중에 설정

3. @Scheduled

1) fixedDelay
2) fixedRate
3) initialDelay
4) cron
5) @EnableScheduling

Spring Data JPA

1. JPA 동작 방식

0) ORM : 객체 <- 번역(ORM) -> DB

//application.yml

  server:
    port: 3000


  spring:
    # 데이터베이스 설정
    datasource:
      driver-class-name: oracle.jdbc.driver.OracleDriver
      url: jdbc:oracle:thin:@localhost:1521:XE
      username: ${db.username}
      password: ${db.password}

    # jPA 설정
    jpa:
      properties:
        hibernate:
          show_sql: true # 실행하는 SQL을 콘솔에 출력
          format_sql: true # 실행되는 SQL의 들여쓰기 및 줄 개행
          use_sql_comments: true
  #        dialect: org.hibernate.dialect.OracleDialect
      hibernate:
        ddlAuto: create

  # 로거 설정
    logging:
      level:
        org:
          hibernate:
            type: trace

1) JPA란?
JPA (Java Persistence API) : ORM 표준 (Object Relational Mapping)
자바 영속성 API

Hibernate Entity Manager

  • 자바 영속성 API
  • 영속성 : 상태 변화 감지 메모리
    : 데이터 값이 변경 : UPDATE 쿼리
    : 없는 데이터를 추가한 엔티티 : INSERT 쿼리
    : 데이터 제거 : DELETE 쿼리

동일한 코드 -> 드라이버 변경 -> 플랫폼에 맞는 쿼리 실행

EntityManagerFactory
-> EntityManager : 엔티티 영속성 관리

2) JPA 동작 방식
- 엔티티 : 엔티티 클래스의 정의 : 테이블의 정의
: 각각의 엔티티는 데이터 하나 하나

- 엔티티 매니저 팩토리
- 엔티티 매니저
	1) find() : 조회, 기본키로 조회, 이미 영속성에 엔티티가 있으면 DB에서 조회 X - 1차 캐시, 성능상 이점 
	2) persist() : 영속성 컨텍스트에 엔티티를 영속  : 상태 감지 시작
	3) remove() : 영속성 상태 -> 제거 상태 : DELETE
	4) flush() : DB 반영 
			참고)
				find(..) 조회 메서드 호출시 flush()가 먼저 진행 되고 -> 조회 
	5) detach() : 영속성 분리 : 상태감지 X
	6) clear() : 영속성 전체 제거
	6) merge() : 분리된 영속성 -> 영속 상태  : 상태 감지 O
	
- EntityManagerFactory 
- EntityManager : 엔티티의 영속성 관리 

void test1() {
//        EntityManager em = emf.createEntityManager();

        Member member = new Member();
        member.setSeq(1L);
        member.setEmail("user01@test.org");
        member.setPassword("12345678");
        member.setUserName("사용자01");
        member.setCreatedAt(LocalDateTime.now());

        em.persist(member); // 영속 상태 - 변화 감지 메모리에 있다, 변화 감지..

        em.flush(); // INSERT 쿼리

        em.detach(member);  // 영속 상태 분리 - 변화 감지 X

        member.setUserName("(수정)사용자01");    // 변경
        member.setModifiedAt(LocalDateTime.now());

        em.flush(); // UPDATE 쿼리

        em.merge(member);   // 분리된 영속 상태 -> 영속 상태 (변화 감지 상태)

        em.flush();

//        em.remove(member);
    }

3) 영속성 컨텍스트 사용 시 이점
4) 영속성 컨텍스트
5) 엔티티의 생명주기

  • 1차 캐시
  • 동일성 보장
  • 영속성 컨텍스트 쓰기 지연 SQL 저장소
  • 트랜잭션을 지원하는 쓰기 지연

    있는데이터라면 캐시 역할을 함
    있을땐 쿼리 역할 수행 X

JPQL -> Java Persistence Query Language
-> 모든 DB 플랫폼에 호환
-> 조회 결과가 영속 상태(변화 감지)

7) 설정하기
- DDL_AUTO
none : 아무런 변경 X
create : 애플리케이션 시작시에 기존 테이블 DROP, 새로 생성
create-drop : 애플리케이션 시작시에 기존 테이블 DROP, 새로 생성, 종료시에도 DROP
update : 기존 테이블 DROP X, 변경 사항만 반영(제거 X)
validate : 기존 테이블 DROP X, 변경 사항 체크(변경 사항이 있으면 예외 발생)

	개발시 : create, update 
	배포 서버 : none, validate 
	

2. Entity 설계하기

1) 엔티티 매핑 관련 애노테이션

  • @Entity :
    엔티티명 : 기본값 : 클래스명
    참고) JPQL(Java Persistence Query Language)
    - name, value - 엔티티 명을 직접 설정
  • @Table
    - name : 테이블 명
    : 엔티티 명 == 테이블명

실제 테이블명 CH_MEMBER인데 클래스는 Member로 정의하고 싶은 경우?

public class Member extends BaseEntity {
    @Id @GeneratedValue // 자동 증감
    private Long seq;

    @Column(length=60 ,nullable = false, unique = true)
    private String email;

    @Column(length=65 ,nullable = false)
    private String password;

//    @Column(name="name")  // 실제 DB에 저장되어 있는 필드명
    @Column(length=40, nullable = false)
    private String userName;

    // @Lob
    @Transient
    private String introduction;

    @Column(length=10)
    @Enumerated(EnumType.STRING)
    private Authority authority;
}
  • @Temporal
    - Date, Calendar 클래스 관련 : 날짜, 시간, 날짜 + 시간
    	- java.time API  사용시 필요 X
    		LocalDate, LocalTime, LocalDateTime 
  • @CreatedDate, @LastModifiedDate
    : 엔티티 변화 감지를 통해서 변경(DB와 상관 X)
    : 변화 감지를 위한 이벤트 리스너

2) 공통 속성화
@MappedSuperclass : 공통 속성화를 위한 상위 클래스

3) @IdClass
: 기본키를 여러 컬럼을 조합해서 생성

: 게시글 조회수 - UV
	브라우저 정보(User-Agent) + IP + 회원번호(0)  : UID  + 게시글 번호(ID)
    

4) @GeneratedValue ; 자동 증감 번호

5) @CreatedDate, @LastModifiedDate -> 엔티티의 상태 변화에 따라서 값이 업데이트

0개의 댓글