분류 전체보기(67)
-
Web 서비스를 운영할 때, 알맞은 아키텍처는 무엇일까?
세상엔, 다양한 종류의 웹 서비스가 있고, 각 웹 서비스에는 자기만의 구조가 있을 수도 있고, 보편적인 구조를 사용할 수도 있다. 아니면, 그냥 작동하는 것에 의의를 두고, 만들어진 웹 서비스도 있을 것이다.(물론 개인적으로 이 구조는 피하고 싶다.) 이번 문서에서는 가장 보편적일 수 있는 구조에 대해 이야기해 볼 예정이다. Web 서비스 아키텍처 REST API 웹 API 설계를 위한 표준(강제되는 구조는 아니다.)으로 Java, Python, Go 등 다양한 언어로 참고할 수 있는 레퍼런스가 많다.(즉, 구현하기 쉽다.) Rest API는 서비스 개발을 위해선 가장 일반적인 접근 방법이 될 수 있다. HTTP 프로토콜 기반만 따르면 응용이 용이하다.(주로 JSON, 개인적으론 선호하진 않지만, 정말 ..
2021.11.28 -
프로젝트 인증로직 Description
인증 방식 Token Based Authentication 가장 보편적인 방식은 세션을 활용하여, 세션 ID를 쿠키에 저장하고, 쿠키의 세션 ID를 통해, 세션 서버에 인증 정보를 조회하여, 사용자의 요청을 검증하는 방식이라 할 수 있다. 하지만, 모바일 플랫폼(android 혹은 ios 기반 애플리케이션)의 비중이 증가하고 있는 상황에서, 여러 플랫폼을 받아들일 수 있는 api가 요구되는 경우가 많을거라 판단하여, 헤더에 토큰 키를 포함하여, 토큰 키를 통해 세션 서버에 인증정보를 조회하는 방식을 채택하였다. JWT와 다른점은? JWT의 경우, `Bearer *` 방식으로, 인증에 필요한 정보를 `Claim`에 포함하여, 인코딩 알고리즘을 적용하여 `sign` 하는 방식으로, 헤더에 포함하는 키 자체에..
2021.11.28 -
작업 일지#7 서비스에 Security를 적용해보자 -3- 나의 로직에 시큐리티를 얹어보자
개요 지금까지는 인증 로직에 보안이 왜 필요한지, 그리고 인증의 종류와 로직의 흐름과 스프링 시큐리티의 구조를 간략하게 알아보았다. 이번에는 내가 설계했던 로그인, 회원가입, 리소스 접근 통제 관련 로직의 흐름을 스프링 시큐리티로 적용해보도록 하겠다. INDEX 로그인 회원가입 인증 리소스 접근 로그인 저번 작업일지에서 Security가 필요한 서비스의 로직의 플로우 차트를 간단하게 정리한 적이 있었다. 그 중에서 로그인과 관련된 플로우 차트는 다음과 같았다. 로직의 흐름을 간략하게 설명해보면, 최초 로그인시 아이디/비밀번호를 입력 받으면, 해당 회원 정보가 있는지, 조회하고, 없으면 예외를 던지고, 있으면, 입력한 비밀번호가 저장된 회원의 비밀번호가 일치한지 확인한다. 비밀번호 검증이 이상없이 완료되면..
2021.11.26 -
작업 일지#6 서비스에 Security를 적용해보자 -2- 스프링 시큐리티의 구조 이해하기
개요 저번 게시글(https://postwithmemory.tistory.com/8)에서는%EC%97%90%EC%84%9C%EB%8A%94) 인증 방식에 대해 간단히 정리하고, 시큐리티를 적용한 이유에 대해서 간단히 살펴 보았다. 그리고, 인증과 인가와 관련된 서비스 로직의 플로우 차트를 간단하게 그려보았다. 이번 게시글에서는 Spring Security의 구조를 간단히 짚어보고, 프레임워크에 플로우 차트를 적용하는 과정을 정리해볼까 한다. INDEX 스프링 시큐리티의 구조 Filters DelegatingFilterProxy FilterChainProxy SecurityFilterChain Security Filters Handling Security Exception 인증 스프링 시큐리티의 구조 Fi..
2021.11.25 -
Redis #2 : Redis의 주요 구성요소
Index Redis Client Serializer CrudRepository RedisTemplate 1. Redis Client Redis와 Java 애플리케이션의 connection을 형성해주는 conector가 필요하다. 그 connector 역할을 해주는 Redis Client는 크게 두가지가 있다. Jedis Lettuce 1.1. Jedis Jedis는 예전에는 Java의 표준 Redis Client로 사용되었다. 하지만, thread-safe를 보장하지 않기 때문에, 멀티스레드 환경에서 리소스를 공유하는 기능을 사용하는데 큰 제약이 따르고, TPS 성능이 Lettuce에 비해 저조하고, CPU의 오버헤드가 높다. 하지만, Lettuce에 비해 좀 더 쉽게 사용할 수 있다. 그래서, 보통 ..
2021.11.25 -
Redis #1 : Redis의 정의와 NoSQL의 종류
이번 챕터에서는 레디스에 대한 정의를 간략하게 하고, Redis와 같은 NoSQL의 특징에 대해 살펴보겠다. Index Redis란? Redis Database란? Redis Database의 작동원리 Redis의 이점 NoSQL DB란? NoSQL DB의 종류는? NoSQL Database의 장점은? NoSQL Database의 단점은? 애플리케이션과 Redis DB의 커넥션의 획득하는 방법1. Redis란?레디스는 오픈소스 기반(BSD)의 인메모리 기반 데이터베이스이며, 높은 성능을 제공한다. 레디스를 통해 개발자는 여러가지 형태의 데이터를 다룰 수 있다. 대표적으로 문자열, 해시, 리스트, set(+ sorted), 비트맵, 하이퍼로그, geospatial index와 스트림이 있다. 레디스는 다양..
2021.11.25