본문 바로가기

전체 글326

리액티브 프로그래밍 Spring WebFlux - 디버깅, 테스팅 디버깅  디버그 모드 Hooks.onOperatorDebug(); 비용이 많이 드는 동작 과정을 거치기 때문에 -> 처음부터 디버그 모드를 활성화하는 것은 권장하지 않음  checkpoint() 사용Flux .just(2, 4, 6, 8) .zipWith(Flux.just(1, 2, 3, 0), (x, y) -> x/y) .checkpoint("Example12_4.zipWith.checkpoint", true) .map(num -> num + 2) .checkpoint("Example12_4.map.checkpoint", true) .subscribe( data -> log.info("# onNext: {}", data), .. 2024. 8. 4.
리액티브 프로그래밍 Spring WebFlux를 이용한 Non Blocking 애플리케이션 구현 리액티브 시스템 리액티브 스트림즈 Blocking I/O 와 Non-Blocking I/O 함수 디스크립터 (Function Descriptor) ReactorHot Sequence & Cold Sequence Backpressure Scheduler Context리액티브 시스템과 리액티브 프로그래밍    리액티브 시스템  리액티브 시스템이란?리액티브라는 용어는 어떤 이벤트나 상황이 발생했을 때, 그에 따라 적절하게 행동하는 것을 의미합니다.그래서 리액티브 시스템은 반응을 잘하는 시스템, 클라이언트의 요청에 즉각적으로 응답함으로써 지연 시간을 최소화합니다.   리액티브 선언문MEANS: 비동기 메시지 기반의 통신 -> 느슨한 결합, 격리성, 위치 투명성 보장FORM: 리액티브 시스템이 비동기 메시지 통신.. 2024. 8. 3.
테스트와 테스트 주도 개발 TDD 테스트 테스트의 장점회귀 방지: 기존코드가 변경에도 잘 실행되는지 확인가능 잠재적 오류의 발견 가능성이 높음테스트를 통과한 코드만 운영코드에 배포  테스트 종류인수테스트: 최종 환경과 유사한 상태로 테스트E2E테스트: End To End Test 처음부터 끝까지 테스트통합테스트: 여러 요소를 복합적으로 테스트단위테스트: 필요한 단위로 쪼개서 테스트  테스트 대역모든 유형의 비운영용 가짜 의존성을 포괄하는 용어, 스턴트 대역이라는 개념에서 시작관리할 수 없는 것들에 주로 Mock 사용    단위 테스트DB 포함해서 단위테스트를 작성할 때 신경쓸 부분 테스트간에 데이터가 공유되어서는 안됩니다!- 테스트간 독립적으로 수행되고 서로의 영향을 받지 않도록 설정하는 것이 핵심! 텍스트 픽스처:- setup, bef.. 2024. 6. 27.
페이지네이션 미적용 원인 이슈 페이지네이션 미적용 원인 이슈   페이지네이션 미적용 원인GET /notifications?page=0&size=5 public Page displayNotifications(User user, int page, int size) { Pageable pageable = PageRequest.of(page, size); Page notificationDtoPage = notificationQuerydslRepository.findAllByReceiverId(user, pageable); return toResponsePage(notificationDtoPage); }   public Page findAllByReceiverId(User receiver, Pa.. 2024. 5. 16.
도메인 주도 개발 - 도메인서비스 도메인서비스  도메인 서비스 객체를 애그리거트에 주입하지 않기public class Order { @Authwired private DiscountService discountService; ..} Service 필드는 데이터 자체와는 관련이 없다. 저장 대상도 아니다.일부 기능만 필요로 하기 때문에 굳이 의존 주입을 할 이유는 없다. public class Order{ public void calculate(DiscountService discountService, .. ) { .... }} public class OrderService { private DiscountService discountService; private Order crea.. 2024. 5. 15.
도메인 주도 개발 - 이벤트 이벤트과거에 벌어진 어떤 것을 의미   시스템 간 강결합 문제public void 최소() { 주문취소 환불 (외부 환불 처리 서비스 이용)}외부 서비스의 성능에 영향을 받는 문제 도메인 객체에 서로 다른 도메인 로직이 섞이는 문제 강한 결합을 없앨 수 있는 방법은 이벤트를 사용하는 것특히 비동기 이벤트를 사용하면 두 시스템 간의 결합을 크게 낮출 수 있다.  이벤트 구성요소이벤트 생성 주체 -> 이벤트 퍼블리셔 -> 이벤트 핸들러 이벤트 용도1. 트리거: 도메인의 상태가 바뀔 때 다른 후처리가 필요하면 후처리를 실행하기 위한 트리거로 이벤트를 사용할 수 있다.2. 서로 다른 시스템 간의 데이터 동기화  이벤트 장점1. 서로 다른 도메인 로직이 섞이는 것을 방지2. 기능 확장에 용이  .. 2024. 5. 15.
2024 대학연합동아리 프로젝트 데모데이 참관 2024 대학연합동아리 프로젝트 데모데이 참관 대학연합동아리에서 진행한 개발 프로젝트 데모데이(DEMO DAY) 참관했습니다. 각 대학에서 팀별로 프로젝트를 개발하고 전시하는 행사로 투표를 진행하여 순위를 매기는 방식이였습니다. 여러프로젝트를 보면서 인사이트를 얻을 수 있었습니다. 전시 부스 전시 기록 서비스 고급스럽고 일관된 디자인이 인상적이였습니다. 명함과 스티커를 통해 홍보하는 모습 여러 전시관련 데이터와 데이터의 최신화 지난 전시에 대한 관리 등 고려할 부분이 많아보였습니다. 지도를 통해 한눈에 보는 내 사진기록! 내가 다녀간 곳을 사진으로 남겨 지도를 보면서 그 흔적들을 볼 수 있어요 이와 비슷하게 여행간 곳을 사진으로 남겨서 지도로 볼 수 있는 앱을 사용한 적 있는데, 생각보다 잘 사용하지 않.. 2024. 4. 20.
2024 마이펫로그 프로젝트 회고 반려인(집사)들의 공동 기록과 소통을 위한 서비스를 기획하여 프로젝트를 진행하였습니다. 개발기간 : 2023. 1. 20(토) ~ 2023. 2. 29(목) 협업 방법 노션을 통해서 문서 공유를 하였고 실시간 소통을 위해 디스코드 채널을 활용하였습니다. 프론트엔드&벡엔드&디자이너 협업 미팅 및 회고는 목요일에 진행했습니다. 미팅에서는 진행사항, 논의사항 그리고 각 팀의 회고 시간을 가졌습니다. 팀 회고는 "KPT 회고" 방식을 도입하여 진행했습니다. Keep 현재 우리팀이 잘 하고 있어서 계속 유지하면 좋을 것 같은 부분 Problem 현재 우리팀이 가지고 있는 문제 Try Problem에 적은 것을 해결하기 위해 우리 팀이 다음에 시도해볼만한 것 (혹은 Keep 중에서도 더 개선하거나 시도해보고 싶은 .. 2024. 4. 3.
Kotlin Android Jetpack Compose 기초 class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { BasicsCodelabTheme { MyApp(modifier = Modifier.fillMaxSize()) } } } } @Composable fun MyApp(modifier: Modifier = Modifier) { //온보딩 화면 상태 유지 var shouldShowOnboarding by rememberSaveable { mutableStateOf(true) } Surface(modifier) { if (shouldShowOnboarding.. 2024. 4. 2.
React with Redux, Next.js, TypeScript - 1 컴포넌트, JSX, 속성, 상태 Udemy 강의 "React 완벽 가이드 with Redux, Next.js, TypeScript" 를 보고 정리하였습니다.  컴포넌트, JSX, 속성, 상태  기본개념JSXJavaScript Syntax eXtension-> but 브라우저에 사용 불가능합니다.그래서 브라우저에 도달하기 전에 개발 서버에서 변환됩니다.  리액트에서의 컴포넌트컴포넌트 = 자바스크립트 함수- 컴포넌트의 첫글자는 대문자, PascalCase(MyHeader)커스텀 컴포넌트는 실제로 렌더링된 DOM에 나타나지 않습니다.    동적 값 출력외부에 정의된 값들을 가져옵니다.import { CORE_CONCEPTS } from "./data.js"; import componentsImg from "./assets/components.. 2024. 3. 6.
React 리액트 props 속성 전달과 구조분해할당 리액트를 배우면서 굉장히 유용하고 꿀 코드들을 정리하려고 합니다. 구조분해할당 은 JavaScript와 다른 프로그래밍 언어에서 사용되는 문법입니다. 이를 통해 배열이나 객체의 속성을 해체하여 그 값을 개별 변수에 담을 수 있게 됩니다. props 기본사용 function CoreConcept(props) { return ( {props.title} {props.description} ); } 이 함수는 props object를 가져와서 값을 구성하는 컴포넌트 입니다. App 함수 CoreConcept 컴포넌트에 object 를 만들어 호출하고 function CoreConcept(props) 에서 받습니다. 해당 값들은 또한 별도의 파일로 저장하여 사용할 수 있습니다. 별도 파일로 사용 data.js .. 2024. 3. 5.
코틀린 kotlin 기초 문법 Restart 학습 환경 Intellij 패키지 에러 Error: "Only the Kotlin standard library is allowed to use the 'kotlin' package" package kotlin fun main() { println("Hello Kotlin!") } -> package 명이 kotlin 이면 에러 발생 다른 패키지명으로 변경 출력 var name = "name" println(name[0]) println("제 이름은 $name 입니다.") println("제 이름은 ${name} 입니다.") n 제 이름은 name 입니다. 제 이름은 name 입니다. 데이터입력 val reader = Scanner(System.`in`) reader.nextInt() 타입 변수 // 변.. 2024. 2. 23.