RoadMaker
-
[AWS] Lambda(Edge)와 CloudFront를 이용하여 온디맨드 이미지 리사이징 구현하기AWS 2023. 9. 9. 13:21
때는 몇 주 전, 나는 크래프톤 정글에서 'RoadMaker'라는 로드맵을 생성하고 공유할 수 있는 웹 플랫폼을 개발하고 있었다. 그런데 테스트 과정에서 로드맵 썸네일의 용량이 크면 클수록 메인 페이지의 로딩 속도가 느려지는 문제에 부딪혔다. 예를 들어, 썸네일 하나가 대략 1MB라면 40개의 로드맵 썸네일을 불러오는 데 최대 40MB의 데이터를 다운로드해야 하게 된다. 이 문제를 해결하기 위해 Lambda와 Cloudfront를 사용한 온디맨드 이미지 리사이징을 구현했다. 오늘은 이 글을 통해 그 과정을 공유하고자 한다. 1. 온디맨드 리사이징이란? 'On-Demand'는 '요청 시에', '필요할 때' 제공된다는 것을 의미한다. 그런 의미에서 온디맨드 리사이징이란 이미지를 업로드할 때 미리 리사이징해 ..
-
[Spring] Spring Boot에서 S3 연동하기Server/Spring 2023. 8. 2. 01:45
개발자 학습 로드맵을 만들어주는 RoadMaker 프로젝트를 개발하던 도중 로드맵의 썸네일을 등록하는 API가 필요해졌다. 이전 회사에서 Express.js에서 S3와 multer를 이용해 multipart/form-data로 전달된 이미지를 S3에 저장하는 API를 만들어본 적은 있었는데, 이번에는 스프링부트로 해당 작업을 해보게 되어 은근히 반가웠다. 이번 포스팅은 SpringBoot와 S3를 연동하는 것에 집중할 예정이기에 S3에 대해서 자세히 다루지는 않을 예정이다. 1. 버킷 1.1. 버킷 생성 AWS 콘솔에 접근한 뒤 버킷을 만든다. ACL을 열어야 사용자가 저장된 이미지를 볼 수 있기 때문에 다 열어준다(안 그러면 Access Denied를 만나게 될 것이다). 이후 '버킷 만들기' 버튼을 ..
-
[Java] DateTimeFormatter로 LocalDateTime 포맷팅 하기Language/Java 2023. 7. 31. 23:10
로드맵 플랫폼인 RoadMaker를 개발 중, 프론트엔드 팀원이 로드맵 생성 일자를 포맷팅 해달라는 요청을 했다. 이전 포맷은 '2023-07-29T15:40:31.849326'와 같은 ISO-8601 포맷이었는데 이는 너무 길어 UI가 예쁘게 나오지 않았고, 사용자가 읽기도 어려울 것 같았다. LocalDateTime 객체를 원하는 형식으로 포맷팅하려면 'java.time.format.DateTimeFormatter' 클래스를 사용하면 된다. DateTimeFormatter 클래스의 기본 사용법은 다음과 같다. import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class DateTimeFormatting {..
-
[Debug] jakarta.persistence.NonUniqueResultException: query did not return a unique result 해결 방법Toy Project/RoadMaker 2023. 7. 29. 22:46
크래프톤 정글에서 팀 프로젝트인 RoadMaker를 개발 중 위와 같은 에러가 발생했다. 위 에러는 JpaRepository의 조회 결과가 2개 이상 나왔지만, 리턴 타입이 List가 아닌 Optional라서 발생한 문제다. public interface MemberRepository extends JpaRepository { public Optional findByNickname(String nickname); } 프로젝트 정책상 중복된 닉네임을 갖는 회원이 생성되면 안되기에 위처럼 코드를 짰는데, 중복 검사를 하는 부분에 문제가 있어, 중복 닉네임을 갖는 계정이 2개 이상 생성되버린 것이었다. 따라서 문제되는 데이터를 제거하고, 중복 검사 로직을 디버깅하여 문제를 해결하였다. mongodb의 ODM인..