코쿼_팀프로젝트_학습일지_D62

VANS·2022년 4월 6일
0

2022 마스터즈 코스

목록 보기
9/9
post-thumbnail

목적 : 그날 새롭게 알게되거나 궁금했던 키워드들 우선 하루안에 간단히 정리하기 위함

📌 신규 키워드

  • namdParameterJdbcTempleate
  • BeanPropertySqlParameterSource
  • @JdbcTest
  • 정적 팩토리 메소드
  • 카멜케이스
  • Keyholder
  • Postgresql
  • Soft Delete

🛠 추가 학습 필요한 키워드(중요한것들)

  • 정적 팩토리 메소드
  • Postgresql

🤔 궁금한 점

  • 카멜케이스와 DB와의 관계가 뭐지?

📝 간단정리


1. NameParameterJdbcTemplate 클래스란?

  • Class NamedParameterJdbcTemplate docs 정보
  • index 기반의 parameter가 아닌 name 기반의 parameter를 설정할 수 있도록 해주는 templeate class 이다.
  • 기존의 JdbcTemplate 같은 경우는 data를 넣는 부분에 ?를 이용하여 처리했지만 해당 방법은 가독성을 떨어트리는 단점이 있었다.
  • ? 대신 :변수명을 이용하여 처리한다.
public int countOfActorsByFirstName(String firstName) {

    String sql = "select count(*) from T_ACTOR where first_name = :first_name";

    SqlParameterSource namedParameters = new MapSqlParameterSource("first_name", firstName);

    return this.namedParameterJdbcTemplate.queryForObject(sql, namedParameters, Integer.class);
}

ref.
스프링 프레임워크 데이터 엑세스 공식 레퍼런스 번역 문서
https://mungto.tistory.com/445


2. BeanPropertySqlParameterSource 클래스란?

public class Actor {

    private Long id;
    private String firstName;
    private String lastName;

    public String getFirstName() {
        return this.firstName;
    }

    public String getLastName() {
        return this.lastName;
    }

    public Long getId() {
        return this.id;
    }
}
public int countOfActors(Actor exampleActor) {

    String sql = "select count(*) from T_ACTOR where first_name = :firstName and last_name = :lastName";

    SqlParameterSource namedParameters = new BeanPropertySqlParameterSource(exampleActor);

    return this.namedParameterJdbcTemplate.queryForObject(sql, namedParameters, Integer.class);
}
> 

ref.
스프링 프레임워크 데이터 엑세스 공식 레퍼런스 번역 문서
https://github.com/benelog/spring-jdbc-tips/blob/master/spring-jdbc-core.md
https://mungto.tistory.com/445


3. @JdbcTest 어노테이션이란?

  • Annotation Type JdbcTest docs 정보
  • Spring Data JDBC, JPA를 사용하지 않고, 오직 DataSource를 필요로 하는 테스트에서 사용한다.
  • @JdbcTest는 in-memory embedded database가 설정되어 테스트를 위한 JdbcTemplate를 생성한다.
  • 일반적인 @ConfigurationProperties와 @Component 빈들은 스캔되지 않는다.
  • 기본적으로 @JdbcTest는 트랜잭션이며, 각 테스트마다 Rollback된다.
  • 실제 Database를 사용하고 싶지 않으면, @AutoConfigureTestDatabase를 사용한다.(JPA예제 참고)
// 트랜잭션을 설정하고 싶지 않은 경우 이와 같이 설정한다.
@JdbcTest
@Transactional(propagation = Propagation.NOT_SUPPORTED)
class MyTransactionalTests{
}

ref.
https://pomo0703.tistory.com/100


4. 정적 팩토리 메소드란?

  • Static(정적) factory(팩토리) method(메소드)
  • 간단히 말해, 객체 생성의 역할을 하는 클래스 메소드이다.(팩토리 패턴, 팩토리 클래스 공부 필요)
  • 생성자와의 차이는?
      1. 이름을 가질 수 있다.
      1. 호출할 때마다 새로운 객체를 생성할 필요가 없다.
      1. 하위 자료형 객체를 반환할 수 있다.
      1. 객체 생성을 캡슐화 할 수 있다.
  • 정적 팩토리 메소드 네이밍 컨벤션
    • from : 하나의 매개 변수를 받아서 객체를 생성
    • of : 여러개의 매개 변수를 받아서 객체를 생성
    • getInsttance | instance : 인스턴스를 생성, 이전에 반환해던 것과 같을 수 있다.
    • newInstance | create : 새로운 인스턴스를 생성
    • get[OtherType] : 다른 타입의 인스턴스를 생성, 이전에 반환했던 것과 같을 수 있다.
    • new[OtherType] : 다른 타입의 새로운 인스턴스를 생성한다.

ref.
https://7942yongdae.tistory.com/147
https://velog.io/@ljinsk3/%EC%A0%95%EC%A0%81-%ED%8C%A9%ED%86%A0%EB%A6%AC-%EB%A9%94%EC%84%9C%EB%93%9C%EB%8A%94-%EC%99%9C-%EC%82%AC%EC%9A%A9%ED%95%A0%EA%B9%8C
https://tecoble.techcourse.co.kr/post/2020-05-26-static-factory-method/


5. 카멜케이스란?

  • 카멜(낙타)케이스라 불린 이유 : 낙타의 등이 중간에 볼록 튀어나온것처럼 글자의 중간주간이 볼록 튀어나와 있기 때문이다.
  • 생겨난 이유 : 컴퓨터가 띄어쓰기를 인식하지 못하기 때문이다.
  • publicdata -> publicData : 매 단어의 시작마다 대문자를 써서 사람이 읽기 쉽게하기 위함

ref.
https://shovelking.tistory.com/5


6. KeyHolder란?

  • Interface KeyHolder docs 정보
  • SQL문으로 보통 id를 AUTO_INCREMENT로 지정하여 PK(Primary Key)로 활용하는 경우가 있다. 이때 update()메소드는 변경된 행의 개수만 리턴하므로 자동 생성 된 키 값을 알아낼 수가 없다.
  • 이럴때 Keyholder를 써서 자동 생성 된 키 값을 확인할 수 있다.(getKey())

ref.
https://preamtree.tistory.com/91


7. PostgreSQL란?

  • 오픈 소스 객체-관계형 데이터베이스 시스템(ORDBMS)으로, Enterprise급 DBMS의 기능과 차세대 DBMS에서나 볼 수 있을 법한 기능들을 제공한다.
  • 약 20여년의 오랜 역사를 갖는 PostgreSQL은 다른 관계형 데이터베이스 시스템과 달리 연산자, 복합 자료형, 집계 함수, 자료형 변환자, 확장 기능 등 다양한 데이터베이스 객체를 사용자가 임의로 만들 수 있는 기능을 제공함으로써 마치 새로운 하나의 프로그래밍 언어처럼 무한한 기능을 손쉽게 구현할 수 있다.

ref.
https://mangkyu.tistory.com/71


8. Soft delete란?

  • 논리삭제라고도 한다.
  • SQL의 UPDATE 명령어를 사용하여 삭제 여부를 알 수 있는 칼럼에, 데이터가 삭제되었다는 값을 넣어서 표현한다.(ex. boolean deleted false)
  • 물리삭제라는 hard delete도 있다.
  • SQL의 DELETE 명령어를 사용하여 직접 데이터를 삭제하는 방법이다.(추후에 데이터 조회가 필요 없을때)

ref.
https://zetawiki.com/wiki/%EC%86%8C%ED%94%84%ED%8A%B8_%EC%82%AD%EC%A0%9C,_%ED%95%98%EB%93%9C_%EC%82%AD%EC%A0%9C
https://velog.io/@taeha7b/hard-delete-softdelete


profile
코딩도 점진적 과부화

0개의 댓글