본문 바로가기

전체 글323

페이지네이션 미적용 원인 이슈 페이지네이션 미적용 원인 이슈   페이지네이션 미적용 원인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, 속성, 상태 기본개념 JSX JavaScript Syntax eXtension -> but 브라우저에 사용 불가능합니다. 그래서 브라우저에 도달하기 전에 개발 서버에서 변환됩니다. 리액트에서의 컴포넌트 컴포넌트 = 자바스크립트 함수 - 컴포넌트의 첫글자는 대문자, PascalCase(MyHeader) 커스텀 컴포넌트는 실제로 렌더링된 DOM에 나타나지 않습니다. 동적 값 출력 외부에 정의된 값들을 가져옵니다. import { CORE_CONCEPTS } from "./data.js"; import componentsImg from "./assets/compone.. 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.
내부망 프로젝트 - SAP HANA DB & Spring Boot DataBase 를 SAP HANA DB로 이관하면서 HANA DB 실습과 스프링 부트 연동을 했던 과정을 전체는 못담았지만 일부 기록을 남기려고 합니다. 1. HANA DB 실습 VMware 설치 VMware 다운로드 및 설치 방법(feat. VMware Workstation 무료 설치) HANA DB 관련 [무료 SAP HANA 설치하기] 01. 설치 파일 다운로드 및 vmware 준비 [무료 SAP HANA 설치하기] 03. HANA Studio 설치하기 HANA 멀티테넌트 DB - 3. 접속포트 이클립스 설치 하나 스튜디오를 사용하기 위해 이클립스를 활용합니다. HANA Studio Plug-in 설치 이클립스 실행 후 상단 메뉴 Help > Install New Software https://t.. 2024. 1. 10.
스프링부트 API JPA 최적화 페치조인, 페이징 default_batch_fetch_size 페치조인, 페이징 1. 페이징 엔티티 조회 * 선호하는 방법 중 하나 @GetMapping("/api/v3-1/orders") public ResponseEntity orderV3_page( @RequestParam(value = "offset", defaultValue = "0") String offset, @RequestParam(value = "limit", defaultValue = "100") String limit ) { // N 만큼 데이터 나옴 List orders = repository.findAllWithMemberDelivery(offset, limit); // ToOne 관계이기 때문에 페이징 가능 List result = orders.stream() .map(o -> new Ord.. 2023. 12. 23.
스프링부트 API JPA 최적화 (N+1) 컬렉션 조회 최적화, DTO 조회 성능 향상 컬렉션 조회 최적화 1. 엔티티 조회 - 페치 조인으로 쿼리 수 최적화 OrderApiController /** * 페치 조인 */ @GetMapping("/api/v3/orders") public ResponseEntity orderV3() { // N 만큼 데이터 나옴 List orders = repository.findAllWithItem(); List result = orders.stream() .map(o -> new OrderDto(o)) .toList(); return ResponseEntity.ok(new Result(result)); } Order 엔티티 객체로 쿼리 결과를 받아서 Dto 로 변환작업을 한다음 반환 OrderRepository findAllWithItem() public .. 2023. 12. 21.