본문 바로가기
반응형

전체 글202

[Spring] Kotlin 을 이용하여 MongoDB Query를 Type-safe 하게 작성하기 Spring data mongo 를 사용하게 되면 아래와 같은 방식으로 쿼리를 작성할 수 있다. Query() .addCriteria( Criteria.where("id").isEqualTo(1L) ) 이렇게 코딩하게 하게 된다면 문제점이 무엇일까 ? 크게 2가지로 나누어볼 수 있을 것이다. Type-safe 하지 않다. 만약 id가 Long 타입이 아니라 다른타입이라면 ? 바로 오류로 이어질 것이다. 오타로 인해 오류가 발생할 수 있다. id를 잘못하여 di 로 적는순간 오류로 이어질 것이다. id는 짧기에 이런일이 없겠지만 필드명이 길어지는 순간 위험도는 증가한다. Kotlin을 이용하여 Spring data mongo 를 이용한다면 이러한 문제점을 해결할 수 있다. org.springframewor.. 2021. 7. 30.
[Jhipster] jhipster 6.9.1 버전 설치하기 npm install -g generator-jhipster@6.9.1 위의 명령어를 실행해주면 된다. 2021. 7. 19.
[MongoDB] Index 를 이용하여 Sort 하기 Mongo 에서는 인덱스에 정렬필드가 포함되어 있다면 인덱스를 사용하여 정렬을 할 수 있다. 인덱스에 포함되지 않은경우 blocking sort 를 사용한다. blocking sort는 collection 또는 database 에서 concurrent 작업을 차단하지 않는다. 공식문서에 따르면 index 를 이용한 정렬이 blocking sort 보다 성능이 좋다. 정렬은 역방향, 정방향 둘 다 지원한다. 예를 들어보자 아래와 같은 인덱스를 생성 했을 때 db.records.createIndex( { a: 1 } ) 두 쿼리 모두 위의 인덱스를 사용한다. db.records.find().sort( { a: 1 } ) db.records.find().sort( { a: -1 } ) 하지만 Multiple .. 2021. 7. 16.
[Spring] Interceptor postHandle이 동작을 안해요. Interceptor 란 ? 특정요청에 대한 요청을 가로채서 수행하기 전, 수행한 후 추가적인 작업을 할 수 있도록 해주는 것 preHandle : 실제 handle 이 실행되기 전 수행 postHandle : 실제 handle 이 수행된 후 실행 afterCompletion : 요청이 완료된 후 실행 ( View Render 가 완료된 후 ) 적용 방법은 간단하다. 아래와 같은 Interceptor 를 만든 후 등록해준다. @Component class DemoInterceptor : HandlerInterceptor { override fun preHandle(request: HttpServletRequest, response: HttpServletResponse, handler: Any): Bool.. 2021. 7. 2.
Cannot install hadoop because conflicting formulae are installed. yarn: because both install `yarn` binaries brew 를 사용하여 install 할때 Cannot install hadoop because conflicting formulae are installed. yarn: because both install `yarn` binaries 이러한 메세지가 뜨는 경우가 있다. brew unlink yarn 를 입력해 unlink 를 한 후 설치할거 설치하고 brew link yarn 명령어를 이용하여 다시 이어주면 된다. 2021. 5. 28.
[ReactiveCrudRepository] 데이터 삭제가 안되는 이슈 굉장히 어이없는 실수였지만 같은 이슈로 고생하시는 분이 계실까 공유합니다. ReactiveCrudRepository 를 학습할 때 발생할 수 있는 이슈입니다. 필자는 webflux 와 ReactiveMongoRepository 를 이용하여 간단한 게시판 예제를 만들어 보고자 했습니다. 입력까지는 잘 되었으나 Delete가 되지 않는 이슈가 발생하였습니다. 코드는 아래와 같습니다. 보고 무엇이 문제인지 아시는 분은 뒤로가기를 클릭하셔도 됩니다. suspend fun delete(deleteRequest: ReplyDeleteRequest) { val replyId = ObjectId(deleteRequest.replyId) val requestId = deleteRequest.requestId Mono.j.. 2021. 5. 7.
window CMD창에서 붙여넣기 하는 방법 필자는 cmd창을 이용하여 mongodb 명령어를 학습중이었따. 일반적인 붙여넣기가 안되서 불편하지만 타이핑을 했다. 우연히 붙여넣기 하는법을 알게되었다 마우스 우클릭을 하면 붙여넣기가 된다. 2021. 5. 6.
[Spring] spring-data-r2dbc 와 spring-boot-starter-data-mongodb-reactive 를 동시에 사용할 때 Repository 빈 등록이 안되는 이슈 spring-data-r2dbc 의존성을 추가한 상태로 아래와 같은 코드들을 입력하여 사용하고 있었다. class Post( @field:Id var id:Long? = null, val content: String ) { override fun toString(): String { return "{ id: $id content: $content }" } } interface PostRepository : ReactiveCrudRepository{ } @Service class PostHandler( private val postRepository: PostRepository ) { suspend fun create(serverRequest: ServerRequest): ServerResponse { ... 2021. 5. 1.
[Spring] @ContextConfiguration with Kotlin 기존에 @ContextConfiguration를 이용할 때는 아래와 같이 이용하였다. @ContextConfiguration(classes = {A.class, B.class}) 하지만 Kotlin 을 이용하여 위와 같이 작성하려고 하니 계속 에러가 났다 조금 찾아보니 Kotlin에서는 아래와같이 입력을 해야한다고 한다. @ContextConfiguration(classes = [DemoRouter::class, DemoHandler::class]) 2021. 4. 29.
[Spring data mongodb] 몽고DB에서 시퀀스를 이용하기 Sequence로 이용할 Document를 하나 정의한다.@Document class DatabaseSequence( @field:Id var id: String, var seq: Long ) { } Sequence를 생성하는 Creator를 정의한다.@Component class SequenceCreator( private var mongoTemplate: MongoTemplate ) { fun create(sequenceName: String): Long { val counter: DatabaseSequence = mongoTemplate.findAndModify( query(where("_id").`is`(sequenceName)), Update().inc("seq", 1), options().re.. 2021. 4. 29.
[Querydsl] SemanticException: right-hand operand of a binary operator was null Querydsl을 이용하여 아래와 같은 구문을 작성하였다. 실행 결과 SemanticException: right-hand operand of a binary operator was null 라는 오류를 만났고 30분~1시간 정도를 헤맸다. queryFactory .select(Projections.constructor(ProjectInfo.class , qProject.id, qProject.title, qProject.explain )) .from(qProject) .innerJoin(qProjectParticipants) .on(qProject.id.eq(qProjectParticipants.projectParticipantsId.project.id)) .where(qProjectParticipan.. 2021. 4. 12.
[Spring] @TestConfiguration Controller 테스트할 때 @SpringBootTest 보다는 @WebMvcTest 를 사용하면 조금 더 가벼운 테스트를 할 수 있다. 하지만 @WebMvcTest 는 @Component @Service @Repository 는 Scan 하지 않는다. 즉, 빈으로 등록되지 않는다는 것이다. 그렇기 때문에 Controller 테스트를 할 때 빈 등록이 안된다고 오류가 나거나 빈이 null 로 나오는 상황을 마주칠 수 있다. 이럴 때 사용할 수 있는 어노테이션이 @TestConfiguration 이다. 테스트 환경에서 필요한 빈들을 등록할 수 있도록 도와주는 어노테이션이다. 사용방법을 알아보도록 하겠다. 아래와같이 TestConfig.class 를 만들고 @TestConfiguration 어노테이션을 .. 2021. 4. 9.