공간 데이터의 유형과 구조
2023. 7. 16. 00:11
카테고리 없음
https://www.baeldung.com/java-geospatial-applicationshttps://t1.daumcdn.net/cfile/tistory/24338140578C65662D?originalGIS 애플리케이션 구축 시 요구사항1.지리 공간 데이터에 대한 실시간 분석을 하는 경우가 많음수많은 지리 공간 데이터를 저장하고, 대기 시간이 매우 짧은 임의 쿼리를 용이하게 하는 것!2. 공간 데이터의 특성과 처리가 필요한 이유를 이해하는 것도 중요 도시 주변에 여러 개의 특정 위치가 있다고 가정해보자, 보통 위도, 경도, +고도로 표현된다. 이제 중요한 것은 주어진 위치에 가까운 위치를 찾는 것!따라서 이 위치에서 가능한 모든 위치까지의 거리를 계산해야 한다.이때 사용하는 쿼리는 공간쿼리로,..
Hibernate spatial이란? / 간단한 쿼리 메서드
2023. 7. 12. 01:35
Spring
Hibernate Spatial은 지리 데이터 작업을 위한 표준 인터페이스를 제공한다 . 지리적 데이터에는 점, 선, 다각형 과 같은 엔터티의 표현이 포함됨 . Hibernate Spatial은 기하학 모델로 JTS(Java Topology Suite)를 사용 Geometry 는 JTS의 모든 공간 유형에 대한 기본 유형. ex) Point , Polygon 및 기타 유형과 같은 다른 유형이 Geometry 에서 확장됨을 의미합니다 . Java의 Geometry 유형은 MySql 의 GEOMETRY 유형에도 해당됨 유형의 String 표현을 구문 분석하여 Geometry 인스턴스를 얻는다. JTS에서 제공하는 유틸리티 클래스 WKTReader를 사용하여 텍스트를 Geometry 유형으로 변환할 수 있다 ..
[프로젝트]알림 기능 구현(SSE, Spring AOP)
2023. 7. 3. 16:48
Spring
💡알림기능 사용목적 yata project에서는 앱 사용의 편의성을 위해 카풀 신청 완료시, 또는 내가 쓴 게시글에 신청 요청이 왔을 때 알림 기능을 넣기로 결정하였고, 로그인 상태일 때 실시간으로 알림이 오도록 구현하도록 하였다. 알림 기능을 만들며, Spring AOP를 통해 기능분리를 하였고, 유지보수성, 확정성을 위해 Spring Annotation을 활용하여 적용하였다. 먼저 같이 Notify와 관련된 controller,dto,entity,repository,service 클래스를 정의해 줄 것이다. 그 후 Custom Annotation에 Advice를 붙여 NotifyAspect를 구현한다. AOP에 대한 것은 아래 포스팅에서 자세하게 다뤘다. Spring AOP란? [프로젝트]Custom..
[백준1764]HashSet과 ArrayList의 contains() 시간복잡도
2023. 7. 1. 00:52
Algorithm
간단해 보이지만 이 문제는 ArrayList의 contains() 메서드로 풀면 시간 초과가 난다. HashSet이나 Map을 이용해서 풀면 풀린다. 왜일까? 자료구조 시간복잡도 메서드 구현 방식 HashSet의 contains() O(1) Hashmap을 기반으로 구현 ArrayList의 contains() O(n) indexOf()를 사용해서 contain여부를 결정 HashSet은 HashMap 기반으로 구현되어 있어서 contains 메서드를 실행할때 HashMap.contains() 메서드를 불러온다. 그러므로 시간복잡도는 O(1) 이다. AllayList의 indexOf는 배열에 있는 항목의 수에 따라 시간복잡도가 결정되므로 O(n)이다. ⭐따라서 ArrayList를 사용해서 시간초과가 나거나..
[프로젝트] Spring AOP로 로그 구현
2023. 6. 29. 20:03
Spring
yata project에서는 실행 결과가 나오는 모든 시점 controller/service코드의 실행 전/후에 로그를 남기도록 구현하였다. LogAspect Class 전체코드 @Aspect //이 클래스가 Aspect클래스임을 명시 @Slf4j @Profile("local") @Component //스프링 빈으로 등록 public class LogAspect { @Pointcut("execution(* com.yata.backend..*(..))") public void all() { } @Pointcut("execution(* com.yata.backend..*Controller.*(..))") public void controller() { } @Pointcut("execution(* com.ya..
[프로젝트] Custom Annotation으로 알림 기능 Spring AOP 적용
2023. 6. 29. 15:20
Spring
yata project에서는 알림 기능을 만들며, Spring AOP를 통해 기능분리를 하였고, 유지보수성, 확정성을 위해 Spring Annotation을 활용하여 적용하였다. Custon Annotation이란? (현재 비공개 포스팅) 1.Custom Annotation 정의 Annontation을 정의할 때는 @interface를 붙여 작성한다. 📌적용된 메타에너테이션 @Target -> NeedNotify를 메서드 단위에 붙여 사용 @Retention -> NeedNotify의 기능이 런타임시까지 유지 메타 에너테이션이란? (현재 비공개 포스팅) 2. NotifyAspect 정의 부가 기능 (Advice) + 적용할 위치 (Pointcut) @Aspect @Slf4j @Component @Enab..
Spring AOP란?
2023. 6. 28. 19:38
카테고리 없음
OOP 란? => 실제 사물을 프로그래밍으로 옮겨와 모델링하는 것 관심사 분리의 디자인 원칙을 준수해야 함 OOP 모듈화의 핵심 단위 : 클래스 OOP란? (현재 비공개 포스팅) 모듈 특정 기능별로 나누어지는 프로그램 덩어리 💡oop의 문제 비지니스 클래스에 핵심 관심사와 횡단 관심사 공존 코드 복잡도 증가시 비즈니스 코드 파악이 어렵고, 횡단 관심사의 모듈화가 어려움 => AOP등장 AOP Aspect-Oriented Programming => 관점 지향 프로그래밍 스프링 DI 가 의존성(new) 에 대한 주입이라면 스프링 AOP 는 로직(code) 주입이라고 볼 수 있습니다. 어떤 작업을 하던 공통적으로 나타나는 코드 => 횡단관심사항 로깅, 보안, 트랜잭션, 로그 추적 로직 등 핵심 기능,객체가 제..
[프로젝트]반경 내 위치의 게시글 검색(GIS)
2023. 6. 27. 20:09
Spring
카풀 서비스에서 나와 출발지와 도착지가 비슷한 게시글들을 검색하는 기능이 있으면 편리할 것이다. 따라서 yata 프로젝트에서도 공간데이터를 이용하여, 출발지, 도착지를 입력하면 반경 내 위치의 게시글을 검색해 올 수 있는 API를 구현하기로 하였다. 먼저 하버사인 공식을 이용해 두 지점 사이의 최단거리를 계산하고, 그 최단 거리 반경의 minimum bounding polygon을 생성하여 바운더리 내에 있는 게시글을 가져올 수 있도록 하였다. 해당 기능을 만들기 위해서는 위도,경도,방위각,라디안값에 대한 개념지식이 필요하다. ⭐위도적도를 기준으로 북/남쪽으로 얼마나 떨어져있는 지 나타내는 위치적도가 0°가 되며, 북쪽으로 올라가면 북위 90°, 남쪽으로 내려가면 남위 90°⭐경도그리니치 천문대를 기준..
[프로젝트] redis 적용
2023. 6. 23. 20:58
etc
yata project에서는 Github에서 클론받자마자 바로 사용할 수 있는 환경을 맞추기 위해 외부환경에 의존X => 외부 캐시 JWT 로그아웃 구현을 위해 redis를 사용 외부환경에 구속받지 않기 위해 embedded redis 사용 다음 세 가지를 사용 📌Spring Data Redis Redis를 JPA Repository를 이용하듯이 인터페이스를 제공하는 스프링 모듈 CrudRepository를 지원하기 때문에 좀 더 직관적으로 사용 가능 📌Lettuce Redis Java Client 현재 (Spring Boot 2.0.2) Spring Data Redis에서 공식지원하는 Client 📌Embedded Redis H2와 같은 내장 Redis 데몬 이를 이용하면 외부 Redis 서버를 설치하..