Spring (10) 썸네일형 리스트형 Rest API 호출 제한 - Bucket4J 배경 특정 사용자가 서비스에서 제공되는 검색 기능을 과도하게 이용해서 DDoS 적인 현상을 발생시켰고, 이를 방지하고자 몇 가지 방안을 마련하는 과정에서, 몇몇 Rest API에 대해 사용 제한 설정을 위해 알아본 내용을 정리한 내용이다. Rate Limit Algorithm 위와 같이 클라이언트로부터의 과도한 사용에 대해 서비스의 가용성을 안정적으로 유지하기 위해 트래픽을 일정 수준으로 조정하는 수단으로 언급되는 것이 Rate Limit Algorithm 이다. 특정 IP, 특정 Access-key 등에 대해 일정 횟수로 사용 제한을 하거나, 사용 시간 제한 등을 적용해서 사용 제한을 넘는 요청에 대해 거부를 하거나, 혹은 일정 시간 대기, 또는 요금을 받고 제한을 풀어주는 Business Model을.. Elastic Beanstalk - (2) War 파일 + Tomcat을 통한 Web Application Deploy 이전 포스팅에 이어 Spring Boot Application을 War Packge로 배포하는 과정을 정리해 보았다. Jar 파일을 이용한 배포 및 내부 구조 이해 Tomcat + War 파일을 이용한 배포 및 내부 구조 이해 .extension 폴더 및 각종 환경 설정을 더한 Spring Boot Application 배포 (by Jar 파일) Application 수정 Spring Boot Application을 War Package로 생성하기 위해, 이전에 작성했던 Code중에서 일부를 아래와 같이 수정하였다. gradle.build 수정 'war' plugin 추가 Version 변경 : 0.1-SNAPSHOT ==> 0.2-SNAPSHOT Dependency 추가 spring-boot-start.. Entity Inheritance in Hibernate - (3) Table per Class, Joined 상속 전략 Table Per Class 전략 Table-Per-Class 상속 전략을 사용할 때 Database에 생성되는 Table들은 이전 포스팅에서 소개했던 MappedSuperClass의 경우와 유사하다. 하지만 MappedSuperClass 전략을 사용할 때와는 달리 부모 Class가 다른 Entity Class와 Relation을 가지는 것을 지원하며, 이런 Relation이 Child Entity Class에 상속된다는 점이 다르다. 개념적으로 도식화 하면 과 같다. 부모 Class인 Product class와 Beverage Class가 Table로 생성되지는 않지만, 그 Class에서 정의된 attribute들은 모두 Child Entity Class에 상속되게 된다. 구현 과 같이 앞선 포스팅에서.. Entity Inheritance in Hibernate - (2) Single-Table 상속 전략 Overview Single-Table 상속 전략은 상속 관계에 있는 Entity를 모두 묶어서 하나의 Table로 만드는 방식이다. 이전에 사용한 예제를 Single-Table 상속전략을 사용했을 경우를 개념적으로 도식화 하면 과 같다. 최상위 Class인 Product Class가 모든 Child Class를 포함하는 상태로 Table이 만들어지며 다른 Entity Class와의 Relation도 이 Class에서 처리된다. 모든 상속 관계가 한 Table로 모이는 Diagram Single-Table 상속 전략이 가지는 장, 단점은 아래와 같다. 장점 상속 관계에 있는 Entity 관리 편의성과 높은 성능 다른 Entity들과의 Relation 설정 용이 단점 상속 관계에 있는 모든 Entity가 .. Entity Inheritance in Hibernate - (1) MappedSuperClass 전략 ORM(Object-Relational Mapping), JPA(Java Persistence API), Hibernate 간단하게 3개에 대해 언급하자면... ORM : Class와 DB Table Mapping. 즉, 하나의 Class를 DB의 Table로 Mapping 해서 Code로 DB Table을 관리하고 Query할 수 있게 하는 기술이다. JPA : Java에서 ORM 기술을 표준화한 API 명세이다. Hibernate : JPA에서 정의한 API명세를 구현한 구현체이다. (Hibernate외에도 몇 가지 구현체가 더 있지만 최근에는 Hibernate가 defacto standard가 됨.) Inheritence in JPA Java의 Class가 가지는 특징 중에 하나는 '상속(Inher.. Spring Boot Application을 Docker Image로 생성하기 - 3. jib plugin을 활용 + 배포 내용이 3편에 걸쳐 나누어져 있습니다. Spring Boot Application을 Docker Image로 생성하기 - 1. Docker file (with Jar) Spring Boot Application을 Docker Image로 생성하기 - 2. Docker Image Layer 활용 Spring Boot Application을 Docker Image로 생성하기 - 3. jib plugin을 활용 + 배포 Case 3. jib plugin을 활용해서 Image 생성 위에서 언급했던 방식이 Build해서 만들어진 jar(or war) file을 활용해서 Docker image를 만드는 방법인데, 별도의 Docker daemon 없이 gradle이나 maven plugin을 이용해서 Docker i.. Rest API에서 date type의 Parameter 처리 최근에 Rest API를 추가할 때 datetime type의 parameter를 처리하는 과정에서 살짝 고생을 했다. 그냥 String으로 받아 Parameter Validation과정에서 Convert해서 쓰면 될 문제였는데, 가끔 발동되는 오기로 인해 관련 내용을 파게 됐고 그 내용을 정리해 보았다. 실험 환경 Spring Boot v2.19 JDK 1.8 예제 코드 ... @RestController public class DateController { @PostMapping("/date") public ResponseEntity dateTest(@RequestParam("date") Date date) { SimpleDateFormat dateFormat = new SimpleDateFormat.. Spring Boot Application을 Docker Image로 생성하기 - 2. Docker Image Layer 활용 내용이 3편에 걸쳐 나누어져 있습니다. Spring Boot Application을 Docker Image로 생성하기 - 1. Docker file (with Jar) Spring Boot Application을 Docker Image로 생성하기 - 2. Docker Image Layer 활용 Spring Boot Application을 Docker Image로 생성하기 - 3. jib plugin을 활용 + 배포 Case 2. Layer를 세분화 해서 Image 생성 Docker image는 여러 개의 Layer로 나뉘어서 저장/관리되는데 기존 Image가 Update되더라고 변경되지 않는 Layer나 다른 Image들과 공유하는 Layer는 변경없이 그대로 다시 사용된다. 그런데 jar 파일을 기반으.. 이전 1 2 다음