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" }