Backend

Backend/JPA

[JPA] 객체 지향 모델링과 양방향,단방향 연관관계 매핑

🤔 기존의 문제점 객체를 테이블에 맞추어 모델링 try{ //팀 등록 Team team = new Team(); team.setName("TeamA"); em.persist(team); //맴버 등록 Member member = new Member(); member.setUsername("member1"); member.setTeamId(team.getId()); // **외래키 식별자를 직접 다루고 있다.** em.persist(member); //조회 Member findMember = em.find(Member.class, member.getId()); Long findTeamId = findMember.getTeamId(); // 맴버객체에 저장된 팀아이디 즉 외래키를 찾는다 Team findTe..

Backend/JPA

[JPA] JPA 가장 중요한 2가지 - 엔티티 매핑

🤔 엔티티 매핑? 🔎 Entity 직역하면 '실체', '독립체' 라는 뜻으로 업무에 필요하고 유용한 정보를 저장하고 관리하기 위한 '어떤 것(Thing)'이라고 말할 수 있다. (DB에 저장되거나 가져와지는 객체라고 생각하면 편할것 같습니다. ) 🔎 Mapping 일반적인 의미로는 하나의 요소를 다른 요소와 대응시키거나 연결하는 프로세스를 말합니다. 📌 Entity(객체)와 관계형 데이터베이스(테이블, 컬럼, 관계 등)를 Mapping 즉 서로 대응시켜 연결하는 과정으로 보통 어노테이션(Annotation)을 사용하여 이루어지며 Mapping을 통해 JPA는 객체와 데이터베이스 간의 변환을 자동으로 처리할 수 있게 됩니다. ✔ Mapping 구분 Annotation 객체와 테이블 매핑 @Entity, @..

Backend/Spring

[Spring] 의존관계 자동 주입

🤔 의존관계 주입 방법 ✔ 생성자 주입 생성자를 통해서 의존 관계를 주입 받는 방법입니다. 생성자 호출 시점에 1번만 호출되는것이 보장됩니다. 호출되는 시점에 값을 딱 1번 세팅하고 그 다음부터는 수정되지 못하도록 막을 수 있습니다. ('불변, 필수' 의존 관계에 사용) @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy ..

Backend/JPA

[JPA] JPA 가장 중요한 2가지 - 영속성 컨텍스트

🤔 영속성 컨텍스트? 의미를 해석해보자면 "엔티티를 영구 저장하는 환경" 이라는 뜻으로 눈에 보이지 않는 논리적인 개념이다, EntityManager를 통해서 영속성 컨텍스트에 접근한다. ✔ 엔티티 매니저 팩토리 & 엔티티 매니저 Process EntityManager.persist(entity); // 영속화 EntityManager를 생성하면 1:1로 PersistenceContext라는 공간이 생성되어지고, Entity를 DB에 저장하는것이 아니라 PersistenceContext에 저장한다. ✔ 엔티티의 생명주기 📎 비영속(new/transient) //객체를 생성한 상태 ( 비영속 ) Member member = new Member(); member.setId("member1"); member...

Backend/Spring

[Spring] 컴포넌트 스캔

🤔 컴포넌트 스캔 스프링 빈을 등록할 때는 자바 코드의 @Bean 어노테이션을 통해서 설정 정보(AppConfig.java)에 직접 등록할 스프링 빈을 나열했다. 이렇게 등록해야할 스프링 빈이 많아지면 하나하나 등록하기도 힘들고 설정정보도 커지면서 누락하는 문제도 발생할 수 있다. 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 이라는 기능을 제공한다. ✔ @ComponentScan @ComponentScan은 @Component 가 붙은 모든 클래스를 스프링 빈으로 등록한다.(싱글톤) 🚨 문제 하지만 이렇게 어노테이션을 사용하여 해당하는 클래스에 자동으로 등록하게되면 의존관계를 주입할 수 있는 방법이 없다. 이전에는 설정 정보(AppConfig)에서 원하는 의존관계를 설..

Backend/JPA

[JPA] SQL 중심적 개발의 문제점과 JPA를 사용해야 하는 이유

🤔Why ? 국비학원 커리큘럼을 따라 공부하며 계속 드는 생각이 있었다. 💡 이거 너무 불편한데? 💡 더 편한 방법은 없을까? 📌 첫 프로젝트 JDBC api를 사용해서 query문을 정확하게 한땀한땀 입력하여 처리했다 📌 두번째 프로젝트 sql Mapper(MyBatis)를 사용하여 개발 코드는 줄었지만 query문에 집중되어있고, 생산성이 떨어진다는 점은 같았다. 프로젝트를 진행하며 많은부분을 맡게되어 다양한 기능을 구현하다보니 하나의 기능을 수행하기 위해 무언가 절차가 많다는 생각이 들었다. 우연히 JPA소개 강좌를 듣게되었고 이렇게 편하게? 이렇게 빨리? 개발을 할 수 있다는 설레임에 바로 강의를 수강하게되었다. 💻자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한님) ✔ SQL 중심적인 개발..

장용석
'Backend' 카테고리의 글 목록 (2 Page)