개요 회사 프로젝트 규모가 커지고 팀원이 많아질수록 데이터베이스(이하 DB) 싱크를 맞추는게 생각보다 쉽지가 않았다. 이로 인한 스트레스를 줄이고자 코드를 형상 관리해주는 Git과 같은 좋은 툴이 있나 찾아보았고, 최종적으로 Spring 진영에서 많이들 사용하고 있는 Flyway를 적용해보기로 결정하였다. Flyway 앞서 설명한 것처럼 Flyway는 D...
개요 jpa를 사용하면서 일대다(다대일)의 연관 관계에 있는 Entity를 구현하는 경우, 항상 아래와 같이 List를 사용하여 구현하였다. jpa는 java에서 기본적으로 제공하는 Collection, List, Set, Map을 지원하며 이를 Entity 연관 관계를 매핑하거나 ElementCollection을 사용할 때 이를 적용할 수 있다. 하지만...
개요 사내 프로젝트의 Kotlin Migration을 진행하던 도중 Java와는 달리 새롭게 알게 된 Enum 전체 요소를 가져오는 방식과 그 차이에 대하여 정리하고자 한다. Kotlin의 요소 탐색 java에서 Enum의 전체 요소를 가져오는 경우 흔히 아래와 같은 식의 방법을 사용한다. 하지만 이를 kotlin에서 그대로 사용하면 IDE에서 아래와 ...
개요 서비스하고 있는 앱에 회원들이 늘어남에 따라 지도에 노출시키는 회원들의 마커를 로드하는 속도가 많이 느려지게 되었다. 단순 백엔드 API에서 데이터를 호출하는 문제뿐만 아니라 마커 하나 하나를 앱 단에 그려주는 과정에서 소요되는 시간 역시 UX 차원에서 좋지 못했기에 클러스터링을 적용하여 UI/UX를 개선시키고자 프로젝트를 진행하게 되었다. >클러스...
해당 포스팅은 사이드 프로젝트 진행 중 겪은 크고 작은 이슈들에 대한 기록입니다. 읽기에 앞서 이전 포스팅을 먼저 보고 오시는 걸 추천드립니다! 관련 포스팅 대체하며 마주하게 된 문제 @ElementCollection을 변경하고 별도의 엔티티로 이를 대체하면서 정말 많은 고생을 하였다. 1. 만들어진 기능들을 생각보다 많이 리팩토링해야 함 기...
해당 포스팅은 사이드 프로젝트 진행 중 겪은 크고 작은 이슈들에 대한 기록입니다. ElementCollection JPA에서 값타입을 컬렉션에 담아서 사용하는 경우, 해당 컬렉션을 ElemenctCollection 이라고 한다. 여기서 값타입이란 Integer, String과 같은 java의 기본 자료형 또는 임베디드 타입을 의미한다. 현재 진행 중인 ...
해당 포스팅은 사이드 프로젝트 진행 중 겪은 크고 작은 이슈들에 대한 기록입니다. 502 Bad Gateway 배포 중인 서비스가 504 Gateway Timeout 에러를 일으킨 후 뻗어서 EC2를 재부팅하고 나니 502 Bad Gateway 에러가 발생하였다. 구글링을 해보니 502에러는 EC2의 Load Balancer의 문제인 경우라고 한다. A...
해당 포스팅은 사이드 프로젝트 진행 중 겪은 크고 작은 이슈들에 대한 기록입니다. 서버 성능을 최적화해보자 이미지 리사이징을 구현하고 보니, 서버 성능 및 서비스 최적화를 최소한이라도 진행해야겠다 싶어서 아래의 사이트에서 현재 배포중인 서비스를 테스트해보았다. 속도 개선 피드백 사이트 위 사이트의 결과를 토대로 기본적인 사이트 최적화를 적용해보자. ...
해당 포스팅은 사이드 프로젝트 진행 중 겪은 크고 작은 이슈들에 대한 기록입니다. 관련 포스팅 1 버그 발견!! 이미지 리사이징을 적용한 후 중대한 버그를 발견하게 되었다. png 타입의 이미지를 등록하는 경우 이렇게 이미지가 깨져버린다. (S3에 보면 0B로 용량도 없음) jpg의 타입을 등록하면 정상적으로 동작하는데 해결을 한 지금 시점까지도 ...
해당 포스팅은 사이드 프로젝트 진행 중 겪은 크고 작은 이슈들에 대한 기록입니다. 이미지 리사이징? 이미지의 크기를 재조정하는 것으로 서버에서 사용할 때 원본의 이미지를 보여줄 필요가 없는 경우 이미지의 크기를 줄여 서버의 부하를 줄일 수 있다. 기능 추가를 생각하게 된 이유 사실 처음엔 이미지에 대한 처리를 고민을 한 적이 아예 없었다. 업로드가 잘 ...
해당 포스팅은 사이드 프로젝트 진행 중 겪은 크고 작은 이슈들에 대한 기록입니다. 읽기에 앞서 프로젝트를 진행하는 도중 무작위 랜덤 조회 기능이 필요하여 어떤 방식으로 사용하는지에 대해 공부한 내용을 정리한 포스팅 SQL에서의 랜덤 조회 방식 이 포스팅에서의 원하는 내용이 아니므로 간단하게 정리하고 넘어간다. 현재 DB로 사용하고 있는 MariaDB의 ...
해당 포스팅은 사이드 프로젝트 진행 중 겪은 크고 작은 이슈들에 대한 기록입니다. 프로젝트 환경을Mac에서 세팅해보자 집에서 쓰는 Windows Desktop으로 주로 프로젝트를 진행하다 보니 AWS 인프라 구축 및 DB Migration (MySQL -> MariaDB) 이후 변경된 사항들을 MacBook에는 반영하지 않고 방치해둔 상태라 이를 재설정...
해당 포스팅은 사이드 프로젝트 진행 중 겪은 크고 작은 이슈들에 대한 기록입니다. 현재 범위로 잡은 Polygon의 문제점 현재 기준 Point에서 부터 Nkm 떨어진 공간을 표현하는 Geometry로 Polygon을 사용하고 있는데, 이는 대략 아래와 같은 그림이다. 빨간점이 기준 Point라고 할 때, Point로부터 Nkm 떨어진 [북서 북동 남...
해당 포스팅은 사이드 프로젝트 진행 중 겪은 크고 작은 이슈들에 대한 기록입니다. 읽기에 앞서 아직 QueryDSL Spatial의 내부 동작까지 이해한 상태가 아니라 깊은 내용은 없습니다. 단지 프로젝트에 적용하면서 발생한 에러들과 그것을 해결한 과정, 그리고 프로젝트에 필요한 부분을 성공적으로 QueryDSL로 이식시킨 내용을 기록하였습니다. Que...
해당 포스팅은 사이드 프로젝트 진행 중 겪은 크고 작은 이슈들에 대한 기록입니다. 실제 프로젝트에 적용해보자 현재 진행하고 있는 프로젝트에 Hibernate Spatial을 적용 후, 테스트를 진행해보았다. 도입 목적 기존의 거리 기반 매장 탐색 방식을 개선하고자 Hibernate Spatial을 사용하기로 함 기존보다 성능이 나은지를 기대하고 테스...
해당 포스팅은 사이드 프로젝트 진행 중 겪은 크고 작은 이슈들에 대한 기록입니다. 읽기에 앞서 총 4개의 포스팅으로 이루어져 있습니다. 이 게시글은 Spatial DB 자체에 대하여 심도있게 공부하고 정리하는 목적이 아닌 구글링을 통해서 얻을 수 있는 정보가 많이 없고 오래된 경우가 허다하여 직접 Spatial Data를 사용하기 위하여 공부하고 알게 ...
해당 포스팅은 사이드 프로젝트 진행 중 겪은 크고 작은 이슈들에 대한 기록입니다. CI/CD 툴 변경 기존 인프라 구축 당시, CI 담당 툴로 Travis CI를 선택하였다. 허나 한달이 지난 시점에 Trial 기간이 끝나면서 더 이상 사용하지 못 하게 되었다... (1만 크레딧을 다 소모하지 않아도 1달의 기간이 지나면 자동으로 정지됨) 위의 이...
해당 포스팅은 사이드 프로젝트 진행 중 겪은 크고 작은 이슈들에 대한 기록입니다. AWS와의 연동 사이드로 진행한 프로젝트 서버 개발 환경을 로컬에서 AWS로 이전하는 과정에서의 Trouble Shooting 과정에 관한 기록 AWS EC2, RDS, S3, CodeDeploy, nginx 활용 01. 처음 부딪힌 난관 : application.yml...
다양한 의존 관계 주입 수정자 주입 (Setter) 자바빈 프로터티 규약의 setter 메소드에 @Autowired를 사용 테스트 코드에서 의존 관계를 한 눈에 파악하기 힘듬 옵션이 필요한 경우에만 특별히 사용 옵션 (Spring Bean과 관계없이 동작해야 하는 경우에 사용) @Autowired(required = false) : 호출 자체가 일어...
싱글톤 싱글톤 패턴 클래스의 인스턴스가 오직 1개만 생성되는 것을 보장하는 디자인 패턴 private 생성자를 이용하여 외부에서 임의로 new 키워드를 사용하지 못하게 해야 함 getInstance() 메소드를 통해서만 조회 가능하므로 항상 같은 인스턴스를 반환해줌 싱글톤 패턴의 문제점 아래의 이유들로 인하여 유연성이 떨어져 안티 패턴으로 불리기...