Spring 15

Spring boot MongoDB Aggregation에서 sum 조건 정하기

Spring boot와 MongoDB를 이용해 채팅방을 구현하는데, 채팅방 목록을 구하는 API를 작성하려고 했다. 아래와 같은 정보 (채팅방 번호, 마지막 채팅 메세지, 안 읽은 메세지, 마지막 채팅시간) 을 가져오려고 한다. 근데, MongoDB가 처음이라 일단 만들면서 배우는거라 여기 깨지고 알아보는데 sum에 대한건 별로 없어서 고생 좀 해서 메모를 해본다! 우선 sum에 대한 공식문서는 아래에서 볼 수 있다. https://www.mongodb.com/docs/v4.2/reference/operator/aggregation/sum/ $sum (aggregation) — MongoDB Manual Array Operand In the $group stage, if the expression res..

Spring 2023.04.19

Spring MongoDB - Cannot evaluate org.springframework.data.mongodb.core.aggregation.Aggregation.toString() 관련 에러

버전 : Spring Data MongoDB 2.7.9 예외 메세지 Method threw 'java.lang.IllegalArgumentException' exception. Cannot evaluate org.springframework.data.mongodb.core.aggregation.Aggregation.toString() 해당 예외는 아래의 코드에서 발생했다 GroupOperation groupByRoomId = group(roomId).push(content).as(content); LimitOperation limit = new LimitOperation(pageable.getPageSize()); SortOperation sort = Aggregation.sort(Sort.by(Sort..

Spring/error 2023.04.09

Spring에서 인터페이스를 사용하는 프로그래밍(programming to interface)이 좋은 이유

Java의 Interface는 구현 클래스가 준수해야 하는 계약을 정의한다. 따라서 클래스가 의존 관계를 구현하는 Interface에 의존한다면, 해당 의존 관계의 구현을 변경하더라도 의존 중인 클래스를 변경할 필요가 없다. 이런 식의 의존 중인 클래스가 의존 관계가 구현하는 Instance로 의존성을 만드는 설계 원칙을 '인터페이스를 사용하는 프로그래밍' (programming to interface)이라 한다. 이 방식은 의존 중인 클래스와 의존 관계 사이에 느슨한 결합을 만든다. 의존 관계 클래스가 구현하는 인터페이스를 의존 관계 인터페이스 (dependency Interface) 라고 부른다. 말이 좀 어려운데 그림을 통해서 써보겠다. MemberService가 1번처럼 JDBC를 사용하다가 2번..

Spring 2022.09.04

[에러] Failed to evaluate Jacson - InvalidDefinitionException: Cannot handle managed/back reference

더보기 2022-05-19 17:50:04.904 WARN 21880 --- [nio-8080-exec-3] .c.j.MappingJackson2HttpMessageConverter : Failed to evaluate Jackson deserialization for type [[simple type, class com.kyu.test.domain.reservation.Reservation]]: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot handle managed/back reference 'member-reservations': no back reference property found from type `java.ut..

Spring/error 2022.05.19

Spring Boot - Execution failed for task ':bootRun'.

Execution failed for task ':bootRun'. > Process 'command 'C:\Program Files\Java\jdk1.8.0_261\bin\java.exe'' finished with non-zero exit value 1 새로 맞이하는 에러는 java.exe가 비정상적으로 종료되었다는거다. 원래 IntelliJ 에서 이 에러는 Settings -> Build Execution, Deployment의 Build Tools로 가면 여기서 Build and run using , run tests using 설정이 기본값인 Gradle로 되어있는 기본적인 오류이다. 근데 나는 의존성 주입을 잘 못해서 난 것 같다. 비밀번호를 암호화 하려고 쓰는 BCryptPasswordEnc..

Spring/error 2022.05.16

Spring boot - 멀티 모듈에서 gradle dependencies 오류(해결 안 됨)

문제점 : Root Project에서 member-api-server라는 모듈에 datastore를 implementation을 해야함. 왜냐면 datastore에 spring-data-jpa 의존성을 가져와야하기 때문에 이렇게 루트 프로젝트의 build.gradle에 project를 설정하고 core 폴더의 datastore를 implementation을 하는데 member-api-server로 테스트 로직을 돌리면 MemberServiceImple에서 사용하는 JPA의 save 메소드를 찾을 수 없다고 뜬다. 비슷한 에러를 찾다가 일단 시도해보면서 하기로 하자 https://velog.io/@ganymede/GradleDependencies-%EB%AA%BB-%EB%B6%88%EB%9F%AC%EC%9..

Spring/error 2022.04.26

Spring Reactive Data Persistence - 리액트 데이터 퍼시스턴스

Spring WebFlux를 이용해서 Reactive를 구현했지만, DB가 Reactive하지 않고 막혀버린다면 Reactive하다고 할 수 없다. 스프링 데이터 리액티브 스프링 데이터는 몽고DB(MongoDB), 카산드라(Cassandra), 레디스(Redis), 카우치베이스(Couchbase)로 데이터를 저장할 때 Reactive 프로그래밍 모델을 지원한다. RDBMS, JPA는 리액티브 Repository가 지원되지 않는데, JDBC 드라이버도 블로킹 되지 않아야 하는데 그게 안 되기 때문이다. 하지만! DB가 리액티브가 아니어도 데이터를 가져와 리액티브 타입으로 변환하는 식으로 사용할 수 있다. 1. // 데이터를 가져와서 리액티브로 변환 List members = repo.findByGender..

Spring 2022.04.09

Spring에서 REST

스프링에서 REST 방식의 통신을 할 때는 간단하다. @Controller 를 @RestController로 바꿔주기만 하면 된다. @Controller 와 @RestController의 차이가 뭘까 기본적으로 Spring MVC에서는 Controller에서 할 일을 찾은 후 그 결과를 Model에 담고 호출할 View를 찾는다. @Controller //@RestController @RequestMapping("/member") public class MemberController { private final IngredientRepository ingredientRepo; private TacoRepository tacoRepo; @GetMapping("/") public String showInde..

Spring 2022.04.02

JPA(Java Persistence Api) 사용하기

JPA(Java Persistence Api) 란 무엇인가?? 말 그대로 자바 영속성 API이다. 프로그래밍에서 영속성이란 데이터를 생성한 프로그램이 종료되어도 남아있는 데이터의 특성을 얘기한다. 우리가 네이버 회원가입을 한 번만 하고 다음부터는 가입 시의 아이디와 비밀번호만 입력하면 로그인이 되는 것처럼 데이터를 파일 또는 데이터베이스에 저장시키는 것이다. JPA는 자바 ORM(Object Relation Mapping : 객체-관계 매핑) 기술의 표준 명세로 Java에서 제공하는 API이다. 기존 EJB (Enterprise Java Bean)에서 제공되던 Entity Bean을 대체하는 기술이다. JPA의 등장배경? 관계형 DB는 성능이 좋고, 기능이 많지만, 객체지향언어인 Java에서 접근하려면 ..

Spring 2022.03.26

Spring Boot JdbcTemplate 이용해서 데이터 읽고 쓰기

JdbcTemplate란?? JdbcTemplate은 JDBC Core 패키지의 중심 클래스다. JDBC 사용을 단순화하고 일반적인 오류를 방지하는 데 도움을 주고, SQL을 제공하고 결과를 추출하는 애플리케이션 코드를 남긴다. JdbcTemplate는 SQL 쿼리 또는 업데이트를 실행하여 ResultSets에 대한 반복을 시작하고 JDBC 예외를 포착하고 org.springframework.dao패키지에 정의된 일반적이고 보다 유익한 예외 계층으로 변환해준다. 공식 문서 https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/jdbc/core/JdbcTemplate.html 말 그대로 Jdbc Templat..

Spring/error2 2022.03.26