전체 글
[Spring] MongoDB 조회 - Stream, Aggregation 비교
Spring에서 몽고디비를 사용할 때스트리밍 조회(Stream Processing)와 MongoDB Aggregation 중 어떤 방법이 더 좋은지 데이터의 특성과 사용 목적을 고려해야 한다. 스트리밍 조회 (Stream Processing)장점메모리 효율성: 전체 데이터를 한 번에 메모리에 로드하지 않고, 하나씩 처리하기 때문에 메모리 부담이 적다.단순한 로직: 데이터 하나하나를 순차적으로 처리하는 데 적합하여, 복잡한 집계나 가공 작업을 서버 측 코드에서 쉽게 처리할 수 있다.단점네트워크 부담: 모든 데이터를 서버로 전송해야 하므로 네트워크 트래픽이 높아질 수 있다.속도 저하 가능성: MongoDB 내에서 바로 처리하지 않고, 애플리케이션 서버에서 작업을 수행해야 하므로 처리 속도가 느려질 수 있..
Redis 와 MongoDB 의 로그인 토큰 적합성 비교
보통 로그인 토큰 관리는 Redis에서 많이 하는데 현재 프로젝트에서는 MongoDB 를 메인 디비로 사용하고 있어서둘 중 어떤 DB로 로그인 토큰 관리하는게 적합한지 궁금해서 찾아보게 되었다. 데이터 구조 및 저장 형식Redis 는 Key-Value 형태의 데이터 구조를 가지는 인메모리 데이터 저장소이다. MongoDB는 Document 형태의 데이터 구조를 가지며 디스크 기반으로 데이터를 저장한다. 이러한 차이로 Redis 는 메모리 기반으로 빠른 데이터 처리가 가능하고 주로 캐싱에 사용되고 MongoDB는 대용량의 데이터를 저장하고 관리하는데 적합하다. Redis 사용 시 장점속도: Redis는 메모리 기반 데이터 스토어로, I/O가 메모리에만 집중되어 있어 조회 속도가 매우 빠르다. 이는 로..
[MongoDB] MongoDB Aggregate()
db.collection.aggregate()mongodb 조회 시 find 는 간단한 조건에 대해서 사용이 용이한데 다양한 조건을 넣어서 사용할 수는 없다. 따라서 aggregate는 다양한 조건들에 대해 검색하고 싶을때 사용한다. 컬렉션 또는 뷰의 데이터에 대한 집계 값을 계산한다. > 파이프라인에 Explain 옵션이 포함된 경우 쿼리는 집계 연산 처리에 대한 세부 정보를 제공하는 문서를 반환한다. > 파이프라인에 $out 또는 $merge 연산자가 포함된 경우 쿼리는 빈 커서를 반환한다. db.collection.aggregate(pipeline, options) pipeline데이터 aggregate 작업 또는 단계의 시퀀스로입력 문서에 대한 연산을 수행한다. $out 또는 $merge 연산자가..
[MongoDB] MongoDB compass 설치 (GUI)
https://www.mongodb.com/try/download/compass Try MongoDB Tools - Download Free HereFree download for MongoDB tools to do more with your database. MongoDB Shell, Compass, CLI for Cloud, BI Connector and other database tools available.www.mongodb.com GUI 가 적힌 해당 부분에서 원하는 버전과 환경에 맞는걸로 다운로드하면 된다. compass 를 사용하는 이유는database, collection, document CURD에 대해 직관적인 UI 조작이 가능하고 쿼리문 날리기도 편하게 되어 있다.
[Mysql] 데이터 삭제하기 & AUTO INCREMENT 초기화 - DELETE, TRUNCATE, DROP
mysql 에서 데이터를 삭제하는 방법은 세가지 정도가 있다. DELETE : WHERE 절에 조건을 걸고 데이터 삭제, 테이블 유지TRUNCATE : WHERE절을 사용하지 않고 모든 데이터 삭제DROP : 데이터 삭제 & 테이블 삭제 DELETEDELETE 에서 WHERE 절이 없이 사용하면 모든 데이터가 삭제 되기 때문에 주의한다. name 이 test 인 데이터 행 삭제-- DELETE FROM 테이블명 WHERE 조건;DELETE FROM member WHERE name = 'test'; DROPmember 테이블 자체가 삭제된다.-- DROP TABLE 테이블명DROP TABLE member; TRUNCATE테이블은 그대로고 데이터만 삭제된다. Auto increment 도 초기화된다...
[Spring] 스프링 AOP 포인트컷
포인트컷 지시자 AspectJ 는 포인트컷을 편리하게 표현하기 위해 특별한 표현식을 사용한다. 포인트컷 표현식은 AspectJ가 제공하는 포인트컷 표현식을 줄여서 말하는 것으로execution 같은 포인트컷 지시자(Pointcut Designator, PCD)로 시작한다. 지시자 종류 execution : 메소드 실행 조인 포인트를 매칭한다. 스프링 AOP 에서 가장 많이 사용하고 기능도 복잡하다. within : 특정 타입 내의 조인 포인트를 매칭한다.args : 인자가 주어진 타입의 인스턴스인 조인 포인트this : 스프링 AOP 프록시를 대상으로 하는 포인트target : 스프링 AOP 프록시가 가리키는 실제 대상으로 하는 조인 포인트@target : 실행 객체의 클래스에 주어진 타입의 어노테이션..
[Spring] Spring AOP 구현 예제
라이브러리 추가build.gradle 에 의존성 추가를 해준다. implementation 'org.springframework.boot:spring-boot-starter-aop'위의 라이브러리 추가로 aspectJ 관련 라이브러리를 등록하고 스프링 부트가 AOP 관련 클래스를 자동으로 스프링 빈에 등록해준다. @Aspect 사용 예제스프링은 @Aspect 어노테이션으로 편리하게 포인트컷과 어드바이스로 구성되어 있는 어드바이저 생성 기능을 지원하며 어드바이저로 사용할 클래스에 @Aspect 어노테이션을 붙여줌으로써 스프링 AOP 를 적용할 수 있다. 주의할 점으로 스플이 AOP 적용시에는 private, final 메소드는 AOP 적용이 불가능하다. @Slf4j@Aspectpublic class As..
[Spring] AOP 개념 및 용어 정리
AOP란Aspect-Oriented Programming , 관점 지향 프로그래밍이란 뜻으로 어떤 로직을 핵심적인 관점과 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하는 것이다. 부가 기능과 부가 기능을 어디에 적용할 지 선택하는 기능을 합해서 하나의 모듈로 만든 것을 Aspect라고 한다. 이 Aspect 를 사용한 프로그래밍 방식을 AOP 라고 한다. AOP는 OOP를 대체하기 위한 것이 아닌 횡단 관심사(하나의 부가 기능이 여러 곳에 동일하게 사용됨)를 깔끔하게 처리하기 어려운 OOP의 부족한 부분을 보조하는 목적으로 개발되었다. AOP 의 대표적인 구현으로는 AspectJ 프레임워크가 있다. AOP 적용 방식적용 방식에는 크게 3가지 방식이 있다. 컴파일 시점클래스 로딩 시..
[Spring] @Aspect란, 생성 과정 설명
@Aspect란 AOP(관점 지향 프로그래밍)를 가능하게 하는 AspectJ 프로젝트에서 제공하는 어노테이션이다. @Aspect를 스프링 프록시에 적용하려면 어드바이저(Advisor)를 만들어서 스프링 빈으로 등록하면 된다. 그러면 자동 프록시 생성기는 스프링 빈으로 등록된 어드바이저들을 찾고 스프링 빈에 자동으로 프록시를 적용해준다. @Aspect 프록시 예제 빨간 박스는 포인트컷 부분이고 초록색 박스는 어드바이스 부분이다. @Aspect를 어드바이저로 변환해서 저장하는 과정 1. 실행 : 스프링 어플리케이션 로딩 시점에 자동 프록시 생성기를 호출한다. 2. 모든 @Aspect 빈 조회 : 자동 프록시 생성기는 @Aspect 어노테이션이 붙은 스프링 빈을 모두 조회한다. 3. 어드바이저 생성 :..
[Spring] 빈 후처리기
이전에 작성했던 프록시 팩토리의 문제점을 해결하기 위해서 빈 후처리기를 사용한다고 했다. 프록시 팩토리 내용에 대해 알고싶으면 아래 링크를 참고하면 된다. https://bsssss.tistory.com/1482 빈 후처리기란 일반적으로 @Bean 이나 @Component 를 사용하면 스프링은 대상 객체를 생성하고스프링 컨테이너 내부의 빈 저장소에 등록한다. 빈 후처리기는 객체를 조작할 수도 있고, 다른 객체로 바꿔치기 하는 것도 가능하다. 빈 후처리기 - 스프링 빈 등록 과정생성 : 스프링 빈 대상이 되는 객체를 생성(@Bean, 컴포넌트 스캔 포함)전달 : 생성된 객체를 빈 저장소에 등록하기 직전에 빈 후처리기에 전달후 처리 작업 : 빈 후처리기는 전달된 스프링 빈 객체를 조작하거나 다른 객체로 ..