[SpringBoot] 인터셉터
·
Back-End/Spring Boot
인터셉터란? 인터셉터는 URI호출시에 해당 요청의 컨트롤러가 처리 되기 전 또는 후에 작업을 하기 위해서 사용된다. 컨트롤러의 URI에 접근하는 과정에서 무언가를 제어할 필요가 있을 때 사용 인터셉터는 필터가 할 수 있는 역할과 비슷한데, 이둘의 차이는 무엇일까? 인터셉터와 필터의 차이 필터는 DispatcherServlet 앞에서 동작, 인터셉터는 DispatcherServlet에서 HandlerController로 가기전에 동작한다 필터는 서블릿의 기능 중 일부이고, 인터셉터는 스프링 프레임워크에서 제공되는 기능이다. → 인터셉터에서는 스프링 빈을 사용할 수 있다. 메서드 및 구현 방법 메서드 preHandler - 컨트롤러 실행 전 수행한다. 반환 값이 true 일 경우 컨트롤러로 진입하고 fals..
[MyBatis] MyBatis의 구조
·
Back-End/MyBatis
MyBatis 모듈 구성요소 MyBatis configuration file MyBatis의 작업 설정을 설명해주는 xml파일이다. 데이터베이스의 연결 대상, 매핑 파일의 경로 등과 같은 세부 사항을 설명하는 파일 SqlSessionFactoryBuilder Configuration file을 읽고, 생성하는 SqlSessionFactory 구성요소 SqlSessionFactory SqlSession을 생성하는 구성요소 SqlSession SQL 실행 및 트랜잭션 제어를 위한 API를 제공하는 구성요소 데이터베이스에 액세스할 떄 가장 중요한 역할을 하는 구성요소 MyBatis 프로세스 흐름 프로그램 초기화 프로세스 흐름 SqlSessionFactoryBuilder에 대한 SqlSessionFactory ..
[PL/SQL] 커서(CURSOR), 예외(Exception)
·
Back-End/PL SQL
PL/SQL - 커서(CURSOR) SELECT 문장을 실행하면 조건에 따른 결과 집합이 추출 되고, 해당 쿼리에 따른 결과가 메모리 상 위치 커서를 통해서 해당 결과의 각 개별 데이터에 접근 커서의 사용 DECLARE(커서 선언) -- CURSOR 커서명 IS select문; DECLARE CURSOR cursor_name IS select_statement; OPEN(커서 열기) 질의를 실행하기 위해 커서를 열고 Active set 설정 질의 수행 후 반환되는 행이 없더라도 에러가 발생하지 않는다. Cursor attribute를 이용해서 추출 후 수행결과를 확인할 수 있다. --OPEN 커서명; OPEN CURSOR_NAME; FETCH(커서 인출) 현재 행의 값을 출력변수로 할당 컬럼과 변수의 개..
[PL/SQL] 변수 선언
·
Back-End/PL SQL
PL/SQL 기본 단위 블록 선언부(Declare) : 실행부에서 사용할 변수, 상수 선언 실행부 (BEGIN ~ END) : 실제 처리할 로직 , 여러 개의 SQL문을 순차적으로 처리 가능 TRY ~ CATCH문 처럼 예외를 잡는 용도로 많이 사용한다. 예외처리부 (Exception) : 실행부 로직 처리 중 발생되는 오류를 처리 CREATE OR REPLACE PROCEDURE 프로시져명 (파라미터1 IN | OUT | IN OUT ,파라미터2 IN | OUT | IN OUT...); IS[AS] 변수, 상수 등을 선언 BEGIN --프로시저로직의 시작 로직을 실행할 쿼리문 [EXCEPTION 예외처리] END 프로시져 명; PL/SQL 변수, 상수, %TYPE 선언 선언부에서 변수 선언 및 초기화 ..
SpringBoot - 초기화 과정, @SpringBootApplication
·
Back-End/Spring Boot
스프링 프레임워크 설정 초기화 DispatcherServlet객체를 스프링 컨테이너가 생성 컨테이너란? → 객체의 생명주기를 관리해준다. → 제어의 역전이 일어남 제어의 역전(Inversion Of Controller) : 객체의 생성과 소멸을 개발자가 제어하는것이 아니고, 스프링 프레임워크가 제어를 하게 되는 것 → 객체의 생명주기 제어권이 개발자가 아니고 스프링으로 역전 DispatcherServlet 의 init메서드를 실행 config와 application에서 읽어들인 properties의 키와값을 map에 객체로 저장 ApplicationContext에서는 getBean(String beanName) 메서드로 해당 객체를 제공 @SpringBootApplication 스프링 부트의 핵심 어노테..
[PL/SQL] 프로시저(Procedure)란?
·
Back-End/PL SQL
프로시저란? 특정한 로직을 처리하기만 하고 결과 값을 반환하지 않는 서브 프로그램 데이터베이스에 대한 일련의 작업을 정리한 절차를 관계형 데이터베이스 관리 시스템이 저장한 것 테이블에서 데이터를 추출, 조작하고 결과를 다른 테이블에 다시 저장하거나 갱신하는 처리를 할 때 프로시저를 사용한다. 장점 하나의 요청으로 여러 SQL문을 실행 가능 네트워크 소요 시간을 줄여 성능개선이 가능 여러 어플리케이션과 공유 가능 기능 변경 편리 → 특정 기능을 변경할 때 프로시저만 변경하면 된다. 단점 문자나 숫자열 연산에 사용하면 java보다 느린 성능을 보일 수 있다. 프로시저가 앱의 어디에 사용되는 확인이 어렵다 → 유지보수가 어려움 프로시저 생성 CREATE OR REPLACE PROCEDURE 프로시져명 (파라미..
JPA - 플러시(강제 쿼리 실행)
·
Back-End/JPA
플러시란? 영속성 컨텍스트의 변경 내용을 DB에 반영하는 것 보통 트랜잭션이 커밋이 될때, 플러시가 발생한다. 영속성 컨텍스트의 변경사항과 DB를 동일하게 맞추는 작업 플러시의 동작 과정 변경 감지 수정된 Entity를 쓰기 지연 SQL 저장소에 등록 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송 (등록, 수정 삭제 쿼리) 플러시가 발생한다고 해서 commit이 발생하지는 않고, 플러시 이후 실제 commit이 일어난다. 플러시가 동작할 수 있는 이유는 데이터베이스 트랜잭션 때문이다. → 데이터베이스는 트랜잭션이 시작되고, 해당 트랜잭션이 commit이 되는 시점 이전에 동기화 해주면 되기때문 영속성 컨텍스트가 플러쉬 되는 상황 1. em.flush() 직접호출 Member member = new..
JPA - 영속성 컨텍스트, 엔티티의 생명주기, 영속성 컨텍스트의 이점
·
Back-End/JPA
영속성 컨텍스트란? 엔티티를 영구 저장하는 환경 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할 엔티티 매니저를 통해서 엔티티를 저장하거나 조회하면 엔티티 매니저가 영속성 컨텍스트에 엔티티를 보관하고 관리한다. EntityManager.persist(entity); 엔티티 매니저를 사용해서 엔티티를 영속성 컨텍스트에 저장하는 메서드 엔티티의 생명 주기 비영속(new/transient) : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 영속(managed) :영속성 컨텍스트에 관리되는 상태 준영속(detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제(removed) : 삭제된 상태 비영속 상태 JPA와 관계 없이 객체만 생성한 상태 //객체를 생성한 상태..
[Spring] - @REST Controller에서 사용되는 어노테이션
·
Back-End/Spring Boot
스프링의 어노테이션들 @SpringBootApplication //SpringBootApplication으로 설정 @RestController //REST API를 제공하는 controller로 설정 @RequestMapping //URL주소를 맵핑 @GetMapping //Http GetMethod URL 주소 맵핑 @PostMapping //Http PostMethod URL 주소 맵핑 @PutMapping //Http PutMethod URL 주소 맵핑 @DeleteMapping //Http DeleteMethod URL 주소 맵핑 @RequestParam //URL Query Parameter 맵핑 @RequestBody //Http Body를 Parsing 맵핑 @Valid //POJO java..
[JPA] 회원 저장(CRUD), JPQL이란?
·
Back-End/JPA
JPA 환경 설정 메이븐에 라이브러리 추가 4.0.0 jpa-basic ex1-hello-jpa 1.0.0 org.hibernate hibernate-entitymanager 5.3.10.Final com.h2database h2 1.4.199 persistence.xml 설정 정보 기입 META-INF/persistence.xml에 jpa 설정정보를 기입 필수옵션, 부가옵션등을 설정 JPA를 사용하기 위해서 해당 설정 정보를 가지는 persistence-unit의 이름을 가지는 객체를 리턴받아서 사용한다. 주의점! EntityManagerFactory는 하나만 생성해서 애플리케이션 전체에서 공유 EntityManager는 쓰레드간에 공유X → 사용하고 버려야 한다. JPA의 모든 데이터 변경은 트랜잭션..