[Test] ATDD - 5
내용
- API 스펙 요구사항에 대해 ATDD를 진행했다.
- 테스트가 모두 통과할 때 마다, API 스펙 요구사항을 충족하고 있음을 확신할 수 있었다.
- 테스트가 추상적이어서, 리팩토링에 따른 테스트코드 수정이 거의 불필요했다.
태그
Test, ATDD
[인증] JWT - 5
내용
- 로그인 인증에 JWT를 사용했다.
- 상태 정보(세션 등)를 서버에 저장하지 않아도 돼, 서버 부담을 줄일 수 있었다.
태그
인증, JWT
[Spring] Interceptor - 3
내용
- 로그인 인증이 필요한 URI 요청에 Interceptor를 걸고, JWT 유효성 검사 로직을 추가했다.
- JWT 검사 책임을 Interceptor로 분리할 수 있었다.
태그
Spring, Interceptor
[Spring] Custom Annotation, ArgumentResolver - 3
내용
- Custom Annotation을 ArgumentResolver에 등록해, 해당 Annotation이 메소드의 매개변수 앞에 붙어있다면 매개변수에 현재 로그인 되어있는 Member객체를 넣어주도록 했다.
- 로그인 사용자 사전 조회 책임을
Custom Annotation + ArgumentResolver
로 분리할 수 있었다.
태그
Spring, Annotation, ArgumentResolver
[OOP] Layer와 Domain의 책임 분리 - 4
내용
- Service 레이어에 모든 비즈니스 로직을 작성하다보니 Service 클래스가 매우 커지고, 도메인과 Service 레이어의 책임 분할이 되지 않았다.
- 비즈니스 로직은 모두 도메인 내부로 옮기고, Service 레이어에서는 도메인의 비즈니스 로직 실행 순서만 보장하도록 해, 각각의 책임을 분리했다.
태그
OOP, Domain, Service
[JDBC] NamedParameterJDBCTemplate 적용 - 3
내용
- 파라미터를 순서 숫자가 아닌 컬럼명 문자열로 표기해 더욱 직관적이다. 유지보수에 유리하다.
태그
JDBC
[암호화] BCrypt - 5
내용
- 리뷰어 미립이 Hash 암호화에 대한 학습 키워드를 제공해줬다.
- 같은 원본 데이터에 대해 암호화를 할 때마다 매번 다른 Hash 결과값이 나오는 BCrypt에 대해 학습했다.
태그
암호화
[DB] Transaction 격리 수준 - 5
내용
- Transaction 격리 수준에 대해 공부하고, 지하철 구간 수정 작업 단위에는 얼만큼의 격리 수준으로 Transaction을 걸어야 하는지 리뷰어 재연링과 함께 토론하며 고민했다.
태그
DB, Transaction
[OOP] 원시값 객체 포장 - 2
내용
- 지하철 요금 원시값을
Fare
값 객체로 포장했다.
- 생성자에서 값 자체의 유효성 검증을 할 수 있었다.
- 비즈니스 로직을 객체 내부에서 처리할 수 있었다.
태그
OOP
[배포] 배포 자동화 - 4
내용
- 배포 자동화가 적용되지 않은 상태에서는
github에서 최신 코드 가져오기 -> 빌드 -> 기존에 실행중인 애플리케이션 종료 -> 새로운 버전의 애플리케이션 실행
의 과정을 일일이 명령어를 쳐서 실행해야 했다.
- 이 과정 전체를 shell 스크립트로 작성했다.
- 해당 shell 스크립트를 실행시키기만 하면 새로운 버전의 애플리케이션이 자동으로 배포되어 배포가 매우 편리해졌다.
태그
배포
[Web] CORS 정책 - 3
내용
- 프론트 서버와 백엔드 서버가 따로 운영되면서,
CORS
정책 위반 에러가 발생했다.
Access-Control-Allow-Origin
헤더 설정을 통해 해당 에러를 해결했다.
태그
Web, CORS
[Docs] Spring REST Docs - 5
내용
- 프론트 크루들과 협업하기 위해 API 문서화가 필요했다.
- 테스트를 통과해야 문서화가 되고, 이에 따라 프로덕션 코드가 실시간으로 반영되는 Spring REST Docs를 적용했다.
태그
Docs, REST
[OOP] 다형성을 통한 if문 제거 - 5
내용
- 지하철 요금 정책이 추가될 때 마다 if문이 생겼다.
- Enum과 함수형 인터페이스의 다형성을 사용해 if문을 제거했다.
태그
OOP, Java