Category: 스터디LAB
TDD
의 목표 => 작동하는 Clean Code를 만드는게 목표
TDD 원칙
자동화된 테스트가 실패한 경우만 새로운 코드를 작성한다. (대원칙) – 잘동작중인 코드를 변경하지 말라
중복을 제거한다. (대원칙) – 리팩토링
실패하는 테스트를 작성하기 전엔 코드를 작성 하지 않음 (대원칙을 지키기위한) – 테스트 코드를 먼저 작성한다.
실패하는 테스트 코드를 한번에 하나 이상 작성하지 않는다.(대원칙을 지키기위한)
실패하는 테스트를 통과하기에 충분한 정도를 넘는 코드를 작성하지 않는다. (대원칙을 지키기위한) – 열을 알지 말자
TDD의 개발 발식
Spring Security
WebSecurityConfigurerAdapter를 상속 받아 HttpSecurity 및 WebSecurity를 설정하고 Filter 및 Provider를 등록 한다. HttpSecurity 설정은 login page, cors, csrf 등 다양하게 할 수 있다. provider는 JWT 혹은 Username, Password 로 인증을 제공하는 역할을 한다.
Username, Password로 인증을 처리하고 싶은 경우 UsernamePasswordAuthenticationFilter를 상속받아 Custom filter를 작성한다. 그리고 처리한 데이터는 Authentication Manager로 넘겨서 인증 처리를 한다.
인증 성공 및 실패에 대해 Handler를 등록한다.
JPA 관련 application.properties
아래 URL 에서 application.properties에 들어갈 h2, datasource설정을 찾을수 있다.
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties-data
hikari 는 DB 와의 Connection pool을 관리해주는 역할을 한다. 서버 실행시 H2는 schema.sql 의 쿼리를 한번 실행한다. 이를 이용해 테이블을 만들수 있다.
Spring Boot JPA (2)
객체지향 쿼리 언어
JPQL, Criteria 쿠리, 네이티브 SQL, JDBC, MyBatis SQL 매퍼 프레임워크 사용
JPQL 특징
키워드는 대소문자 구분 안함
엔티티명을 사용
별칭이 필수
TypedQuery — 반환타입이 명확한 경우 Query — 반환타입이 명확하지 않는 경우 (OBJ로 반환)
Spring Boot JPA (1)
ORM 사용 이유
SQL 의존 개발, 코드의 반복 즉 데이터베이스 의존적 개발을 지양 하기 위해
장점
비지니스 로직에 집중할 수 있다.
선언문 할당 등이 없어짐
코드의 재상용 유지보수성
DBMS 종속성이 적다. => 데이터베이스를 교체해도 시간이 덜 걸릴 수 있다
react-native-crypto-js, crypto-js, AES 암호화
NodeJS 서버와 React-native 간에 데이터를 주고 받는데, AES 암호화를 이용해 주고 받을일이 생겼다.
react-native-crypto, react-native-crypto-js, crypto-js, crypto 패키지를 테스트 하면서 코딩을 했는데 … 엄청난 뻘짓과 삽질 후에 결국 crypto-js 로 AES 암호화를 구현했다.