WEB

·WEB
저희 곽두철 프로젝트에는 카카오 소셜 로그인만을 이용하기로 결정했었습니다.하지만 추후에 네이버, 구글 등등 다양한 플랫폼이 추가될 것을 고려해 추상화를 하도록 결정이 났습니다.이번 포스트에서는 카카오를 중심으로 글을 써보겠습니다.1. 왜 전략 패턴을 사용할까?소셜 로그인을 구현할 때, 카카오, 네이버, 구글 등 여러 제공자의 로그인 방식이 각각 다릅니다. 각기 다른 로그인 로직을 하나의 서비스에 담아두면 코드가 복잡해지고 유지보수가 어렵습니다. 전략 패턴을 사용하면 각 소셜 로그인 로직을 별도의 클래스로 분리하여 코드의 확장성과 유지보수성을 높일 수 있습니다.1-1. 전략 패턴의 장점?전략 패턴을 사용하면 런타임에 다른 소셜 로그인 로직으로 쉽게 교체할 수 있어 유연한 구조를 가질 수 있습니다.예를 들어..
·WEB
개발자로서 엔티티 클래스를 생성할 때, 저는 습관적으로 @NoArgsConstructor 어노테이션을 사용해 왔습니다.하지만 왜 사용하는지, 그리고 액세스 레벨을 왜 특정 값으로 설정하는지 명확히 알지 못한 채 사용해 왔습니다.이번 글에서는 @NoArgsConstructor의 역할과 액세스 레벨을 PROTECTED로 설정하는 이유를 정리해 보겠습니다. @NoArgsConstructor란?@NoArgsConstructor 어노테이션은 Lombok 라이브러리에서 제공하는 기능으로, 기본 생성자를 자동으로 생성해 주는 역할을 합니다. @NoArgsConstructor의 액세스 레벨@NoArgsConstructor 어노테이션에는 다양한 액세스 레벨을 설정할 수 있습니다. 이들은 다음과 같습니다:PUBLICPRO..
·WEB
지금까지 저는 Redis는 Single Thread라고 알고 있었습니다.그리고 Single Thread라 Atomic 해 동시성을 보장할 수 있다고 생각하였습니다. 하지만 여러 글들을 보니 Redis는 Single Thread로만 이루어진 게 아니라고 합니다왜냐하면 Redis 6.0부터 추가된 ThreadedIO가 추가되면서 사용자 명령이 Multi Thread로 동작하기 때문입니다.  ThreadedIO가 적용되는 부분은 다음과 같습니다.클라이언트가 전송한 명령을 네트워크로 읽어서 파싱 하는 부분명령이 처리된 결과 메시지를 클라이언트에게 네트워크로 전달하는 부분 이제, Redis 내부 사진을 보며 하나하나씩 이해해 보겠습니다.  먼저 클라이언트의 Socket이랑 Redis의 Socket이랑 연결을 한다..
·WEB
1. 개요곽두철 프로젝트를 진행하면서 수강신청을 하는 상황에서 아래와 같은 상황이 일어날 것이라고 예상하였다. 정원이 25명인데 24명이 신청되어있는 상황이라고 가정해 보자.이때 만약, 2명이 동시에 수강신청을 한다고 가정하면 정원이 26명이 될 것이다. 또 다른 상황으로는 3명이 신청되어 있는 상태인데 2명이 동시에 수강신청을 한다고 가정해 보자.그러면 4번 id로 2명이 신청될 것이다. 즉, 정원을 초과하여 신청이 되는 경우, 같은 id로 동시에 수강신청이 되는 경우이다. MySQL로도 Lock을 사용할 수 있지만, Lock의 경우 휘발성 데이터라고 판단하여 Redis를 사용하는 게 더 효율적이라고 생각하였기 때문에, Redis의 Lock을 사용해 동시성 처리를 해보려고 한다.2. Redis Lock..
·WEB
처음 코드에는 컨트롤러에 JWT 유효성 검사하는 코드가 있었는데, 이는 매우 비효율적이며, 반복적인 코드를 계속 작성하게 한다.이때 인터셉터라는 개념을 처음 익혔다.인터셉터란?인터셉터(Interceptor)는 J2EE 표준 스펙인 필터(Filter)와 달리 스프링이 제공하는 기술로서, 디스패처 서블릿이 컨트롤러를 호출하기 전과 후에 요청과 응답을 참조하거나 가공할 수 있는 기능을 제공한다. 즉, 웹 컨테이너에서 동작하는 필터와 달리 인터셉터는 스프링 콘텍스트에서 동작을 하는 것이다.디스패처 서블릿은 핸들러 매핑을 통해 적절한 컨트롤러를 찾도록 요청하는데, 그 결과로 실행 체인(HandlerExecutionChain)을 돌려준다. 그래서 이 실행 체인은 1개 이상의 인터셉터가 등록되어 있다면, 순차적으로 ..
·WEB
지난번엔 곽두철 프로젝트에 카카오 로그인을 도입했었다. 이번엔 JWT를 적용해 보겠다. 서버가 클라이언트 인증을 확인하는 방식은 크게 3가지가 있다. 쿠키 세션 토큰 이 중에서 토큰 방식을 사용해 볼 건데, 장단점이 무엇이 있는지 알아보겠다. 장점 토큰 인증 방식은 클라이언트가 서버에 접속하면 서버에서 인증을 위한 토큰을 부여하는 방식이다. 이 토큰은 유일하며, 클라이언트는 요청시 헤더나 쿠키에 심어서 서버에 보낸다. 서버는 받은 토큰을 유효한지 확인한다. 이 방법은 토큰 자체에 데이터를 저장하고 있어 DB를 확인하지 않아도 된다. 단점 쿠키 / 세션과 다르게 토큰 자체의 데이터 길이가 길어서, 인증 요청이 많아질수록 네트워크 부하가 심해질 수 있다. Payload 자체는 조회가 가능하기 때문에 유저의 ..
·WEB
제가 진행하고 있는 곽두철 프로젝트에 Oauth2.0을 사용하여 카카오 로그인을 적용해 보기로 결정했다.Oauth가 뭐야?Oauth가 없다고 가정을 해보자. 사용자는 자신의 카카오계정 정보를 제공하기에 부담이 있다.카카오도 자신들이 관리하는 카카오 계정 정보를 ..
·WEB
리사이징을 하게 된 계기 뭉치 프로젝트 특성상, 사진과 동영상 업로드의 횟수가 많다. 이때, 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 ):..
·WEB
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라고 부를 ..
·WEB
웹 사이트를 이용하다 보면 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..
유선준
'WEB' 카테고리의 글 목록 (2 Page)