일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- web
- java
- nomadcoder
- 매핑
- 플러시
- 단방향
- 프론트엔드
- 영속성 컨텍스트
- TODO
- Django
- frontend
- 트랜잭션
- React
- 노마드코더
- AWS
- clonecoding
- JS
- python
- JPA
- html
- 장고독학
- javascript
- 다대일
- SBERT
- ORM
- 일대다
- css
- 장고
- 바닐라js
- 다대다
- Today
- Total
목록전체 글 (49)
꿈꾸는 새벽하늘
이 에러는 제가 개발하다가 직접 마주쳤던 에러입니다. 프론트엔드와 백엔드가 협업하여 개발하다보면 이런 에러가 발생되는 경우가 있습니다. 에러를 보면 blocked by CORS policy라고 설명되어 있는데요, 이것이 바로 CORS 에러입니다. 1. CORS CORS는 Cross-Origin Resource Sharing의 약자입니다. 이는 교차 출처 리소스 공유라고 번역할 수 있고, 다른 출처의 리소스를 공유하는 방법이라는 의미입니다. 이러한 CORS 정책을 위반할 때 CORS 에러가 발생하게 됩니다. CORS에 대한 이해를 높이기 위해 URL의 구조부터 차근차근 살펴보겠습니다. 2. URL 구조 URL은 다음과 같이 protocol, host, port, path, parameter, 그리고 fra..
1. 트랜잭션과 락 1) 트랜잭션과 격리 수준 트랜잭션은 ACID라 칭하는 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)을 보장해야 한다. 원자성: 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공하든가 모두 실패해야 한다. 일관성: 모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야 한다. 예를 들어 데이터베이에서 정한 무결성 제약 조건을 항상 만족해야 한다. 격리성: 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다. 예를 들어 동시에 같은 데이터를 수정하지 못하도록 해야 한다. 격리성은 동시성과 관련된 성능 이슈로 인해 격리 수준을 선택할 수 있다. 지속성: 트랜잭션을 성공적으로 끝내면..
1. 예외 처리 JPA 표준 예외 트랜잭션 롤백을 표시하는 예외 javax.persistence.EntityExistsException javax.persistence.EntityNotFoundException javax.persistence.OptimisticLockException javax.persistence.PessimisticLockException javax.persistence.RollbackException javax.persistence.TransactionRequiredException 트랜잭션 롤백을 표시하지 않는 예외 javax.persistence.NoResultException javax.persistence.NonUniqueResultException javax.persist..
JPA가 지원하는 컬렉션의 종류와 중요한 부가 기능 컬렉션: 다양한 컬렉션과 특징 컨버터: 엔티티의 데이터를 변환해서 데이터베이스에 저장 리스너: 엔티티에서 발생한 이벤트 처리 엔티티 그래프: 엔티티를 조회할 때 연관된 엔티티들을 선택해서 함께 조회 1. 컬렉션 JPA는 자바에서 기본으로 제공하는 Collection, List, Set, Map 컬렉션을 지원한다. 이 컬렉션은 @OneToMany, @ManyToMany를 사용해서 일대다나 다대다 엔티티 관계를 매핑할 때, 그리고 @ElementCollection을 사용해서 값 타입을 하나 이상 보관할 때 사용 가능하다. 자바 컬렉션 인터페이스의 특징 Collection: 자바가 제공하는 최상위 컬렉션이다. 하이버네이트는 중복을 허용하고 순서를 보장하지 않..
1. 트랜잭션 범위의 영속성 컨텍스트 스프링 컨테이너는 트랜잭션 범위의 영속성 컨텍스트 전략을 기본으로 사용한다. 이 전략은 트랜잭션 범위와 영속성 컨텍스트의 생존 범위가 같다는 것을 의미한다. 즉, 트랜잭션을 시작할 때 영속성 컨텍스트를 생성하고 트랜잭션이 끝날 때 영속성 컨텍스트를 종료한다. 그리고 같은 트랜잭션 안에서는 항상 같은 영속성 컨텍스트에 접근한다. 스프링 프레임워크를 사용하면 보통 비즈니스를 시작하는 서비스 계층에 @Transaction 어노테이션을 선언해서 트랜잭션을 시작한다. 외부에서는 단순히 서비스 계층의 메소드를 호출하는 것처럼 보이지만 이 어노테이션이 있으면 호출한 메소드를 실행하기 직전에 스프링의 트랜잭션 AOP가 먼저 동작한다. 스프링 트랜잭션 AOP는 대상 메소드를 호출하기..
1. 스프링 데이터 JPA 소개 스프링 데이터 JPA는 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트다. 이 프로젝트는 데이터 접근 계층 개발 시 반복되는 CRUD 문제를 깔끔하게 해결한다. CRUD를 처리하기 위한 공통 인터페이스를 제공하고, 리포지토리를 개발할 때 인터페이스만 작성하면 실행 시점에 스프링 데이터 JPA가 구현 객체를 동적으로 생성해서 주입해준다. 따라서 데이터 접근 계층을 개발할 때 구현 클래스 없이 인터페이스만 작성해도 개발을 완료하는 것이 가능하다. 예시로 회원과 상품 리포지토리를 스프링 데이터 JPA를 사용해서 개발한다면 인터페이스만 작성하면 된다. public interface MemberRepository extends JpaRepository>M..
사용되는 기술 뷰: JSP, JSTL 웹 계층: 스프링 MVC 데이터 저장 계층: JPA, 하이버네이트 기반 프레임워크: 스프링 프레임워크 빌드: 메이븐(Maven) 1. 프로젝트 환경설정 프로젝트 환경설정 진행 순서: 프로젝트 구조 분석 -> 메이븐과 라이브러리 설정 -> 스프링 프레임워크 설정 프로젝트에 필요한 라이브러리 핵심 라이브러리 스프링 MVC: 스프링 MVC 라이브러리 스프링 ORM: 스프링 프레임워크와 JPA를 연동하기 위한 라이브러리 JPA, 하이버네이트: JPA. 표준과 하이버네이트를 포함하는 라이브러리 기타 라이브러리 H2 데이터베이스 커넥션 풀: tomcat-jdbc 커넥션 풀 사용 WEB: 서블릿, JSP 관련 라이브러리 로깅 SLF4J & LogBack 테스트: 테스트용 라이브러..
1. 객체지향 쿼리 소개 ORM을 사용하면 데이터베이스 테이블이 아닌 엔티티 객체를 대상으로 개발하므로 검색도 테이블이 아닌 엔티티 객체를 대상으로 하는 방법이 필요하다. JPQL은 이러한 문제를 해결하기 위해 만들어졌다. JPQL은 테이블이 아닌 객체를 대상으로 검색하는 객체지향 쿼리이고, SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다는 특징이 있다. 즉, SQL이 데이터베이스 테이블을 대상으로 하는 데이터 중심의 쿼리라면 JPQL은 엔티티 객체를 대상으로 하는 객체지향 쿼리이다. JPA가 공식 지원하는 기능 JPQL: 객체지향 쿼리 Criteria 쿼리: JPQL을 편하게 작성하도록 도와주는 API, 빌더 클래스 모음 네이티브 SQL: JPA에서 JPQL 대신 직접 SQL 사용 가능 ..
1. 기본값 타입 기본값 타입 (basic value type) 자바 기본 타입 (ex. int, double) 래퍼 클래스 (ex. Integer) String 2. 임베디드 타입 (복합 값 타입) 새로운 값 타입을 직접 정의해서 사용하는 경우 이를 임베디드 타입이라 한다. 임베디드 타입을 사용하기 위한 어노테이션 @Embeddable 값 타입을 정의하는 곳에 표시 @Embedded: 값 타입을 사용하는 곳에 표시 /* 값 타입 적용 회원 엔티티 */ @Entity public class Member { @Id @GeneratedValue private Long id; private String name; @Embedded Period workPeriod; @Embedded Address homeAdd..
1. 프록시 JPA가 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연하기 위해 제공하는 방법을 지연 로딩이라고 한다. 지연 로딩을 사용하려면 실제 엔티티 객체 대신 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요한데 이를 프록시 객체라고 한다. 프록시 클래스는 실제 클래스를 상속받아서 만들어지므로 실제 클래스와 겉 모양이 같다. 따라서 사용자는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 된다. 프록시 객체는 실제 객체에 대한 참조(target)를 보관하기 때문에 프록시 객체의 메소드를 호출하면 프록시 객체는 실제 객체의 메소드를 호출하게 된다. 프록시 객체는 실제로 사용될 때 데이터베이스를 조회해서 실제 엔티티 객체를 생성하는데 이를 프록시 객체의 초기화라고 한다. 프록시의 특징 프..