낙서장[1]/2. SpringBoot: 5개의 글

[SpringBoot] JpaRepository save, findAll, findById, delete 기능

Posted by nkjok
2025. 2. 8. 16:21 낙서장[1]/2. SpringBoot
반응형

JpaRepository 주요 기능

1. save

개념

  • 객체를 데이터베이스에 저장하거나, 이미 존재하는 엔티티 객체를 업데이트하는 데 사용됩니다.

용도

  • 새로운 엔티티를 데이터베이스에 등록할 때
  • 이미 존재하는 엔티티를 수정할 때

사용 방법

java
@PostMapping("/posts")
public Post createOrUpdatePost(@RequestBody Post post) {
    return postRepository.save(post);
}

2. findAll

개념

  • 데이터베이스에 저장된 모든 엔티티 객체를 조회합니다.

용도

  • 데이터베이스에 있는 모든 레코드를 가져올 때

사용 방법

java
@GetMapping("/posts")
public List<Post> getAllPosts() {
    return postRepository.findAll();
}

3. findById

개념

  • 주어진 ID로 데이터베이스에서 특정 엔티티 객체를 조회합니다.

용도

  • 특정 레코드를 ID로 조회할 때

사용 방법

java
@GetMapping("/posts/{id}")
public ResponseEntity<Post> getPostById(@PathVariable Long id) {
    Optional<Post> post = postRepository.findById(id);
    return post.map(ResponseEntity::ok)
               .orElseGet(() -> ResponseEntity.notFound().build());
}

4. delete

개념

  • 주어진 ID로 데이터베이스에서 특정 엔티티 객체를 삭제합니다.

용도

  • 특정 레코드를 삭제할 때

사용 방법

java
@DeleteMapping("/posts/{id}")
public ResponseEntity<Void> deletePost(@PathVariable Long id) {
    postRepository.deleteById(id);
    return ResponseEntity.noContent().build();
}

요약

  • save: 엔티티 객체를 저장하거나 업데이트
  • findAll: 모든 엔티티 객체를 조회
  • findById: 특정 ID로 엔티티 객체를 조회
  • delete: 특정 ID로 엔티티 객체를 삭제

JpaRepository는 위의 4가지 주요 기능을 자동으로 구현해주므로, 별도의 쿼리 작성 없이도 쉽게 사용할 수 있습니다.

반응형

[SpringBoot] 게시글 등록 주요 애노테이션

Posted by nkjok
2025. 2. 7. 12:39 낙서장[1]/2. SpringBoot
반응형

@RequestBody

기능: 클라이언트에서 전송한 JSON 데이터를 DTO (Data Transfer Object)로 변환하여 컨트롤러 메서드의 매개변수로 전달합니다. 사용 예:

java
@PostMapping("/api/v1/posts")
public void createPost(@RequestBody PostDto postDto) {
    // JSON 데이터가 postDto로 변환되어 전달됨
}

@PathVariable

기능: URL 경로의 일부인 값을 메서드의 매개변수로 전달합니다. 사용 예:

java
@GetMapping("/api/v1/posts/{id}")
public Post getPost(@PathVariable Long id) {
    // URL의 {id} 값이 매개변수 id로 전달됨
}

@RequestParam

기능: 쿼리스트링의 값을 메서드의 매개변수로 전달합니다. 사용 예:

java
@GetMapping("/api/v1/posts")
public List<Post> getPosts(@RequestParam(required = false) String category) {
    // 쿼리스트링의 category 값이 매개변수로 전달됨
}

맞습니다, @RequestParam은 쿼리스트링의 값을 가져올 때 사용됩니다.

@Required

기능: 특정 필드나 메서드 매개변수가 필수임을 명시합니다. Spring에서는 @Autowired와 같이 의존성 주입에 사용될 수 있습니다. 사용 예:

java
@Required
private PostRepository postRepository;

@RequestHeader

기능: HTTP 요청 헤더의 값을 메서드의 매개변수로 전달합니다. 사용 예:

java
@GetMapping("/api/v1/posts")
public List<Post> getPosts(@RequestHeader("Authorization") String token) {
    // 요청 헤더의 Authorization 값을 매개변수로 전달함
}

 

반응형

[SpringBoot] 인증 JWT 개념

Posted by nkjok
2025. 2. 7. 10:08 낙서장[1]/2. SpringBoot
반응형

웹 개발 및 인증 절차와 관련된 다양한 기술과 개념이 손글씨로 적혀 있습니다. 주요 내용은 다음과 같습니다:

  • React: 사용자 인터페이스를 구성하는 프론트엔드 라이브러리입니다.
  • Nginx: 고성능 웹 서버 및 리버스 프록시 서버로 사용됩니다.
  • 4요 웹서버: 네 개의 주요 웹 서버를 의미하는 것 같습니다.
  • Http 요청하고/Http 응답하기: HTTP 요청과 응답을 처리하는 과정입니다.
  • Http 요청 body: 요청 본문에 대한 내용입니다.
  • "Authorization...": 인증 헤더를 사용한 요청입니다.
  • JWT 토큰: JSON Web Token으로, 인증 및 권한 부여에 사용됩니다.
    • typ JWT: JWT 타입을 지정하는 클레임입니다.
    • claim: JWT에 포함된 정보입니다.
    • Signature: JWT의 무결성을 검증하는 서명입니다.
  • App Server: 애플리케이션 서버를 의미합니다.
  • Tomcat: Java 서블릿 및 JSP를 실행하는 애플리케이션 서버입니다.
  • WAS: Web Application Server, 즉 웹 애플리케이션 서버를 의미합니다.

JWT 동작 방식

  1. JWT 생성: 사용자가 로그인하면 서버는 사용자 정보를 기반으로 JWT를 생성합니다. JWT는 헤더(header), 페이로드(payload), 서명(signature)로 구성됩니다.
    • 헤더: 토큰 타입과 알고리즘 정보를 포함합니다.
    • 페이로드: 사용자 정보(클레임)를 포함합니다.
    • 서명: 비밀키를 사용하여 JWT의 무결성을 검증합니다.
  2. JWT 전송: 생성된 JWT는 클라이언트(브라우저)에 전송되고, 클라이언트는 이를 저장(예: 로컬 스토리지)합니다.
  3. JWT 사용: 클라이언트는 이후의 요청에 JWT를 포함하여 서버에 보냅니다. 주로 Authorization 헤더에 Bearer 토큰 형식으로 전송됩니다.
  4. JWT 검증: 서버는 요청을 받을 때마다 JWT의 서명을 검증하여 토큰의 유효성을 확인합니다. 유효한 경우, 페이로드에 포함된 사용자 정보를 통해 권한을 부여하거나 거부합니다.

예제 시나리오

  1. 사용자가 로그인합니다.
  2. 서버가 JWT를 생성하여 클라이언트에 전송합니다.
  3. 클라이언트가 JWT를 저장합니다.
  4. 이후의 모든 요청에 클라이언트가 JWT를 포함하여 서버에 보냅니다.
  5. 서버가 JWT를 검증하고 요청을 처리합니다.
반응형

[SpringBoot] 인증과 권한 관리 SecurityContextHolder

Posted by nkjok
2025. 2. 7. 09:45 낙서장[1]/2. SpringBoot
반응형

SecurityContextHolderSpring Security 프레임워크에서 사용자 인증과 권한 관리를 위해 중요한 역할을 합니다. 이 포스팅에서는 SecurityContextHolder의 사용목적, 기능, 그리고 사용방법을 설명하겠습니다.

1. 사용목적

SecurityContextHolder는 현재 요청의 컨텍스트에서 인증 정보를 쉽게 가져올 수 있도록 해줍니다. 이를 통해 애플리케이션에서 사용자의 ID나 권한 정보를 확인할 수 있습니다1.

2. 기능

  • 현재 사용자 인증 정보 관리: 현재 요청의 컨텍스트에서 인증 정보를 쉽게 가져올 수 있습니다.
  • 요청 스레드 기반의 보안 처리: 요청 스레드의 메모리에 인증 정보를 저장하여 무상태 환경에서도 사용할 수 있습니다.
  • 스프링과의 통합: 다양한 보안 작업을 수행하며, 인증 및 권한 관리를 일관되게 처리할 수 있습니다.

3. 사용방법

SecurityContextHolder는 기본적으로 ThreadLocal을 사용하여 현재 스레드의 메모리에 인증 정보를 저장합니다. 이를 통해 각 요청은 독립적인 인증 정보를 가질 수 있습니다1.

예제 코드

java
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.demo.dto.UserDTO;

@RestController
public class UserController {
    @GetMapping("/api/current-user")
    public UserDTO getCurrentUser() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        if (authentication != null && authentication.getPrincipal() instanceof UserDTO) {
            return (UserDTO) authentication.getPrincipal();
        } else {
            throw new RuntimeException("인증된 사용자가 없습니다.");
        }
    }
}

이 코드는 컨트롤러에서 현재 인증된 사용자의 정보를 가져오는 방법을 보여줍니다. SecurityContextHolder.getContext().getAuthentication()을 통해 인증 정보를 가져와서 사용자 정보를 반환합니다.

반응형

[SpringBoot] @RequestBody 애노테이션

Posted by nkjok
2025. 1. 24. 14:40 낙서장[1]/2. SpringBoot
반응형

@RequestBody 어노테이션은 주로 REST API 개발에서 사용되며, HTTP 요청 본문(body)을 지정된 Java 객체로 자동으로 직렬화(serialize)하거나 역직렬화(deserialize)하는 역할을 한다. 이를 통해 클라이언트가 보내는 JSON 데이터를 자바 객체로 쉽게 매핑할 수 있다.

 

 
@RestController
public class UserController {

    @PostMapping("/api/users")
    public ResponseEntity<?> saveUser(@RequestBody User user) {
        // 사용자 정보 처리 로직
        return new ResponseEntity<>(user, HttpStatus.CREATED);
    }
}

 

위 코드에서 @RequestBody 어노테이션은 클라이언트가 보내는 JSON 데이터를 User 객체로 매핑한다. 이렇게 하면 클라이언트가 보낸 데이터를 쉽게 사용할 수 있다

반응형