[TIL] 4월 16일

yeon·2021년 4월 16일
1

SQL 첫걸음

패턴매칭에 의한 검색(82p)

LIKE를 사용해서 문자열의 일부분을 비교하는 부분검색을 할 수 있다.

  • SELECT * FROM sample25 WHERE text LIKE '%SQL%';

    문자열 중간에 존재하는 SQL을 찾을 때 앞뒤로 %를 붙인다.

    전방일치는 'SQL%'

    후방일치는 '%SQL'


이번 프로젝트에서 아쉬웠던 상황

pr 보내고 피드백 받은 사항을 수정하는데 API의 구조가 변경되었다.

iOS분들에게 이 내용을 협의하지 않고 진행한거라서 마음대로 변경한 상황이 되어버렸다.

특히 데모가 다가오는 시점에서 이런일이 발생해서 iOS분들이 당황하셨을텐데 화도 안내시고 이해해주셔서 감사했다.

앞으로 이런 부분도 더 신경써서 변경하고 미리 상의해야되겠다고 깨닫게 된 경험이였다.

(ResposeEntity를 바로 리턴하도록 구현한 것에서 ResponseBody 로 변경했었다.)

JK 말씀
현업에서는 사용자들이 구버전의 앱을 이용하는 경우가 있으므로 백엔드는 구버전의 API와 새로운 버전의 API를 다 배포해야한다.

Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test

스프링부트 환경에서 테스트를 실행하려니 이런 에러가 나온다.

@SpringBootApplication 어노테이션이 붙은 클래스가 존재하는 패키지의 하위 패키지에 테스트를 둬야하는데 그렇지 않았을 경우 발생하는 에러이다.

참고 자료: https://jjunii486.tistory.com/172



introducing-spring-data-jdbc 예제 실습

실습하면서 나온 설명들을 정리해보았다. (틀린 부분 지적은 감사히 받겠습니다.)

@Configuration
@EnableJdbcRepositories
public class CustomerConfig extends AbstractJdbcConfiguration {

    @Bean
    NamedParameterJdbcOperations operations() {
        return new NamedParameterJdbcTemplate(dataSource());
    }

    @Bean
    PlatformTransactionManager transactionManager() {
        return new DataSourceTransactionManager(dataSource());
    }

    @Bean
    DataSource dataSource() {
        return new EmbeddedDatabaseBuilder()
                .generateUniqueName(true)
                .setType(EmbeddedDatabaseType.HSQL)
                .addScript("create-customer-schema.sql")
                .build();
    }
}

JdbcConfiguration deprecated

JdbcConfiguration이 deprecated 되었다고 하여 검색해보니,

JdbcConfiguration has been deprecated and recommended to use AbstractJdbcConfiguration

AbstractJdbcConfiguration을 대신 쓰면 될듯하다.

@Configuration(기본 환경 구성)

외부 라이브러리, 또는 설정 클래스를 Bean으로 등록할때 @Bean 어노테이션 사용

하나 이상의 @Bean 이 있는 클래스에서 @Configuration 어노테이션을 달아준다.

@EnableJdbcRepositories

repository를 만들수 있게 하는 어노테이션

이 어노테이션이 있으면 Bean들이 존재해야하므로, Bean을 추가함으로서 설정을 추가해줘야한다.

Extending JdbcConfiguration(여기선 AbstractJdbcConfiguration)

기본 빈들(some default beans)을 ApplicationContext에 추가한다.

AbstractJdbcConfiguration의 메소드들을 오버라이딩해서 Spring Data JDBC 동작을 원하는대로 바꿀 수 있다.


NamedParameterJdbcOperations

내부적으로 SQL문을 데이터베이스로 전송하는 역할을 한다.

Transaction manager

여기선 PlatformTransactionManager 사용

트랜잭션을 관리할수 있게 해주는것

DataSource

Spring Data JDBC가 직접적으로 사용하는 것은 아니다.

하지만, TransactionManager와 NamedParameterJdbcPoerations 가 같은 DataSource 인스턴스를 사용하는 것을 확실히 하기 위해서 DataSource를 빈으로 등록하는 것이 좋다.

테스트 진행할때 repository.save()에서 NullPointerException 발생

customerRepository.save()할때 NullPointerException이 뜨는 경우에는 customerRepository에 대한 의존성 주입이 제대로 되지 않아서 repository가 null인 경우 발생한다.

검색한 자료대로 @SpringBootTest를 붙이면 다른 에러가 뜬다.

미해결.. 일단 튜토리얼을 따라한것에 의의를 두고 넘어가자

참고 : https://github.com/ddd-by-examples/library/issues/11 (JdbcConfiguration deprecated)

https://mangkyu.tistory.com/75 (@Configuration)

http://tech.javacafe.io/spring/2018/11/04/%EC%8A%A4%ED%94%84%EB%A7%81-Configuration-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98-%EC%98%88%EC%A0%9C/ (@Configuration)

https://n1tjrgns.tistory.com/224 (repository.save() 시 NullPointerException 발생)

https://www.javaer101.com/ko/article/2759553.html (repository.save() 시 NullPointerException 발생)

오늘 한일

  • 드디어 todo-list 프로젝트가 끝났다. 개인 프로젝트보다 확실히 신경써야할 부분들이 많았다. git으로 협업하기 때문에 git사용으로 막히는 부분도 생기고, AWS 배포도 예상치 못한 일들로 삽질을 많이했다. 팀프로젝트가 처음이여서 배포와 구현을 각각 도맡아서 하게 되었는데 다른 조 분들도 비슷한 상황인 경우가 있는듯 했다. 시간적인 제약 때문에 어쩔수 없었지만 개인적으로 Spring Data JDBC에 대한 학습과 구현을 못했고, 리뷰어에게 피드백 받은 부분에 대한 이해도도 떨어져서 개인적으로 아쉬움이 남았다. 하지만 배포의 경험은 제대로 쌓았고 많이 배웠다.
  • Spring Data JDBC에 대한 자료들을 보며 예제를 따라쳐보았는데 어떤 문제인지는 정확히 모르겠지만(아마도 DB연결을 제대로 안해줘서 그런거 같기도..) 테스트코드가 자꾸 실패한다. 여러 에러들을 찾아보며 해결해나갔지만 계속 새로운 에러들이 나타나서 결론적으로 해결하지 못했다.

    내일은 루카스에 있는 자료를 보고 튜토리얼을 따라해봐야겠다.

Todo

  • 스프링(백기선님 강의)
  • JDBC 강의(유튜브에 있는 영상 보기)
  • 데이터베이스 공부하기

2개의 댓글

comment-user-thumbnail
2021년 4월 16일

항상 잘보고 있어요 ~~
그런데 에러코드도 기록하는 습관을 남기면 어떨까요!

1개의 답글