Coding Note

SpringBoot) 블로그 프로젝트_4.yml설정, 테이블 생성 본문

SpringBoot/블로그만들기PJ

SpringBoot) 블로그 프로젝트_4.yml설정, 테이블 생성

jinnkim 2022. 3. 17. 02:39

 

 

스터디 2일 차 

2022.03.17

 


 

 

 

1. yaml 이란

데이터 전송 파일

기존 사용했던 web.xml, root-context.xml, servlet-context.xml의 합본이라고 생각하면 될 거 같다!

https://www.inflearn.com/questions/16184

 

yaml파일 이란 무엇인가요 - 인프런 | 질문 & 답변

안녕하세요 강사님 너무 질문이 많아서 죄송합니다. yaml파일 이라는 단어를 요 근래 많이 듣고 있는데 정확인 무슨 파일인가요 검색해 보지도 않고 무조건 질문을 드리는것 같아서 죄송하지만

www.inflearn.com

 

 

  jpa:
    open-in-view: true
    hibernate:
      ddl-auto: create
      naming: physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
      use-new-id-generator-mappings: false
    show-sql: true
    properties:
      hibernate.format_sql: true

 

 

ddl-auto

  • create - 서버 시작 시마다 DB초기화
  • update - 수정 사항만 DB에 반영
  • none - DB에 아무런 반영을 하지 않음.

 

physical-strategy

  • - org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
  • - 엔티티를 만들 때 변수명 그래도 DB 필드를  만들어 준다.
  • - 엔티티를 만들 때 변수명에 언더스코어를 붙여준다. 예) createDate -> create_date

 

use-new-id-generator-mappings: false

  • mysql로 말하면 auto_increment 오라클로 말하면 시퀀스를 어떤 식으로 사용할지 방식을 결정하는 것
  • false : jpa가 사용하는 기본 넘버링 전략을 따라가지 않는다는 뜻
  • true : 기본 넘버링 전략을 따라간다는 뜻

 

 


 

2. Blog 테이블 만들기(User/Blog/Reply)

user, board. reply 테이블 생성

 

- User

 

- Board

 

 

- Reply

 

 

 

+ 연관관계 주인

- FK를 가진 오브젝트

- FK를 누가 가졌는가!!!

 

https://ict-nroo.tistory.com/127

 

[JPA] @ManyToMany, 다대다[N:M] 관계

다대다[N:M] 실무에선 사용하지 않는 것을 추천한다. 사용하면 안되는 이유를 학습하자. 관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다. 연결 테이블(조인 테이블)

ict-nroo.tistory.com

 

 

 

 

+ Json(공용어)

- 데이터 통신을 위한 중간 데이터

- 통신 시 : 자바 오브젝트 -> JSON

- 응답 시 : JSON -> 타 언어

 

Why. 왜 사용할까?

- 효율적으로 언어 번역을 하기 위함!

 

 

 


 

 

3. 회원가입

  • 회원가입

//http://localhost:8000/blog/dummy/join
//http의 body에 username, password, email 데이터를 가지고 요청함
@PostMapping("/dummy/join")
public String join(User user) {//key=value 약속된 규칙

    System.out.println("username:" +user.getUsername());
    System.out.println("password:" +user.getPassword());
    System.out.println("email:" +user.getEmail());

    userRepository.save(user);
    return "회원가입이 완료 되었습니다.";
  }
}

- role null값 not null

user.setRole(RoleType.USER);

 

 

 

+ postman - xxx~

-> 데이터가 마인 타입으로 전송됨

key=value&key=value

 

 

  • 페이징 처리
//페이징 처리
//페이지당 2건에 데이터를 리턴받아 볼 예정
//http://localhost:8000/blog/dummy/user
@GetMapping("/dummy/user")
public List<User> pageList(@PageableDefault (size=2, sort="id", direction = Sort.Direction.DESC) Pageable pageable) {
    Page<User> pagingUser = userRepository.findAll(pageable);

    List<User> users = pagingUser.getContent();
    return users;

}

- 페이징 결과

 

 

꿀팁!!

 

브라우저에서 json형식으로 가독성 있게 볼 수 있도록 JSONView 설치하기

 

  • 수정
@Transactional //함수 종료시 자동 commit됨
@PutMapping("/dummy/user/{id}")
public User updateUser(@PathVariable int id, @RequestBody User requestUser) {//json 데이터를 요청 => Java Object(MessgeConverter의 Jackson라이브러리가 변환해서 받아줌!-@RequestBody)
    System.out.println("id :"+id);
    System.out.println("password :"+requestUser.getPassword());
    System.out.println("email :"+requestUser.getEmail());
    //Update문에 save 사용 잘 안함. - null
    //이럴경우 람다식으로 처리
    User user = userRepository.findById(id).orElseThrow(()->{//영속화
        return new IllegalArgumentException("수정에 실패하였습니다.");
    });
    user.setPassword(requestUser.getPassword());
    user.setEmail(requestUser.getEmail());

    //userRepository.save(user);

    //더티 체킹	@Transactional
    return user;	
}

//람다식
User user = userRepository.findById(id).orElseThrow(() -> { //익명 처리 가능
	 return new IllegalArgumentException("해당 유저는 없습니다."); 
     });
  return user;
}

 

 

@Transactional

@Transactional 선언하면 save 선언 안 해도됨

- 더러운 조각? 찌꺼기를 날림...

- DB: 모아두었다가 한꺼번에 커밋하는 것

- JPA : 변경 감지되면 DB를 수정해줌

 

영속성 컨텍스트와 더티 채킹

flush : 메모리에 꽉 찬 데이터를 더 큰 데이터에 옮기고 기존 데이터를 비운다.

=> 프로그래밍에서 버퍼를 비운다고 함.

 

  • 삭제하기

- if문을 사용하여 등록 Id가 없을 경우 "삭제 실패"

id: 1이 삭제된 걸 확인할 수 있다!!

 

 

 

Comments