Spring, Spring boot

사전 지식 영속성 컨텍스트 각 엔티티 매니저 별로 영속성 컨텍스트 생성됨 스프링에서는 엔티티 매니저를 사용하지 않고, 컨테이너를 통해 제공되기 때문에 Factory Manager가 자동으로 관리됨(close필요 없음) Create Persistence Context Entity 매니저가 실행되면 영속성 컨텍스트가 생성됨. 이 컨텍스트는 매니저와 1대1 매칭. 각 매니저는 개별 영속성 컨텍스트를 가지고 있음 EntityManagerFactory factory = Persistence.createEntityManagerFactory("syntax"); EntityManager manager = factory.createEntityManager(); Transient state 객체는 생성 되었지만 영속성 컨..
트랜잭션 트랜잭션이란? 데이터베이스 안에서 수행되는 작업 단위, 여러개의 데이터베이스 연산(CRUD)을 하나의 논리적인 작업 단위로 묶어서 실행하는 것 이 때, 모든 연산이 성공적으로 수행되면 트랜잭션을 커밋하여 데이터베이스에 반영하고, 하나라도 실패하면 롤백함 사용 트랜잭션의 목적은 데이터베이스 서버에 여러 개의 클라이언트가 동시에 엑세스 하거나 응용프로그램이 갱신을 처리하는 과정에서 중단될 수 있는 경우 등 데이터 부정합을 방지하고자 할때 , 쉽게 이야기하면 여러 작업을 묶을 때 사용 잠금 vs 트랜잭션 트랜잭션 트랜잭션은 작업의 완전성을 보장해주는 것. 즉, 논리적인 작업 셋을 모두 완벽하게 처리하거나 처리하지 못할 경우에는 원 상태로 복구해서 작업의 일부만 적용되는 현상이 발생되지 않게 만들어주는..
사전 지식 JPA 트랜잭션 JPA(Java Persistence API)트랜잭션은 데이터베이스 작업을 그룹화 원자성 일관성 고립성 지속성 특성을 가진 트랜잭션으로 관리하기 위한 개념 하는 일 시작 커밋 롤백 => 데이터베이스 작업을 안전하게 수행하고 데이터의 무결성을 유자하기 위해 중요함 JPA 트랜잭션의 성질 원자성 트랜잭션은 하나 이상의 데이터베이스 작업을 포함하며 이러한 작업은 모두 성공하거나 실패 해야함 트랜잭션 중 하나의 작업이 실패하면 모든 작업이 롤백되어 데이터베이스를 이전 상태로 되돌림 일관성 트랜잭션이 시작하기 전과 끝난 후에 데이터베이스는 일관된 상태여야함. 트랜잭션 중 데이터베이스가 일시적으로 불일치 상태에 놓이지 않아야함 고립성 여러 트랜잭션이 병행으로 실행될 때, 각 트랜잭션은 다..
토큰 기반 인증 토큰 기반 인증? 대표적인 사용자 인증 확인 방법 서버 기반 인증 토큰기반 인증토큰 기반 인증 토큰을 사용하는 방법. 토큰은 서버에서 클라이언트를 구분하기 위한 유일한 값이다. 서버가 토큰을 생성해서 클라이언트에게 제공하면 클라이언틑는 이 토큰을 가지고 있다가 여러 요청을 이 토큰과 함께 신청한다. 서버는 토큰만 보고 유효한 사용자인지 검증한다.토큰을 전달하고 인증받는 과정 클라이언트가 아이디와 비밀번호를 서버에게 전달하면서 인증을 요청 서버는 아이디와 비밀번호를 확인해 유효한 사용자인지 검증, 유효한 사용자이면 토큰을 생성해서 응답 클라이언트는 서버에서 준 토큰을 저장 이후 인증이 필요한 API를 사용할 때 토큰을 함께 보냄 서버는 토큰이 유효한지 검증 토큰이 유효하다면 클라이언트가 요..
사전지식 스프링 기반의 애플리케이션 보안(인증, 인가, 권한)을 담당하는 스프링 하위 프레임워크이다. 스프링 시큐리티를 이해할면 인증과 인가에 대한 개념을 알아야 한다 인증과 인가 인증 사용자의 신원을 입증하는 과정이다. 예를 들어서 사용자가 사이트에 로그인을 할 때 누구인지 확인하는 과정을 인증이라고 한다. 인가 인가는 사이트의 특정 부분에 접근할 수 있는지 권한을 확인하는 작업 예를 들어서 관리자는 관리자 페이지에 들어갈 수 있지만 일반 사용자는 관리자 페이지에 들어갈 수 없다. 이런 권한을 확인하는 과정을 인가라고 합니다. 스프링 시큐리티 애플리케이션의 보안을 담당 보안 관련 옵션 제공 애너테이션으로 설정도 쉽다 CSRF 공격, 세션 고정 공격을 방어해줌 => 개발자가 보안 관련 개발을 해야 하는 ..
타임리프 템플릿 엔진 템플릿 엔진은 스프링 서버에서 데이터를 받아 우리가 보는 웹페이지, 즉, HTML 상에 그 데이터를 넣어 보여주는 도구입니다. 다만, 템플릿 엔진은 HTML과 함께 템플릿 엔진을 위한 문법을 살짝 섞어 사용해야 합니다. 개념잡기 서버에서 보내준 이름과 나이를 넣을 수 있다. { 이름 : "홍길동", 나이 : 11 } 템플릿 엔진이 종류 JSP 타임리프 프리마커 등 하지만 스프링은 타임리프를 권장하고 있기 때문에 타임리프를 사용하자!타임리프 표현식 ${...} : 변수의 값 표현식 #{...} : 속성 파일 값 표현식 @{...} : URL 표현식 *{...} : 선택한 변수의 표현식. th:object에서 선택한 객체에 접근타임리프 문법 th :text 텍스트를 표현할 때 사용th:..
직렬화? 역직렬화? HTTP 에서는 JSON을 사용하고 자바에서는 객체를 사용합니다. 하지만 서로 형식이 다르기 때문에 형식에 맞기 변환하는 작업이 필요합니다 이런 작업이 바로 직렬화, 역직렬화 라고 합니다. 직렬화 자바 시스템 내부에서 사용되는 객체를 외부에서 사용하도록 데이터를 변환하는 작업을 이야기합니다. 예시 // Article.java public class Article { private title; private content; } 이걸 json 데이터로 변환하는 방법을 역직렬화 라고 한다 // json { "title" : "제목" "content" : "내용" } 역직렬화 직렬화의 반대, 즉 외부에서 사용하는 데이터를 자바의 객체 형태로 변환하는 작업
@BeforeAll 전체 테스트를 진행하기 전에 처음으로 한번 실행됨 예를 들어서 데이터 베이스를 연결해야 하거나 테스트 환경을 조성할때 사용한다 이 애너테이션은 전체 테스트 실행주기에서 한 번만 호출되어야 하기 때문에 static 매서드를 사용한다 @BeforeEach 테스트 케이스를 시작하기 전에 매번 실행 예를 들어서 테스트 메서드에서 사용하는 객체를 초기화 하거나 테스트에 필요한 값을 미리 넣을 때 사용할 수 있습니다. 각 인스턴스에 대해 메서드를 호출해야 하므로 메서드는 static이 아니어야 합니다. @AfterAll 전체 테스트를 마치고 종료하기 전에 한 번만 실행합니다. 예를 들어 데이터 베이스 연결을 종료할 때나 공통적으로 사용하는 자원을 해제할 때 사용할 수 있습니다. 전체 테스트 실행..
ron_nie
'Spring, Spring boot' 카테고리의 글 목록 (2 Page)