본문 바로가기

분류 전체보기46

오브젝트 - 객체지향 프로그래밍 협력, 객체, 클래스 객체지향은 말 그대로 객체를 지향하는 것이다. 진정한 객체지향 패러다임으로의 전환은 클래스가 아닌 객체에 초점을 맞출 때에만 얻을 수 있다. 따라서, 객체지향 프로그래밍을 하기 위해선 2가지 사항에 집중해야 한다. 어떤 클래스가 필요한지를 고민하기 전에 어떤 객체들이 필요한지 고민하라 클래스는 공통적인 상태와 행동을 공유하는 객체들을 추상화한 것(객체를 구현하는 방법) 클래스 이전에 객체들이 어떤 상태와 행동을 가지는지를 먼저 결정 객체를 독립적인 존재가 아니라 기능을 구현하기 위해 협력하는 공동체의 일원으로 생각해라 객체를 협력하는 공동체의 일원으로 생각하는 것은 유연하고 확장 가능한 설계를 가능하게 만듬 상태와 행동을 정의 후 공통된 특성과 상태를 가진 객체들을 타입으로 분류하여.. 2021. 4. 22.
오브젝트 - 객체, 설계 로버트 마틴 - 모든 소프트웨어 모듈에는 세가지 목적이 존재 1. 실행 중에 제대로 동작하는 것 - 모든 모듈의 존재 이유 2. 변경을 위해 존재하는 것 - 간단한 작업만으로도 모듈은 변경이 가능해야 한다. 3. 코드를 읽는 사람과 의사소통하는 것 - 개발자가 쉽게 읽고 이해할 수 있어야 한다. 즉, 모든 모듈은 제대로 실행되야 하고, 변경이 용이해야 하며, 이해하기 쉬어야 한다. 변경에 취약한 코드 변경에 취약한 대부분의 코드는 객체 사이의 의존성과 관련된 문제 어떤 객체가 변경될 때 그 객체에게 의존하는 다른 객체도 함께 변경될 수 있다는 사실이 내포돼 있다. 객체지향 설계는 서로 의존하면서 협력하는 객체들의 공동체를 구축하는 것 따라서, 우리의 목표는 애플리케이션의 기능을 구현하는 데 필요한 최소한.. 2021. 4. 14.
Spring WebFlux Error Handling Spring WebFlux 의 Reactive Stream (Mono, Flux) 를 처리하다 보면 발생되는 예외 상황들을 어떻게 처리하면 좋을지 고민하게 된다. 발생되는 예외들을 throw 시켜서 GloabalExceptionHandler(Advice) 에서 통합적으로 처리해줄 수 있겠지만, 때론, 해당 예외들을 직접 처리해줘야 하는 경우도 있을 수 있다. 이번 게시글에선 해당 예외 등의 에러 처리를 어떻게 할 수 있을지 작성하고자 한다. onErrorReturn - 에러 발생 시 기본 값 사용하기 onErrorReturn 은 Reactive Stream 처리 과정 중 에러가 발생하였을 때 정해진 Fallback Value 를 반환하는 방식이다. public final Mono onErrorReturn.. 2021. 4. 12.
양재천과 매헌 윤봉길 선생님 기념관 양재천 벚꽃길 정말 오랜만에 와본 양재천 벚꽃거리 시간이 꽤나 흘렀음에도 그곳은 여전히 아름다운 곳이었다. 아무래도 주말에 비도 온다고 해서 오늘 아니면 올해 벚꽃 구경하기는 어려울 것 같아 한번 둘러보았는데, 너무 좋았다. 그 뒤로 추천받은 양재천 카페거리도 구경하였는데, 시간이 될 때 한번씩 와보면 좋은 곳 같다. 매헌 윤봉길 의사 기념관 좀 더 예쁘게 외관을 사진으로 담고 싶었는데, 그곳에 주차한 차들이 너무 많아 사진 찍기가 너무 어려웠다. 내부는 사진은 따로 촬영하지 않고 전시 마지막 즈음에 있는 선생님의 말씀을 담아 보았다. 2021. 4. 3.
Spring Data R2DBC 연관관계 구현 - ManyToOne 지난 게시글은 OneToMany 연관관계 관계를 R2DBC 를 통해 어떤 식으로 구현할 수 있는지를 살펴보았다. 참고 - heesutory.tistory.com/34 Spring Data R2DBC 연관관계 구현 - OneToMany (2) 지난 번 작성된 R2DBC 에서 OneToMany 를 구현하는 부분을 이어서 작성한다. 지난 첫 게시글에선 DatabaseClient 로 별도의 Custom Repository 를 정의하였고, 해당 부분에서 Member 와 Order 를 JOIN 하여 처리하.. heesutory.tistory.com 이번 시간은 ManyToOne 관계를 한번 알아볼 수 있도록 해보겠습니다. 이번 게시글에서도 회원(Member) 와 주문(Order) 를 사용하여 구현해보도록 하겠습니다.. 2021. 4. 2.
Spring Data R2DBC 연관관계 구현 - OneToMany (2) 지난 번 작성된 R2DBC 에서 OneToMany 를 구현하는 부분을 이어서 작성한다. 지난 첫 게시글에선 DatabaseClient 로 별도의 Custom Repository 를 정의하였고, 해당 부분에서 Member 와 Order 를 JOIN 하여 처리하였다. 참고 - heesutory.tistory.com/33 Spring Data R2DBC 연관관계 구현 - OneToMany R2DBC 는 ORM 이 아니기 때문에 JPA 와는 다르게 지원되지 않는 기능들이 몇가지 있다. 대표적으로 연관관계 매핑이 그러하다. Spring Data R2DBC aims at being conceptually easy. In order to achieve this it.. heesutory.tistory.com 하지만 .. 2021. 3. 31.
Spring Data R2DBC 연관관계 구현 - OneToMany R2DBC 는 ORM 이 아니기 때문에 JPA 와는 다르게 지원되지 않는 기능들이 몇가지 있다. 대표적으로 연관관계 매핑이 그러하다. Spring Data R2DBC aims at being conceptually easy. In order to achieve this it does NOT offer caching, lazy loading, write behind or many other features of ORM frameworks. This makes Spring Data R2DBC a simple, limited, opinionated object mapper. JPA 사용자였다면, 다양한 연관관계를 어노테이션을 통해 명시해주고 JPQL, EntityGraph, QueryDSL 을 이용하여 조인하.. 2021. 3. 28.
Spring Data R2DBC 사용 Reactive Relational DataBase Connectivity (R2DBC) 는 기존 Blocking 기반의 RDB 를 Reactive 하게 사용할 수 있도록 API 를 제공한다. 기존 Spring WebFlux 에서 RDB 를 사용하는 경우 온전한 Reactive 한 구현을 하기 어려웠었다. (Blocking 기반 API 제공) 그렇지만, WebFlux 와 R2DBC 를 사용하는 경우 Reactive 한 느낌만 내는 것이 아니라, 애플리케이션이 온전히 Reactive 하게 동작할 수 있도록 지원한다. R2DBC 는 완전한 Reative RDB 사용을 위해 non-blocking I/O layer 위에 Database 유선 프로토콜 계층까지 완전히 새롭게 구현한 드라이버를 제공. R2DBC .. 2021. 3. 28.
Custom Validation 사용해보기 실제 애플리케이션을 개발하다 보면 어떤 객체의 값이 비었는지, 공백인지, 재대로 된 패턴에 맞는지 등의 유효성 검사를 빈번하게 사용해야 하는 경우가 많습니다. Spring 에서는 Java Bean Validation 을 이용하여 검사 대상 클래스에 어노테이션 기반 제약 조건을 선언하여 간결하게 유효성 검사를 할 수 있습니다. 의존성 ... dependencies { ... implementation("org.springframework.boot:spring-boot-starter-validation") ... } ... spring-starter-validation 의존성을 추가하여 사용 사용 예시 @NoArgsConstructor(access = AccessLevel.PRIVATE) public cla.. 2021. 3. 20.
[ ElasticSearch ] Score 계산과 function_score ElastiSearch 는 기본적으로 BM25 알고리즘을 이용해 문서에 대한 score 계산을 한다. BM25 알고리즘 검색 키워드의 빈도수, 문서상의 키워드의 빈도수, 문서의 크기 기준으로 score 를 계산합니다. Term Frequency 문서 내에서 자주 등장하는 단어(Term) 에 가중치를 높게 부여 Inverse Document Frequency 많은 문서에서 등장하는 단어의 가중치는 낮추고, 일부 문서에만 등장하는 단어에 대해 높은 가중치 부여 Field-Length Norm 두개 이상의 문서에서 동일한 키워드가 동일한 빈도수로 등장한다고 가정할 때, 문서의 길이가 작은 문서에 더 높은 가중치를 부여 실제 검색 요청시 explain=true 를 Query Parameter 로 넘기면, Sco.. 2021. 3. 7.