1.어노테이션 만들기컨트롤러에서 요청 제한 로직을 직접 작성하는것은 코드가 너무 중복되고 비효율적이라 생각하기때문에 어노테이션으로 만들어서 사용하기로 하였다. 다음은 메서드에 적용하여 런타임동안 유지되고 파라미터로 value와 timeWindow를 받게 하였다.@Target(ElementType.METHOD) // 메서드에만 적용@Retention(RetentionPolicy.RUNTIME) // 런타임까지 유지public @interface RateLimit { long value() default 5; // 초당 허용 요청 수 long timeWindow() default 1; // 제한 시간 (초)} 다음과같은 형태로 어노테이션을 사용할수있다.@Rat..
BackEnd/SpringBoot
1.Spring Cache반복적인 연산 결과를 메모리또는 외부 저장소(Redis 등)에 저장하여 성능을 최적화하는 기능이다.이번에는 Redis를 프로젝트에 추가했기때문에 Redis를 사용해서 spring Cache를 사용할것이다. 2.의존성 추가redis 의존성과 spring Cache의존성을 추가한다. org.springframework.boot spring-boot-starter-data-redis org.springframework.boot spring-boot-starter-cache 3.CacheConfig 파일생성@EnableCaching을 통해 Spring Cache를 활성화하고 RedisCacheManager로 Redis를 캐시 저장소로 지정한다.@Conf..
1.Redis(Remote Dictionary Server)키-값(key-value) 구조를 사용하는 NoSQL 데이터베이스 2. Redis 실행하기 (Docker)Docker를 실행하고 다음 명령어를 실행하여 redis 를 실행한다.docker run --name redis -d -p 6379:6379 redis 3.SpringBoot 프로젝트에 Redis 의존성추가Spring Data Redis를 기반으로 하며, Redis 연결, 데이터 저장, 캐싱 등을 편리하게 처리할 수 있도록 도와주는 의존성을 추가한다. org.springframework.boot spring-boot-starter-data-redis 4.Redis 설정 application.propertiessp..
1.Entity 설계우선 기존 Entity에 CartItem , OrderItem 테이블을 추가하였다. 각각 Customer 과 Product에 연결되어있다. 2.SpringBoot Entity 생성2-1.Customer 수정orderedItems,cartItems을 Customer 엔티티에 추가한다CascadeType.ALL로 해서 Customer가 삭제될시 연결된 orderedItems,cartItems를 삭제한다.public class Customer { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToOne(cascade = CascadeType.ALL) @JoinColumn(..
1.@EnableMethodSecurity 설정 (SecurityConfig)EnableMethodSecurity는 메소드 보안을 활성화하는 설정이다.PreAuthorize을 사용하기 위해 prePostEnabled 옵션을 true 로 설정하였다.@Configuration@EnableWebSecurity@EnableMethodSecurity(prePostEnabled = true)@RequiredArgsConstructorpublic class SecurityConfig {} 2.createToken id,role 추가 (JwtTokenProvider)createToken을 할때 claims를 사용하여 PostAuthorize 에 사용할 role과 id를 추가해준다.// JWT 토큰 생성public ..
1.맴버 권한 나누기지금 Member에는 role 로 역할을 나누고 있고 CUSTOMER ,SELLER , ADMIN 은 각각 접근할수있는 엔드포인트가 달라야 하므로 이를 설정할것이다.public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "member_id", nullable = false, unique = true) private String memberId; @Column(nullable = false) private String password; @Column(nullable = false) private St..
0.만들 엔드포인트우선 Product 관련 엔드포인트는 다음과같이 5개를 우선적으로 추가할것이다.위 2개는 사용자들을 위한 API엔드포인트고 추가,수정,삭제의 경우에는 우선은 관리자 권한으로 접근 가능하다고 생각하며 만들것이다.HTTP 메서드엔드포인트설명GET/api/products/{productId}상품 상세 조회GET/api/products/search상품 목록 검색POST/api/products/create상품 추가 (관리자)PUT/api/products/modify/{productId}상품 수정 (관리자)DELETE/api/products/delete/{productId}상품 삭제 (관리자) 1. Controller 스켈레톤 코드내부 비지니스 코드를 제작하기 이전에 컨트롤러에 스켈레톤 코드로..
1.JWT인증과 정보 교환을 위해 사용되는 토큰 기반 인증 방식중 하나로 로그인 기능에 JWT(JSON Web Token)을 사용할거다.그를 위해 일단은 JWT사용을 위한 의존성을 추가해준다. io.jsonwebtoken jjwt-api 0.12.6 io.jsonwebtoken jjwt-impl 0.12.6 runtime io.jsonwebtoken jjwt-jackson 0.12.6 runtime 2.JwtTokenProviderJWT를 생성, 검증, 그리고 사용자 정보를 추출하는 역할을 담당하는 클래스인 JwtTokenProvider를 생성해줬다.@Slf4j@Componentpublic class JwtTokenProvider { p..