OAuth 로그인이란?보통 우리가 직접 로그인을 구축할 때는 사용자에게 아이디 또는 이메일 & 비밀번호를 입력하게 만든다. 그런데 사용자가 쓰는 서비스가 한두 개도 아닌데, 그 서비스마다 새로운 아이디 또는 이메일과 비밀번호를 입력해야 하면 불편할 것이다. 이때 제3의 서비스에게 이러한 인증 과정을 맡길 수도 있다. 즉, 사람들이 이미 많이 쓰고 있는 서비스인 구글/카카오/네이버로 로그인을 하면 우리 서비스에서도 로그인이 된 것처럼 처리하는 것이다. 결국 로그인 및 회원가입을 하는 이유가 사용자 고유의 정보로 사용자 계정을 식별하기 위한 것이므로, 이미 회원가입이 되어 있는 다른 서비스에서 대신 로그인하고 그 서비스에서 사용자 고유 정보(이메일, 닉네임 등)을 받아오는 것이다.OAuth는 바로 이러한 인..
🗄️Backend/SpringBoot
Refresh Token을 왜 구현해야 하는가?우리는 일반적으로 한번 로그인한 사이트에서는 어느 정도 계속 로그인이 유지되길 바란다. 특히 자주 방문하는 웹사이트를 매번 로그인해야 한다면 정말 번거로운 일이 된다. 하지만 이를 위해서 Access Token의 유효기간을 매우 길게 설정한다면, 악의적인 공격자가 이 Access Token을 탈취해서 사용할 수 있는 위험성이 커진다.이를 해결하기 위해서 Access Token 자체의 유효기간은 짧게 설정(예: 한 시간)하되, Access Token이 expired될 경우 로그인 없이 새롭게 발급받을 수 있게 도와주는 토큰이 Refresh Token이다. Refresh Token은 더 긴 유효기간을 가지고 있으며, (예: 일주일) 이 유효기간 동안 Expire..
Presigned URL이란?일반적으로 사진과 같은 미디어는 S3 버킷으로 업로드되고, 해당 사진의 엔드포인트(url)만 RDB에 저장된다. 이때 사진 파일은 굉장히 많은 트래픽을 소모하므로, 프론트엔드→백엔드→ S3로 전달하는 것보다 프론트엔드→S3로 전달하는 것이 더 효율적이다. 또한 이미지를 조회할 때도 S3→백엔드→프론트엔드보다는 S3→프론트엔드로 전달하는 게 서버의 과부화를 막을 수 있다.여기서 문제는 AWS 리소스인 S3에 접근하기 위해서는 엑세스 키처럼 권한이 필요한데, 이 키를 프론트엔드가 직접 사용할 수는 없다는 것이다. 프론트엔드는 사용자가 접근 가능한 영역이므로, 프론트엔드에 키를 줄 경우 유출 문제가 생길 수 있다.이 문제를 해결하기 위해서 사용하는 것이 바로 presigned ur..
도입 계기빠르게 개발을 진행하게 되면서 클라이언트 개발자에게서 500에러 났으니 확인 부탁한다는 이야기를 듣는 경우가 많아졌는데, 이때마다 docker logs로 콘솔 에러 로그를 확인하는게 너무 번거로웠다. 기존에 이미 ExceptionHandler를 만들어서 일반적인 500 Internal Server Error일 경우 에러 메세지를 보내주긴 했는데, 나는 이렇게 일괄적인 메세지 말고도 진짜 콘솔의 에러 로그를 바로 보고 싶었다.그런데 문제는 이렇게 ErrorResponse로 바로 콘솔 에러를 클라이언트에게 보내줄 경우, 클라이언트 개발자 뿐만 아니라 Discord Webhook 구성먼저 Webhook을 만들어야 한다. 우리 팀은 디스코드를 팀 소통 툴로 쓰고 있기 때문에, 디스코드 팀 워크스페이스에..
기본 키 이름을 바꾸고 싶을 때기본 키의 경우 보통 @Column(name = "chat_id") 등으로 Springboot에서 맵핑 가능한데, 문제는 이 코드는 이미 DB에 존재하는 칼럼이랑 맵핑해주는 코드이다. 그래서 이미 존재하는 기본키 칼럼명을 바꾸어주는 코드가 아니다(ddl-auto: create로 하지 않은 이상). DB에서 수동으로 바꾸어주고, 그 다음에 맵핑을 해주어야 한다.이때 대부분 @GeneratedValue(strategy = GenerationType.IDENTITY) 코드를 통해서 자동 증가를 기본키에 설정해줬을 것이므로, 이 설정을 그대로 유지하기 위해서는 SQL문 뒤에 AUTO_INCREMENT를 붙여야 한다.ALTER TABLE [테이블명] CHANGE COLUMN [원래칼..