https://catsbi.oopy.io/81398571-33b8-471f-8191-ca7415b86326

 

2. 타임리프 - 스프링 통합과 폼

목차

catsbi.oopy.io

 

'Java > Spring Boot' 카테고리의 다른 글

구글 Oauth2 access token 발급  (0) 2024.06.18
Lombok | @Builder 동작 원리  (0) 2023.09.21
[API 작성법] GET API 만드는 법 핵심 정리  (0) 2023.09.14

 

어디서든 값을 변경 할 수 있는 setter 대신에 빌더 메서드를 사용하는 것을 지향한다.

빌더 메서드를 사용하기 위해서는 빌더 클래스를 직접 생성해도 되지만

Lombok에서 제공해주는  @Builder 어노테이션으로 간단하게 생성 할 수 있다.

 

 

 

@Builder 어노테이션은 클래스 단에 붙여도 되지만 그보다는 생성자 메서드 단에 붙이는 것이 더 좋다.

그 이유는 설명을 너무 잘 해둔 블로그가 있어 소개하겠다.


https://velog.io/@park2348190/Lombok-Builder%EC%9D%98-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC

 

Lombok @Builder의 동작 원리

보일러플레이트 메서드(getter/setter, constructor 등)를 직접 작성하지 않아도 대신 작성해주는 Lombok를 최근에 많이 활용하고 있다. 그나마 setter 메서드같은 경우는 값을 변경시키는 메서드는 그 목

velog.io

클래스 레벨에서는 가능한 모든 필드에 대하여 빌더 메서드를 생성했다면 생성자 레벨에서는 생성자의 파라미터 필드에 대해서만 빌더 메서드를 생성한다는 점이 차이가 있다.

클래스 레벨과 달리 생성자를 직접 생성해서 @Builder 를 적용하면 빌더로 설정하도록 제공하는 항목 역시 직접 고를 수 있다는 장점이 있다. 특히 JPA 엔티티 같은 경우 영속되기 전에는 식별자가 존재하지 않아 필연적으로 null 값을 가져야 한다. 이런 경우 생성자로 null 값을 전달하기보다는 아예 생성자에서 null 값을 받지 않도록 직접 구성하는 편이 좋다.

 

 

'Java > Spring Boot' 카테고리의 다른 글

구글 Oauth2 access token 발급  (0) 2024.06.18
[Thymeleaf] 문법  (0) 2023.09.21
[API 작성법] GET API 만드는 법 핵심 정리  (0) 2023.09.14

오류 상황

Thymeleaf를 이용해 view를 구현하고 있는데 th:object에 객체가 담기지 않는 오류가 발생했다.

컨트롤러에서 메서드를 어떻게 만져도 해결되지 않았다. 

 

해결 방법

상단의 타임리프 라이브러리 추가하는 부분에 www.를 제거하면 된다.

변경 전

<html xmlns:th="http://www.thymeleaf.org">

변경 후

<html xmlns:th="http://thymeleaf.org">

말끔히 해결..ㅎ

코드 오류가 아닌 라이브러리 주소 참조 오류였다..

이렇게 배우는 것 없는 오류 잡는게 제일 허무한 것 같다.

그래도 이런 라이브러리 참조에서도 오류가 날 수 있다는 점을 깨달았다.

다음에 같은 오류를 만나게 되면 더 빨리 오류를 해결할 수 있을 것 같다!

4~5시간은 이 오류를 해결하는데 시간 투자를 한거 같다..  아무튼 오류 잡았으니 해^ㅡㅡ^피!

 


출처 : https://stackoverflow.com/questions/38710585/spring-boot-thymeleaf-in-intellij-cannot-resolve-vars

 

3가지 코드로 해결했다. 

npm uninstall -g create-react-app

 

npm add create-react-app

 

npx create-react-app [프로젝트명]

 

설치 후

Happy hacking!

이렇게 뜨면 해결 완료!

 

 


출처

https://fromnowwon.tistory.com/entry/react-npx-error

1. 캐시(cache)

- 데이터의 복사본을 저장하여 이후 요청 시 데이터 접근 속도를 높이는 메커니즘

 서버가 클라이언트의 브라우저에 저장할 수 있는 작은 데이터 조각

- 클라이언트가 서버에 요청을 보낼 때, 서버는 캐시된 데이터를 반환 할 수있음

- 클라이언트는 캐시에서 데이터를 찾을 수 있음

  • 브라우저 캐시: 웹 페이지의 이미지, 스타일 시트, 스크립트 등을 저장하여 다음 방문 시 더 빠르게 로드할 수 있게
  • 서버 캐시: 서버에서 자주 요청되는 데이터나 계산 결과를 저장하여 서버의 부하를 줄이고 응답 속도를 향상시킴

 

2. 쿠키(cookie)

- 사용자의 브라우저에 저장이 되고 통신 할 때 HTTP 헤더에 포함되는 데이터 파일

= 웹 서버가 클라이언트의 브라우저에 저장할 수 있는 작은 데이터 조각

- 키와 값으로 구성

- 만료일을 설정할 수 있으며, 만료일이 지나면 브라우저가 쿠키를 삭제

- 브라우저를 닫아도 유지됨(-> 서버가 아닌 브라우저가 발급하는 거니까 브라우저는 여전히 정보를 알고 있음)

- 특정 경로와 도메인에만 유효함. 쿠키의 범위를 제한 할 수 있음

- 주로 자동 로그인 유지, 위시 리스트 저장, 팝업창 보지 않기, 뷰 설정값에 사용

 

브라우저에 저장되므로 해당 사용자의 컴퓨터를 사용하면 누구나 쿠키에 입력된 값을 쉽게 확인 가능 ==> 보안성이 낮다!

 

3. 세션(session)

- 클라이언트와 서버 간의 상태를 유지하기 위해 서버에서 관리하는 메커니즘

클라이언트가 서버에 접속 시, 세션 ID를 발급해주고 서버에서는 클라이언트에게 발급해준 세션 ID를 이용해서 저장

= 서버에 저장되는 쿠키로 클라이언트와 서버의 통신 상태

- 서버가 발급하고 내용을 다 들고 있는 것이 아니라 자기가 발급해준 JsessionID로만 비교함

- 일반적으로 브라우저가 열려 있는 동안 또는 세션이 만료될 때까지 유지됨(-> 서버 측에서 세션 만료 시간을 설정할 수 있음)

- 주로 중요한 데이터를 저장 할 때 사용

사용자의 로컬이 아닌 서버에 직접 저장되므로 클라이언트 측에서 세션 내의 데이터에 접근하기 어려움 ==> 비교적 보안성이 높다!

[작동 방식]
클라이언트가 서버에 요청을 보낼 때, 서버는 세션을 생성하고 세션 ID를 클라이언트에 쿠키로 보내줍니다.
클라이언트는 이후의 요청에서 이 세션 ID를 포함시키며, 서버는 이 ID를 통해 해당 세션의 데이터를 참조합니다.

 

4. 토큰(Token)

더보기

토큰은 웹 애플리케이션 및 API에서 인증과 권한 부여를 처리하는 데 널리 사용되는 메커니즘입니다. 일반적으로 JSON 웹 토큰(JSON Web Token, JWT)과 같은 형태로 사용됩니다.

토큰의 정의와 사용

1. 토큰의 기본 개념

  • 정의: 토큰은 인증된 사용자의 신원을 증명하고, 특정 권한을 부여하는 데 사용되는 문자열입니다. 일반적으로 서버에서 발급되며, 클라이언트는 이 토큰을 사용하여 인증과 권한 부여를 수행합니다.
  • 형식: 토큰은 문자열로, 일반적으로 JSON 형식의 데이터를 포함하며 Base64로 인코딩됩니다. 가장 널리 사용되는 형식 중 하나는 JSON 웹 토큰(JWT)입니다.

2. JSON 웹 토큰 (JWT)

  • 구성: JWT는 3부분으로 나누어져 있습니다.
    • 헤더 (Header): 토큰의 타입과 해싱 알고리즘 정보를 포함합니다. 예를 들어, {"alg": "HS256", "typ": "JWT"}.
    • 페이로드 (Payload): 토큰에 담길 클레임(정보)을 포함합니다. 클레임은 사용자 정보, 토큰의 만료 시간 등 다양한 정보를 담을 수 있습니다.
    • 서명 (Signature): 헤더와 페이로드를 조합하여 비밀 키를 사용해 서명한 부분입니다. 이 서명 부분은 토큰의 무결성을 검증하는 데 사용됩니다.
  • 예시: eyJhbGciOiAiSFMyNTYiLCAidHlwIjoiSldUIn0.eyJzdWIiOiAiMTIzNDU2IiwgIm5hbWUiOiAiSm9obiBEb2UiLCAiaWF0IjoiMTYxNjEyMzQ1NiJ9.D_1Qo6XzxJ8-z_G8T9MsJ5V1AW89H0wI2-KXYfDQ6DQ

3. 토큰의 작동 방식

  • 발급: 사용자가 로그인하면 서버는 인증된 사용자에게 토큰을 발급합니다.
  • 전송: 클라이언트는 서버에 요청을 보낼 때 이 토큰을 HTTP 헤더(예: Authorization: Bearer <token>)에 포함시켜 전송합니다.
  • 검증: 서버는 요청을 받을 때 토큰을 확인하고 서명을 검증하여 유효성을 검사합니다. 토큰이 유효하면 요청을 처리합니다.

4. 토큰의 장점

  • 상태 비저장 (Stateless): 서버가 상태를 저장할 필요 없이 클라이언트가 토큰을 통해 필요한 정보를 서버에 제공할 수 있습니다.
  • 확장성: 서버 간의 인증 정보 공유가 용이하여 분산 시스템에서 유용합니다.
  • 자체 포함 (Self-contained): 토큰에 사용자 정보와 클레임이 포함되어 있어, 별도의 데이터베이스 조회 없이도 사용자 정보를 사용할 수 있습니다.

5. 보안 고려 사항

  • 만료 시간 (Expiration): 토큰에 만료 시간을 설정하여 보안을 강화할 수 있습니다. 토큰이 만료되면 새로운 토큰을 발급받아야 합니다.
  • 비밀 키 관리: 서명을 위해 사용되는 비밀 키는 안전하게 관리되어야 하며, 노출되지 않도록 주의해야 합니다.
  • HTTPS 사용: 토큰을 안전하게 전송하기 위해 HTTPS를 사용하는 것이 중요합니다.
  • 토큰 탈취 방지: 토큰이 탈취되지 않도록 HttpOnly와 Secure 플래그를 설정하여 쿠키로 저장하는 경우 보안을 강화할 수 있습니다.

6. 토큰의 종류

  • 접근 토큰 (Access Token): API 호출 시 권한을 부여하는 데 사용됩니다. 일반적으로 짧은 만료 시간을 갖습니다.
  • 갱신 토큰 (Refresh Token): 접근 토큰의 갱신을 위한 토큰으로, 상대적으로 긴 만료 시간을 갖습니다. 갱신 토큰을 사용하여 새로운 접근 토큰을 발급받을 수 있습니다.

토큰은 사용자 인증 및 권한 부여를 처리할 때 유용하며, 클라이언트와 서버 간의 효율적인 통신을 지원합니다.

 
 
4o mini

'CS' 카테고리의 다른 글

URL에 대해 알아보자  (0) 2023.05.06
헷갈리기 쉬운 경로표기법  (0) 2023.02.06

GET API란

서버에서 URL을 통해 값을 가져올 때 사용하는 API이다.

 

첫 번째. @RequestMapping으로 구현

@RequestMapping 어노테이션을 별다른 설정 없이 선언하게 되면 HTTP의 모든 요청을 다 받게 되므로

RequestMethod.GET으로 설정하여 요청 형식을 GET으로만 설정한다

언제 사용할까?

스프링 4.3 버전 이후로는 새로 나온 다음의 어노테이션을 사용한다.

특별히 @RequestMapping을 활용해야 하는 내용이 아니라면 잘 사용하지 않는다.

@RequestMapping(value="/hello", method= RequestMethod.GET)
    public String getHello(){
        return "!Hello World!";
    }

두 번째. @ GetMapping으로 구현

스프링 4.3 버전 이후부터만 사용 가능

언제 사용할까?

별도의 매개변수가 없이 url로 값을 보내는 GET API를 구현하는 경우

ex) 맵핑된 해당 링크로 접근하면 값이나 view 이름을 반환해줄 때 등

 @GetMapping(value="/name")
    public String getName(){
        return "Flature";
    }

여기까지는 실무에서 잘 쓰이지 않는 방식


세 번째. @PathVariable으로 구현

실무에서는 매개변수를 받지 않는 메서드

 


네 번째. @RequestMapping으로 구현

@RequestMapping 어노테이션을 별다른 설정 없이 선언하게 되면 HTTP의 모든 요청을 다 받게 되므로

RequestMethod.GET으로 설정하여 요청 형식을 GET으로만 설정한다


 

부족한 설명은 추후 추가 예정

 

참고 자료

[위키북스] 스프링 부트 핵심가이드

'Java > Spring Boot' 카테고리의 다른 글

구글 Oauth2 access token 발급  (0) 2024.06.18
[Thymeleaf] 문법  (0) 2023.09.21
Lombok | @Builder 동작 원리  (0) 2023.09.21

+ Recent posts