프로젝트
-
Repository와 Service 계층 Kotlin으로 변경하기프로젝트/자프링 -> 코프링 마이그레이션 2022. 9. 25. 00:01
기존 Java Repository interface BookRepository extends JpaRepository { Optional findByName(String bookName); } 변경된 Kotlin Repository interface BookRepository : JpaRepository { fun findByName(bookName: String): Optional } 여기서? 대신에 Optional을 사용한 이유는 Service 계층의 구현 변경 최소화를 위해 사용합니다. 추후에 Service계층을 변환하며 다시 Optional을 제거할 예정입니다. 변경 전 Java Service package com.group.libraryapp.service.user; import com.grou..
-
도메인 계층을 Kotlin으로 변경하기프로젝트/자프링 -> 코프링 마이그레이션 2022. 9. 21. 00:01
도메인 계층은 POJO에 JPA Entity라는 특징이 있습니다. 1. Book이라는 Entity를 JavaBook이라는 이름의 Entity로 변경합니다. Shift + F6을 사용하여 rename 하면 편리합니다. package com.group.libraryapp.domain.book; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import static javax.persistence.GenerationType.IDENTITY; @Entity public class JavaBook { @Id @Gener..
-
자바 프로젝트에서 코틀린 시작하기프로젝트/자프링 -> 코프링 마이그레이션 2022. 9. 18. 00:01
기존 자바 프로젝트에서 코틀린을 시작하고자 합니다. 이 포스팅은 코틀린 공식문서 "Tools -> Build tools -> Gradle"과 "Platforms -> JVM -> Spring -> Test code using JUnit in JVM - tutorial" 그리고 "실전! 코틀린과 스프링 부트 도서관리 애플리케이션 개발하기 강의를" 기반하여 작성되었습니다. 1. build.gradle에 코틀린에 관한 의존성들을 추가해줍니다. plugins { id 'org.jetbrains.kotlin.jvm' version '1.6.21' } dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" } compileKotlin { ko..
-
MultipartFile 컨트롤러 단위 테스트(MockMvc)프로젝트/미디어 스트리밍 서버 프로젝트 2022. 8. 24. 01:03
컨트롤러 메서드 @PostMapping(consumes = [MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE]) fun fileUpload( @RequestPart request: UploadRequest, @RequestPart file: MultipartFile ): ResponseEntity { // todo : videoService 에서 upload 이후 반환되는 아이디 및 등록 과정 필요 metadataService.registerMetadata(file) val uploadResponse = videoService.upload(request, file) return ResponseEntity( BasicRespons..
-
Kotest와 MockK를 활용하여 컨트롤러 단위테스트하기프로젝트/미디어 스트리밍 서버 프로젝트 2022. 8. 23. 18:55
개요 JUnit5와 @WebMvcTest를 이용한 컨트롤러 단위 테스트는 익숙하지만 Kotest와 MockK를 활용한 @WevMvcTest를 수행하고자 합니다. 일단 아주 간단한 테스트 컨트롤러를 하나 만들고 단위테스트를 진행해보겠습니다. TestController @RestController class TestController { private val test = "test" @GetMapping fun test(): String { return test } } Controller 단위 테스트 @WebMvcTest(TestController::class) class MyTest3 constructor(@Autowired val mockMvc: MockMvc) : BehaviorSpec({ given(..
-
ffmpeg install (Mac OS, Amazon Linux)프로젝트/미디어 스트리밍 서버 프로젝트 2022. 8. 22. 13:12
Homebrew로 FFmpeg 설치하기 다음 명령어를 실행하면 바로 FFmpeg이 설치됩니다. 의존 패키지가 많아서 시간이 좀 걸립니다. $ brew install ffmpeg ... ==> Installing ffmpeg ==> Pouring ffmpeg--5.0.arm64_big_sur.bottle.1.tar.gz 🍺 /opt/homebrew/Cellar/ffmpeg/5.0: 272 files, 48.8MB ... FFmpeg을 설치하고 ffmpeg을 인자 없이 실행하면 버전, 빌드 옵션, 기본적인 사용 방법이 출력됩니다. $ ffmpeg ffmpeg version 5.0 Copyright (c) 2000-2022 the FFmpeg developers built with Apple clang ver..
-
JPA Paging 적용하기프로젝트/미디어 스트리밍 서버 프로젝트 2022. 8. 20. 19:25
페이징이란? 만약 게시글이 100만 건이라면 어떻게 될까요? 한 화면에서 모든 게시글을 보여줄 수 없기 때문에 페이지를 나눠서 게시글을 보여주는 방식으로 해결합니다. 그러면 100만건의 10만 개의 페이지로 나누어 10건씩 데이터를 전송할 수 있습니다. JPA와 페이징 JPA를 사용하면 PagingAndSortingRepository 인터페이스를 통해 쉽게 페이징을 구현할 수 있습니다. public interface PagingAndSortingRepository extends CrudRepository { Page findAll(Pageable pageable); } 이미 findAll이 구현되어 있고 Pageable이라는 객체를 받아 Page를 반환합니다. 이때 Controller에서 받을때 Page..
-
Json with MultipartFile프로젝트/미디어 스트리밍 서버 프로젝트 2022. 8. 19. 15:03
개요 MultipartFile을 통해 S3에 저장하던 중 제목과 내용도 함께 저장해야 하는 요구사항을 처리하고자 했습니다. 가장 간단하게 든 생각으로 "DTO를 만들어서 처리하자"였습니다. data class FileRequest( val subject : String, val content : String, val file : MultipartFile, ) { } 하지만 API를 호출하여 전달하려고 하는데 MultipartFile은 Json으로 어떻게 보내지?라는 생각이 들었습니다. @RequestPart 활용하기 API에서 consume할 MediaType을 지정해주는 방식을 사용해서 하나의 API에서 Json과 MultipartFile을 한 번에 전달받을 수 있습니다. @PostMapping(con..