Spring 웹 소켓을 이용한 실시간 채팅 시스템 구현 공부 이번 포스팅은 실제로 채팅 서버 구축에 들어가기 이전에, 프론트, 백엔드 각자 공부를 진행하고 아이디어를 공유하기 위해 공부 및 혼자서 구현을 해본 과정을 적어보고자 합니다. 이후 회의 등에서 더 좋은 아이디어가 있을 경우 추후 포스팅으로 실제 구현기를 작성할 예정입니다 들어가기에 앞서마트/배달 및 커뮤니티 기능과 유저 기능이 존재함에 따라서 각 게시글 별로 별도의 채팅창을 생성하여 유저들끼리 소통을 할 수 있는 창구를만들고자 채팅 시스템을 구현하게 되었다.채팅 시스템은 모두가 사용하는 카카오톡 등과 같이 실시간 기능이 중요하기 때문에 이를 어떻게 처리하는지가 가장 중요한 부분이었다. 먼저 우리가 생각한 채팅 기능은 다음 기능을 하게 된다게시글이 생성되고 요청이 들어온다면 게시글 별 채팅방이 생성된다.(.. 스케쥴러 기능을 통한 주문 상태변화 기능 구현 왜 스케쥴러를 사용하게 되었는가?현재 진행중인 프로젝트는 공동구매 기능이 존재하기 때문에 이전에 작성하였던 결제 시스템을 구축하였었다.원래라면 실제 운영하게 되는 사이트의 경우라면공동구매 결제, 공동구매 성공, 공동구매 실패 -> 공동구매 조건 및 유저 결제확인상태에 따라 달라진다배송준비, 배송중, 배송완료 -> 상품을 판매하는 업체측이 직접 배송관련 관리를 하고 이에 따라 상태를 변화시킨다구매확정 -> 배송완료가 된 후, 유저가 상품을 판단하고 구매확정 버튼을 눌러 구매를 확정시킨다.와 같은 형태로 업체와 유저가 직접 버튼 등을 눌러서 조작하여야 하지만 우리 프로젝트는 실제로 배포를 진행하여 사용자를 받고 결제를 진행하지는 않기 때문에 결제 이후 배송등과 관련된 사항에서 시나리오를 작성하여 이에 맞춰서.. 카카오페이 결제 시스템 적용 새로 진행하는 프로젝트에서는 공동구매라는 기능이 있어, 카카오페이 및 토스페이먼츠 결제 시스템을 적용하기로 했다. 여기서 나는 카카오페이 결제 시스템을 담당하게 되었으며 이 글은 그에 따라 구현하는 과정을 적고자 한다. 애플리케이션 등록https://developers.kakaopay.com/applications 카카오페이 | 개발자센터새로운 기회와 가치를 함께 만들어봐요developers.kakaopay.com페이지를 통해서 애플리케이션을 등록하고ClientId, Client Secret, Secret Key, Secret Key(dev) 을 발급받았다.이 프로젝트는 배포는 진행하지만 실제 사용자를 위한 결제 시스템을 적용할 계획은 아니었기 때문에 개발자 테스트모드로 진행을 한다. ※ 개발자 테스트.. 스프링 프레임워크 따라해보기 - 멀티 모듈과 빈 생성 및 등록 멀티 모듈로 변경한 이유먼저 다른 기능들을 구현해보기에 앞서 멀티모듈로 변경한 이유부터 말해보려 한다.기존 프로젝트의 경우에는 한 개의 src 파일 아래로src| - framework| - project이런식으로 2개의 패키지를 구성해서 framework 패키지 아래로는 스프링을 따라해본 구현체를 사용하고, project 패키지에는 우리가 흔히 웹 서비스를 만드는 것처럼 controller, service, repository를 사용하려고 했다. 그런데, 곰곰히 생각을 해보니 결국 framework 패키지는 외부에서 주입받아 사용되어야 하기 때문에 이를 1모듈 2패키지가 아니라, 2모듈 2패키지로 진행하는 것이 좋을 것 같다는 생각을 해서 분리를 하게 되었다. 또한, 앞선 글에서는 basepackage를.. 스프링 프레임워크 따라해보기 - 컨트롤러 매핑과 응답 전송 앞에서는 웹 서버를 구축하여 Http 요청을 받고 기본적인 응답을 전송하는 기능을 구현했다.스프링 프로젝트를 해 본 사람이라면 모두 알겠지만, @ReuqestMapping, @Controller 등의 어노테이션을 통해서 url을 분석하고 이에 맞는 컨트롤러로 요청을 전달 하는 모습을 확인할 수 있었다. 그렇다면, 이러한 과정이 어떻게 이루어지는지 간단하게 작성을 해보자. DispatcherServlet스프링 프레임워크에는 DispatcherServlet이라는 클래스가 있는데 이 클래스의 역할은 애플리케이션으로 들어오는 모든 요청을 핸들링하고 공통작업을 처리해준다고 한다. DispatcherServlet은 프론트 컨트롤러라고도 부르며, 서블릿 컨테이너의 맨 앞에서 모든 요청을 받아 처리해주는 컨트롤러를 의.. 스프링 프레임워크 따라해보기 - 웹 서버 구축 Java 언어 및 스프링 프레임워크를 사용하며 방대한 양에 어느 정도 공부를 진행했다고 생각하였지만 실제로는 충분히 이해를 하지 못한 채 사용을 하고 있다는 생각이 계속해서 들게 되었다.(예를 들어, 코드를 작성할 때는 그저 플로우에 맞춰서 작성을 하고 문제가 발생하고 나서야 부랴부랴 원인을 찾게 된다. SecurityConfig에서 무한재귀가 발생한 일도 이러한 이유때문이지 않을까..) 이러한 문제를 해결할 좋은 방법이 뭐가 있을까 고민하던 와중, 간단하게라도 스프링 프레임워크를 구현해보면 추후 더 좋은 방향으로 성장할 수 있을 것 같다는 생각이 들었다. 따라서, 개인적으로 빠르게 미니 스프링 프레임워크를 구현해보려 한다.서버 실행먼저, 스프링 프레임워크는 웹 서버를 개발하기 위한 여러 가지 서비스를 .. 오류가 발생했을 때 Jwt 검증 필터로 계속해서 들어오는 건에 대하여.. 새로운 팀 프로젝트에 합류해서 코드를 작성하며 진행을 하고 있었다. 그런데, swagger로 엔드포인트를 테스트 하던 도중, 오류가 발생했는데 내가 원하는 response가 아니라 CORS 에러 같은 알 수 없는 오류가 발생하는 것을 확인하였다. 해당 코드는 단순히 유저의 내용을 변경하는 코드인데, 예외 테스트를 할 때 일부러 Json이 파싱되지 않게 넣었다. 당연히 예상 결과는 400 Bad Request가 발생해야 한다고 생각했는데 위처럼 아예 실패라는 결과를 얻게 되었다.. 이유가 뭔지 궁금해서 스프링의 로그를 확인해보니위 사진과 같은 형태로 에러 발생 후에도 계속해서 JWT 검증 필터에 접근하는 현상을 확인할 수 있었다. ExceptionHandler을 사용해서 처리하면 되는 부분 아닌가?사실 이.. [Back-End] 스프링 프로젝트에 Jwt토큰 적용해보기!(1) - 설정 적용 Intro 프로젝트에 세션 인증 방식을 적용할 지, 토큰 인증 방식을 적용할지 여부에 대해 고민을 해보다가, 최종적으로는 토큰 인증 방식을 진행해보기로 했다. 사실 제대로 된 토큰 인증 방식을 적용해보는 것이 처음이기 때문에 내가 옳은 방법인지 아닌지에 대해서는 정확히 판단할 수 없지만, 내가 생각한 의식의 흐름과 진행과정을 적어보고자 한다. 인증 / 인가를 판별하는 위치는 어디가 적당할까? Jwt토큰을 사용하는 것은 결국에는 사용자의 인증 및 인가를 관리하기 위함이다. 그렇다면 스프링에서 인증 인가를 어느 부분에서 진행해야 할까? 생각해볼 수 있는 부분은 3가지이다. 컨트롤러 진입 이전 컨트롤러에 진입하고 서비스 로직에 들어가기 이전 서비스 로직 부분 결국 사용자를 식별하는 것은, 서비스를 이용하기 위.. [Back-End] 인증/인가와 쿠키/세션/토큰(JWT) Intro 프로젝트를 진행하며 로그인 부분이 제일 쉬울거라 생각했는데, 가장 많은 시간이 걸리고 어렵고 아직도 완벽히 이해를 못한 부분이 로그인 처리 과정이다. 단순 유저 입장에서 보면, "그냥 Oauth로 로그인을 하거나, 아이디/PW 쳐서 로그인하고 서비스 이용하면 되는데 뭐가어렵지?" 라고 생각할 수 있다. 하지만, 생각해보자. 네이버 메인페이지에서 로그인을 했다. 그리고 네이버 메일로 들어가서 내 메일을 확인한다. 이상한 점이 없다고 생각할 수 있지만. "naver.com" 과 "mail.naver.com" 은 다른 주소이기 때문에 "mail.naver.com에서 로그인을 다시 하지 않고 어떻게 내 정보를 가지고 왔지?" 라고 생각이 들 수 있습니다. 그 부분은, 네이버 서버에서 알아서 처리를 하.. [Spring] Spring Security를 이용한 우당탕탕 인증/인가 개발기(1) - 회원가입(일반/Oauth2.0) Intro 원래 계획했던 일반(Id + Password) + Oauth 회원가입/로그인 로직과 이를 이용한 Jwt Token 활용에 대해서 1차적으로 완성을 하였다. Spring Security를 이용해서 진행을 함에 있어서, 내가 생각했던 것에 비해 복잡하게 구성되어 있었던 것 같고, 이런 뻘짓, 저런 뻘짓 등을 해가며 구현하였다. 또한, 아직 프론트와의 연결을 진행하지 못했기 때문에 얼른 연결해서 테스트를 하고 디버깅을 빠르게 해야할 것 같다. 대략 1달이라는 시간을 소비하였는데, 물론 모든 시간을 코딩에만 집중하지 못하고 연말이어서 이런 일, 저런 일 등 내 시간을 빼앗는 일들도 많았다. 지금부터 할 포스팅에서는 내가 공부하며 구현했던 부분들을 단계적으로 정리해보고자 한다. 일반 회원가입/로그인에 .. [Spring] Oauth2.0과 Spring Security 작동원리(+ 42Seoul Api를 이용한 Oauth2.0 로그인 구현) Intro 프로젝트를 진행하며 oauth2.0 로그인 기능과 일반회원 기능을 같이 구현하고자 하였다. 내 목표는, 42Seoul의 api를 이용해서 oauth2.0을 구현하기 위한 것이다. 이번 포스팅에서는 oauth2.0에 대한 이야기 Spring 프레임워크에서 Oauth를 편하게 사용할 수 있게 해주는 Spring Security 기능 들에 대해서 적어보고자 한다. Oauth2.0(Open Authorization) 요즘 oauth를 이용한 로그인 기능이 없는 곳이 없다. 네이버, 카카오, 구글 등 로그인을 할 때에 이전처럼 아이디(혹은 이메일)와 비밀번호를 전달받아 로그인할 수도 있지만, 카카오 계정으로 로그인 버튼 등이 있는 것을 볼 수 있다. 저 아래쪽의 티스토리계정 로그인을 누른다면, 기존 우.. [AWS] AWS, EC2, S3란 무엇일까? Intro 우연히 뜻이 맞는 프론트 유저분을 만나서 둘이서 간단한 프로젝트를 진행하고자 하였다. 비록 처음이지만 단순 프로그램 개발뿐만 아닌 배포까지 해보는 것을 목표로 하기로 하였다. 자료를 조사해보니 AWS라는 클라우드 컴퓨팅 시스템을 이용하여 주로 배포를 한다고 하였다. 따라서 이번에는 AWS의 개념과 AWS에 있는 EC2, S3 등이 무엇인지 알아보려고 한다. AWS AWS란 Amazon Web Service의 약자로, 아마존닷컴의 클라우드 컴퓨팅 시스템을 의미한다. 클라우드 컴퓨팅 시스템이란, 클라우드를 통해서 서버, 스토리지, DB 등 유저에게 필요한 IT 자원을 제공하는 것이다. 즉, 내 컴퓨터가 아닌 아마존에서 제공하는 환경을 돈을 지불하고 사용할 수 있는 것이다. 별도의 장비를 구입하고 .. 이전 1 2 다음