OSIV란 OSIV OSIV(open session in View)는 영속성 컨텍스트를 뷰까지 열어준다는 의미이다. OSIV는 하이버네이트에서 사용하는 용어이고 JPA에서는 OEIV라고 하지만, 관례상 OSIV라고 부른다. OSIV 사용이유 OSIV(Open Session In View)를 사용하면 트랜잭션의 범위가 뷰까지 확장되어 영속 상태가 유지됩니다. 기본적으로 JPA에서는 트랜잭션 내에서 엔티티를 관리하고, 트랜잭션이 종료되면 영속성 컨텍스트가 닫혀 엔티티는 준영속 상태가 됩니다. 그러나 OSIV를 사용하면 트랜잭션을 뷰까지 확장하여 영속성 컨텍스트를 닫지 않고 유지합니다. 이는 컨트롤러나 뷰에서도 영속 상태의 엔티티를 유지하고 조회, 수정할 수 있게 됩니다. 따라서 뷰나 컨트롤러에서도 지연 로딩..
분류 전체보기
JPA 값 타입 이란? 들어가며 값 타입은 기본적으로 3가지로 나눌수있다. 기본값 타입 자바 기본타입( int ,double) 래퍼 클래스(Integer) String 임데디드타입 컬렉션 값 타입 기본값 타입은 기본적으로 자바에서 제공하는 타입이다. 임베디드 타입은 JPA에서 직접 정의한 값 타입이다. 컬렉션 타입은 하나이상 값 타입을 저장할때 사용된다. ※ Lombok을 사용하여 작성함 기본값 타입 기본값 타입은 Entity 클래스를 만들때 기본으로 만들때 사용하는 타입이다. @Entity @Data public class Member { @Id private Long id;// 기본값 타입 private String username;// 기본값 타입 } 임베디드 값 타입 임베디드 값타입은 사용자가 직..
프록시와 연관관계 관리 프록시 이런 엔티티가 있다고 해보자 public void printMemberName(String memberId){ Member member = em.find(Member.class, memberId); System.out.println("회원 이름: "+member.getUsername()); } Member에서 username을 가져올때 Team의 객체까지 가지고와서 회원이름이 출력이된다. 이런 방식은 매우 효율적이지 않은 방식이다. 하지만 JPA는 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연시키는 지연 로딩을 제공한다. 그럼 지연 로딩을 사용하려면 실제 엔티티 대신에 가짜 객체가 필요한데 가짜 객체를 프록시 객체라고한다. 프록시 기초 Member member = e..
사용자 및 권환 관리하기 사용자 식별 MySQL의 사용자는 다른 DMBS와는 조금 다르게 사용자의 계정뿐만 아니라 사용자의 접속지점(클라이언트가 실행된 호스트명이나 도메인 또느 IP주소)도 계정의 일부가된다. 따라서 계정을 언급할때는 아이디와 호스트를 함께 명시해야 한다. 다음과 같이 sql_id 라는 아이디로 접속할때만 사용할수 있는계정이다. 다른 사용자가 다음과 같은 계정만 등록돼 있다면 다른 컴퓨터에서는 sql_id 라는 아이디로 접속 할수 없다. 'sql_id'@'127.0.0.1' 다음과 같이 서버에 동일한 계정이 있을때 어떤것을 선택할까? 1. 'sql_id'@'192.168.0.10' (비밀번호 123) 2. 'sql_id'@% (비밀번호 0000) 인증을할때 범위는 가장 작은 것부터 사용하..
시스템 변수 시스템 변수(System variables) MySQL 서버는 가동하면서 설정 파일의 내용을 읽어 메모리나 작동 방식을 초기화하고, 접속된 사용자를 제어하기 위해 이러한 값을 별도로 저장해둔다. MySQL 서버에서는 이렇게 저장된 값을 시스템 변수(System variables)라고 한다. SHOW GLOBAL VARIABLES 명령어로 확인가능 이런 시스템 변수는 다음과 같은 형식으로 구성돼 있다. Cmd-Line : MySQL 서버의 명령행 인자로 설정 될 수있는지 여부를 나타낸다. Option File : 설정파일인 my.cnf(my.ini)로 제어할수 있는지 여부를 나타낸다. System Var : 시스템 변수인지 아닌지를 나타낸다. Var Scope : 시스템 변수의 적용 범위를 나..
볼트(Valut)를 사용한 정보 관리하기 들어가며 개발을 하다보면 properties,yml파일에 개인정보등이나 비밀번호 등을 작성한다. 하지만 이런 비밀정보가 그대로 노출되어 악의적인 곳에 사용할수있다. 그래서 볼트를 통해서 정보를 관리하는 방법을 알아보자. 프로젝트환경 springboot -version : 2.6.3 bulid : gradlejava -version : 11 IDE : IntelliJ _Ultimate 볼트 다운로드 및 실행 볼트 다운로드 자신의 운영체제의 맞게 다운로드를 한다.(windows 기준으로 작성) 다운 받은 zip 파일을 압축하여 자신의 사용하고자하는 위치에 두고 저장을한다. 그후에 Vault.conf 파일을 작성하여 추가한다. Vault.conf backend "inm..
스프링 시큐리티란 어떤 방식으로 동작할까? 스프링 시큐리리? 스프링 시큐리티는 인증, 인가를 지원하고 주요 공격으로 부터 어플리케이션을 보호해 주는 프레임워크이다. 시큐리티를 통해서 사용자 인증, 권한 부여, 보안 설정등을 손쉽게 관리할수있으며, 이를 통해 사용자의 민감한 데이터를 안전하게 관리및, 보호할수 있는스프링 기반의 보안 프레임워크이다. 인증(Authentication)이란? 인증은 특정 리소스에 접근하려고 하는 사용자가 누구인지를 확인할 때 사용한다. 흔히 우리가 로그인할때 아이디와 비밀번호를 통해 접속하는것을 인증이라고한다.(스프링 시큐리티는 기본적은 인증기능을 제공한다.) 인가(Authorization)란? 인가란 쉡게 말하자면 특정 페이지에 접속할때 권한을 설정해 특정기능을 사용여부를 판..
AJAX 사용하는방법 들어가며 스프링 부트를 사용하며 간단한 토이프로젝트를 만든후에 시큐리티를 적용한 로그인 페이지로 바꾸고있었다. 하지만 시큐리티를 적용하기전에는 AJAX를 사용하요 실시간으로 검증을 할수 있었는데. Security를 적용한후에는 사용이 안됬었다. 찾아보니 crsf설정을 해야했다. 그래서 어떻게 적용하는지 간단하게 알아보자 프로젝트환경 springboot -version : 2.6.3 bulid : gradlejava -version : 11 DB : Mysql_8.0.33 IDE : IntelliJ _Ultimate CRSF란 CSRF(Cross-Site Request Forgery)공격이란. 악성 웹 사이트 공격 유형이다. 간단하게 말하자면 사용자가 로그인한 상태에서 다른 사이트에 ..