728x90

전체 글 44

[DDD, 도메인 주도 개발] 2.아키텍처 개요

아키텍처 표현 영역 사용자의 요청을 받아 응용 영역에 전달하고 응용영역의 결과를 다시 사용자에게 전달한다. HTTP요청을 응용 영역이 필요로 하는 형식으로 변환해서 응용 영역에 전달하고 응용영역의 응답을 HTTP응답으로 변환하여 전송한다. Controller 응용 영역 시스템이 사용자에게 제공해야할 기능을 구현 기능 구현을 위해 도메인 모델을 사용하고 로직을 직접 수행하기 보다는 도메인 모델에 로직 수행을 위임한다. Service 도메인 영역 도메인의 핵심로직을 구현 기능 구현을 위해 도메인 모델을 사용하고 고직을 직접 수행하기 보다는 도메인 모델에 로직 수행을 위임한다. @Entity, @Repository 인프라스트럭처 영역 논리적인 영역보다는 실제 구현을 다루는 영역 RDBMS, MONGO DB, ..

객체지향 2023.03.12

[DDD, 도메인 주도 개발] 1. 도메인 모델 시작하기

도메인이란? 도메인이란 소프트웨어의 구현을 통해 해결하고자 하는 문제나 주제를 말한다. 온라인 서점을 이용할 때 우리는 책을 검색하고, 장바구니에 담거나 쿠폰이 있는지 찾아보거나 구매를 한다. 구매를 할 때에는 다양한 페이나 포인트를 결제에 사용한다. 결제 이후에는 배송 추적이나 주문 상세 내역을 확인한다. 이때 '온라인 서점'이 하나의 도메인이 될 수 있다. 한 도메인은 하위 도메인으로 나눌 수 있는데, 예를 들어 온라인 서점의 하위 도메인으로는 주문 : 고객이 구매하는 과정을 처리 혜택: 할인이나 포인트 사용 등 ... 하위 도메인을 어떻게 구성할 지는 상황에 따라 다를 수 있다. 특정 도메인을 위한 소프트 웨어라고 해서 도메인의 모든 기능을 구현할 필요는 없다. 배송이나 결제는 외부 시스템을 사용하..

객체지향 2023.03.06

LocalDateTime 파싱에러 [java.time.format.DateTimeParseException: Text '2020-09-11..' could not be parsed, unparsed text found at index 19]

JDBC Template을 이용해 리스트 데이터 조회하는데 row를 매핑하는데 오류가 발생했다. [문제가 되는 코드] [오류] 에러 로그가 말해주고 있듯이 쿼리에서 조회하는 포맷과 내가 매핑시키려는 Date Type이 일치하지 않아 파싱에러가 발생했다. DateTime 포맷이 맞지 않아 생기는 문제로 아래 코드와 같이 formatter 를 지정해 사용하면 해결된다. [해결]

에러모음 2023.03.04

로버트기요사키의 부자아빠의 투자가이드

https://product.kyobobook.co.kr/detail/S000001277308 부자 아빠의 투자 가이드 | 로버트 기요사키 - 교보문고 부자 아빠의 투자 가이드 | 부자 아빠 가난한 아빠 시리즈의 세 번째 책 『부자 아빠의 투자 가이드』 개정판이 출간되었다. 『부자 아빠 가난한 아빠 1·2』가 부자 아빠 식 재테크에 대한 개론 product.kyobobook.co.kr 작년 로버트기요사키의 부자아빠 가난한아빠 라는 책을 접한 뒤 홀린듯이 부자아빠가난한아빠2, 부자들의 음모에 이어 부자아빠의 투자가이드라는 책까지 쭉 읽게 되었다. 투자가이드 책에서 강조하는 내용은 딱 두가지 인것 같다. 1. 금융지식을 쌓아라! (공부해라!) 많은 사람들이 몇년 동안 노동으로 힘들게 모은돈을 자칭 '전문가'..

애플워치8 애플워치se2 비교, 어떤걸 사면 좋을까

애플워치 8 이냐 애플워치 SE 냐 그것이 문제로다 작년에 애플워치 SE가 가격면에서 메리트가 있기때문에 많은 분들이 8과 고민하시는 것 같아요. 저도 아직까지 고민중이라서 둘이 정확히 어떤 부분에서 차이가 나는지 한번 자세히 볼까 해요. 첫째, 디자인 애플워치 8은 기존 애플워치 디자인에서 새로운 업그레이드 버전을 제공합니다. 새로운 색상, 디자인, 더 큰 디스플레이, 평탄한 각도의 에지이구요, 애플워치 SE는 애플워치 Series 6와 같은 디자인을 사용하고 둥근 모서리, 다양한 색상과 크기, OLED 디스플레이를 제공합니다. 둘째, 디스플레이 SE, 8 모두 레티나 디스플레이가 사용됩니다. 차이는 상시 표기가 되냐 안되느냐인데, SE 같은 경우 손목을 들어올리면 디스플레이가 바로 켜진다고 해요. 저..

일상/리뷰 2023.01.29

[인텔리제이 plugin 소개] mybatis 사용시 유용한 인텔리제이 플러그인 : Free MyBatis plugin

mybatis를 사용하면서 mapper 인터페이스에서 xml 쿼리문으로 이동할 때 불편한 적이 한두번이 아니었다. 유저 정보를 조회하는 쿼리를 보기 위해서 selectUsers 라는 쿼리명을 복사한 후, 프로젝트내 검색 기능으로 찾아 이동하곤 했는데, 클릭으로 간단하게 쿼리문으로 이동시켜주는 플러그인이 있었다.. Free MyBatis Plugin 왼쪽에 초록색 화살표가 생겼다. 왼쪽 화살표를 누르거나 selecUsers()에 마우스를 대고 ctrl함께 클릭하면(윈도우 기준) 바로 xml파일의 해당 쿼리문으로 이동시켜준다. 몰랐으면 몰랐지, 한번 써보니 이제는 없으면 안될것 같다 ㅠㅠ

유용한 정보 2023.01.29

[JPA 에러] Could not open JPA EntityManager for transaction; nested exception is java.lang.IllegalStateException: Already value [org.springframework.jdbc.datasource.ConnectionHolder@630b8a55]

업무에서 JPA 를 사용하고 있는데 다음과 같은 에러를 만남 [오류] [2020-09-24 11:21:02,554] [http-nio-8080-exec-5] ERROR c.s.c.web.EntityExceptionHandler.handlerException: 58 - [!] 예외 발생 - INTERNAL_SERVER_ERROR :: CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is java.lang.IllegalStateException: Already value [org.springframework.jdbc.datasource.ConnectionHolder@630b8a..

에러모음 2023.01.29

[Real Mysql(8.0)]트랜잭션과 잠금

트랜잭션이란? 트랜잭션은 작업의 완전성을 보장해 주는 것으로 논리적인 작업 처리를 모두 완벽하게 처리하거나, 그렇지 못할 경우 원상태로 복구해서 작업의 일부만 처리되는 현상(Partial update)를 방지해주는 기능이다. 잠금(Lock) vs 트랜잭션 vs 격리수준 잠금은 여러 커넥션에서 동시에 동일한 자원에 요청할 경우 순서대로 한 시점에는 하나의 거넥션반 변경하게 해주도록 하는 동시성을 제어하기 위한 기능이다. 트랜잭션은 데이터의 정합성을 보장하기 위한 기능이다. 격리수준은 트랜잭션내에서 또는 여러 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것인지를 결정하는 레벨을 의미한다. 주의사항 DBMS의 커넥션처럼 트랜잭션 역시 꼭 필요한 코드에만 최소화 하여 적용하는 것이 좋다. 일반적으로 데이터..

DB 2022.04.17

[DB]MySQL 아키텍처와 InnoDB스토리지 엔진 특징

MySQL 아키텍쳐 1.MySQL 접속 클라이언트 대부분 프로그래밍어에게 접속 api를 제공한다. Shell 스크립트를 통해서도 접속 가능 2.MySQL 엔진 클라이언트 접속과 SQL요청을 처리 한다. 쿼리파서, 전처리기, 옵티마이저, 실행엔진 등으로 이루어져 있다. 3.MySQL 스토리지 엔진 데이터를 실제로 디스크에 저장하거나, 디스크에 저장된 데이터를 읽어오는 역할을 담당 옵티마이저가 작성한 실행 계획에 따라서 스토리지 엔진을 적절히 호출해서 쿼리를 실행한다. 4.운영체제 파일 시스템과 하드웨어 실제 테이블 데이터와 로그 데이터를 파일로 저장한다. 쿼리 실행 과정 1.쿼리 캐시 사용자가 SQL요청을 Mysql로 보내면 쿼리 캐시(쿼리 요청결과를 캐싱하는 모듈)를 통해 동일한 SQL요청에 대한 결과를..

DB 2022.03.17

[DB]커서 페이징과 오프셋 페이징

커서 페이징 cursor를 사용하여 사용자에게 응답한 마지막 데이터를 기준으로 다음 데이터를 요청하고 응답하는 방법 실시간 데이터와 대량의 데이터를 다룰때 사용되는 페이징 방법이다. (무한스크롤) 커서 기반으로 현재 커서의 다음 데이터를 요청하기 때문에 데이터 누락이나 중복 문제가 없다. 커서로 활용할 컬럼은 인덱스가 설정되어 있어야 하고 고유해야 한다. 2개 이상의 커서 값을 사용한다면 어느정도 데이터양 까지는 오프셋 기반의 퍼포먼스가 더 좋다. 커서가 순차적이어야 한다. 오프셋 페이징 DB의 offset쿼리를 사용하여 페이지 단위로 구분하여 요청하고 응답하는 방법 요청한 데이터를 바로 조회하는 것이 아니라, 이전의 데이터를 모두 조회한 후 그 resultSet에서 오프셋을 조건으로 잘라내는 방법 오프..

DB 2022.03.15
반응형