[Spring Boot] WebSocket + STOMP으로 채팅 기능 구현하기
·
🍏 Spring Boot
이번에는 채팅 기능을 구현해 보려고 하는데,스프링부트에서 웹소켓을 이용해 양방향 통신을 구현하려고 한다. Websocket이란?원래 HTTP는 요청 ↔ 응답이 1회성인데, WebSocket을 통해 지속적으로 연결하여 서버와 클라이언트가 아무 때나 메시지를 주고받을 수 있는, 양방향 통신 방법 특정 엔드포인트를 사용해서 연결할 수 있는데ws:// 를 사용한다. (80포트를 사용하고, https 경우에는 443포트, wss://) 이 엔드포인트는 핸드셰이크 엔드포인트 라고 하는데,핸드셰이크 엔드포인트란?통신의 양측 간에 조건에 합의해 가는 정보 교환 과정에 이용되는 엔드포인트이고,여기에 연결 성공하면 그 다음부턴 계속 같은 소켓으로 텍스트/바이너리 프레임을 주고받는 구조이다. STOMP란?Simple T..
[Spring Boot] 카카오 로그인 구현하기
·
🍏 Spring Boot
이번에는 스프링부트와 카카오 로그인 연동에 도전해 보려고 한다! 구글 로그인 연동만 해봤는데 얘가 좀 더 까다롭게 느껴졌다. 🥲 ❇️ 앱 등록하기https://developers.kakao.com/ Kakao Developers카카오 API를 활용하여 다양한 어플리케이션을 개발해 보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.developers.kakao.com다음 페이지로 접속해서 로그인/회원가입을 마친 후, 앱 - 앱 생성을 누르면다음과 같은 화면이 뜬다. 이름과 회사명, 분야를 선택한 후 저장을 누르면 이렇게 앱이 하나 생겼다. ❇️ REST API 키 이 앱을 누르고앱 - 일반 에 들어가서 스크롤을 하면 앱 키가 뜨는데나는 REST API 키를 이용할..
[Spring Boot] 스프링부트 GCP 배포하기 (Google Cloud Platform)
·
🍏 Spring Boot
오늘은 지금까지 만든 스프링 프로젝트를 구글 클라우드 플랫폼, GCP를 통해 배포해 보려고 한다.구글 클라우드에서는 처음에 무료 크레딧을 주니 받아두면 좋다 https://cloud.google.com/free?gad_campaignid=17391149414&gad_source=1&gclid=Cj0KCQjwrPHABhCIARIsAFW2XBMd2UVlP5tGn22-5a-lcaOyilfwxbVdmR02FDEhIsZM1g52ICnGm-AaAnjOEALw_wcB&gclsrc=aw.ds&hl=ko&userloc_9213263-network_g=&utm_campaign=japac-KR-all-ko-dr-BKWS-all-cloud-trial-PHR-dr-1710102&utm_content=text-ad-none-n..
[Spring Boot] @Value 어노테이션 오류 / application.yml 값 인식 실패
·
🍏 Spring Boot
제목 그대로... 이러한 빨간 줄이 계속 발생했다. @Value 어노테이션을 붙이고, application.yml에ai: api: url: https://이렇게 설정까지 했는데 읽어오기는 커녕계속 이렇게 static Constructor을 더하라고 경고문이 떴다.그래서 public AnalyzeService(@Value("${ai.api.url}") String fastApiUrl, WebClient.Builder builder) { this.webClient = builder.baseUrl(fastApiUrl).build(); }이런 것도 사용해 보고... 먼저 인젝션을 해 주려고 했는데 여전히 같은 오류가 떴다.@PostConstruct를 쓰는 방법도 있었지만전에 그걸 사용했..
[Spring Boot] Gemini API, Vision API, Vertex AI와 Spring Boot 연결
·
🍏 Spring Boot
다소 제목이 거창하지만구글에 자료가 너무 없어서 챗지피티를 질질 붙잡고 몇 시간 만에 해결했다... 우선 내가 구성한 프로젝트의 흐름은Vision api 불러서 ocr 기능으로 카페 메뉴판 인식-> 추출된 메뉴 중 사용자에게 맞는 음료 추천을 위해 Gemini api 호출 이때 Gemini를 호출하는 건 단순히 지정된 프롬프트 형식(이 중에 당이 가장 낮은 / 적절한 메뉴를 추천해 줘)였기 때문에 단순히 Gemini만 부르면 된다고 생각했다 그런데 계속되는 404 not found 알고 보니 Gemini pro, 즉 지금 사용되고 있는 모델을 호출하려면Vertex ai도 필수로 사용해야 된다고 한다 (거쳐서 호출하나봄)내가 모델을 만드는 건 아니라 필요없을 줄 알았는데 이상한 데서 뒤통수 맞음원래..
[Spring Boot] Firebase & Google OAuth2 로그인 / 액세스 차단 문제 해결
·
🍏 Spring Boot
파이어베이스와 연동해서 구글 로그인 하면 자동으로 저장이 되는 로직을 짰고잘 저장이 됐었는데코드 살짝 바꿨다고 승인 오류가 나기 시작했다. (이걸 고칠 생각을 못 함) 포스트맨으로 테스트하던 중 나타난401 invalid_client 오류 브라우저로 접속해 봐도 내용은 똑같았다. 유효하지 않은 사용자라는 응답... 알고 보니 이 부분은내가 깃 문제 때문에 브랜치를 한번 바꾸면서인텔리제이의 새 프로젝트에 환경변수 지정하는 걸 깜빡했다.application.yml에는 넣었으면서 ...어쨌든 환경변수 추가했다. 이렇게 첫 번째 오류 해결.근데 이제 계정 선택을 하는데, 다음 화면으로 넘어가질 않았다. 계속 구글 계정 선택 화면만 맴돌 뿐...파이어베이스에도 유저 저장이 아예 안 되고 있었던 걸 보아그 로직으..
[Spring Boot] Google OAuth2 로그인 설정
·
🍏 Spring Boot
오늘은 스프링부트에서 구글 oauth2 로그인 설정하는 법을 적어보려고 한다! 🍞 구글 콘솔 설정우선 구글 클라우드 콘솔에 접속해 준다. https://console.cloud.google.com/welcome?invt=AbuvCw&organizationId=0 Google 클라우드 플랫폼로그인 Google 클라우드 플랫폼으로 이동accounts.google.com 여기서 프로젝트 선택 -> 새 프로젝트 생성 을 하고구글 로그인을 위한 프로젝트를 하나 만든다. 왼쪽 메뉴를 열고 api 및 서비스 -> 사용자 인증 정보 -> 동의 화면 구성을 클릭!그럼 아무것도 없다고 뜰 텐데 생성을 해 준다.앱 정보에는 간단하게 이름이랑 내 이메일 선택하면 되고다음 대상은 외부로 해 준다!그 다음도 내 이메일 입력..
[Spring Boot] Google Firebase와 Spring Boot 연결
·
🍏 Spring Boot
오늘은 구글의 파이어베이스를 사용해 보려고 한다.https://console.firebase.google.com/u/0/ 🔥Google Firebase 프로젝트 생성구글 파이어베이스 콘솔에 접속해서 Firebase 프로젝트를 만들어 준다. 방법은 생각보다 더 간단했다. 내 프로젝트 이름을 작성해 주고, 약관에 동의해 주면 된다.나는 그냥 다 체크체크 했다 그리고 애널리틱스 위치는 대한민국으로 설정해 주고마지막 프로젝트 만들기를 클릭하면 이제 여기서 프로젝트 설정 -> 서비스 계정에 들어간다. 그러면 이렇게 새 비공개 키 생성이 뜨는데 나는 자바를 사용해서 자바로 바꿨다. 그리고 버튼을 누르면 .json 파일이 자동으로 다운로드 된다. 🔥Spring Boot와 Firebase 연결그리고 이제 스프..
[Spring Boot] @RestController와 @Controller의 차이
·
🍏 Spring Boot
이 글을 작성하는 이유계속 404가 뜨던 요청이 @Controller에서 @RestController을 붙이자마자 해결된 것이다도대체 왜일까 내 10시간을 어디에 바친 것인가그러나 이 모든 것은 내 무지에서 출발하였다...한바탕 데이고 알아보는 두 어노테이션의 차이점. ✴️ @Controller ?컨트롤러는 애플리케이션을 구성하는 핵심 요소 중 하나로, URI와 매핑하여 클라이언트의 요청에 알맞은 응답을 반환하는 곳이다.Spring의 @Controller 어노테이션은 View를 반환한다. ✴️ @RestController ?Controller 앞에 Rest가 붙은 이 RestController는 @Controller + @ResponseBody 의 개념이라고 한다.그래서 @RestController 어노..
[mysql] 서버와 데이터베이스의 시간대 차이 문제 / UTC, serverTimezone
·
🦎 프로그래밍
rds 로 연결한 mysql 테이블의 데이터 값을 보다 보니현재 시간과 다른 것을 발견했다. 이유를 알아보니 서버와 데이터베이스의 시간대(timezone)가 달랐다. MySQL 서버의 시간대 확인 다음 sql 문을 통해 mysql 서버의 시간대를 확인할 수 있다. SELECT @@global.time_zone, @@session.time_zone;  그럼 이런 결과를 받게 되었는데@@global.time_zone@@session.time_zoneUTCUTC한국(Seoul) 시간은 UTC+9이므로, 저장 시점보다 9시간 빠르게 저장되고 있던 것이다. Spring Boot와 MySQL 시간대 맞추기 시간대를 맞추는 방법은 여러 가지가 있는데 우선1️⃣ MySQL 시간대를 Asia/Seoul로 변경 SETGL..