[Spring] RestTemplate을 활용한 공공데이터 API 호출하기
·
Framework/Spring
내일배움캠프 최종 프로젝트를 진행하면서,공공데이터 API를 활용해 주차장 정보를 주기적으로 수집하고 DB에 저장하는 기능을 구현하였습니다. 이 과정에서 외부 API를 호출하기 위해 RestTemplate을 사용했습니다. 이번 글에서 해당 기능을 구현하면서 공부한 RestTemplate과 활용에 대해 정리하고자 합니다. 1. RestTemplate에 대해 알아보기[정의 및 특징 요약]RestTemplate은 Spring에서 제공하는 동기 방식의 HTTP 클라이언트로,사용법이 간단하고 직관적이고 다양한 HTTP 메소드를 지원합니다.하지만, 현재는 공식적으로 deprecated 예정되어 있어 WebClient를 권장하고 있습니다. (1) RestTemplate의 특징1️⃣ 동기 방식의 HTTP 요청 처리..
[Spring] @Builder 사용의 이점
·
Framework/Spring
1. Builder 패턴과 @Builder란?Builder 패턴은 복잡한 객체 생성 과정을 단계별로 구성할 수 있도록 도와주는 디자인 패턴으로,Lombok의 `@Builder`어노테이션은 Builder 패턴을 적용할 수 있도록 도와준다. 복잡한 객체 생성 과정이란?매개 변수가 많은 생성자 일부 필드가 선택 사항이고, 조건에 따라 값이 달라져야 하는 경우객체 생성 시 유효성 검증, 기본 값 설정, 복잡한 계산 로직이 필요한 경우 따라서, Builder 패턴을 사용하면,생성자에 전달하는 파라미터의 순서나 누락 문제를 방지하고가독성이 좋고, 코드 유지보수가 쉬우며불필요한 생성자 오버라이딩 줄일 수 있다. 2. Builder 패턴 사용 예시[ParkingLot 엔티티]package com.parkez.par..
[Spring] 캐시를 이용한 인기 검색어 조회 기능 개발 로그
·
Framework/Spring
1. 캐시란?데이터나 값을 미리 복사해두는 임시 저장소 라고 생각하면 된다.클라이언트가 증가하면 DB에 대한 요청이 많아지고, 이로 인해 DB가 발생해 성능이 떨어질 수 있다. 이때, 서버와 데이터베이스 사이에 캐시를 두어,주로 자주 사용하는 데이터를 캐시에 임시로 저장해 두면,동일한 요청에 대해서 DB에 직접 접근하지 않고 빠르게 응답할 수 있어 성능이 향상된다. 🤔 이 프로젝트에서 왜 캐시를 사용하였는가?이번 프로젝트에서는 인기 검색어 기능 구현해야 했다. 여러 사용자가 키워드를 입력하여 제품을 검색하면, 해당 검색어는 SearchLog 테이블에 저장된다. 이 테이블을 기반으로 사용자는 인기 검색어를 조회할 수 있다. 하지만 다수의 사용자가 동시에 인기 검색어를 요청하게 되면,SearchLog ..
Spring Security와 JWT를 이용한 인증/인가 정리
·
Framework/Spring
1. Spring Security 란?자바 어플리케이션에서 인증과 인가를 제공하는데 집중된 보안 프레임워크입니다.🔍 인증과 인가란?인증(Authentication)은 사용자가 자신의 신원을 확인하기 위해 로그인 등의 과정을 거치는 것이며,인가(Authorization)은 인증된 사용자가 특정 리소스나 기능에 접근할 수 있는 권한이 있는지 확인하는 과정입니다.   2. Spring Security의 구조(1) Security Filter ChainSecurity Filter Chain는 어플리케이션으로 들어오는 HTTP 요청을여러 보안 필터들이 보안 검사를 순차적으로 처리하는 일련의 흐름이며,각 필터는 요청의 특정 보안을 담당합니다. 예를 들어 사용자의 인정 여부를 확인하거나 권한이 있는지 판단하는 역할..
[플러스 주차 개인과제] QueryDSL을 사용하여 검색 기능 구현하기
·
Framework/Spring
1. QueryDSL 을 사용하여 검색 기능 만들기(1) 문제 요구 사항    (2) TodoSearchResponse DTO 생성package org.example.expert.domain.todo.dto.response;import lombok.AllArgsConstructor;import lombok.Getter;import lombok.Setter;import lombok.NoArgsConstructor;@Getter@Setter@NoArgsConstructor@AllArgsConstructorpublic class TodoSearchResponse { private String title; private long managerCount; private long commentCou..