JPA란 Java Persistance API의 약자로서 자바 ORM(Object Relational Mapping) 기술에 대한

표준명세(구조와 기능을 상세하게 기술한 문서)로  JAVA에서 제공하는 API이다

JPA의 스펙은 자바객체와 데이터베이스를 어떻게 매핑하고 동작해야하는지를 정의한다

 

RAM에 있는 데이터들은 휘발성데이터이다

컴퓨터를 부팅하면 열려있던 창이 종료되있는데 이런것들을 휘발성데이터라고 생각하면된다

하드디스크는 비휘발성데이터로 영속성의 특징을 가지고있다

영속성의 특징이란 지속적인 데이터란 뜻으로 데이터가 유지되는 것을 의미한다

JPA(Java Persistance API)는 자바가 지원하는 표준명세로서 ORM을 이용해 DataBase를 매핑할때

하드디스크에 DataBase 영역을 만들어 그안에 데이터를 저장하게 되는데

이러한 데이터들을 영속성(Persistance)데이터라 한다

JPA 는 자바객체가 영속성데이터를 가질 수 있게하는 인터페이스라고 이해하면 편리하다

 

 


 

JPA 에 관한 설명을 이해하는 중 ORM이라는 개념을 이해하기 위해 정리해보겠다

ORM은 객체-관계 매핑을 의미하는데 SQL Mapper와 비교되고 있다

 

SQL Mapper

  • sql문을 직접 기술하여 데이터베이스를 조작한다
  • 필드를 매핑하여 데이터베이스에 접근한다

 

 ORM(Obejct Relational Mapping / 객체-관계 매핑)

  • 메서드로 데이터베이스를 조작한다
  • sql문을 자동으로 생성한다

 


 

Spring-Data-JPA

만약, 개발자가 JPA 구현체를 호출하여 Java와 DataBase가 ConnectionPool(연결) 할 수있는 코드를 작성한다면

DB연결이 필요할때 마다 동일한 코드들을 작성해야하는 반복되는 과정이 생길 것이다

Spring은 반복되는 코드들을 interface로 제공해주어 편리하게 사용이 가능하도록 제공해주는데

이것을 Spring-Data-JPA 모듈이라고 한다

 

https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/ 참고

 

JPA, Hibernate, 그리고 Spring Data JPA의 차이점

개요 Spring 프레임워크는 어플리케이션을 개발할 때 필요한 수많은 강력하고 편리한 기능을 제공해준다. 하지만 많은 기술이 존재하는 만큼 Spring 프레임워크를 처음 사용하는 사람이 Spring 프레

suhwan.dev

 

'Spring' 카테고리의 다른 글

Spring / request.getHeader()  (0) 2022.07.15
Spring / Security  (0) 2022.07.15
Spring / Spring Boot 에 Intercapter 란?  (0) 2022.07.14
Spring / Thymeleaf  (0) 2022.07.14

HttpServletRequest의 getHeader() 메소드를 통해 클라이언트의 다양한 정보를 얻을 수 있다

 

//현재 페이지 오기 전 URL정보
request.getHeader("referer") 

​

//접속 IP
request.getHeader("host")

​

//클라이언트 브라우저 정보
request.getHeader("user-Agent")

​

//쿠키 값 가져오기
request.getHeader("cookie")

​

//클라이언트 ip 주소
request.getHeader("X-Forwarded-For")

​

​서버에서는 개발자도구에 document.referer < 명령어를 통해 알 수 있다

 

'Spring' 카테고리의 다른 글

JPA / ORM or SQL Mapper / Spring-data-JPA  (0) 2022.07.24
Spring / Security  (0) 2022.07.15
Spring / Spring Boot 에 Intercapter 란?  (0) 2022.07.14
Spring / Thymeleaf  (0) 2022.07.14

Spring Security는 보안(인증, 인가, 권한)을 담당하는 Spring 하위프레임워크이다.

Security는 Filter와 클래스들의 집합으로 이루어져있다.

인증 (Autentication)

- 현재 유저가 누구인지를 확인/ 애플리케이션의 작업을 수행할 수있는 주체인지를 증명

권한 (Authorization)

- 인증객체의 여부에 따라 애플리케이션의 동작을 수행할 수 있도록 허락되있는지는 결정

인가 (Authorize)

- 현재 유저가 어떤 서비스, 페이지에 접근할 수 있는 권한이 있는지 검사

 

Authentiction Flow(인증의 흐름)

1. Client 에서 로그인 요청

2. UsernamePasswordAuthenticationFIlter에서 ID + PASSWORD를 담은 인증객체(Authentication)를

생성한다.

3. AuthenticationManager에게 인증객체를 넘기며 인증처리를 위임한다.

→ 내부에 한 개 이상의 Provide를 담은 List를 가지고 있고 그 List에서 적절한 Provider를 찾는다.

4. 인증관리자(c)는 적절한 Provider(AuthenticationProvider)에게 인증처리를 위임한다.

5. 해당 Provider는 input 정보(id, password)를 가지고 실제 인증 처리 역할을 한다.

-a. loadUserByUsername(username)메서드를 호출해서 유저객체를 요청한다.

-b. UserDetailsService 인터페이스에게 loadUserByUsername(username) 요청

b-1.Repository에 findById() 유저 객체 조회를 한다.

b-2.만약, 해당 유저객체가 존재하지 않으면 UsernameNotFoundException이 발생하고

UsernamePasswordAuthenticationFIlter에서 예외를 처리를 한다

→ FailHandler()에서 후속처리

b-3.존재한다면 UserDetails 타입으로 반환된다.(Member 객체도 UserDetails 객체로 변환되어 반환)

6. 인증관리자(loadUserByUsername(username))는 이제 Password 검증을 시작한다.

-a. 인증객체의 Password와 반환받은 UserDetails의 Password를 비교한다.

a-1. 일치하지 않을 경우 BadCredentialException 발생 후 인증 실패

-b. 성공한 인증객체(UserDetals와 authorities를 담은 인증 후 토큰 객체 Authentication)를

UsernamePasswordAuthenticationFIlter에 전달한다.

7. SecurityContext에 저장한다.

8. 이후 전역적으로 SecurityContext에서 인증객체를 사용가능하게 된다

'Spring' 카테고리의 다른 글

JPA / ORM or SQL Mapper / Spring-data-JPA  (0) 2022.07.24
Spring / request.getHeader()  (0) 2022.07.15
Spring / Spring Boot 에 Intercapter 란?  (0) 2022.07.14
Spring / Thymeleaf  (0) 2022.07.14

Intercapter 란?

- Intercapter 란 서버에 요청 전 후에 가로채어 제어하는 것을 의미

- HandlerIntercepter 클래스를 상속받아 사용한다



HandlerIntercepter 클래스의 세 개의 메소드

 

PreHandle

- Controller 실행 전 호출

PostHandle

- Controller 실행 후 View로 보내기 전에 호출

AfterCompletion

- View 까지 수행하고 나서 호출

 

그림을 참고해보면 Dispatcher Servlet에서 Controller를 제어하기 전에 

Intercepter 메소드를 먼저 호출 하는 것을 확인할 수있다

이러한 로직때문에 로그인한 사용자의 권한을 확인하고 처리 하는것이 가능하여

로그인처리나 권한처리에 사용되기도 한다

 

Filter와 Intercepter의 차이

 

- Filter는 요청이 들어오면 Dispatcher Servlet 전에 처리 하기 때문에

보통은 한글 처리에서 사용한다 즉, Filter와 Intercepter는 처리시점이 다르다

 





'Spring' 카테고리의 다른 글

JPA / ORM or SQL Mapper / Spring-data-JPA  (0) 2022.07.24
Spring / request.getHeader()  (0) 2022.07.15
Spring / Security  (0) 2022.07.15
Spring / Thymeleaf  (0) 2022.07.14

Thymeleaf


- porm.xml의 dependcy에 라이브러리를 주입

- XML, XHTML 및 HTML5 문서를 처리하기 위한 다목적 Java 템플릿 엔진



웹 애플리케이션에선 화면은 재사용하는 경우가 빈번하지만

데이터는 다르게 출력되는 경우가 잦아 코드가 반복적으로 사용된다

이와같이 반복적인 코드를 줄여 재사용성이 높아지면 코드가 구분되어 유지보수가 용이해

협업이 원활하게 이루어진다 그때 사용하는 라이브러리 중 하나가 Thymeleaf 이다



Thyimleaf는 다양한 태그들을 가지고 있다 예시들을 정리해보면

 


Thyimleaf attributes..

href 태그

<th: href="@{경로(파라미터변수=${파라미터값})}"/> 

ex) <th: href="@{http://localhost:8080/(파라미터변수=${파라미터값})}"/>

 


text 태그

<th:text=" 'String' "/>

<th:text=" Number "/>





escape 처리를 하고싶지않다면

<th:utext= "#{messge}"/>



파라미터값이 있다면

<th:utext= "#{messge(${파라미터명})}"/>


attr 태그

<th:attr="action=@{/mapping경로}"/>

ex) <th:attr="action=@{/list}"/>


데이터값이 문자열인 경우

th:if="${#strings.isEmpty(value)}"

 


유의점

 

include 태그 와 replace 태그 차이

- include는 태그안의 내용을 가져오고 replace는 태그도 같이 가져와서 출력한다

 

 

'Spring' 카테고리의 다른 글

JPA / ORM or SQL Mapper / Spring-data-JPA  (0) 2022.07.24
Spring / request.getHeader()  (0) 2022.07.15
Spring / Security  (0) 2022.07.15
Spring / Spring Boot 에 Intercapter 란?  (0) 2022.07.14

+ Recent posts