목록분류 전체보기 (79)
영권's
메멘토 패턴(memento pattern)은 객체를 이전 상태로 되돌릴 수 있는 기능을 제공하는 소프트웨어 디자인 패턴이다. 예를 들어, 텍스트 에디터를 사용 시 필요한 텍스트를 실수로 삭제했어도 'undo(실행취소)'라는 기능을 사용하면 삭제하기 전의 상태로 텍스트를 복원할 수 있습니다.객체 지향 프로그램에서 undo 기능을 실행하려면 인스턴스가 가지고 있는 정보를 저장해 둘 필요가 있고 저장만 하지 않고 저장한 정보로부터 인스턴스를 원래의 상태로 되돌려야 합니다. 인스턴스를 복원하기 위해서는 인스턴스 내부의 정보를 자유롭게 액세스 할 수 있어야 하지만 원하지 않는 액세스를 허용하면 클래스 내부 구조에 의존한 코드가 프로그램의 여기저기로 흩어져서 클래스의 수정을 어렵게 만듭니다.이것을 캡슐화의 파괴라고..
Domain Driven Design(도메인 주도 설계) 도메인은 사용자가 어플리케이션을 사용하는 대상영역이 도메인이 된다. (ex. 주문 관리App은 주문관리가 도메인) Entity 엔터티는 다른 엔터티와 구별할 수 있는 식별자를 가지고 있고 시간의 흐름에 따라 지속적으로 변경되는 객체 주문 관리App에서는 주문이 엔터티가 된다. 각 Id를 가지고 주문이라는 엔터티를 식별할 수 있다. 가지고 있는 VO인 주문자, 주문아이템, 배송지 등이 바뀔 수 있다. Value Object 값 객체는 각 속성이 개별적으로 변화하지 않고 값 그 자체로 고유한 불변 객체 주문 관리 도메인에서는 주문자, 배송지, 주문아이템 등이 될 수 있다. Spring은 자바 기반 어플리케이션을 만들기 때문에 여러 객체들을 만들게되고,..
Mediator(중재자) 패턴 이 패턴은 개체 간의 직접 통신을 제한하고 중재자 개체를 통해서만 강제로 공동 작업을 수행합니다. 객체들 간의 상호작용을 객체로 캡슐화한다. Mediator 패턴은 객체들 간의 참조 관계를 객체에서 분리함으로써 상호작용을 독립적으로 다양하게 확대할 수 있다. 객체간의 의존성을 줄일 수 있다. Mediator(중재자)의 역할 Mediator의 역할은 Colleague 역할과 통신을 해서 조정을 실행하기 위한 인터페이스를 결정합니다. ConcreteMediator(구체적인 조정자, 중재자)의 역할 ConcreteMediator의 역할은 Mediator 역할의 인터페이스를 구현해서 실제의 조정을 실행합니다. Colleague(동료)의 역할 Colleague의 역할은 Mediato..
Spring기반 어플리케이션 프로젝트 만들기 Manual Setup Maven / Gradle 로 프로젝트를 만들고 pom.xml 이나 build.gradle 을 직접 수정합니다. Spring Boot (https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started.installing.java) Spring Boot CLI를 이용해서 설치하는 법 spring-boot-cli 설치 후 압축을 푼다. 윈도우 기준으로 시스템 변수에 SPRING_HOME 이라는 변수명으로 압축 푼 파일 경로를 설정한다. 그 후 시스템 변수 PATH에 %SPRING_HOME%\bin으로 Spring-boot-cli..
Spring 프로젝트를 만들기 위한 빌드툴 Maven Gradle Build 란? 필요한 라이브러리를 다운받고 classpath에 추가합니다. 소스 코드를 컴파일합니다. 테스트를 실행합니다. 컴파일된 코드를 packaging 합니다. -> jar / war / zip etc packaging 된 파일을 주로 artifacts라고 부르고 서버나 레포지토리에 배포합니다. 구동이 되는 서비스를 패키징 했을 경우 서버에 배포하지만 Third party library 형태로 외부에게 라이브러리 형태로 제공하기 위해서 배포할 때는 레포지토리에 배포할 수 있다. 이런 일(task)들을 자동화 하게 해주고 "이런 일들을 하겠다."라고 기술할 수 있게 하는데 이렇게 기술한 파일을 build script라고 부른다. Ma..
트랜잭션 소개 테이블 내용을 변경하는 SQL들이 연달아 실행되며 이것들이 마치 하나의 SQL처럼 다 같이 성공하던지 아니면 실패 해야 한다면 트랜잭션의 사용이 필수이다. 트랜잭션이란? Atomic하게 실행되어야 하는 SQL들을 묶어서 하나의 작업처럼 처리하는 방법 이는 DDL이나 DML중 레코드를 수정/추가/삭제한 것에만 의미가 있음 SELECT에는 트랜잭션을 사용할 이유가 없음 BEGIN과 END 혹은 BEGIN과 COMMIT 사이에 해당 SQL들을 사용 ROLLBACK을 사용하여 되돌릴 수 있음 트랜잭션의 좋은 예 은행 계좌 이체 계좌 이체: 인출과 입금의 두 과정으로 이뤄진다. 만일 인출은 성공했는데 중간에 에러가 나서 입금이 실패한다면 잘못된 것이다. 이 두 과정은 동시에 성공하던지 실패해야 한다..