일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- AWS
- 소셜 로그인
- jwt
- 관점 지향 프로그래밍
- validation
- 예외 처리
- 백준 10815 # 백준 Java
- Flask
- 구글 로그인
- wss 연결 실패
- 이미지 업로드
- logout
- spring websocket nginx 설정
- 스프링부트
- 도메인 주도 개발
- 개발 프로젝트
- 패러다임 불일치
- fastapi
- 자바 orm
- OpenAI API
- spring boot
- CustomException
- S3
- ec2 nginx websocket reverse proxy
- oauth2.0
- presigned url
- GoormIDE
- session
- springboot
- @Valid
- Today
- Total
목록백엔드 (9)
개발세발은 안되요
springboot + webSocket + STOMP를 이용하여 채팅을 구현하던 중 해당 에러가 발생했다. Handshake failed due to invalid Upgrade header: null 이 에러는 wss(웹소켓 보안 연결)을 시도할 때에만 발생하고 ws로 웹소켓 연결을 시도할 때에는 발생하지 않았다. 로컬 환경에서나 ec2 배포 환경에서 모두 ws 연결로는 잘 작동하지만 wss 연결 시에만 에러가 발생하는 것이다. 에러 내용 HTTP 프로토콜을 WebSocket 프로토콜로 변경하기 위해서는 클라이언트에서 Upgrade 헤더를 전달해주어야 한다. (webSocket으로 upgrade) 하지만 해당 헤더라 누락되었기 때문에 연결이 handShake가 실패하고, connection에..

이전 게시글에서 로컬에서 채팅을 구현하고 테스트하는 방법까지 알아보았다. 하지만 현재 개발중인 프로젝트에서는 구글 로그인을 이용하고 있고 토큰을 통해 사용자를 인증하고 있다. 이를 채팅에도 도입하도록 하겠다. 지난 게시글에서는 html 파일에서 아래와 같이 임의로 senderId를 직접 넣어 메시지를 전송했다. 하지만 실제로는 클라이언트측에서 가지고 있는 토큰이 유효한지를 검증해야 하고, 토큰 검증 이후 채팅을 보낼 때 사용할 senderId와 같은 값도 클라이언트 측에게 전달해주어야 한다. 우리 팀의 경우 senderId로 사용될 값을 전달하는 api를 구현하고, 이를 채팅방에 입장하기 전 프론트에서 호출하여 이후 채팅에 이용하기로 했다. 대신 사용자의 토큰 정보는 채팅방 구독 시에 검증하도록 구현했..

개발 환경Springboot를 이용했다.DB로는 기본적으로는 MySQL을 사용했다. 채팅방 정보는 MySQL에 저장하고, 채팅 메시지 정보는 MongoDB에 저장하였다.이 외에 로그인에 사용할 토큰은 Redis에 저장하였다. WebSocket + STOMPWebSocket WebSocket은 웹/앱과 서버 간의 지속적인 연결을 제공하는 프로토콜로, 서버와 클라이언트 간에 양방향 통신을 가능하도록 한다. HTTP와는 달리 WebSocket 연결은 한 번 열리면 계속 유지되기 때문에 실시간으로 진행되는 통신(ex.채팅)에서 사용된다.이전까지 개발하던 RestAPI와 다른 점은 한 번 API 콜을 보낸 후 끝나는 것이 아니라, 한 번 연결되면 계속 통신이 가능하다는 점. STOMP STOMP에 대한 설명..

들어가며! 이번 학기에 졸업 프로젝트를 시작하면서 채팅 서비스를 기획하게 되었다. 그리고 채팅의 내용을 Chat GPT를 통해 분석하는 기능이 필요해졌는데, 이에 랭체인을 통해 프롬프팅을 진행하기로 하였다. 여러 자료를 찾아보니, spingboot로는 랭체인의 기능을 현재까지는 완전히 이용할 수 없고 코드 역시 조금 복잡했다. 이에 FastAPI를 이용하여 랭체인을 통한 프롬프팅을 진행하기로 결정했다.구현 구조를 간단히 설명해보자면,Springboot를 통해 백엔드 구현을 하되 프롬프팅 및 AI와의 통신은 FastAPI가 담당한다.그리고 SpringBoot와 FastAPI를 연동하여 프론트와의 통신이 이루어지도록 한다. 즉 FastAPI로 들어가는 데이터는 Springboot를 통해 넣어준다. 나의 ..
적용 배경 api 개발 및 배포 후 프론트 쪽에서 api를 연결하던 과정중에 프론트에서 요청 파라미터로 null이나 공백 등 들어와서는 안 되는 값을 보내어 예상하지 못했던 여러 에러가 발생하는 문제를 겪었다. api 명세서에 null은 보내주지 말라고 적어두기도 했고, 예상하지 못했기 때문에 왜 이런 값이 DB에 들어왔지? 라고 당황했다. 이 부분은 백엔드 쪽에서 예외처리를 시켜주어야 하는 부분이라고 생각했고, 기존에 적용해두었던 CustomError를 이용하여 Validation을 체크하기로 했다. (예외 처리는 정말정말 중요한 것 같다!) 구현 코드ApiExceptionHandler.javaimport lombok.extern.slf4j.Slf4j;import org.springframework...

OverView 이번 프로젝트를 시작하면서 presigned url을 사용하게 되었다. 사용하게 된 이유로는 다음 등등이 있다.오랫동안 서버를 열어두며 실제 사용자가 존재하는 서비스를 개발해야 한다.단기성 프로젝트가 아니기 때문에, 사용자가 서비스를 사용하는 중에 에러가 발행해서는 안 된다.사용자가 이미지 등의 파일을 업로드하는 일이 잦은 서비스이다.고화질의 이미지를 사용자가 업로드할 수 있어야 한다.서버를 효율적으로 사용해보자. presigned url 에 대해서 문서를 살펴보고 싶다면, 다음 링크를 참고하면 된다.https://medium.com/brickmate-cloud/aws-ncp-s3-presigned-url-%EC%83%9D%EC%84%B1-%EC%9D%B4%EC%9A%A9-%EA..

Papers 라는 프로젝트에서 로그인 기능을 구현해야 했고, 아직 소셜 로그인을 구현해본 적이 없어서 이 부분을 담당하게 되었습니다. 처음 해보는 것이어서 많이 막히기도 했고,,, 여러 블로그 참고해서 어찌저찌 구현은 완료했습니다 ㅎㅎ 사용 스택 Spring Boot JWT OAuth 2.0 Redis : 토큰 관리 목적 MySQL 로그인 과정 개인적으로 로그인 흐름을 처음에 파악하는 것이 조금 어려웠습니다. 그래서 이런 저런 블로그들을 많이 참고해서 나름대로 정리해보았는데요! 음 로그인 과정에 대한 이론은 언젠가 다시 더 자세하게 작성해보고 싶습니다. 우선 구현을 어떻게 해야 하는지가 주제이기 때문에 구체적인 구현 위주로 이어가도록 하겠습니다! 구글 서비스 생성 https://myanjini.tisto..

오늘은 AWS S3에 이미지를 업로드하는 방법을 기록해보도록 하겠습니다! 이번 프로젝트를 진행하면서 이미지,, 파일 업로드 기능을 처음 만들어보아서 정말 많이 해매었어서,, 누군가에게 이 글이 도움이 되었으면 합니다 ㅠㅠ S3란? 공식 홈페이지에서 설명하고 있는 바는 다음과 같습니다! Amazon Simple Storage Service(Amazon S3)는 업계 최고의 확장성, 데이터 가용성, 보안 및 성능을 제공하는 객체 스토리지 서비스입니다. 모든 규모와 업종의 고객은 Amazon S3를 사용하여 데이터 레이크, 웹 사이트, 모바일 애플리케이션, 백업 및 복원, 아카이브, 엔터프라이즈 애플리케이션, IoT 디바이스, 빅 데이터 분석 등 다양한 사용 사례에서 원하는 양의 데이터를 저장하고 보호할 수 ..