💻 프로젝트
[Campper] Redis template 사용하여 용량 개선하기
Redis를 사용하는 방법에는 두 가지가 있다. CrudRepository 상속 Redis template 사용 CrudRepository CrudRepository 인터페이스는 spring data commons 모듈에 선언된 인터페이스로 데이터베이스를 다루는 데 필요한 메서드를 모아둔 인터페이스입니다. 도메인 클래스 타입과 ID 타입을 제네릭 인자로 전달하고 CrudRepository 인터페이스를 상속하면 관계형 데이터베이스부터 NoSQL 데이터베이스까지 데이터 조회 기능과 갱신 기능을 편리하게 사용할 수 있습니다. Spring Data Redis Repository 역시 CrudRepository 인터페이스에 선언된 모든 메서드를 오버라이딩해 Redis Hash 데이터에 쉽게 접근할 수 있습니다. ..
[Campper] Spring Cloud Feign 사용하여 공공데이터 쉽게 관리하기
Feign + 공공데이터 Feign 이란? Feign은 Netflix에 의해 처음 만들어진 Declarative(선언적인) HTTP Client 도구로써, 외부 API 호출을 쉽게 할 수 있도록 도와준다. “선언적인” 이란 어노테이션 사용을 의미하는데, 소스코드가 아닌 어노테이션 선언만으로 트랜잭션을 적용할 수 있는 기술이다. 공공데이터란? 공공데이터란 공공기관이 만들어내는 모든 자료나 정보, 국민 모두의 소통과 협력을 이끌어내는 공적인 정보를 말한다. ↗ 공공데이터_포털 공공데이터 포털 국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase www.data.go.k..
[Campper] SpringSecurity + JWT + 로컬로그인 인증 구현하기
SpringSecurity SecurityFilterChain은 수많은 필터로 이루어져 있다. 로컬 로그인의 인증 구현을 위해 전반적인 인증 로직 및 UsernamePasswordAuthenticationFilter을 자세히 보면 된다. Authenticaiotn Flow 전반적인 인증 흐름은 위와 같다. 로그인 요청 로그인 인증 요청이면 UsernamePasswordAuthenticationFilter가 요청을 가로 채 id, pw를 이용한 UsernamePasswordAuthenticationToken인증 객체를 만든다. AuthenticationManager에 인증을 위임한다. AuthenticaitonManager을 구현한 ProvicerManager은 시큐리티에서 기본적으로 제공하는 Authen..
[HongEat] 리팩토링 - Enum/ParameterBinding(Converter)
ParameterBinding 앞서 Dto로 전달한 Category의 viewName으로 가게리스트를 카테고리별로 조회하는 기능을 만들고자 했다. /** * 가게 리스트 종류별 조회 */ @GetMapping("/category/{category}") @Operation(summary = "카테고리별 가게 리스트 조회 요청", description = "카테고리별 가게 리스트 조회 요청 API 입니다.") public ResponseEntity getStoresByType( @PathVariable("category") Category category) { List getStoreDtos = storeService.getStoresByType(category); return ResponseEntity.o..
[HongEat] 리팩토링 - Enum/toJson(@JsonValue)
@JsonValue Enum 변수를 Json으로 변환하였을 때 enum의 value(=viewName) 값이 아닌 name이 출력되는 현상이 나타났다. @JsonValue는 전체 인스턴스를 직렬화할 때 사용하는 단일 메서드를 나타낸다. 예를 들어, enum에서 getViewName 메서드에 @JsonValue를 넣어주어 이름을 통해 직렬화하게 한다. public enum Category { RESTAURANT("음식점"), CAFE("카페"), BAKERY("베이커리"), PUB("주점"), BAR("바"), ETC("기타"); private String viewName; @JsonValue public String getViewName() { return viewName; } ... } Dto에 get..