일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 자바공부
- 플러터 개발
- JPA예제
- 스프링
- 스프링부트공부
- nestjs
- Axon framework
- 알고리즘공부
- K8S
- Kafka
- nestjs스터디
- 자료구조공부
- 기술공부
- 스프링부트
- 기술면접공부
- JPA 공부
- JPA공부
- querydsl
- 카프카
- 코테준비
- nestjs공부
- 스프링 공부
- 프로그래머스
- 코테공부
- JPA
- JPA스터디
- Flutter
- 플러터 공부
- DDD
- 스프링공부
- Today
- Total
목록분류 전체보기 (716)
DevBoi
Entity 에서 properties로 아래와 같이 저장하고싶을때가 있다. List tags 이를 해결하고 JPA는 어떻게 관리하는 지 알아보자 우선 내가 사용하는 Entity 타입이다. package com.boiler.flutterbackend.app.group.dto; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import java.time.LocalDateTime; import java.util.List; @AllArgsConstructor @NoArg..
팝업창은 간혹 필요하여 모듈로 구현하면 편하다. showDialog( context: context, barrierDismissible: true, // 바깥 영역 터치시 닫을지 여부 builder: (BuildContext context) { return AlertDialog( content: CreateGroupPopUp(userId: userId), insetPadding: const EdgeInsets.fromLTRB(0,80,0, 80), ); } ); 단순히 이렇게 하고, content 클래스를 구현해주면 된다. import 'package:flutter/material.dart'; import 'package:flutter_form_builder/flutter_form_builder.dart..
다양한 폼 빌더를 구현했다. 사실 UI 와, 폼 빌더의 동작방식에 대한 내용인데. 어느 폼같이 비슷비슷하기때문에 정리용으로 작성한다. 폼은 formkey로 동작한다. final _formKey = GlobalKey(); @override Widget build(BuildContext context) { return SingleChildScrollView( child: Column( children: [ FormBuilder( key: _formKey, // enabled: false, onChanged: () { _formKey.currentState!.save(); }, autovalidateMode: AutovalidateMode.disabled, initialValue: const { 'gender..
FormBuilder는 폼을 관리하기 위해 편하게 제공해주는 모듈이다. 특정 액션시 Form의요소를 동적으로 변경해보자 우선 동적 요소 추가를 해주기 위한, 위젯이다. Expanded( child: MaterialButton( color: Theme.of(context).colorScheme.secondary, child: const Text( "Add Score", style: TextStyle(color: Colors.white), ), onPressed: () { setState(() { fields.add( NewScore( name: 'score_${fields.length}', )); }); }, ), ), 해당 버튼을 클릭하면, fields에 NewScore라는 위젯이 추가가 된다. 그리고 ..
플러터의 데이터 개념은 조금 복잡하다 자바에 익숙한 나로서는, 순차처리나 동기식 처리가 익숙한데, 플러터는 모든 변수에 Nullable한 처리를 해줘야 하고, 위젯간의 데이터를 넘길때도 잘못처리하게 되면, 빈값이 넘어가게 된다. 이는 비동기식으로 값을 추출하는 것 때문에 발생되는게 주로 이유인데, 아래 소스를 보자 기존에는 아래와 같이 코딩되어 변수 초기화 시점의 이슈가 많았고, const Friend(String userId){ this.userId; } Friend(userId); 아래 처럼 바꿨다. class RecommendFriend extends StatefulWidget { final String userId; RecommendFriend({required this.userId}); @ove..
여러가지 Material을 사용할 수 있다. https://api.flutter.dev/flutter/material/TabBar-class.html TabBar class - material library - Dart API A Material Design primary tab bar. Primary tabs are placed at the top of the content pane under a top app bar. They display the main content destinations. Typically created as the AppBar.bottom part of an AppBar and in conjunction with a TabBarView. If a T api.flutter.de..
dead letter queue는 이름에서 유추 할 수 있듯이 실패한 레코드를 보관하는 별도의 큐이다. 이름에서 알 수 있듯이. 실패한 레코드를 보관하는 별도의 큐이다. 카프카는 2.0 부터 자체 plug in으로 실패한 레코드의 메타정보도 포함 시켜 저장하는 기능을 제공한다. 설정 방법은 간단하다. Connect 설정에 아래와 같이 추가해주면 된다. connect_dlq에서 아래와 같이 설정한다. errors.tolerance = all errors.deadletterqueue.topic.name = {토픽} // 유효하지 않다고 판단된 레코드의 메타데이터 header에 저장 errors.deadletterqueue.context.headers.enable = true // 로그 파일에 유효하지 않는 ..
0.2버전은 레퍼런스도 많고, 좀더 자료가 많아서 진행했는데 다른 라이브러리 때문에 자꾸 충돌이 난다. 그래서 대규모 버전 변경 작업을 한다. 작업 내용은 deprecate된 부분을 변경하면서 수정하고, 설계에 대한 수정사항을 수정한다. 1. @EntityRepository deprecated 0.3 버전에서는 사용할 수 없다. 왜 typeorm의 버전을 올리면서 스택자체를 날려버린건지 이해는 안되지만 무튼.. CustomRepository Decorator + CustomRepository Module이 필요하다. import { SetMetadata } from "@nestjs/common"; export const TYPEORM_EX_CUSTOM_REPOSITORY = "TYPEORM_EX_CUST..
검색 기능구현 필요. 검색에 대한 기능 처리 중 어떻게 구현을 해볼까.. 싶었음 글자를 입력할떄마다 자동으로 검색이 될수도있고, 검색하기 버튼을 누르면 검색이 될수도있음 요새 대세는 자동 검색인듯..? 그래서 필요한 ListBuilder를 구현, 해당 ListBuilder와 FutureBuilder는 자동으로 값이 추가되면 해당 값을 읽고 setState로 상태변경을 해주지 않아도 상태를 변경해줌 Flutter 에서는 검색을 위한 클래스들을 지원해준다. SearchDelegate 아래 클래스를 상속받아서 Search Class를 구현해주자 기존 골격은 구현 해야하는 메소드들을 구현했고, 초기에 userId를 전달 받아서 결과에서 제외해준다. 추천 친구리스트에서도 동일하게 친구 추가를 할 수 있게 끔 세팅..
비즈니스 로직은 정리를 안하는 편이지만 정리를 해보자 QueryDsl을 사용하다가 두개의 테이블을 조인 나랑 친구인 상태인 유저는 제외, 이외 모든 유저정보를 불러모으지만, 내가 친구를 신청했던 상태에 대한 정보는 추가로 들고 와야하는 비즈니스 로직 작성 -> LeftOuterJoin + SelfJoin + Projections.fields 다대일 연관관계 매핑 안한이유 = N+1에 대한 위험 요소가 높고, 두개를 조인했을때 오히려, 친구라는 엔티티의 자유도가 떨어진다고 판단 @Override public List findFriendRecommandList(String userId) { QFriend subFriends = new QFriend("subFriends"); List result = quer..