프록시 패턴
·
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..
네트워크 기초
·
Network
서버 서비스를 제공하는 프로그램 클라이언트 서비스를 받는 프로그램. 네트워크 데이터를 필요로 하는 모든 애플리케이션 해당 IP 번호 컴퓨터  식별번호. 0~255 사이의 정수, xxx.xxx.xxx.xxx 포트 번호 같은 컴퓨터의 프로그램들 식별 번호. 0~65535 사이의 정수    package inetaddress;import java.net.InetAddress;import java.net.UnknownHostException;public class InetAddressExample { public static void main(String[] args) { try { InetAddress local= InetAddress.getLocalHost(); ..
@DateTimeFormat(pattern = "yyyy-MM-dd")
·
Programming/Spring
@DateTimeFormat이 없으면 에러가 발생한다. it seems to be a conversion problem between String to java.util.Date. Post의 LocalDate이 String으로 들어오는 localDate을 LocalDate으로 변환하지 못하면서 에러가 나는 것이다. @DataTimeFormat을 사용하면 해결 가능하다. @DateTimeFormat은 Spring에서 지원하는 어노테이션으로 LocalDate와 LocalDateTime와 같은 날짜 관련 타입의 직렬화를 지원하는 어노테이션이다.
어노테이션
·
Programming/Spring
스프링이 제공하는 대부분의 어노테이션 특징은 런타임 시, 컴파일러에게 특정 기능을 실행하도록 정보 제공을 한다. 어노테이션 파일 정의 1. 적용 대상 2. 정보유지 되는 대상 3. 어노테이션 이름 스프링에서 초기화 설정 1. xml 이용해서 외부파일에 설정 정보 넣는다. 2. 코드 파일에 설정 정보를 넣는다. 설정 정보= 어노테이션
JAVA 25(3) 어노테이션
·
Programming/Java
어노테이션의 장점 어노테이션= 컴파일러에게 메시지를 전달하는 것 컴파일에 영향은 X 1. 컴파일러에게 코드 에러 체크할 수 있도록 정보 제공 2. 개발툴이 빌드나 배치 시 코드 자동 생성할 수 있도록 정보 제공 3. 런타임 시, 특정 기능을 실행하도록 정보 제공 @Override 오버라이딩할 메소드를 위 처럼 실수로 잘못 작성했다면 오버로딩 된다. 하지만 실수이므로 누군가 알려줘야 한다. 어노테이션 @Override을 명시하면, 컴파일러가 확인 후 에러 메시지를 출력해 준다. @Deprecated 더 이상 사용하지 않으나, 하위 호완성을 위해서 제공함을 의미 구현하거나 호출됐으면, 컴파일러가 @Deprecated 확인하고 메시지를 통해 알려 준다. @SupressWarnings= 경고를 꺼! 위의 예제에..