1. 개요곽두철 프로젝트를 진행하면서 수강신청을 하는 상황에서 아래와 같은 상황이 일어날 것이라고 예상하였다. 정원이 25명인데 24명이 신청되어있는 상황이라고 가정해 보자.이때 만약, 2명이 동시에 수강신청을 한다고 가정하면 정원이 26명이 될 것이다. 또 다른 상황으로는 3명이 신청되어 있는 상태인데 2명이 동시에 수강신청을 한다고 가정해 보자.그러면 4번 id로 2명이 신청될 것이다. 즉, 정원을 초과하여 신청이 되는 경우, 같은 id로 동시에 수강신청이 되는 경우이다. MySQL로도 Lock을 사용할 수 있지만, Lock의 경우 휘발성 데이터라고 판단하여 Redis를 사용하는 게 더 효율적이라고 생각하였기 때문에, Redis의 Lock을 사용해 동시성 처리를 해보려고 한다.2. Redis Lock..
처음 코드에는 컨트롤러에 JWT 유효성 검사하는 코드가 있었는데, 이는 매우 비효율적이며, 반복적인 코드를 계속 작성하게 한다.이때 인터셉터라는 개념을 처음 익혔다.인터셉터란?인터셉터(Interceptor)는 J2EE 표준 스펙인 필터(Filter)와 달리 스프링이 제공하는 기술로서, 디스패처 서블릿이 컨트롤러를 호출하기 전과 후에 요청과 응답을 참조하거나 가공할 수 있는 기능을 제공한다. 즉, 웹 컨테이너에서 동작하는 필터와 달리 인터셉터는 스프링 콘텍스트에서 동작을 하는 것이다.디스패처 서블릿은 핸들러 매핑을 통해 적절한 컨트롤러를 찾도록 요청하는데, 그 결과로 실행 체인(HandlerExecutionChain)을 돌려준다. 그래서 이 실행 체인은 1개 이상의 인터셉터가 등록되어 있다면, 순차적으로 ..
지난번엔 곽두철 프로젝트에 카카오 로그인을 도입했었다. 이번엔 JWT를 적용해 보겠다. 서버가 클라이언트 인증을 확인하는 방식은 크게 3가지가 있다. 쿠키 세션 토큰 이 중에서 토큰 방식을 사용해 볼 건데, 장단점이 무엇이 있는지 알아보겠다. 장점 토큰 인증 방식은 클라이언트가 서버에 접속하면 서버에서 인증을 위한 토큰을 부여하는 방식이다. 이 토큰은 유일하며, 클라이언트는 요청시 헤더나 쿠키에 심어서 서버에 보낸다. 서버는 받은 토큰을 유효한지 확인한다. 이 방법은 토큰 자체에 데이터를 저장하고 있어 DB를 확인하지 않아도 된다. 단점 쿠키 / 세션과 다르게 토큰 자체의 데이터 길이가 길어서, 인증 요청이 많아질수록 네트워크 부하가 심해질 수 있다. Payload 자체는 조회가 가능하기 때문에 유저의 ..
제가 진행하고 있는 곽두철 프로젝트에 Oauth2.0을 사용하여 카카오 로그인을 적용해 보기로 결정했다.Oauth가 뭐야?Oauth가 없다고 가정을 해보자. 사용자는 자신의 카카오계정 정보를 제공하기에 부담이 있다.카카오도 자신들이 관리하는 카카오 계정 정보를 ..
리사이징을 하게 된 계기 뭉치 프로젝트 특성상, 사진과 동영상 업로드의 횟수가 많다. 이때, S3 프리티어의 용량이 넘칠 것을 우려하여 업로드 전에 미리 리사이징 작업을 수행하도록 결정했다. 흐름 Marvin 의존성 추가 implementation 'com.github.downgoon:marvin:1.5.5' implementation 'com.github.downgoon:MarvinPlugins:1.5.5' Marvin 라이브러리를 사용할 것이기 때문에, marvin과 MarvinPlugins 의존성을 추가할 것이다. 리사이징 메서드 fun resizer( fileName: String?, fileFormat: String, originalImage: MultipartFile, width: Int ):..
1. Spring Cloud Config란 무엇일까? 분산 시스템을 사용할 때 각각의 Microservice에서 사용될 정보들이 있을 것이다. 이것을 매번 확인하러 들어가는 건 번거로운 작업일 것이다. 이때, Spring Cloud Config를 사용하는걸 고려해 볼 수 있다. Spring Cloud Config란 분산 시스템에서 각각의 설정 정보들을 제공해 주는 시스템이다. 즉, 각각의 Microservice에 설정 정보들을 사진 속 Spring Cloud Config Server에서 관리하는 것이다! 이제부터 Spring Cloud Config Server ⇒ Spring Cloud Config Spring Boot Microservice ⇒ Spring Cloud Config Client라고 부를 ..
웹 사이트를 이용하다 보면 Google, Facebook, Naver, Kakao 등등 외부 플랫폼을 사용하여 간단하게 회원가입 및 로그인을 할 수 있는 경우가 있다. 클릭 한 번으로 간편하게 로그인할 수 있을 뿐만 아니라, 소셜 플랫폼에서 지원하는 다양한 기능들을 사용할 수 있는 장점이 있습니다. 이때 사용되는 프로토콜이 OAuth 2.0 입니다. OAuth 2.0(Open Authorization 2.0, OAuth2)은 인증을 위한 개방형 표준 프로토콜입니다. 1. OAuth 2.0 참여자 Resource Server : 제어하고자 하는 자원을 갖고 있는 서버 ex) Facebook, Google + Authorization Server : 인증과 관련된 처리를 전담하는 서버 Resource Own..
현대의 웹 애플리케이션에서 관계형 데이터베이스는 빠질 수 없는 요소입니다.하지만 관계형 데이터베이스가 계속해서 웹 서비스의 중심이 되면서 모든 코드는 SQL중심이 되어버려현업 프로젝트 대부분이 코드보단 SQL로 가득하게 되었습니다.(우스갯소리로 개발자 == SQL매퍼라고도 한다.) 관계형 데이터베이스는 어떻게 데이터를 저장할지에 초점이 맞춰진 기술이고, 객체지향 프로그래밍 언어는 메시지를 기반으로 기능과 속성을 한 곳에서 관리하는 기술인데 이로 인한 불일치에서 오는 패러다임을 해결하기 위해서 JPA가 만들어졌습니다 JPA는 자바 ORM(Object Relational Mapping) 기술에 대한 API 표준 명세를 뜻합니다. ORM(Object-Relational Mapping)이란 자바의 객체와 관계형..
웹이라는 것은 다 HTTP를 기반으로 통제를 합니다. 예를 들어 웹 브라우저에서 URL을 치면 인터넷을 통해 서버에 접근하고, 서버에선 HTML을 만들어 웹 브라우저에게 내려주는데, 여기서 다 HTTP가 사용됩니다. 흔히 말하는 서버에는 2가지로 나뉘어지는데, 바로 웹 서버와 웹 애플리케이션 서버로 나뉩니다. 크게 웹 서버는 정적 콘텐츠 담당, 웹 애플리케이션 서버는 동적 콘텐츠를 담당합니다. 웹 서버 (Web Server) 정적 콘텐츠 제공 ex) HTML, CSS, JS, 이미지, 영상 아파치 HTTP 서버 NGINX. 웹 애플리케이션 서버 (Web Application Server) 흔히 줄여서 WAS라고 부름 동적 요청을 받아 수행 (정적 리소스 제공 가능) ex) 동적 HTML, HTTP API..