[백준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 서버를 설치하..
[SQL] 기본 문법 정리
2023. 6. 23. 16:32
SQL
데이터 만들기 📌DROP DROP DATABASE IF EXISTS a_db db 삭제 📌CREATE CREATE DATABASE a_db db 생성 ex) market_db에 member 테이블을 생성해보자 USE market db --market_db선택 CREATE TABLE member (mem_id CHAR(8) NOT NULL PRIMARY KEY, --회원아이디(PK) mem_name VERCHAR(10) NOT NULL, --이름 mem_number INT NOT NULL, addr CHAR(2) NOT NULL, --주소(경기,서울,경남..) debtt_date DATE --데뷔일자 ); 테이블 생성 📌INSERT 데이터 입력 INSERT INTO member VALUES('TWS','트..
NoSQL과 RDBMS의 차이
2023. 6. 21. 14:20
etc
NoSQL과 RDBMS의 차이 DB 어플리케이션으로 RDBMS(Relational DataBase Management System)이 널리 쓰이고 있지만, 대용량 데이터 저장, 비정형 데이터 저장, 빠른 응답시간 등의 새로운 요구사항에 기존 RDBMS만으론 대응하기 어려울 때가 있다. 그래서 RDBMS와 차별적인 데이터베이스 관리 툴인 NoSql이 등장했다. 📌RDBMS vs. NoSQL RDBMS -> 2차원의 행과 열로 데이터의 관계를 관리하는 데이터베이스(테이블) 장점 : 스키마에 맞추어 데이터를 관리하기 때문에 데이터의 정합성(어떤 데이터들이 값이 서로 일치하는 상태)을 보장 단점 : 시스템이 커질수록 쿼리가 복잡해지고 성능이 저하되며, 수평적 확장이 어렵다. NoSQL ->RDBMS가 비대해짐에..
Redis란
2023. 6. 19. 19:15
etc
Redis Redis(Remote Dictionary Server)는 가장 인기있는 Key-value Store 중 하나이다. 데이터 저장소하면 보통 MySQL이나 PostgreSQL, MariaDB, Oracle 같은 RDBMS를 많이 떠올릴텐데 이러한 RDBMS와 달리 Redis는 NoSQL이다. 이 둘의 차이는 무엇일까? 다음 포스팅에 자세히 적어놓았다. https://develoyummer.tistory.com/99 NoSQL과 RDBMS의 차이 NoSQL과 RDBMS의 차이 DB 어플리케이션으로 RDBMS(Relational DataBase Management System)이 널리 쓰이고 있지만, 대용량 데이터 저장, 비정형 데이터 저장, 빠른 응답시간 등의 새로운 요구사항에 기존 RDBMS만으..