전체 글
-
AWS Foundation 기반 온디맨드 비디오 솔루션 구현 - 이론편프로젝트/미디어 스트리밍 서버 프로젝트 2022. 12. 12. 00:01
개요 스트리밍 서비스 구축을 위해 [그림]1과 같은 서비스를 배포할 수 있는 방법을 알아보겠습니다. AWS 공식문서를 기반으로 작성되었습니다. https://docs.aws.amazon.com/solutions/latest/video-on-demand-on-aws-foundations/video-on-demand-on-aws-foundations.pdf 비디오 콘텐츠 수집과 처리에 관련하여 조금 더 복잡한 workflows가 존재합니다. (Video on Demand on AWS) 각각의 역할 - AWSElementalMedia는 소스 형식의 미디어 파일을 스마트폰, 태블릿, PC 및 기타 장치와 같은 장치에서 재생되는 버전으로 코드 변환합니다. - 객체 스토리지용 AmazonSimpleStorageSe..
-
build.gradle to build.gradle.kts (Groovy를 Kotlin으로 마이그레이션)프로젝트/자프링 -> 코프링 마이그레이션 2022. 12. 11. 00:01
개요 모든 파일을 자바에서 코틀린으로 변경하였습니다. 이제 남은 것은 build.gradle의 groovy 기반의 빌드 스크립트를 kotlin으로 바꾸고자 합니다. Groovy DSL -> Kotlin DSL DSL은 특정 분야에 최적화된 프로그래밍 언어를 말합니다 예를 들면 SQL이 있습니다. Gradle공식문서에서 친절하기 Groovy를 Kotlin으로 마이그레이션 하는 문서를 제공합니다 https://docs.gradle.org/current/userguide/migrating_from_groovy_to_kotlin_dsl.html Migrating build logic from Groovy to Kotlin Declaring dependencies in existing configurations ..
-
6장 - 파티셔닝CS/데이터 중심 애플리케이션 설계 요약 2022. 12. 10. 00:01
복제의 한계 데이터셋이 매우 크거나 질의 처리량이 매우 높다면 복제만으로는 부족하고 데이터를 파티션으로 쪼갤 필요가 있습니다. 이 작업을 샤딩이라고 합니다. 파티션을 나눌 때는 보통 각 데이터 단위(레코드, 로우, 문서)가 하나의 파티션에 속하게 됩니다. 각 파티션은 그 자체로 작은 데이터베이스입니다. 파티셔닝과 복제 보통 복제와 파티셔닝을 함께 적용해 각 파티션의 복사본을 여러 노드에 저장합니다. 이를 통해 내결함성을 보장할 수 있습니다. 키 -값 데이터 데이터 파티셔닝 대량의 데이터를 어떻게 파티셔닝해야 할까요? 어떤 레코드를 어떤 노드에 어떻게 저장해야 할까요? 파티셔닝의 목적은 데이터와 질의 부하를 노드 사이에 고르게 분산하는 것입니다. 모든 노드가 동일한 분량의 담당한다고 가정할 때 10대의 노..
-
CQRS 아는 척하기 - 최범균세미나, 영상 요약정리 2022. 12. 9. 00:01
https://www.youtube.com/watch?v=xf0kXMTFJm8 최범균님의 CQRS 아는 척하기 1~2편을 요약한 글입니다. CQRS란? Command Query Responsibility Segregation 번역하면 명령과 쿼리 책임 분리입니다. 명령은 Create, Update, Delete를 뜻하며 시스템 데이터 변경을 합니다. 쿼리는 Select를 뜻하며 시스템 데이터 조회를 합니다. 명령 역할을 수행하는 구성 요소와 쿼리 역할을 수행하는 구성요소를 나누는 것이 CQRS입니다. 이렇게 명령과 쿼리를 나누면 어떤 장점이 있을까요? 명령과 조회에 단일 모델을 사용하면 요구사항에 따라 점점 Entity의 덩치가 커지게 됩니다. 이에 따라 책임과 역할이 애매해집니다. Read와 Creat..
-
OTT는 어떻게 콘텐츠를 보호할까?프로젝트/미디어 스트리밍 서버 프로젝트 2022. 12. 8. 00:01
개요 유료 콘텐츠 사업자의 입장에서 가장 우려되는 부분은, 서비스하는 콘텐츠가 불법으로 유출되어 유로 가입자의 수가 줄거나 성장이 둔화하는 것입니다. 이러한 콘텐츠 불법 유출을 막기 위해 여러 OTT 서비스들은 DRM과 워터마킹이라는 기술을 이용해 콘텐츠를 보호합니다. DRM이란? Digital Rights Management의 약자로 디지털 권한 관리는 저작권자가 그들이 배포한 디지털 자료의 사용을 제어하고 의도한 용도로만 사용하도록 제한하는 데 사용되는 모든 기술을 지칭하는 용어입니다. 주로 디지털 콘텐츠를 인증된 사용자가 인증된 기간 동안만 사용 가능하도록 강제하여, 정당한 비용을 지불하지 않은 불법적인 사용을 방지합니다. DRM의 핵심 기본적으로 원본 콘텐츠는 DRM 패키징이라는 과정을 거쳐 암호..
-
QueryDSL fetchCount() deprecated 대안JPA 2022. 12. 7. 00:01
개요 Querydsl의 이전 버전에서는 fetchResults(), fetchCount() 메서드를 이용하여 페이징 쿼리를 작성했지만 5.0.0 버전에서 deprecated 되었습니다. deprecated란? 일반적으로 위험하거나 더 나은 대안이 있기 때문에 프로그래머가 사용하지 않는 것이 좋습니다. 호환되지 않게 변경되거나 향후 버전에서 제거될 수 있습니다. 이유는 다음과 같습니다. fetchResults() : Get the projection in QueryResults form. Make sure to use fetch() instead if you do not rely on the QueryResults.getOffset() or QueryResults.getLimit(), because it ..
-
@SpringBootApplication 자바[Java] -> 코틀린[Kotlin]으로 변경프로젝트/자프링 -> 코프링 마이그레이션 2022. 12. 6. 00:01
기존 Java의 @SpringBootApplication @SpringBootApplication public class AnthillApplication { public static void main(String[] args) { SpringApplication.run(AnthillApplication.class, args); } } Kotlin의 @SpringBootApplication @SpringBootApplication class AnthillApplication fun main(args: Array) { SpringApplication.run(AnthillApplication::class.java, *args) } https://www.baeldung.com/kotlin/spring-boot..
-
[kotlin][Mockito][Junit5] any() must not be null 에러 해결프로젝트/자프링 -> 코프링 마이그레이션 2022. 12. 5. 00:01
개요 기존의 Mockito를 활용하여 given절에 메서드의 인자로 any()를 활용했습니다. any() must not be null java.lang.NullPointerException: any() must not be null any() 함수에서 null을 리턴하므로 에러가 발생합니다. kotlin class는 final이기 때문에 mocking이 불가능하다고 합니다. 이때 any를 사용하면 발생하는 예외 -> 특정 타입으로 구체화해서 해결하였습니다. 예시) 인자가 String이기 때문에 String 특정 타입으로 구체화 ArgumentMatchers.anyString() 문제 발생 하지만 직접 만든 클래스의 경우에는 특정 타입으로 구체화하는게 불가능했습니다. 이때 별도의 라이브러리 추가없이 an..