개발공부 26

[spring] 양방향 연관관계&연관관계의 주인

객체는 참조로 연관된 객체를 찾고 테이블은 외래키로 조인을 통해 연관된 테이블을 찾는다. 양방향 연관관계 -> 팀과 멤버를 생각할 때 멤버를 보고 팀을 찾는 것과 팀을 보고 멤버를 찾는 두가지가 모두 되는 관계를 말한다. 객체 객체를 양방향으로 참조하려면 단방향 연관관계가 2개를 만들어야한다. 이것을 양방향 연관관계라고 이름 붙였다 팀 -> 멤버 멤버 -> 팀 테이블 테이블은 하나의 FK를 이용해 두 테이블이 연관관계를 관리한다. (양쪽으로 join가능) -> 연관관계가 1개 있다. 회원 팀 @OneToMany(mappedBy = "team") List members = new ArrayList(); 팀 입장에서 보면 Team이 1이고 Member가 N이므로 @OneToMany 어노테이션을 붙여준다. m..

[spring]단방향 연관관계

한 팀(TEAM)에 여러 Member가 있는 1:N관계를 가정하자. 그러면 TEAM의 ID가 FK로 Member 테이블에 들어있어야 한다. 이를 연관관계를 이용하면 좀 더 객체지향적으로 만들 수 있다. 테이블은 외래 키로 조인하여 연관된 테이블을 찾고 객체는 참조를 사용해 연관된 객체를 찾는다는 차이가 있다. @ManyToOne @JoinColumn(name="TEAM_ID") private Team team; Member에서 Team 자체를 갖고있다. (Team의 id를 갖고있는 것이 아니라) 위 코드처럼 작성하면 Member의 team과 TEAM_ID가 연관관계 매핑이 된다. @ManyToOne 과 같은 어노테이션을 통해 매핑을 하여 이 관계가 1:N인지 N:M인지 N:1인지 알려줘야한다. Membe..

[매핑 어노테이션]@Entity, @Table, @Enumerated, @Id, @GeneratedValue, @Temporal,@Lob

1. @Entity @Entity가 붙은 클래스는 JPA가 관리하는 엔티티이다. 꼭 기본 생성자가 있어야한다. ( 파라미터X) 2. @Table 엔티티와 매핑할 테이블을 지정하는 어노테이션이다. 속성으로 name = "" 으로 매핑할 테이블 이름을 변경할 수 있다. 3. @Enumerated enum을 설정하고 싶을 때 사용한다. (EnumType.STRING)으로 설정해주어야 안전하다. ORDINAL도 있는데 (default)이는 순서를 DB에 저장하는 것으로 안전하지않다. 예시 ) @Enumerated(EnumType.STRING) private OrderStatus status; 4. @Id 해당 변수를 pk로 설정해준다. 5. @GeneratedValue 따로 값을 넣지 않아도 자동적으로 숫자가 ..

플러쉬(flush)란?

1. 플러쉬란 ? 플러쉬 : 영속성 컨텍스트의 변경 내용을 DB에 동기화 쓰기 지연 SQL 저장소에 있는 것들이 DB에 반영되는 것이다! 2. 플러쉬가 발생하면 ? 1. 변경감지 2. 수정된 엔티티 쓰기 지연 SQL 저장소에 등록 3. 쓰기지연 SQL 저장소의 쿼리를 DB에 전송 3. Flush는 언제 발생하나요? 1. em.flush() 2. JPQL을 실행할 경우 3. 트랜잭션 커밋

@Entity

@Entity : 해당 클래스가 엔티티임을 알려준다. JPA에서 해당 클래스의 필드를 이용하여 DB에 테이블을 만들어준다. 참고 블로그 : https://whitepro.tistory.com/265 스프링 부트 : 기본 개념 1) Entity, Repository 개념 개인적인 정리와 기록을 위한 글이다. 혹시라도 참고해주시는 분들께서는 정확하지 않은 내용이 많으니 유의해주시길 바란다. 자바 진영의 백엔드 개발을 아무런 지식없이 시작하게 되었다. 현 whitepro.tistory.com

Thymleaf가 뭔데?

타임리프 공식 사이트 : https://www.thymeleaf.org/ Thymeleaf Integrations galore Eclipse, IntelliJ IDEA, Spring, Play, even the up-and-coming Model-View-Controller API for Java EE 8. Write Thymeleaf in your favourite tools, using your favourite web-development framework. Check out our Ecosystem to see more integrati www.thymeleaf.org thymleaf는 템플릿 엔진 중 하나이다. 템플릿 엔진은 서버의 데이터와 정적자원(html, css)를 조합하여 결과물을 만들어..

의존관계 주입 방법에는 뭐가 있을까?

의존관계 주입 방법에는 4가지가 있다. 1. 생성자 주입 2. 수정자 주입 3. 필드 주입 4. 일반 메서드 주입 스프링은 스프링 빈 등록 단계와 의존관계 주입 단계로 나뉘어져있다. 1. 생성자 주입 1) 스프링이 컴포넌트 스캔을 한다. 2) @Component가 붙은 메서드를 스프링 빈에 등록한다. 3) 스프링 빈에 등록하기위해서는 생성자를 호출해야한다. 4) 생성자를 호출하러 갔는데 @Autowired가 붙어있다. 5) 이는 생성자의 파라미터이 있는 것들을 스프링 컨테이너에서 스프링 빈을 갖고와서 주입해준다. 호줄 시점에 딱! 1번만 호출된다는 특정이 있고 불변, 필수 의존관계에서 사용된다. 만일 생성자가 1개만 있으면 @Autowired를 생략해도 된다. 2. 수정자 주입 생성자 대신 (생성자를 없..

싱글톤과 스프링 컨테이너

싱글톤 패턴이 뭐에요? 하나의 클래스에 하나의 인스턴스만 생성되는 것을 보장하는 디자인 패턴 -! 스프링은 주로 웹 어플리케이션을 개발할 때 사용한다. 웹 어플리케이션은 사용자의 요청이 참 많고 동시에 이뤄지는 경우가 많다. 이러한 요청 때마다 객체가 만들어진다면 메모리 낭비가 심하다. 그래서 static으로 객체를 1개를 생성한 후 private으로 생성자를 선언하여 외부에서 new 를 이용해 객체 생성하는 것을 막는다면 싱글톤 패턴을 구현할 수 있다. 이를 이용하면 고객의 요청마다 객체를 생성하는 것이 아니라, 이미 만들어진 객체를 공유해서 효과적으로 사용할 수 있다. 하지만 여러 문제점이 존재한다. 싱글톤을 구현하는 코드가 꽤 필요하고, 구체 클래스에 의존하여 DIP를 위반하고, 테스트가 어려우며 ..

스프링 컨테이너와 스프링 빈_(feat.BeanDefinition)

1. 스프링 컨테이너 ? ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext를 스프링 컨테이너라고 한다. 2. AnnotationConfigApplicationContext 와 GenericXmlApplicationContext ApplicationContext는 인터페이스이다. JAVA : AnnotationConfigApplicationContext 는 인터페이스를 구현한 구현체이다. AnnotationConfigApplicationContext는 java 클래스를 이용해서 bean을 등록하는 방식이고 최근에 주로 사용된다. XML : Applic..