개발일기 - 2022-05-06 ~ 05-07

jude Kim·2022년 5월 7일
0

개발일기

목록 보기
4/28

2022-05-06 금요일

이번주 두번째 사무실 출근이었다.

오늘은 개발할 시간이 오전밖에 없어서 마음이 조급해졌다.

더군다나 어제 못처리한 CustomQuery(DynamicQuery) 에 대한 밀린 숙제가 남아 있어서 더더욱 그랬다.

간단히 현재 상황을 동료에게 공유하고, 문제 해결책에 대해서 논의했었고, 지인을 통해 전달 받은 사항을 기반으로 문제를 바로 해결했다.

직접 쿼리를 제어하는 별도의 CustomRepository 인터페이스를 만들고, FilterRequest를 인자로 받아 처리하도록 수정했다.

어제 끙끙댔던 것이 바로 해결이 되었다.

대략 코드의 구성은 다음과 같다.

@Repository
class TagCustomRepository(
    private val client: DatabaseClient
) : CustomRepository<Tag, Long> {

    override val mappingFunction: BiFunction<Row, RowMetadata, Tag> =
        BiFunction<Row, RowMetadata, Tag> { row: Row, _: RowMetadata? ->
            Tag(
                id = row.get("id") as Long?,
				(생략.. )
            )
        }

    override suspend fun findAllWithFilterRequest(filterRequest: FilterRequest): List<Tag> {
        val query =
            """
                SELECT 
                    * 
                FROM contents.tags 
                WHERE 
                    true ${filterRequest.toFilterQuery()} 
                ORDER BY id DESC 
                OFFSET ${filterRequest.pageRequest.getOffset()} LIMIT ${filterRequest.pageRequest.getLimit()}    
            """.trimIndent()
        return client.sql(query)
            .map(mappingFunction).flow().toList()
    }

    override suspend fun countWithFilterRequest(
        filterRequest: FilterRequest
    ): Long {
        val query =
            """
                SELECT 
                    count(*) as count 
                FROM contents.tags 
                WHERE 
                    true ${filterRequest.toFilterQuery()}                
            """.trimIndent()
        return (client.sql(query)
            .fetch().awaitOne())["count"] as Long
    }
}

오후에는 워크샵(?) 일정이 있어 영화보고, 맛있는 것 먹고 엄청 떠들었다.

개인적으로는 조직의 구성원이 적을때가 제일 좋았던것 같다.

더 치열하게 논의하는 과정을 통해서 많은 것을 알게 되고, 도움이 필요할때나 힘들때 적극적으로 도와줄 수 있는 동료가 있다는 것은 정말 힘이 되는 일이다.
직접적으로 도움이 안될 수 있지만, 잘 들어주는 사람들이 있다는 것만으로도 도움이 될때가 많다.

집에 들어와 .. 그냥 자서 밀린 숙제를 쓰게 되었다.

그냥 잔줄 알았는데...

배송된 신규직원 노트북을 설치했다.

  • LG Gram 16인치 노트북 + Samsung 980 Pro SSD 1TB + MS Windows 10 Pro FPP

노트북 하판을 뜯고(양면테이프로 붙여져 있는 받침대가 살짝 까다로웠다.)
SSD를 교체했다. 기존의 SSD는 USB 외장케이스로 넣어서 공용자원으로 활용해야할 듯.
Windows 10을 설치했는데, 생각해보니 11로 설치해야해서 다시 설치했다.
USB를 통해 설치했지만 3.0 스펙의 제품이라 생각보다 빠르게 설치가 되었다.

PreDos 제품이라 윈도우즈가 없어서 FPP 를 구매했는데, 이게 비용을 제일 아끼는 방법인듯.. 업무용이라 Pro제품이 나을듯해서 일부러 이렇게 한 것도 있다.

Intel 12세대 i7코어를 기대했지만, 생각보다 발열이 있네, NVIDIA RTX2050
때문인것 같기도 하고, 크램쉘 모드로는 가급적 쓰지 않는게 좋을 듯 하다.

끝.

2022-05-07

생각해보니 오늘이 어버이날이네?
이글을 쓰고 있는 지금에서야 생각이 났다. ( 부모님들께 전화 한통을 안했네.. )

-> 자정이 넘어간 시간에 작성해서 착각을...

  • 점심 먹고,
  • 잠시 둘째와 RC카로 놀러갔다가,
  • 도어 클로져 교체 작업을 하다가 실패하고,
  • 미용실에 온 가족이 머리하러 갔다.
  • 미용실에서 대기하면서 도어 클로져 교체 방법을 숙지하고,
  • 돌아와서 다시 도어 클로져 재시공해서 성공했다.
    ( 기존의 나사구멍을 이용하다 보니 최상의 결과는 아니었지만, 여튼 도어클로저가 이제는 정상적으로 동작한다. )
  • 파친코 2편 보고, 다시 책상에 앉았다.

여튼 어제 코드 작성한것을 전반적으로 다 적용했다.

다 적용하고 보니 그 뒤로는 술술 풀리는 듯 하다.

이후는 DB의 구조에 대한 내용등에 대한 고민이 주를 이루는 것 같다.

CustomRepository 를 통해 해결은 되었으나, JsonConverter 가 동작하지 않아 직접 JsonConverter를 만들어 수동으로 맵핑해주어야 했다.

기존의 R2DBC에 등록해둔 JsonConverter를 이 Util function을 사용하도록 같이 수정해두었다.

( 수정하면서 Thread safeObjectMapper 를 중복해서 정의해서 사용중이라 Companion Object로 빼두었다. )

어제 정리한 Code ConvensionIntellij 의 Git의 commit 시 체크해야할 사항을 정리하니 생각보다 Intellij가 많은 기능을 잘 제공하고 있구나 느껴졌다.

DB 중 Relation에 대한 구조때문에 살짝 고민했었지만, 이 부분도 잘 정리되었다.

meta (jsonb)를 남발하는 듯해서 이 부분은 다시 풀어헤쳐 두었다.
하나에 꽂히면 모든것을 그 기준으로 수정하려 했었던 적이 꽤 있는데 이번도 그 결과물인데 이렇게 직접 개발하면서 재정리중이다.

암튼 Simple is Best 라는 기준을 항상 고민하면서 만들어야 한다.
다시 또 다짐한다.

profile
씨봉봉이

0개의 댓글