[Java Spring] COGO 개발일지 - Spring Security에서 JWT 인증 처리 방식 비교 (JwtAuthenticationFilter)
·
백엔드/Java + Spring
COGO 서버를 개발하며 JwtAuthenticationFilter를 구현하던 중 이전 프로젝트에서 작성했던 코드와 비교를 하며 궁금증이 생겼다.JwtAuthenticationFilter에서는 Jwt를 파싱해서 스프링 시큐리티에 인증 정보를 주입한다. 이때 데이터베이스를 확인하여 유저가 실제로 존재하는지 체크하고 인증 정보를 주입할까? 아니면 Jwt 토큰을 파싱해서 UserDto를 customOAuth2User(또는 UserDetails)에 넣고 인증정보를 주입할까? 에 대한 고민이 생겼고 어떤 방법이 옳은 방법인지, 혹은 각 방법에 어떤 장단점이 있는지 찾아보게 되었다. JWT 인증 필터에서의 접근 방식 비교JWT 토큰을 검증하고 인증 정보를 설정하는 JwtAuthenticationFilter에서 사용..
[Java Spring] COGO 개발일지 - 코드 중복 해결에 대한 고민 해결책 (DI, AOP, 어노테이션)
·
백엔드/Java + Spring
코드 중복 해결에 대한 고민과 최선의 해결책 코드를 보니 getUserNameByAuthentication 메소드가 여러 컨트롤러에 걸쳐 중복되고 있다. 이런 중복은 DRY(Don't Repeat Yourself) 원칙을 위반하는 전형적인 케이스다. 이런 상황에서 몇 가지 해결책을 생각해볼 수 있다.현재 상황 분석현재 각 컨트롤러에서 동일한 코드로 인증된 사용자의 이름을 가져오는 메소드를 반복 구현하고 있다. 이렇게 중복된 코드는:유지보수 어려움 - 한 곳에서 수정이 필요할 때 모든 곳을 찾아 수정해야 한다버그 발생 가능성 증가 - 일부만 수정하고 나머지는 놓칠 수 있다코드 품질 저하 - 불필요한 코딩으로 전체 코드베이스 비대화된다해결책들1. 유틸리티 클래스 만들기public class Authentic..
[Kotlin Spring] 스프링 스케줄러를 이용한 매일 오전 3시 작업 예약하기
·
백엔드/Kotlin + Spring
서론이전에 뉴스 기사 스크래핑 및 요약 기능을 구현한 후 자동화를 시키기 위해 스프링 스케줄러를 사용하기로 했다.목표는 최신 뉴스 기사 스크래핑 및 요약을 매일 사람들이 이용하지 않는 시간대에 업데이트하는 것이다.  Spring Scheduler스프링의 스케줄러는 특정 시간에 특정 작업을 자동으로 실행하게 해주는 기능이다.1. 기본 설정@Configuration@EnableSchedulingclass JpaConfig  2. 주요 어노테이션@Scheduled 어노테이션을 사용하면 된다.@Componentclass ScheduledTasks { // 1. 고정 간격으로 실행 @Scheduled(fixedRate = 5000) // 5초마다 fun reportCurrentTime() { ..
[Kotlin Spring] Relogging - 뉴스 기사 스크래핑하기 (크롤링과 스크래핑 차이)
·
백엔드/Kotlin + Spring
1. 서론Relogging 프로젝트에서 뉴스 기사를 스크래핑한 후 ai를 통해 요약하고 원문을 보고 싶다면 원본 사이트로 리다이렉션 하는 기능을 구현하자는 아이디어가 나왔다. 토스 증권의 뉴스 3줄 요약 기능을 참고하여 아이디어를 얻었다. 크롤링과 스크래핑 차이웹 크롤링은 웹 페이지의 링크를 타고 계속해서 탐색을 이어나가지만, 웹 스크래핑은 데이터 추출을 원하는 대상이 명확하여 특정 웹 사이트만을 추적한다는 차이점이 있다. 참고: https://blog.hectodata.co.kr/crawling_vs_scraping/ 2. 리소스 Selector 경로 얻기내가 이전에 작성했던 블로그 포스팅의 내용을 스크래핑해 보도록 하겠다. 리소스의 위치가 고정되어 있는 경우 이런 방법을 통해 스크래핑할 수 있다. ..
[Kotlin Spring] Relogging - AWS S3를 이용한 이미지 호스팅
·
백엔드/Kotlin + Spring
1. 서론서비스를 개발하다 보면 이미지를 저장하고 제공해야 하는 상황이 자주 발생합니다. Relogging 프로젝트에서도 사용자 프로필 이미지, 플로깅 모임 배너 이미지, 뉴스 기사 썸네일 등 다양한 이미지 리소스를 다루어야 했습니다. 이미지 호스팅을 구현하는 방식은 크게 두 가지가 있습니다:애플리케이션 서버에서 직접 이미지를 저장하고 제공하는 방식구현이 비교적 간단하고 직관적하지만 서버 리소스(디스크 공간, 네트워크 대역폭) 부담이 큼확장성과 가용성 측면에서 한계가 있음클라우드 스토리지 서비스(AWS S3 등)를 활용하는 방식초기 설정과 구현이 다소 복잡할 수 있음하지만 서버 부하를 줄일 수 있고 확장성이 뛰어남CDN과 연계하여 더 빠른 이미지 제공 가능비용 효율적인 운영 가능이 글에서는 Reloggi..
[백엔드] AWS S3 엑세스 키 발급 방법
·
백엔드/백엔드
AWS S3 엑세스 키, 비밀 엑세스 키를 발급 받는 방법을 알아보자.  AWS 계정 로그인 이후 오른쪽 위 계정 이름을 클릭한 후 보안 자격 증명 클릭  왼쪽의 엑세스 관리 - 사용자 클릭오른쪽 주황색 사용자 생성 버튼 클릭  이름 지정  AmazonS3FullAccess 선택아래의 다음 버튼 클릭사용자 생성 버튼 클릭  생성된 사용자에서 보안 자격 증명 클릭   CLI 선택, 권장사항 체크박스 클릭, 다음 버튼 클릭다음 페이지의 설명 칸 적기(건너뛰기) 이후 엑세스 키와 비밀 엑세스 키가 생성된 것을 확인할 수 있다.
[백엔드] AWS S3 버킷 생성
·
백엔드/백엔드
서론Amazon S3는 업계 최고의 확장성, 데이터 가용성 및 보안과 성능을 제공하는 객체 스토리지 서비스이다. S3 버킷을 생성해보자.프로젝트를 하며 이미지를 호스팅하기 위해 S3를 사용하게 되었는데, 사용한 김에 내용을 정리하여 블로그 글을 쓰게 되었다. S3 버킷 생성 AWS 회원가입 후 상단의 검색창에 S3를 검색해서 들어가자  버킷 만들기 클릭  버킷 이름 입력  퍼블릭 액세스 차단 해제, 실제 배포 할 때에는 보안을 위해 설정해 주자이후, 맨 아래의 버킷 만들기 클릭이후, 생성된 버킷 이름 클릭  권한 클릭오른쪽 아래 버킷 정책의 편집  버킷 ARN 복사 후정책 생성기 클릭  Select Type of Policy : S3 선택Principal : * 입력Actions : GetObject, ..
[Kotlin Spring] Relogging - Spring AI 활용 구현하기 정리 (OpenAI, ChatGPT API 사용하기)
·
백엔드/Kotlin + Spring
1. 서론프로젝트에서 뉴스 요약하기 기능을 구현하기 위해 OpenAI의 ChatGPT를 사용하기로 했다. 사실 이전 프로젝트에서도 GptAPI를 사용한 기능을 구현했었는데, 아래 사진처럼 클래스도 여러 개 만들어야 하고 더 효율적으로 AI 기능을 사용할 수는 없을까? 라는 생각을 하다가 Spring에서 AI를 지원한다는 정보를 알게 되었다. 이번 포스팅에서는 Spring AI를 사용하여 정말 간단하게 AI 기능을 구현하는 방법을 알아보겠다.  2. ReferenceSpring AI에서는 다양한 AI를 지원하며 공식 문서에서 이를 찾아볼 수 있다. 다음 링크는 OpenAI의 Chat AI 사용 방법에 대한 Spring 공식 문서 링크이다. 이 문서와 OpenAI의 공식 문서를 참고하여 코드를 작성했다.Sp..
[Java, Kotlin Spring] 인텔리제이 application.yml 환경변수 설정하기
·
백엔드/백엔드
1. 실행 버튼 옆의 구성 편집 누르기 2. 환경 변수 옵션 추가 3. 환경 변수 설정환경 변수 칸에 다음과 같이 {환경변수}={값}; 형태로 입력 DATASOURCE_PASSWORD=0000;DATASOURCE_URL=jdbc:mysql://localhost:3306/test_db;DATASOURCE_USERNAME=root; 4. 스프링에 환경 변수 추가 5. 사용 @Value 어노테이션을 사용해서 환경변수를 가져다 쓸 수 있음예를 들어 위 데이터 베이스 url을 가져다 쓰고 싶으면 @Value("${spring.datasource.url}")
[Kotlin Spring] Relogging - 파일 다중 업로드와 Http 415 오류 및 해결 (스웨거 오류, MultipartFile)
·
백엔드/Kotlin + Spring
이번 포스팅에서는 코틀린에서 Json(이미지 설명) 파일과 함께 이미지 파일을 한 번에 여러 개 업로드하는 방법에 대해서 작성하려고 한다. 다중 이미지 업로드Controller 여러 이미지를 대한 입력받기 위해 @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)를 추가해 준다. 파일 입력은 MultipartFile 클래스로 받을 수 있으므로 여러 파일을 입력받기 위해 List 형태로 지정해 준다. Swagger 스웨거에는 다음과 같은 형태로 나온다 Add string item 버튼을 눌러서 입력할 file 개수를 정할 수 있다.  Service 이미지를 저장하기 위해 file system을 이용했다. 다른 방법으로는 AWS S3 등을 사용해 외부에..