본문 바로가기

전체 글

(76)
[JPA] 객체지향 쿼리 객체지향 쿼리란? 객체지향 쿼리란 데이터베이스 테이블을 대상으로 조회하는 SQL과 달리 엔티티 객체를 대상으로 조회하는 쿼리를 의미한다. 가장 중요한 객체지향 언어로 JPQL(Java Persistence Query language)이 있다. JPQL이 가장 중요한 이유는 이 글에서 추가로 소개할 Criteria, QueryDSL 같은 기술들은 JPQL을 편하게 작성하도록 도와주는 빌더 클래스일 뿐 결국 JPQL에 뿌리를 두고 있기 때문에 JPQL을 제대로 이해하지 못하면 위에 언급한 기술도 사용하기 어렵기 때문이다. JPQL JPQL의 특징 테이블이 아닌 객체를 대상으로 검색하는 객체지향 쿼리다. SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다. JPQL 작성 시 유의사항 SELECT m..
[JPA] 영속성 전이 (CASCADE), 고아객체 제거 (ORPHAN) 영속성 전이 (CASCADE) JPA는 CASCADE 옵션을 제공함으로써 부모 객체와 자식 객체의 영속성을 함께 관리할 수 있다. 즉 부모 엔티티를 저장할 때 자식 엔티티도 함께 저장할 수 있다. @Entity @Getter @Setter @NoArgsConstructor public class Parent { @Id @GaneratedValue @Column(name = "PARENT_ID") private Long id; @OneToMany(mappedBy = "parent") private List children = new ArrayList(); } @Entity @Getter @Setter @NoArgsConstructor public class Child { @Id @GeneratedValue..
[JPA] 프록시, 즉시로딩, 지연로딩 프록시란? 아래와 같은 상황을 가정해보고 프록시가 무엇인지 어떤 상황에서 사용되는지 한번 알아보자 회원 엔티티와 팀 엔티티가 존재하고 두 엔티티는 다대일 단방향 매핑 되어있다. @Entity @Getter @Setter @NoArgsConstructor public class Member { @Id @GeneratedValue @Column(name = "MEMBER_ID") private Long id; private String username; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; } @Entity @Getter @Setter @NoArgsConstructor public class Team { @Id @GeneratedValue..
[JPA] 연관관계 매핑 단방향 연관관계 @Entity @Getter @Setter @NoArgsConstructor public class Member { @Id @Column(name = "MEMBER_ID") private Long id; private String username; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; public void setTeam(Team team) { this.team = team; } } @Entity @Getter @Setter @NoArgsConstructor public class Team { @Id @Column(name = "TEAM_ID") private Long id; private String name; } 데이..
[JPA] 영속성 컨텍스트란(Persistence Context)? 영속성 컨텍스트란? 영속성 컨텍스트(Persistence Context)란 해석하면 엔티티를 영구 저장하는 환경이라는 뜻으로 엔티티 매니저를 사용해 데이터를 저장하거나 조회하면 엔티티 매니저는 영속성 컨테스트에 엔티티를 보관하고 관리한다. em.persist(member); 위 코드에서 persist() 메소드는 엔티티 매니저를 사용해서 회원 엔티티를 영속성 컨텍스트에 저장한다. 조회 기능 메소드인 find()도 마찬가지이다. 동일한 memberId로 Member 객체를 두번 조회할 때 sql문으로 조회했을때는 select 쿼리가 두번 나갔지만 JPA의 find() 메소드를 이용하면 첫 번째 조회때 select 쿼리를 보내 데이터를 조회한 후 영속성 컨텍스트에 저장해놨다가 두 번째 조회부터는 데이터베이스..
[JPA] JPA 란? JPA 란 무엇인가? JPA 란 Java Persistence API의 줄임말로 자바 진영의 ORM 기술 표준이다. 여기서 ORM 이란 Object-Relational Mapping의 줄임말로 객체와 관계형 데이터베이스를 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결해준다. 즉 사용하는 언어가 다른 객체와 데이터베이스 사이에서 중간 매개체 역할을 해주는 고마운 친구이다. 덕분에 개발자는 데이터 중심인 관계형 데이터베이스를 사용해도 객체지향 애플리케이션 개발에 집중할 수 있다. JPA 를 사용하는 이유 - 생산성 JPA를 사용하기 전에는 지루하고 반복적인 CRUD를 구현할때도 개발자가 직접 sql문을 짜서 개발을 해야 했다. 하지만 JPA를 사용하면 아래 코드와 같이 자바 컬렉션에 객체를 저장하듯이 ..
[HTTP] 쿠키와 세션 개요 HTTP 프로토콜은 서버-클라이언트 통신 시 stateless 방식으로 통신합니다. 즉, 브라우저에서 새 웹 페이지를 열면 기존의 웹 페이지나 서블릿에 관한 어떤 연결 정보도 새 웹 페이지에서는 알 수 없습니다. 따라서 웹 페이지나 서블릿끼리 상태나 정보를 공유하려면 웹 페이지 연결 기능, 즉 세션 트래킹을 이용해야 합니다. 웹 페이지를 연동하는 방법은 다음과 같습니다. 태그 : HTML의 태그를 이용해 웹 페이지들 사이의 정보를 공유합니다. URL Rewriting : GET 방식으로 URL 뒤에 정보를 붙여서 다른 페이지로 전송합니다. 쿠키 : 클라이언트 PC의 Cookie 파일에 정보를 저장한 후 웹 페이지들이 공유합니다. 세션 : 서버 메모리에 정보를 저장한 후 웹 페이지들이 공유합니다. 이..
[Spring] AOP AOP 란? AOP(Aspect-Oriented Programming)는 관점 지향 프로그래밍이라는 의미로 번역되는데, 객체지향에서 특정 비즈니스 로직에 걸림돌이 되는 공통 로직을 제거할 수 있는 방법을 제공해줍니다. AOP를 적용하면 기존의 코드에 첨삭 없이, 메서드의 호출 이전 혹은 이후에 필요한 로직을 수행하는 방법을 제공합니다. 정리하면 AOP가 추구하는 것은 관심사의 분리로 개발자가 염두에 두어야 하는 일들은 별도의 관심사로 분리하고 핵심 배즈니스 로직만을 작성하는 것을 권장합니다. AOP 용어 용어 설명 aspect 구현하고자 하는 보조 기능 advice aspect의 실제 구현체(클래스). 메서드 호출을 기준으로 여러 지점에서 실행 joinpoint advice를 적용하는 지점을 의미. 스프..