Amazon S3에 정적 파일을 업로드하여 웹 호스팅을 할 수 있습니다. 작업 내용 1. Route 53에 레코드 세트 저장 레코드 세트 이름 : 호스팅 할 URL 주소 유형 : CNAME 유형 값 : s3-website.ap-northeast-2.amazonaws.com CloudFront를 추가로 이용하는 경우 *.cloudfront.net을 A 레코드의 별칭으로 등록해야 합니다. 기타 : TTL(초), 라우팅 정책은 건들 필요 없음. 2. S3 Bucket 생성 버킷 이름 : 호스팅 할 URL 주소 모든 퍼블릭 액세스 차단 : 체크 해제 속성 탭 -> 정적 웹 사이트 호스팅 설정 "이 버킷을 사용하여 웹 사이트를 호스팅합니다." 클릭 인덱스 문서(필수), 오류 문서 설정 정적 파일 업로드 버킷 정책..
분류 전체보기 검색 결과
AWS에서의 DDoS 공격 대처 방안 AWS에서 DDoS를 막기 위해 Auto Scaling, DNS Nameserver Shifting 메커니즘 등을 이용할 수 있습니다. 하지만 Shield Standard 상품이 기본, 무료로 제공되고 있으며 이에 CloudFront + Route 53을 함께 서비스에 적용하면 외부에 공개된 인프라(L3, L4) 수준에서 가용성을 포괄적으로 보호할 수 있습니다. 정확하게 몇 %의 가용성이 확보되는지는 공격 수준에 따라 천차만별이겠지요. WAF(Web Application Firewall)를 이용하면 L7까지 방어할 수 있으나 Rule Setting 난이도가 높아 AWS 파트너사의 기술 지원을 받는 것이 좋습니다. 참고 문헌 https://aws.amazon.com/k..
코틀린 data class 코틀린의 data class는 아래처럼 생성자에 필드를 선언하는 식으로 작성하며, 파라미터가 없는 기본 생성자는 존재하지 않습니다. data class EmployeeCreateRequest( val departmentId: UUID, val jobType: String, val name: String, val email: String // ... ) 문제는 Jackson 라이브러리에서 default 생성자가 없는 클래스로 deserialize를 수행하면 아래처럼 에러 문구가 출력됩니다. (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or propert..
JPA Repository를 이용한 레코드 삭제 레코드를 삭제하는 코드를 작성하다 보면 1:N의 관계에서 1의 id를 가지고 N의 레코드를 삭제할 때가 있습니다. JpaRepository에서 team과 teamMember의 관계를 예로 들어 아래처럼 코드를 짤 수 있습니다. fun deleteAllByTeamId(teamId: UUID) 물론 제대로 동작도 합니다. 다만 이 코드는 과도한 성능이 필요할 수 있는 위험을 내포하고 있습니다. 만약 해당 팀의 멤버가 10000명이라면 어떻게 될까요? 그러면 아래처럼 무수한 delete 쿼리가 DB 서버로 날아가게 됩니다. // pseudo code select teamMember by teamId delete teamMember1 delete teamMembe..
kotlin에서는 java void 타입과 동일한 타입으로 Unit을 도입하였습니다. 물론 kotlin native로는 오직 하나의 값을 가지는 것 또한 Unit으로 칭합니다. 아래는 Kotlin 레퍼런스 문서의 설명입니다. Unit Unit은 "함수가 리턴은 하지만 그 결과값이 무의미하다"라는 의미입니다. object Unit For Common, JVM, JS The type with only one value: the Unit object. This type corresponds to the void type in Java. For Native The type with only one value: the Unit object. Nothing 반면 Nothing은 함수가 리턴 자체를 하지 않는다를 의..
Kotlin의 모든 class는 기본적으로 final이기 때문에 JPA Lazy Proxy가 적용되지 않습니다. JPA Lazy Proxy를 이용하기 위해 kotlin-allopen compiler plugin 의존성을 추가해주고 JPA Entity에 allOpen 설정을 명시해줘야 합니다. gradle 예시 buildscript { // ... // dependencies { classpath group: 'org.jetbrains.kotlin', name: 'kotlin-allopen', version: "$kotlinVersion" } } allOpen { annotation "javax.persistence.Entity" }