[Spring Boot] WebSocket + STOMP으로 채팅 기능 구현하기
·
🍏 Spring Boot
이번에는 채팅 기능을 구현해 보려고 하는데,스프링부트에서 웹소켓을 이용해 양방향 통신을 구현하려고 한다. Websocket이란?원래 HTTP는 요청 ↔ 응답이 1회성인데, WebSocket을 통해 지속적으로 연결하여 서버와 클라이언트가 아무 때나 메시지를 주고받을 수 있는, 양방향 통신 방법 특정 엔드포인트를 사용해서 연결할 수 있는데ws:// 를 사용한다. (80포트를 사용하고, https 경우에는 443포트, wss://) 이 엔드포인트는 핸드셰이크 엔드포인트 라고 하는데,핸드셰이크 엔드포인트란?통신의 양측 간에 조건에 합의해 가는 정보 교환 과정에 이용되는 엔드포인트이고,여기에 연결 성공하면 그 다음부턴 계속 같은 소켓으로 텍스트/바이너리 프레임을 주고받는 구조이다. STOMP란?Simple T..
[TIL] 객체 지향 SOLID 원칙
·
🚜 CS 스터디
객체 지향 프로그래밍이란? (Object-Oriented Programming, OOP)객체 개념을 기반으로 하는 프로그래밍의 패러다임이다. 데이터를 객체로 취급하며 객체들의 집합과 상호작용을 통해 프로그램을 설명하는 관점이다.객체 지향의 주요 특징은 다음과 같다.추상화 (Abstraction): 복잡한 구현은 숨기고 핵심적인 부분만 외부에 보여준다. 사용자는 객체의 내부 작동 방식을 알 필요 없이 인터페이스만으로 객체를 사용할 수 있다. 캡슐화 (Encapsulation): 데이터와 기능을 하나의 객체 안으로 묶고, 외부에서의 접근을 제한하여 데이터의 안전성을 높인다. 상속 (Inheritance): 기존 클래스(부모 클래스)의 속성과 메서드를 새로운 클래스(자식 클래스)가 물려받아 재사용하는 기능. ..
[TIL] CORS 정책 (Cross-Origin Resource Sharing)
·
🚜 CS 스터디
오늘은 저번 디자인 패턴에 이어프록시 패턴을 공부했는데 그 중 프록시 패턴에서 CORS 이야기가 나와서이 기회에 CORS에 대해 더 자세히 알아보려고 한다.CORS란?Cross-Origin Resource Sharing으로, 번역하면 교차 출처 리소스 공유이다. 책에서는 “서버가 웹 브라우저에서 리소스를 로드할 때 다른 오리진을 통해 로드하지 못하게 하는 HTTP 헤더 기반 메커니즘“ 이라고 설명하고 있다.다시 말해 CORS를 설정한다는 것은 출처(Origin)이 다른 서버 간의 리소스를 공유할 수 있게 허용하는 것이다. 또 하나의 웹 정책으로는 SOP가 있는데, SOP(Same-Origin Policy)는 같은 출처(Origin)일 때를 제외하고 서로 다른 출처일 때 리소스의 공유를 막는 것이다. CO..
[TIL] 싱글톤 패턴 (Singleton pattern)
·
🚜 CS 스터디
싱글톤 패턴을 설명하기 전, 여기서 패턴이 뜻하는 바는 무엇일까?패턴은 디자인 패턴이라고도 할 수 있는데 디자인 패턴 (Design pattern) ?프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 ‘규약’ 형태로 만들어 놓은 것이다. 싱글톤 패턴 (Singleton Pattern) ?디자인 패턴 중 하나로, 클래스의 객체를 한 개만 생성해서 오직 한 개의 객체만 사용하는 패턴이다. 솔직히 이 말만 봤을 때는 이해가 안 돼서 예시 코드를 찬찬히 보니까 괜찮았다...class Singleton { private Singleton(){} private static class singleInstanceHolder { privat..
[Android] EncryptedSharedPreferences로 JWT 토큰 저장하기
·
🦎 프로그래밍
안드로이드 스튜디오에서 jwt 토큰을 관리하는 방법을 직접 쓰면서 공부하고 저장하고자... 적어본다. 로그인 후 서버에서 access token과 refresh token을 받아오면 이것을 헤더에 붙여 api에 요청을 보내야 한다. 그래서 이 토큰을 임시로 저장해 둘 공간이 필요하고,대표적인 방법으로는 SharedPreferences가 있다. val prefs = getSharedPreferences("UserPrefs", Context.MODE_PRIVATE)val uid = prefs.getString("uid", "") ?: ""val idToken = prefs.getString("idToken", "") ?: ""이런 식으로 사용하는 건데,SharedPreferences는 암호화된 채로 저장되지..
[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에는 넣었으면서 ...어쨌든 환경변수 추가했다. 이렇게 첫 번째 오류 해결.근데 이제 계정 선택을 하는데, 다음 화면으로 넘어가질 않았다. 계속 구글 계정 선택 화면만 맴돌 뿐...파이어베이스에도 유저 저장이 아예 안 되고 있었던 걸 보아그 로직으..