분류 전체보기 204

책임 연쇄 패턴(Chain of Responsibility Pattern)

책임 연쇄 패턴이란? 요청을 보내는 쪽(sender)과 요청을 처리하는(receiver) 쪽을 분리하는 패턴이다. 핸들러 체인을 사용해서 요청을 처리한다. 클라이언트로부터의 요청을 처리할 수 있는 처리 객체를 Chain으로 만들어 결합을 느슨하게 하기 위해 만들어진 패턴이다. 일반적으로 요청을 처리할 수 있는 객체를 찾을 때까지 집합 안에서 요청을 전달한다. 예제 코드 public abstract class Handler { public String name; private Handler next; public Handler(String name) { this.name = name; } public void setNext(Handler next) { this.next = next; } public voi..

디자인패턴 2022.10.08

[SQL] ERROR 1146 (42S02): Table doesn't exist 에러

원인 Entity에 작성한 테이블과 DB에 만든 테이블이 일치 하지 않아서 생기는 에러이다. 게시물과 회원의 연관관계 매핑을 할때도 Entity와 DB가 일치 하지 않으면 이러한 에러가 발생이 일어날수가 있다. 해결 방법 1. Entity와 DB의 이름이 같은지 한번더 확인한다. 2, application.properties , application.yml 에서 Table을 자동 생성 해주면 된다. spring.jpa.hibernate.ddl-auto=update ddl-auto 옵션 종류 create: 기존테이블 삭제 후 다시 생성 (DROP + CREATE) create-drop: create와 같으나 종료시점에 테이블 DROP update: 변경분만 반영(운영DB에서는 사용하면 안됨) validat..

DB/Mysql 2022.10.03

@Transactional

스프링에서 @Transactional 을 이용하여 트랜잭션 처리를 하는 방법 DB와 관련된, 트랜잭션이 필요한 서비스 클래스 혹은 메서드에 @Transactional 어노테이션을 달아주면된다. 클래스, 메서드 모두에 @Transactional 어노테이션을 붙이면 메서드 레벨의 @Transactional 선언이 우선 적용된다. java //게시판의 게시글을 삭제하는 메서드 @Transactional public void removeBoard(Long id) throws Exception { replyDAO.removeAll(id); //삭제할 게시글의 답글 삭제 boardDAO.deleteBoard(id); //게시글 삭제 } @Transactional이 붙은 메서드는 메서드가 포함하고 있는 작업 중에 하..

Spring 2022.09.29

변경 감지와 병합(merge)

변경 감지와 병합(merge) JPA는 영속성 context에 테이블 형태의 1차 캐시를 두고 엔티티를 저장해서, Transaction commit 시, 1차 캐시의 영속된 값과 현재 entity값을 비교하여 변경이 된 것을 알아서 적용해준다. 준영속 상태 영속 상태였다가 더는 영속성 컨텍스트가 관리하지 않는 상태 영속성 컨텍스트로부터 분리된 상태 준영속 상태를 만드든 3가지 방법 1. em.detach(entity) : 특정 엔티티만 준영속 상태로 전환 2. em.clear() : 영속성 컨텍스트를 완전히 초기화 3. em.close() : 영속성 컨텍스트를 종료 준영속 엔티티 영속성 컨텍스트가 더는 관리하지 않는 엔티티를 말한다 엔티티의 데이터를 가지고 있는 클라이언트 사이드로 넘기기 위한 객체 준영..

Spring 2022.09.29

템플릿 메소드 패턴(Template Method Pattern)

템플릿 메소드 패턴이란? 템플릿 메소드 패턴이란 특정 작업을 처리하는 일부분을 서브 클래스로 캡슐화하여 전체적인 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내용을 바꾸는 패턴이다. 디자인 패턴이라고 하기도 뭐할정도로 객체지향 언어로 개발을 하다보면 무의식적으로 사용하는 패턴이다. 주로 개발을 하다보면 구체적인 구현은 다르지만 기본적인 기능은 비슷한 경우가 종종 있다. 예를 들면 HTTP와 SMTP Client 프로그램의 경우, 주고받는 메시지의 내용이 서로 다를 뿐 둘 다 인터넷 프로토콜을 이용하여 서버에게 요청을 전달하고 결과를 수신한다는 점에서 동일하다. 이처럼 두개 이상의 프로그램이 기본적으로 동일한 골격 하에서 동작할때 기본 골격에 해당하는 알고리즘은 일괄적으로 관리하면서 각 프로그램마다 달라..

디자인패턴 2022.09.25

CORS란?

CORS(Cross Origin Resource Sharing) 번역하면 "교차 출처 자원 공유"이다. 이렇게 번역하면 이해하기 힘드니 "교차 출처" 대신하여 "다른 출처" 라는 단어로 풀어가 보려고 한다. CORS에 대한 설명을 하기 전에 Origin(출처)와 SOP에 대하여 정확하게 무엇을 의미하는지 알아보고 가자 Origin 위에 같은 URL 처럼 Origin은 Protocol, Host, Port까지 모두 합친 것을 의미한다. 즉, 서버를 찾아가기 위해 필요한 가장 기본적인 것들을 합쳐놓은 것이다. 또한 Origin 내의 포트 번호는 생략이 가능한데, 이는 각 웹에서 사용하는 HTTP, HTTPS 프로토콜의 기본 포트 번호가 정해져 있기 때문이다. ( HTTP -> 80 / HTTPS -> 443..

Web 2022.09.25

전략패턴(Strategy Pattern)

전략 패턴 ( Strategy Pattern ) 객체들이 할 수 있는 행위 각각에 대해 전략 클래스를 생성하고, 유사한 행위들을 캡슐화 하는 인터페이스를 정의하여, 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고 전략을 바꿔주기만 함으로써 행위를 유연하게 확장하는 방법을 말합니다. 간단히 말해서 객체가 할 수 있는 행위들 각각을 전략으로 만들어 놓고, 동적으로 행위의 수정이 필요한 경우 전략을 바꾸는 것만으로 행위의 수정이 가능하도록 만든 패턴입니다. Strategy: 인터페이스나 추상 클래스로 외부에서 동일한 방식으로 알고리즘을 호출하는 방법을 명시 ConcreateStrategy1, 2, 3: 스트래티지 패턴에서 명시한 알고리즘을 실제로 구현한 클래스 Context: 스트래티지 패..

디자인패턴 2022.09.20

긴 매개변수 목록

어떤 함수에 매개변수가 많을수록 함수의 역할을 이해하기 어려워진다 그 함수는 한가지 일을 하고 있는게 맞는가? 불필요한 매개변수는 없는가? 하나의 레코드를 뭉칠 수 있는 매개변수 목록은 없는가? 어떤 매개변수를 다른 매개변수를 통해 알아낼 수 있다면, “매개변수를 질의 함수로 바꾸기”를 사용할 수 있다 기존 자료구조에서 세부적인 데이터를 가져와서 여러 매개변수로 넘기는 대신,”객체 통째로 넘기기”를 사용할 수 있다 일부 매개변수들이 대부분 같이 넘겨진다면, “매개변수 객체 만들기”를 적용할 수 있다 매개변수가 플래그로 사용된다면, “플래그 인수 제거하기”를 사용할 수 있다 여러 함수가 일부 매개변수를 공통적으로 사용한다면 “여러 함수를 클래스 묶기”를 통해매개변수를 해당 클래스의 필드로 만들고 매서드에 ..

Language/Java 2022.08.15

프록시 패턴(Proxy Pattern)

프록시 패턴(Proxy Pattern) 특정 객체에 대한 접근을 제어하거나 기능을 추가할 수 있는 패턴 초기화 지연, 접근 제어, 로깅, 캐싱 등 다양하게 응용해 사용 할 수 있다 프록시 패턴 특징 원래 하려던 기능을 수행하며 그외의 부가적인 작업(로깅, 인증, 네트워크 통신 등)을 수행하기에 좋다. 비용이 많이 드는 연산(DB 쿼리, 대용량 파일 등)을 실제로 필요한 시점에 수행할 수 있다. 사용자 입장에서는 프록시 객체나 실제 객체나 사용법은 유사하므로 사용성이 좋다. 프록시 패턴의 종류 가상프록시 꼭 필요로 하는 시점까지 객체의 생성을 연기하고, 해당 객체가 생성된 것 처럼 동작하도록 만들고 싶을 때 사용하는 패턴이다. 프록시 클래스에서 작은 단위의 작업을 처리하고 리소스가 많이 요구되는 작업들이 ..

카테고리 없음 2022.08.15

플라이웨이턴 패턴 (Flyweight Pattern)

플라이웨이턴 패턴 (Flyweight Pattern) 란? 여러 클래스의 인스턴스 한 개만 가지고 여러 개의 "가상 인스턴스"를 제공하고 싶을 때 사용하는 패턴이다. 인스턴스를 가능한 대로 공유시켜 슬데없이 new 연산자를 통한 메모리 낭비를 줄이는 방식이다. 자주 변하는 속성(외적인 속성, extrinsit)과 변하지 않는 속성(내적인 속성, intrinsit)을 분리하고 재사용하여 메모리 사용을 줄인다 Character 클래스 글자 하나를 표현한 도메인 public class Character { private char value; private String color; private String fontFamily; private int fontSize; public Character(char va..

디자인패턴 2022.08.15