썸네일 @Transactional 안에서 LazyInitializationException, JPQL @Modifying JPQL, @Query 어노테이션을 통해 Update/Delete/Insert와 같은 Command를 사용하려면 @Modifying 어노테이션을 함께 추가해야 합니다.지금 내가 보내는 요청이 Query, 그러니까 SQL의 Select문이 아니라 DB에 변경을 끼친다는 것을 알리는 것이죠.저도 프로젝트 내에서 JPQL을 사용하는 부분에 위와 같이 @Modifying을 붙여 사용했습니다.@Modifying은 다음과 같은 두 Element를 받습니다. flushAutomatically는 해당 어노테이션이 붙은 modifying query를 실행 전에 영속성 컨텍스트에 있는 내용을 flush 하도록 합니다.clearAutomatically는 해당 어노테이션이 붙은 modifying query 실행 후에 영속성 ..
썸네일 FetchType.LAZY와 Proxy, 그리고 Spring의 Transaction 처리 오늘 할 것. 앱센터 활동으로 학기 중 약소하게나마 ToDo List 프로젝트를 진행하고 있다. 현재 JWT를 이용한 로그인 기능을 개발중인데 다른 바보같은 실수들도 많았지만 그 중에서도 알고도 틀린 에러를 소개하려고 한다. LazyInitializationException 그래. 어디서 많이 봐서 이젠 익숙하다 못해 지겨울 지경이다. 아직까지 직접 마주한 적은 없었는데 굳이굳이 틀리며 또 배우게 되는구나. 이번 글에선 LazyInitializationException이 발생한 이유와 javax.persistence의 enum 클래스, 그 중에도 FetchType.LAZY와 Proxy에 대해 알아본다. 현재 상황 우선 로그를 보자. org.hibernate.LazyInitializationExceptio..
세션은 어디에 저장될까? (HttpSession, Cookie and Session) 쿠키와 더불어 Session은 웹에서 널리 사용된다. 주로 유저의 로그인 정보를 다른 페이지로 넘어가서도 유지하기 위해 사용한다. 쿠키와 세션을 비교하는게 그다지 옳바른 방법같지는 않아보이나, 매번 그렇게 설명한다. 사실 이번 포스팅엔 그게 중요한게 아니고 '쿠키는 클라이언트에, 세션은 서버에 데이터를 저장한다'가 핵심이다. 그래. 쿠키는 브라우저에 누구나가 확인할 수 있는 방법으로 저장된다. 반면에 세션 방식은 데이터를 서버에 저장하고 브라우저는 세션ID만 쿠키로 저장한다. 브라우저는 서버에 요청을 보낼 때 쿠키 정보를 함께 보내고, 서버는 쿠키에 담긴 세션 ID를 이용해 세션 정보를 조회한다. 근데, 그래서 세션은 서버 '어디에' 저장되는데? 서버 구성에 따라 달라지겠지만, 크게 두 가지 선택이 있다..
Interface에는 왜 protected 접근지정을 사용할 수 없을까? Java에서 protected 접근 지정자는 멤버를 클래스 내부 또는 동일 패키지에 속한 클래스와 하위(sub) 클래스에 공개한다. protected는 특히 super class의 멤버를 sub class에서 재사용하거나 오버라이딩 할 때 많이 사용한다. 상속에서 강력한 기능인 protected를 인터페이스에서는 사용할 수 없다. 그 이유를 알아보자. 사실 인터페이스에서 protected를 사용하지 못 하도록 하는 것에는 절대적인 이유라기 보단, 언어설계적인 이유가 크다. 이는 인터페이스의 목적과 큰 연관이 있는데, 인터페이스는 다른 클래스들에게 특정 메서드의 프로토콜을 제공하는 것을 목표로 한다. 즉, 이를 구현하는 여러 클래스에서 공통된 이름으로 서로 다른 일을 할 수 있는 메서드의 원형을 제공한다...
접근 지정자 비교하기 Java에는 클래스를 위한 2가지 접근지정자와 멤버를 위한 4가지 접근지정자가 있다. 클래스 접근 지정자 public: 패키지에 상관없이 모든 클래스에서 접근 가능. default: 같은 패키지 내 클래스에서만 접근 가능. 멤버 접근 지정자 public: 패키지에 상관없이 모든 클래스에서 접근 가능. protected: 같은 패키지 or 상속받은 클래스에서 접근 가능 private: 비공개. 동일 클래스 내의 멤버에서만 접근 가능 default(명시하지 않음): 같은 패키지 내 클래스에서만 접근 가능
[DB] 7. 데이터 모델링 7. 데이터 모델링 데이터 모델링: 추상화 과정을 통해 현실세계의 개념을 데이터베이스에 표현하는 과정. 현실세계 -> 개념적 모델링 -> 논리적 모델링 -> 데이터베이스 데이터 모델링의 관점에서 요구사항 수집 및 분석 설계 개념적 모델링: 핵심 Entity를 도출하여 ERD 작성. 논리적 모델링: 각 개념을 구체화(릴레이션 스키마), ERD-RDB 모델 매핑, 상세 속성 정의, 정규화... 물리적 모델링: DB개체 정의(CREATE TABLE), 테이블(도메인..등) 및 인덱스 등 설계 데이터베이스 구현 개념적 데이터 모델 E-R(개체-관계) 모델 (Diagram) 개체-사각형, 관계-마름모 속성-타원형으로 표현. 개체와 개체들 사이의 관계로 표현 논리적 데이터 모델 관계, 네트워크, 계층 데이터 모델 ..
[DB] 6. DDL 6. DDL DDL은 같은 명령을 사용. CREATE / DROP / ALTER CREATE : 데이터베이스 객체 생성 (대표적으로) 테이블을 생성한다. 스키마 내부에서 생성한다. 스키마내에서 이름이 중복된 객체가 존재하면 안 된다.CREATE TABLE 테이블명 ( 열이름 자료형 [DEFAULT 값 | NOT NULLL | UNIQUE | CHECK 체크조건], 열 정의2, 열 정의3, ..., [PRIMARY KEY (열1, ...)] [FOREIGN KEY 속성이름 REFERENCES 테이블이름(속성이름)] [ON DELETE reference_option] [ON UPDATE reference_option] ); DROP : 데이터베이스 객체 삭제 데이터베이스 객체를 삭제한다. 객체의 스키마와 내..
[DB] 5. JOIN 5. Join 여러 테이블에 대한 조인 검색. Join? : 여러 개의 테이블을 연결하여 하나의 테이블로 만드는 과정(데이터를 검색하는 것) 조인 속성 : 조인 검색을 위해 테이블을 연결해주는 속성 연결하려는 테이블 간 조인 속성의 이름은 달라도 되지만, 도메인은 같아야 한다. 일반적으로 외래키를 조인 속성으로 이용 사용 (동등조인) -- CROSS JOIN SELECT * FROM table1, table2 WHERE table1.key1 AND table2.key2; WHERE 절은 ' AND '으로 구성, 해당 폼은 이제 잘 사용되지 않는 구식 형태 혹은, 외부조인과 폼을 통일시켜 다음과 같이 작성할 수 있다.SELECT * FROM table1 {INNER|LEFT|RIGHT|FUL..
[DB] 4. SQL SQL(Structured Query Language) -** RDB를 위한 표준 질의어, 비절차적 데이터 언어 유래 : IBM이 개발한 SEQUEL에서 유래, ANSI와 ISO에 의해 현재까지도 표준화 및 용어 통일. 방식 : 대화식 SQL : DBMS에 직접 접근해 질의를 작성 및 실행 삽입 SQL : 프로그래밍 언어로 작성된 응용 프로그램에 삽입 (MyBatis, Hibernate.. 등) SQL은 완전한 프로그래밍 언어가 아닌 data sublanguage로 분류 -> 데이터와 메타 데이터에 대해서만 생성하고 처리하는 문법을 가지고 있다. SQL은 클라이언트/서버 구조로 구성되어 있다. -> 분산형 구조로 클라이언트에서 질의(요청)를 하면 서버에서 그 질의를 받아 처리하고 응답을 돌려준다. SQL..
[DB] 3. 관계대수 이전.. 데이터 모델 = 데이터 구조, 연산, 제약조건 관계대수 : 관계형 DB에서 연산 담당 관계대수(relatinal algebra) : 릴레이션에서 원하는 결과를 얻기 위해 질의하는 방법을 기술한 언어 관계 데이터 연산 1. 관계대수(절차적) : 어떤 데이터를 찾기 위한 처리 절차를 명시, DBMS내 처리 언어로 사용 2. 관계해석(비절차적, 선언적) : 어떤 데이터를 찾는지 명시, SQL의 이론적 기반 * 카티전 프로덕트(X) : 데카르트 곱, 두 집합의 원소를 골라 순서쌍으로 나타낸다. 도메인(domain) : 카티전 프로덕트의 기초 집합(A, B)가 가질 수 있는 값의 범위 관계대수 순수 관계 연산자 : 관계 데이터 모델의 위해 고안 (셀렉트, 조인, 프로젝트, 개명, 디비전) - 셀렉트 : ..
[DB] 2.2 키(key) key = 릴레이션에서 투플들을 유일하게 '구별하는' 속성 또는 속성들의 집합 primary key = 기본키로써, 테이블에 반드시 존재 그 밖에 candidate key, alternate key, super key, foreign key 존재 키의 특성 유일성 : 투플을 구별 -> 모든 투플은 서로 다른 키 값을 가져야 한다. 최소성 : 꼭 필요한 최소한의 속성들로만 키를 구성함 => 릴레이션에서는 투플의 중복을 허용하지 않는다 => 투플 간 구분을 위해, 키는 반드시 다른 값을 가진다. 키는 릴레이션 간의 관계를 맺는데도 사용된다. => foreign key의 역할 1. super key : 유일성을 만족하는 속성 또는 속성들의 집합 2. candidat key : 유일성과 최소성을 만족하는 속성 ..
[DB] 2. 데이터 모델 DBMS의 역할 정보 시스템에서 파일시스템을 대체하여, 데이터의 중복을 방지하고, 독립성, 일관성, 무결성을 보장. 또한, 데이터 관리, 재난 복구, 동시성 제어 등의 기능을 갖는다. 데이터 모델링 : 현실 세계의 데이터를 -> 개념적 -> 논리적 모델링 단계를 거쳐 데이터베이스에 저장하는 구조로 표현하는 작업. 데이터 모델 : 데이터 모델링의 결과물을 표현하는 도구 개념적 데이터 모델 : E-R(Entity-Relation, 개체-관계) 모델로 나타낸다. 논리적 데이터 모델 : 관계 데이터 모델 데이터 모델의 구성 1. 연산, ex) CRUD.. 2. 데이터 구조, 데이터가 저장되는 형태 3. 제약조건, 데이터 간의 만족해야할 조건 1. 개념적 데이터 모델 : 현실 세계의 '중요 데이터를 추출'하는 작..