코쿼_팀프로젝트_학습일지_D62
목적 : 그날 새롭게 알게되거나 궁금했던 키워드들 우선 하루안에 간단히 정리하기 위함
📌 신규 키워드
- 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 클래스란?
- Class NamedParameterJdbcTemplate docs 정보
- SqlParameterSource의 구현체 클래스로, getter/setter가 있는 bean 객체로부터 파라미터를 추출한다.
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(메소드)
- 간단히 말해, 객체 생성의 역할을 하는 클래스 메소드이다.(팩토리 패턴, 팩토리 클래스 공부 필요)
- 생성자와의 차이는?
- 이름을 가질 수 있다.
- 호출할 때마다 새로운 객체를 생성할 필요가 없다.
- 하위 자료형 객체를 반환할 수 있다.
- 객체 생성을 캡슐화 할 수 있다.
- 정적 팩토리 메소드 네이밍 컨벤션
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
Author And Source
이 문제에 관하여(코쿼_팀프로젝트_학습일지_D62), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dragon9265/코쿼팀프로젝트학습일지D62저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)