JPA Auditing기능이란?
·
Spring
JPA Auditing기능 JPA Auditing이란? Java에서 ORM 기술인 JPA를 사용하여 도메인을 관계형 데이터베이스 테이블에 매핑할 때 공통적으로 도메인들이 가지고 있는 필드나 컬럼들이 존재합니다. 대표적으로 생성일자, 수정일자, 식별자 같은 필드 및 컬럼이 있습니다. 결국 공통적으로 가지고 있다는것은 코드가 중복된다는 말과 같습니다. 도메인을 영속성 컨텍스트에 저장하거나 조회를 수행한 후에 update를 하는 경우 매번 시간 데이터를 입력하여 주어야 하는데, audit을 이용하면 자동으로 시간을 매핑하여 데이터베이스의 테이블에 넣어주게 됩니다. build.grade에 의존성 추가 dependencies { compile('org.springframework.boot:spring-boot-s..
스프링 핵심 원리[기본편] - 의존관계 자동 주입
·
Spring
의존관계 주입 방법 생성자 주입 (가장 굿) 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 생성자를 통해 의존관계를 주입받는 방법 지금까지 진행한 방법 특징 생성자 호출시점에 딱 1번만 호출됨 불변 , 필수 의존관계에 사용 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPoli..
스프링 핵심 원리[기본편] - 컴포넌트 스캔
·
Spring
컴포넌트 스캔과 의존관계 자동 주입 시작하기 직접 @Bean을 통해 스프링 빈을 지정하다 보면 프로젝트가 커졌을때 귀찮고, 누락되는 정보도 있을것이다. 따라서 설정정보가 없어도 자동으로 스프링 빈을 등록해주는 컴포넌트 스캔이라는 기능을 제공 또한 의존관계도 자동으로 주입하는 @Autowired라는 기능도 제공 더보기 스프링 컨테이너와 빈을 사용하는이유 서로 연관되어있는 객체(인스턴스 , 메서드)를 직접가져다 쓰면 ocr을 위반하고 유지보수면에서 불편함이 있기때문 기억하기 AutoAppConfig.java @Configuration 어노테이션은 그대로 -> 설정정보이기 때문 @ComponentScan 어노테이션을 이용하면 자동으로 @Component가 붙은 클래스를 스프링 컨테이너에 빈으로 등록 @Conf..
스프링 핵심 원리[기본편] - 싱글톤 컨테이너
·
Spring
웹 애플리케이션과 싱글톤 한번에 수많은 사람들이 접속함 이때 지금까지의 순수한 자바만의 AppConfig 는 요청마다 객체를 새로 생성 이러면 메모리 낭비가 심해진다. 해결방안으로 해당 객체가 딱 1개만 생성되어 공유하는 싱글톤 패턴이 등장 싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 구현방법 static 영역에 객체 instance를 미리 하나 생성 해당 인스턴스가 필요하면 오직 getter를 통해서만 조회가능. 호출하면 static영역이기에 같은 인스턴스만이 반환됨 생성자를 private로 막아 외부에서 new로 해당 인스턴스를 생성하는것을 막음 public class SingletonService { //1. static 영역에 객체를 딱 1개만 생성해둔다. pri..
스프링 핵심 원리[기본편] - 스프링 컨테이너와 스프링 빈
·
Spring
스프링 컨테이너 생성 //스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext를 스프링 컨테이너(인터페이스)라 한다. AnnotationConfigApplicationContext()은 ApplicationContext의 구현체이다. 직전에 AppConfig 를 사용했던 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다. 스프링 컨테이너의 생성 과정 1. 스프링 컨테이너 생성 스프링 컨테이너 생성 new AnnotationConfigApplicationContext(AppConfig.class) 스프링 컨테..
스프링 핵심 원리[기본편] - 예제만들기 , 객체 지향 원리 적용
·
Spring
예제 만들기 주문과 할인 도메인 설계 주문 도메인 협력, 역할, 책임 주문 도메인 전체 주문 도메인 클래스 다이어그램 주문과 할인 도메인 개발 주문서비스 구현체 주문 구현체를 작성시 다음과 같이 인스턴스를 생성해주면 OCP, DIP 같은 객체지향 설계원칙을 준수하지 못한다. DIP : 주문서비스 클라이언트(OrderServiceImpl)은 추상(인터페이스)뿐만 아닌 구체 클래스(FixDiscountPolicy)를 의존하고 있다. OCP : 만약 할인 정책을 변경하거나 저장소를 변경할시 클라이언트(구현체)에 영향을 준다.(일일이 변경해줘야한다.) public class OrderServiceImpl implements OrderService { private final MemberRepository mem..
연결리스트로 Stack 구현하기 - c언어
·
Data structure
Stack이란? Stack이란 FILO(First - In - Last -Out)형태로 먼저입력된 값이 가장 나중에 출력되는 형태이다. 스택은 2가지 함수로 구현할수 있는데 push함수와 pop함수로 push함수는 값을 넣을때마다 Header에 노드를 붙히고, pop을할때는 Header에 붙어있는 노드부터 없애는 형태이다. 1. 연결리스트 구조체로 정의하기 typedef struct Node { int data; struct Node* next; }Node; Node* head; Node* tail; 2. 초기 Header 와 Tail 선언 및 할당 void init() { head = (Node*)malloc(sizeof(Node)); tail = (Node*)malloc(sizeof(Node)); h..
양방향 연결리스트(c언어)
·
Data structure
메인함수 int main() { /*----------헤드와 테일 선언---------------*/ Node* head = (Node*)malloc(sizeof(Node)); Node* tail = (Node*)malloc(sizeof(Node)); head->next = tail; head->prev = NULL; tail->next = NULL; tail->prev = head; /*---------------노드 추가-------------------*/ insertFirst(head,10); insertFirst(head, 20); /*----------------노드 출력----------------*/ print(head, tail); /*----------------노드 제거--------..