분류 전체보기 15

[DDD] 도메인 주도 개발_도메인 모델 시작하기, 아키텍처 개요

목차 도메인 모델 시작하기 아키텍처 개요 도메인 모델이 무엇이고 엔티티 밸류에 알아보자 1. 도메인 모델 시작하기 1. 1 도메인이란? 한 도메인은 다시 하위 도메인으로 나눌 수 있다. 예를 들어, 온라인 서점이 있다고 해보자. 온라인 서점 소프트웨어는 온라인으로 책을 판매하는 데 필요한 상품 조회, 구매, 결제, 배송 추적 등의 기능을 제공해야 한다. 이때 온라인 서점을 소프트웨어로 해결하고자 하는 문제 영역, 즉 도메인에 해당한다. 한 하위 도메인은 다른 하위 도메인과 연동하여 완전한 기능을 제공한다. 주문 하위 도메인은 고객의 주문을 처리하고, 혜택 하위 도메인은 쿠폰이나 특별 할인과 같은 서비스를 제공하고 등의 각 도메인 각 서비스를 처리한다. 특정 도메인을 위한 소프트웨어라고 해서 도메인이 제공..

MSA/DDD 2023.10.17

스프링과 스프링부트의 차이점

Java는 개발 연도가 오래된 만큼 다른 프로그래밍 언어들보다 속도가 느리고 코드 작성이 어렵다는 단점을 가지고 있다. 이러한 단점을 보완하기 위해 여러 프레임워크가 개발되었는데요. Java의 대표적인 백엔드 개발 프레임워크로 사용하는 스프링과 스프링부트에 대해 알아보자. 1. 스프링(Spring)이란? 스프링 프레임워크(Spring Framework)는 Java 기반 애플리케이션 개발을 지원하는 오픈소스 애플리케이션 프레임워크로 간단히 스프링이라고도 부른다. 스프링은 순수자바 객체(POJO)만을 사용하여 복잡성을 제거하고, 단순하고 가벼운 코드로 기업용 애플리케이션을 개발하기 위한 목적으로 개발된 프레임워크이다. POJO(Plain Old Java Object)는 특정한 규약이나 프레임워크에 종속되지 ..

스프링 2023.10.17

MSA vs 모놀리식

서비스의 규모가 확장되고, 데이터 저장 및 통신을 클라우드를 통해 요즘 시대에 기존의 방식인 모놀리식 (Monolithic Arcitecture)과 대비되는 MSA (Microservices Architecture)가 대두되고 있다. MSA와 모놀리식은 소프트웨어 애플리케이션을 설계하고 구축하는 두 가지 주요한 접근 방식이다. 이번 포스팅을 통해 MSA와 모놀리식의 차이점을 짚어보자. 1. 모놀리식(Monolithic Architecture) 애플리케이션은 하나의 아키텍처로 구성되어 있다. 대부분의 기업용 애플리케이션은 하나의 아키텍처를 두는 모놀리식으로 개발되었다. 모놀리식 아키텍처는 개발과 관리가 용이하다는 장점이 있으나, 시스템이 복잡해지고 커질수록 이해하기가 어려워져 유지보수가 어려워진다. 또한 ..

MSA 2023.10.12

JAVA 객체 지향 설계 [S.O.L.I.D]

의존선 관리는 우리 대부분이 직면한 문제인데, 의존성이 잘못 관리된다면 변경하기도 어렵고 재사용하기 어려운 코드가 된다. 반면 의존성이 잘 관리된 코드는 유연하고 재사용이 가능한 코드가 된다. 참고로 SOLID는 어떠한 특정 프로그래밍 언어 혹은 프레임워크를 위해 만든 원칙이 아니다. SOLID는 프레임워크도 라이브러리의 패턴도 아니며, 특정 기술에 국한되지 않는다. 그래서 객체지향을 프로그래밍 언어나 프레임워크에 원칙을 자유롭게 적용할 수 있다. 객체지향 4대 원칙 캡슐화 메서드를 통해서 간접적으로 노출 상속 상속이 적절한 경우는 다른 클래스의 메서드가 아닌 필드를 사용하고 싶을 때 사용 메서드 상속이 부적절한 이유는 대부분의 경우 리스코프 치환 원칙을 위반할 가능성이 높기 때문이다. 메서드를 쓸 때는..

JAVA 2023.10.11

JAVA 상속 extends [Interface, Inheritance]

1. Interface란 자식 클래스가 여러 부모 클래스를 상속받을 수 있다면, 다양한 동작을 수행할 수 있다는 장점을 가지게 된다. 하지만 클래스를 이용하여 다중 상속을 할 경우 메소드 출처의 모호성 등 여러 가지 문제가 발생할 수 있어 자바에서는 클래스를 통한 다중 상속은 지원하지 않는다. 하지만 다중 상속의 이점을 버릴 수 는 없기에 자바에서는 인터페이라는 것을 통해 다중 속성을 지원하고 있다. 인터페이스란 다른 클래스를 작성할 때 기보이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상클래스를 의미한다. 자바에서 추상 클래스는 추상 메소드뿐만 아니라 생성자, 필드, 일반 메소드도 포함할 수 있다. 하지만 인터페이스(Interface)는 오로지 추상 메소드와 상수만..

JAVA 2023.10.10

JAVA 객체지향 관련 [Optional, if문, Getter/Setter]

10/10 화요일 1. 객체지향 관련 이론 및 문법 Optional 자바에서 null 처리를 쉽게 처리하기 위해 부가적으로 나온 자료형 public Optional 메서드명() { return Optional.ofNullable(자료); } 예외처리 코드를 간소화하게 사용할 수 있다. -> .orElseThrow(( ) -> new 예외클래스( )) Optional 객체를 만드는 정적 팩토리 패턴 메서드 명령어 Optional.of(자료); // 생성 시점에서 null이면 예외 발생 Optional.ofNullable(자료); // 생성 시점에서는 null여부 상관없지만 처리가 쉬움 Optional.empty(); // 빈 옵셔널 만들고 싶은 경우(거의 쓸 일 없음) JPA와 같이 Optional로 된 ..

JAVA 2023.10.10

JAVA 데이터베이스 연동 (2) [리포지토리, DAO 설계]

1. 리포지토리 인터페이스 설계 Spring Data JPA는 JpaReposiroy를 기반으로 더욱 쉽게 데이터베이스를 사용할 수 있는 아키텍처를 제공한다. 스프링 부트로 JpaReposiroy를 상속하는 인터페이스를 생성하면 기존의 다양한 메서드를 손쉽게 활용할 수 있다. 여기서 이야기하는 리포지토리는 Spring Data JPA가 제공하는 인터페이스이다. 엔티티를 데이터베이스의 테이블 구조를 생성하는 데 사용했다면 리포지토리는 엔티티가 생성한 데이터베이스에 접근하는 데 사용된다. 리포지토리를 생선하기 위해서는 접근하려는 테이블과 매핑되는 엔티티에 대한 인터페이스를 생성하고 JpaReposiroy를 상속 받으면 된다. JpaReposiroy를 상속받을 때는 대상 엔티티와 기본값 타입을 지정해야 한다...

JAVA 2023.08.29

JAVA 데이터베이스 연동 (1) [ORM, JPA, 영속성 컨텍스트, 엔티티]

애플레케이션은 데이터(리소스)를 주고받는 것이 주 목적이다. 엔터프라이즈급 애플리케이션에서 정상적으로 로직이 동작하기 위해서는 데이터베이스가 꼭 필요하다. 1. ORM (Object Relational Mapping) ORM은 객체(클래스) 관계 매핑을 의미한다. 자바와 같은 객체지향 언어에서 의미하는 RDB(Relational Databse)의 테이블을 자동으로 매핑하는 방법이다. 클래스는 데이터베이스의 테이블과 매핑하기 위해 만들어진 것이 아니기 때문에 RDB 테이블과 어쩔 수 없는 불일치가 존재한다. ORM은 이 둘의 불일치와 제약사항을 해결하는 역할이다. ORM을 이용하면 쿼리문 작성이 아닌 코드(메서드)로 데이터를 조작할 수 있다. 1.1 ORM의 장점 - ORM을 사용하면서 데이터베이스 쿼리를..

JAVA 2023.08.29

[SQLD] 데이터 모델링의 이해

1. 데이터 모델링 1. 1 데이터 모델링의 정의 - 고객과 함께 고객의 업무 프로세스를 이해해야 데이터 모델링을 제대로 할 수 있음 - 현실 세계를 데이터베이스에서 표현하기 위한 추상화 과정 - 데이터 모델링 표기법을 사용해 모델링 - 고객의 업무 프로세스내 비즈니스 프로세스 규칙을 정의하여 데이터 모델로 표현 할 수 있어야 한다. - 고객이 이해하기 쉽게 간결하게 모델링 해야한다. 1.2 데이터 모델링의 특징 - 추상화 : 현실 세계를 일정한 양식에 맞게 간략하게 표현 - 단순화 : 누구나 이해하기 쉽도록 약속된 규약에 의한 제한된 표기법 또는 언어를 이용하여 표현 - 명확화 : 명확하게 의미가 한 가지로 해석되어야 함으로 애매모호함을 제거하고 정확하게 현상을 기술 1.3 데이터 모델링의 단계 - 개..

SQLD 2023.08.14

플레이데이터 데이터 엔지니어링 7월 4주차 회고

플레이데이터 데이터 엔지니어링 7월 4주차 회고 목차 1. 전반적인 느낌 2. 좋았던 점 3. 아쉬웠던 점 4. 개선할 점 5. 다음주 계획 1. 전반적인 느낌 HTML, CSS, JSP, 서블릿에 대해 배웠다. 이번주는 대체적으로 프런트엔드 쪽의 부분을 배웠다. 그래서 그런지 한 주만에 너무 많은걸 배운건 아닌가라는 느낌이 있다. 하지만 내가 원하는 것은 백엔드이기 때문에 나쁘지 않았다. 그리고 이번주에 배운 것은 변화가 바로바로 한 눈에 보여 재미있었다. 2. 좋았던 점 대학교에서 한 번도 배우지 못한 것을 배워 걱정도 많았지만, 결과가 한 눈에 보이고 HTML과 CSS의 코드는 대체적으로 쉽운것같아 좋았다. 3. 아쉬웠던 점 JSP, 서블릿에 대한 이해가 아직 안되었다. 현재는 더 효율적인 것들이 ..

플레이데이터 2023.07.31