JPA의 Fetch Fetch는 Entity를 조회할때, 그 Entity와 연관관계가 있는 다른 Entity의 정보를 어느 시점에 가지고 오는지 결정해준다. Fetch의 타입은 2가지가 있다. LAZY Fetch Type EAGER Fetch Type LAZY Fetch Type (지연 로딩) Lazy는 '게으른'이란 뜻을 가지며, 사전 의미처럼 LAZY Fetch 타입은 실제로 엔티티 조회시에 바로 가지고 오지 않고, 연관 관계에 있는 엔티티를 참조할때 그때 가지고 온다. 예를들어, 사용자(User) 와 사용자 권한(Role) 정보를 담은 Entitiy가 있고, 2개의 Entity는 서로 1:1 관계를 이룬다고 하자 테스트 코드 @Entity @Table(name = "user") @Getter @Bu..
XML-RPC란? XML-RPC는 XML로 인코딩을 하는 RPC(Remote Procedure Call) 프로토콜의 종류 중 하나로, Server와 Client가 통신할때 사용한다. 이때, HTTP 프로토콜로 통신한다. XML-RPC를 사용하면, client에서 server의 프로그램을 마치 로컬에 있는 프로그램을 사용하듯이 원격 실행이 가능하다. 이후에는 좀 더 부가기능을 추가하여 SOAP 프로토콜이 개발되었지만, 단순하고 사용하기 쉬운 XML-RPC를 더 많이 사용하고 있다. (비슷한 프로토콜로는 JSON-RPC가 존재) XML-RPC XML 예시 XML-RPC Call examples.getStateName 40 XML-RPC Response South Dakota REST API vs XML-RP..
세션과 쿠키를 사용하는 이유? 세션과 쿠키를 사용하는 이유를 알기 위해 HTTP 프로토콜의 특징을 알아야 한다. HTTP 프로토콜 통신은 connectionless, statless 특징을 가지고 있다. connectionless TCP 통신과 다르게 클라이언트와 서버는 연결관계를 가지지 않는다. 즉, 클라이언트가 요청하고, 서버가 응답하면 연결을 끊는다. statless 클라이언트와 서버가 요청과 응답을 주고 받고 통신이 끝나면, 상태를 따로 저장하지 않는다. 위와 같은 이유로 세션과 쿠키를 사용하여 상태에 대한 정보를 저장한다. 만약, 세션과 쿠키를 사용하지 않으면 쇼핑몰 사이트에서 로그인을 하고 페이지를 이동하면 다시 로그인해야 하는 번거로운 상황이 발생할 수 있다. 세션과 쿠키 세션과 쿠키는 둘 ..
AOP 구현 AOP 개념은 아래 글 참고 2021.03.11 - [Spring] - Spring의 AOP 개념 (Aspect Oriented Programming) Spring의 AOP (Aspect Oriented Programming) AOP AOP는 Aspect Oriented Programming 의 약자로, 번역하면 관점 지향 프로그래밍이다. AOP는 주 비지니스 로직 앞, 뒤로 부가적인 기능을 추가하고 싶을때 사용하는데 예를들어, 로그처리, 보안처리, DB memostack.tistory.com 의존성 추가 org.springframework.boot spring-boot-starter-aop 서비스(비즈니스 로직) 구현 테스트를 위한 비즈니스 로직을 구현 AOP 구현에 집중하기 위해, 단순히..
AOP AOP는 Aspect Oriented Programming의 약자로, 번역하면 관점 지향 프로그래밍이다. AOP는 주 비지니스 로직 앞, 뒤로 부가적인 기능을 추가하고 싶을때 사용하는데 예를들어, 로그처리, 보안처리, DB 트랜잭션 처리 등이 있다 관점을 횡단으로 바꿔서 바라보는 것을 횡단 관심 사항이라 하며, 부가적인 로직을 Cross Cutting Concern, 주 비즈니스 로직을 Core Concern 이라 한다. AOP를 사용하는 이유? 코드의 중복을 줄일 수 있다. 주 업무 로직과 부가적인 로직을 분리할 수 있다. Java로 AOP 구현 AOP는 디자인 패턴 중 프록시 패턴(Proxy Pattern)을 이용해서 구현할 수 있다. 스프링에서는 어노테이션으로 더 쉽게 구현할 수 있음 성능 ..
IoC (Inversion of Control) IoC는 Inversion of Control의 약자로 한국어로 번역하는 '제어의 반전' 이라는 뜻을 가짐 재사용 라이브러리의 흐름이 반대라고 말할 수 있음 내용을 살펴보기 전에 DI(Dependency Injection)을 알고 있으면 이해하기 쉽다. 2021.03.10 - [Spring] - Spring의 DI 개념 (Dependency Injection) Spring의 DI 개념 (Dependency Injection) 객체를 생성하는 2가지 방법 객체를 생성하는 방법에는 2가지가 방법이 있다. 필요한 곳에 직접 생성하는 방법 외부에서 미리 생성해두고 필요한 곳에 할당(주입)하는 방법 위 그림은 직접 객체 memostack.tistory.com 아래 ..
객체를 생성하는 2가지 방법 객체를 생성하는 방법에는 2가지가 방법이 있다. 필요한 곳에 직접 생성하는 방법 외부에서 미리 생성해두고 필요한 곳에 할당(주입)하는 방법 위 그림은 직접 객체 생성하는 경우, 외부에서 객체 주입하는 경우를 그림으로 표현했다. 이름과 나이를 받는 Member 객체와 그 객체를 사용하는 MemberUse 클래스를 표현함 직접 객체를 생성하는 경우 위 그림에서 만약 1년이 지나 '홍길동'이 29살에서 30살이 되었다고 했을때, 모든 객체를 다 수정해줘야하는 번거로움이 있다. // Member public class Member { private String name; private int age; public Member(String name, int age) { this.nam..
Collection과 Map Java의 자료구조는 크게 Collection과 Map으로 나눌 수 있음 그리고, Collection은 List와 Set, Queue로 나눌 수 있음 본 글에서는 아래 자료구조에 대한 내용을 간단히 정리한다. List: ArrayList, LinkedList, Vector, Stack Set: HashSet, LinkedHashSet, TreeSet Queue: priorityQueue, ArrayDeque Map: HashMap, LinkedHashMap, Hashtable, TreeMap Collection - List 리스트는 순서를 가지고, 원소의 중복이 허용된다는 특징이 있음 ArrayList ArrayList는 배열을 이용하여 만든 리스트이다. 기본 크기는 10이지..
HashMap과 Hashtable 모두 map 자료구조다. 사용 방법도 거의 동일하지만, 차이점이 있음 // HashMap Map map = new HashMap(); map.put(1, "one"); map.put(2, "two"); System.out.println(map.get(1)); // one System.out.println(map.get(2)); // two // Hashtable Map table = new Hashtable(); table.put(1, "one"); table.put(2, "two"); System.out.println(table.get(1)); // one System.out.println(table.get(2)); // two HashMap HashMap은 동기화를 ..
Object의 equals()와 hashCode() equals() equals()는 보통 동일한 객체인지 확인할 때 사용한다. 항상 그런것은 아님 String의 경우는 문자열이 동일한지 확인할 때 사용 // Object의 equals() public boolean equals(Object obj) { return (this == obj); } hashCode() native 언어로 작성된 메소드로 구체적인 내부 구현부는 확인하기 어렵지만, 객체의 해시 값을 반환한다고 주석에 명시 되어 있음 즉, 객체의 해시 값을 int 타입으로 반환함 HashTable, HashMap, HashSet 등 Hash를 이용해서 데이터를 저장하는 자료구조에 이점을 줌 데이터 저장 위치를 결정하는데 사용됨 /** * Retu..