[Spring] Spring Data JPA에서 새로운 Entity인지 판단하는 방법?
·
Back-end/Spring
요즘 백엔드 관련한 내용을 매일마다 질문해주는 Maeil-Mail이라는 서비스를 사용하여 하루하루 지식을 체크중이다. (이거 생각보다 재밌을지도?) 오늘의 주제는 바로 Spring Data JPA이다. 항상 인터페이스처럼 편하게 JPQL을 사용하게 해주는 녀석... 하지만 EntityManager를 사용한 영속성 컨텍스트 관리를 한다는 것 말고는 제대로 동작 방식을 알고 있었을까? 위 질문(제목에 게시)에 뭐 영속성 컨텍스트가 새로운 엔티티를 판별하겠지? 만 생각이 들고 정확한 동작 관리를 알지 못했다.  ... 아직 갈 길이 멀다. Spring Data JPA 뜯어보기. 바로 시작해보도록 하자 Spring Data JPA란? 우선 JPA란 무엇일까?JPA란 Java Persistentce API의 약자..
[Spring] AWS SageMaker 엔드포인트 연결 시도하기
·
Back-end/Spring
문제 상황기존 방식대로 Spring WebFlux 에서 HTTP Client로 사용되는 비동기적으로 작동하는 모듈인 WebClient를 활용하여 SageMaker 엔드포인트에 POST 요청을 시도했다. 그런데 CloudWatch에서 요청 시도에 대한 로깅은 찍히는데, 웹서버로 리턴이 들어오지 않는 상황이었다. 알고 보니, AWS SageMaker는 사용하는 IAM에 대한 정보를 바탕으로 AWS Signature를 Header에 담아 전송해야하는 것이었다. 이를 해결하기 위해 Spring에서는 aws sagemaker-runner 라이브러리를 사용해야 한다. 해결 1. build.gradle에 다음과 같은 라이브러리를 추가한다.implementation 'io.awspring.cloud:spring-clo..
[Spring] self-hosted Runner를 통한 CI/CD 배포
·
Back-end/Spring
문제 상황CI / CD 워크플로우에서 직접적으로 EC2 IAM을 활용하여 접속하려고 했는데 CD 과정이 진행되지 않는 상황이 발생했다. workflow.yml 코드는 다음과 같다.- name: Deploy to EC2 uses: appleboy/ssh-action@master with: key: ${{ secrets.EC2_PRIVATE_KEY }} # pem key host: ${{ secrets.EC2_HOST }} # ec2 ip username: ${{ secrets.EC2_USER }} # ec2에서 whoami 명령어로 확인 script: | sudo docker stop $(sudo docker ps -q) sudo docker pull ${{ se..
[Spring] @RequestPart vs @RequestParam vs @RequestBody
·
Back-end/Spring
@RequestPartContent-Type 이 'multipart/form-data' 에 특화된 어노테이션HTTP request body 에 multipart/form-data 가 포함되어 있는 경우에 사용 MultipartFile 을 받을 때 사용 가능단, HttpMessageConverter 가 Content-Type 을 참고하여 알맞는 Converter 로 처리한다 MultipartFile 이 포함되는 경우에 MultipartResolver가 동작하여 역직렬화를 하게 된다.(역직렬화 : Byte로 되어있는 데이터를 객체 형태로 변환)단, MultipartFile 이 포함되어있지 않다면, @RequestBody 와 마찬가지로 HttpMessageConverter가 동작된다.@RequestParamH..
[Spring] Spring Boot에서 Google Meet API 적용해보기
·
Back-end/Spring
회의 요약 서비스 플랫폼 프로젝트를 기획 중 Google Meet를 서비스 내에서 구현할 수 있어야 하는 문제가 생겼다...실제로 써본 적이 없는 API이기 때문에, 사용법 숙지를 위해 테스트 프로젝트를 생성했다. Google Meet은 자체적인 API가 없어서 Google Calendar 이벤트를 생성할 때 Meet 회의를 추가하는 방식으로 URL을 발급받을 수 있다고 한다. 흐름1. Google OAuth2 인증을 통해 구글 계정에 대한 인가 코드를 받는다.2. 해당 인가 코드를 통해 사용자의 Google Calendar 의 Hangout 타입의 이벤트를 생성한다 (Google Meet) .3. 해당 Google Meet의 URL을 발급한다. 1. Google Cloud Platform 설정먼저 Go..
[Spring] JWT + Redis를 활용한 로그아웃 구현 (Jwt BlackList)
·
Back-end/Spring
프로젝트를 진행하면서, 사용자의 인증 여부를 확인하기 위해 JWT 토큰 기반의 방식을 선택했다.보안과 JWT를 공부하면서 refresh 토큰을 제대로 사용해본 적이 없어 2024년 여름방학 때 확실하게 공부해야겠다는 생각이 들었다.처음 프로젝트 때 카카오 소셜 로그인을 사용하면서 access token 만으로 인증 방식을 진행했지만, access token을 탈취당했을 상황의 문제점에 대해 고려하면서 refresh token을 도입하여 보완하고, 로그아웃 이후의 탈취상황을 고려해 블랙리스트(Blacklist)라는 개념을 찾게 되어 사용해보고자 도입해봤다. Refresh Token 로직클라이언트 로그인 요청서버에서 access token, refresh token 생성 및 반환access token의 유효..
[Spring] Query Parameter vs Path Variable
·
Back-end/Spring
결론자원(데이터)의 위치를 특정해서 보여줘야 할 경우 Path Variable을 쓰고, 정렬하거나 필터해서 보여줘야 할 경우에 Query Parameter를 쓴다. 아래가 바로 그렇게 적용한 사례이다./users # Fetch a list of users/users?occupation=programer # Fetch a list of programer user/users/123 # Fetch a user who has id 123 위의 방식으로 우리는 어디에 어떤 데이터(명사)를 요청하는 것인지 명확하게 정의할 수 있다.하지만, 그 데이터를 가지고 뭘 하자는 것인지 동사는 빠져있다. 그 동사 역할을 하는 것이 GET, POST, PUT, DELETE 메소드이다.즉, Query string과 Path va..
[Spring] Security + JWT + Redis를 활용한 로그인 구현 (2)
·
Back-end/Spring
[Spring] Security + JWT + Redis를 활용한 로그인 구현 (1)Security를 활용한 로그인 구현을 위해 여러 블로그들을 참고하여 작성한 글입니다.내용에 잘못된 점이 있다면 지적해주시면 감사하겠습니다! 먼저 로그인 구현에 앞서 JWT가 뭔지 개념을 정리해sksmsfbrjs51.tistory.com로그인 구현 이전에 JWT에 대한 개념글을 정리해보았다. JWT에 대한 이해가 필요하다면 이전 게시글을 참고하면 좋을 것 같다! 구현에 앞서 Spring Security 동작 단계를 살펴보자Spring Security 동작 단계사용자가 로그인 정보와 함께 요청을 보낸다.AuthenticationFilter가 해당 요청을 가로채고 ,가로챈 정보를 통해 UsernamePasswordAuthen..