데코레이터 패턴(Decorator Pattern)
·
Programming/디자인 패턴
데코레이터 패턴이란? 주어진 상황 및 용도에 따라 기본 객체에 책임(기능)을 동적으로 추가하는 패턴. 데코레이터의 예 스타벅스 기본 에스프레소에, 물, 우유, 시럽, 휘핑크림 등 개인의 선호에 따라 재료(기능)을 추가하면 다양한 음료를 재조할 수 있다. 이와 같이 하나의 객체(에스프레소)에 옵션들을 여러개 추가해서 만드는 패턴을 장식하는 것과 같다하여 데코레이터 패턴이라 한다. 데코레이터 패턴 구조 데코레이터 코드 public class Main { public static void main(String[] args) { Component espresso = new BaseComponent(); System.out.println("에스프레소 : " + espresso.add()); Component am..
CORS
·
Programming/Spring
CORS란? Cross Origin Resoure Sharing 브라우저에서 다른 출처 리소스를 공유하는 방법 CORS는 브라우저 구현 스펙에 포함된 정책이다. Cross Origin= 교차 출처= 다른 출처 Origin= Protocol+ Host+ Port 다른 출처 리소스 제한 2가지 정책 SOP(Same Origin Policy) CORS 출처 확인 과정 SOP 지켰어? 아니오 CORS 메커니즘 지켰어? 아니오 브라우저 접근 X 최종 출처 비교는 어디서? 서버 X 브라우저 O 브라우저 → 서버 요청 헤더에 Origin: 출처 추가 서버→ 브라우저 응답 헤더에 Access-Control-Allow-Origin: 허용 출처 추가 브라우저는 Origin과 Access-Control-Allow-Origi..
컴포지트 패턴(Composition Pattern)
·
Programming/디자인 패턴
컴포지트 패턴이란? (여러 객체로 구성된 객체)복합 객체와 단일 객체를 클라이언트에서 구별 없이 다루게 해주는 패턴. 전체-부분의 관계(Directory-File)를 갖는 객체들 사이의 관계를 정의할 때 유용하다. 클라이언트는 전체와 부분을 구분하지 않고 동일한 인터페이스를 사용할 수 있다. Leaf/ Composite 클래스 모두 공통의 인터페이스의 구현체이다. Leaf: 부분 클래스, Composite 객체의 부품 Composite : 전체 클래스, 복수개의 Component를 갖는다. 심지어, 복수 개의 Leaf, 심지어 복수 개의 Composite 객체를 부분으로 가질 수 있다 패턴 적용 전 public class Computer { private Keyboard Keyboard; private ..
커맨드 패턴
·
Programming/디자인 패턴
커맨드 패턴이란? 커맨드 패턴은 객체의 행위(메소드)를 클래스로 만들어 캡슐화하는 패턴이다. 행위 패턴의 하나 행위(Behavioral) 패턴이란? - 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴 - 한 객체가 혼자 수행할 수 없는 작업을 여러 개의 객체로 어떻게 분해하는지, 또 그렇게 하면서도 객체 사이의 결합도를 최소화하는 것에 중점을 둔다. 이해를 돕기 위한 간단 예시 리모콘에는 다양한 기능을 수행하는 버튼이 있죠? 다양한 기능들을 메소드 단위로 구현할텐데, 리모콘 클래스 하나에 모두 보관해서 호출 할 수 있겠지만, 리모콘 객체가 매우 거대해질 겁니다.(한 클래스에 많은 메소드를 넣으니까 코드가 길고 복잡하겠죠? 기능을 추가하거나 수정하는데에도 번거로움이 있을 것 같아요). 하지만, ..
프록시 패턴
·
Programming/디자인 패턴
프록시 패턴 프록시 클라이언트가 사용하려고 하는 실제 대상인 것처럼 위장해서 클라이언트의 요청을 받아주는 대리자 타킷 프록시를 통해 최종적으로 요청을 위임 받아 처리하는 실제 오브젝트 프록시의 사용목적 1. 클라이언트가 타킷에 대한 접근 방법을 제어 2. 부가적인 기능을 부여하기 위함 3. 스프링에서는 AOP에 프록시 패턴 적용 AOP Aspect Oriented Programming(관전 지향 프로그래밍) 어떤 로직을 기준으로 핵심, 부가적인 관점으로 나누고 그 관점을 기준으로 모듈화하겠다. 소스 코드 상에서 반복적으로 쓰는 코드를 발견할 수 있는데, 이것을 흩어진 관심사(Crosscutting Concerns)라고 부른다. 위와 같이 흩어진 관심사를 Aspect로 모듈화하고 핵심적인 비즈니스 로직에서..
@OneToOne에서 Fetch 전략을 Lazy로 설정했을때 발생하는 이슈
·
Programming/JPA
@Entity @Getter @Setter @NoArgsConstructor public class SubProject extends Timestamped { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne(fetch = FetchType.LAZY) private ToyProject toyProject; @Column private String title; @OneToOne(mappedBy ="subProject", fetch = FetchType.LAZY, orphanRemoval = true) private KanbanBoard kanbanBoard; @OneToMany(mappedBy = "subP..
Default Method in Interface
·
Programming/Java
자바8에서는 메소드 구현을 포함하는 인터페이스를  정의할 수 있다. default method인터페이스의 기본 구현을 제공한다.기존 인터페이스를 구현한 클래스는 자동을 인터페이스에 추가된 디폴트 메소드를 상속 받게 된다. default 메서드가 나온 이유인터페이스에 새로운 메서드(추상 메서드)를 추가하기 어려움 (인터페이스 : 추상 메서드 집합)인터페이스의 변경의 전파를 최소화할 수 있다.interface Repairable{ boolean isfinished(); // 추상 메서드}interface Repairable{ default boolean isfinished(){}; // Default 메서드(추상 메서드 X), 구현도 가능함 } 디폴트 메서드를 이용하면 인터페이스의 기본 구현을 그대로 상속하..
Today_Log
·
DotJoin
Today I didSpring Security 설정을 stateful에서 stateless로 변경하였다. Why I didsateful은 session을 유지하기 때문에, 한번 authentication을 session에 저장하면 jwt가 없어도 인증이 된다. What I learnedstateless는 session을 사용하지 않음을 알았다. stateless 설정을 하면 서버에 요청이 들어올 때마다 session을 reset한다. 따라서, session에 authentication을 저장해도, 새로운 요청이 들어오면 session은 reset되서 비어있다.  Today My Hurdle기존 코드에서는, jwt에 들어있는 유저정보는 email뿐이라서, email 정보를 통해 db에 접근해서 id를 가..
TCP 네트워킹(2)
·
Network
병렬 처리= 동시 작업처리왜 병렬처리가 필요할까? 블로킹이 되면 다른 작업을 수행하지 못한다.  작업 쓰레드가 많아지면 리소스를 더 많이 사용하므로 서버의 성능은 떨어진다. 서버의 폭주(다운) 현상도 같은 이유이다. 해결방법은 서버에서 쓰레드를 제한된 개수만큼 운영하는 것이다. 제한된 쓰레드를 사용하려면 쓰레드 풀을 사용하면 된다.    작업을 thread pool에서 처리할 수 있도록 Runnable 객체를 만들어서 ExecutorService에 sumbit 메소드로 제공하는 코드를 작성해야 한다. UI를 변경하려면 Platform.runLater을 작성하고, 안에 UI 변경 코드를 넣는다고 생각하자. UI 변경을 수행하는 쓰레드는 쓰레드 풀의 쓰레드가 아님을 주의하자.
TCP 네트워킹(1)
·
Network
TCP- 연결 지향적 프로토콜(=통신을 위해 연결을 우선): 연결을 해야 되기 때문에 시간을 소요 함- 통신 회로 고정- 데이터 전달 정확하고 안전(연결을 성공시키면 데이터를 전달하기 때문에)-TCP를 지원하기 위해 자바에서는 2가지 java.net API 제공: ServerSocket, Socket   서버에서는 연결 수락을 위해 ServerSocket을 사용한다. ServerSocket은 특정 포트를 가지고 실행을 한다. 이것을 바인딩 포트라고 한다. 바인딩이란 서버가 실행될 때 물고 들어가는, 즉 연결이 됨을 의미한다. ServerSocket은 연결요청이 들어올 때까지 대기해야 한다. 해당 메소드는 accpet()이다. accept()는 연결 요청이 들어오면 연결을 수락하는 역할을 한다. accep..