전체 글

-
개인 프로젝트로 SNS 제작을 진행하고 있다. 타임라인의 글을 가져올 때 매번 방대한 양의 글을 DB에서 조회해야하는 지점이 분명 생긴다. 예를 들면, 어떤 사람이 팔로우 하는 사람이 10000명이 넘어간다고 해보자, 각 포스트들이 10건이 넘는다고 해볼 때 10만개의 데이터를 정렬해서 리턴해줘야하는 과정을 매번 거쳐야한다. 만약 팔로우 하는 사람이 더 늘어가고, 각각 포스트의 개수가 더 많아진다면..? 이 과정에서 성능을 더 좋게 만들어볼 수 없을까 고민했다. 캐싱처리타임라인 글 목록을 캐싱처리하는 방법을 알게되었다. 이렇게 되면, 매번 쿼리로 조회를 할 필요가 없고, 최초 1회만 조회하고 인메모리 DB에 저장하는 방식으로 타임라인 조회를 구현해낼 수 있다. 인메모리 DB의 장점과 단점인메모리 DB에..
In memory DB 캐싱처리개인 프로젝트로 SNS 제작을 진행하고 있다. 타임라인의 글을 가져올 때 매번 방대한 양의 글을 DB에서 조회해야하는 지점이 분명 생긴다. 예를 들면, 어떤 사람이 팔로우 하는 사람이 10000명이 넘어간다고 해보자, 각 포스트들이 10건이 넘는다고 해볼 때 10만개의 데이터를 정렬해서 리턴해줘야하는 과정을 매번 거쳐야한다. 만약 팔로우 하는 사람이 더 늘어가고, 각각 포스트의 개수가 더 많아진다면..? 이 과정에서 성능을 더 좋게 만들어볼 수 없을까 고민했다. 캐싱처리타임라인 글 목록을 캐싱처리하는 방법을 알게되었다. 이렇게 되면, 매번 쿼리로 조회를 할 필요가 없고, 최초 1회만 조회하고 인메모리 DB에 저장하는 방식으로 타임라인 조회를 구현해낼 수 있다. 인메모리 DB의 장점과 단점인메모리 DB에..
2025.03.23 -
페이지 처리를 하는 데에는 두 가지 방식이 있다. offset방식과 cursor방식이다. 1. OFFSET(오프셋) 방식OFFSET 방식에서 가장 중요한 점은 뒷부분 데이터를 조회할 수록 느려진다는 점이다. 오프셋 쿼리는 아래와 같다.SELECT * FROM [TABLE] [조건절] LIMIT [페이지 당 글 수] OFFSET [오프셋] 이때, 항상 모두 조회를 하고 오프셋에 따라 결과를 잘라 데이터를 보내는 방식으로 작동한다. 데이터가 달라질 수 있기 때문에 매번 처음부터 조회를 하는 것이다. 때문에, 오프셋 방식은 뒷부분 데이터를 조회할 수록 성능이 아주 느려진다. 또 다른 단점은 사용자 관점에서 데이터의 누락과 중복이 종종 일어난다는 점이다. 예를 들어 테이블이 아래와 같다고 하고, 첫번째 페이지에..
pagination - offset vs cursor페이지 처리를 하는 데에는 두 가지 방식이 있다. offset방식과 cursor방식이다. 1. OFFSET(오프셋) 방식OFFSET 방식에서 가장 중요한 점은 뒷부분 데이터를 조회할 수록 느려진다는 점이다. 오프셋 쿼리는 아래와 같다.SELECT * FROM [TABLE] [조건절] LIMIT [페이지 당 글 수] OFFSET [오프셋] 이때, 항상 모두 조회를 하고 오프셋에 따라 결과를 잘라 데이터를 보내는 방식으로 작동한다. 데이터가 달라질 수 있기 때문에 매번 처음부터 조회를 하는 것이다. 때문에, 오프셋 방식은 뒷부분 데이터를 조회할 수록 성능이 아주 느려진다. 또 다른 단점은 사용자 관점에서 데이터의 누락과 중복이 종종 일어난다는 점이다. 예를 들어 테이블이 아래와 같다고 하고, 첫번째 페이지에..
2025.02.15 -
1. 버전Spring Boot 3.x.x, Spring Security 6.x.x 이상부터 이전과 구현하는 방식이 많이 다르니, 버전을 잘 확인하도록 하자. Spring Boot : 3.0.4Spring Security : 6.4.x 2. Security Config@Configuration@EnableWebSecuritypublic class AuthenticationConfig{ @Bean BCryptPasswordEncoder bCryptPasswordEncoder(){ return new BCryptPasswordEncoder(); } @Bean public SecurityFilterChain securityFilterChain(HttpSecurity ht..
Spring Security(3) - 버전, Security Config1. 버전Spring Boot 3.x.x, Spring Security 6.x.x 이상부터 이전과 구현하는 방식이 많이 다르니, 버전을 잘 확인하도록 하자. Spring Boot : 3.0.4Spring Security : 6.4.x 2. Security Config@Configuration@EnableWebSecuritypublic class AuthenticationConfig{ @Bean BCryptPasswordEncoder bCryptPasswordEncoder(){ return new BCryptPasswordEncoder(); } @Bean public SecurityFilterChain securityFilterChain(HttpSecurity ht..
2025.02.14 -
1. Spring Security 개요Spring Security는 스프링 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크이다. 이 문서에서는 중요하게 다루지는 않지만, 그래도 알아두면 좋으니 인증과 인가의 차이는 아래와 같다.인증(Authenticate) : 유저가 누구인지 확인하는 절차인가(Authorization) : 인증된 사용자에 대해 권한을 확인하고 허락하는 것 2. Spring Security 동작 과정공식 페이지에서 제공하는 이미지이다. 스프링 시큐리티는 서블릿의 필터를 기반으로 동작한다. WAS 위에 있는 필터들 사이에 DelegatingFilterProxy가 요청을 가로채 FilterChainProxy가 SecurityFilterChain으로 요청..
Spring Security(2) - Spring Security 동작 원리1. Spring Security 개요Spring Security는 스프링 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크이다. 이 문서에서는 중요하게 다루지는 않지만, 그래도 알아두면 좋으니 인증과 인가의 차이는 아래와 같다.인증(Authenticate) : 유저가 누구인지 확인하는 절차인가(Authorization) : 인증된 사용자에 대해 권한을 확인하고 허락하는 것 2. Spring Security 동작 과정공식 페이지에서 제공하는 이미지이다. 스프링 시큐리티는 서블릿의 필터를 기반으로 동작한다. WAS 위에 있는 필터들 사이에 DelegatingFilterProxy가 요청을 가로채 FilterChainProxy가 SecurityFilterChain으로 요청..
2025.02.14 -
1. HTTP 요청에서의 인증HTTP는 비연결성 및 무상태성의 특징을 가지고 있다. 때문에 한번 통신한 이후 다시 통신할 때 서버는 이전 통신에 대한 기억이 없다. 이러한 특징으로 인해 사용자를 식별할 수가 없게 되었으며 이 때문에 인증을 사용하게 되었다*인증 vs 인가 인증 방법에는 대표적으로 두 가지가 있다. JWT 방식과 Session 방식이다. 이 두 방식을 구분하는 가장 큰 차이는 인증 정보를 어디에 저장하느냐 이다. 세션은 서버에 저장된다. 정확히는 세션을 저장하는 데이터베이스 서버에 저장된다. JWT는 클라이언트에서 토큰을 가지고 있다가 서버 요청시 헤더에 넣어 보낸다. 2. 두 가지 인증 방법 (1) SessionSession 방식 동작 과정 1. 클라이언트가 로그인 시2. 서버에서 인..
Spring Security(1) - JWT vs Session1. HTTP 요청에서의 인증HTTP는 비연결성 및 무상태성의 특징을 가지고 있다. 때문에 한번 통신한 이후 다시 통신할 때 서버는 이전 통신에 대한 기억이 없다. 이러한 특징으로 인해 사용자를 식별할 수가 없게 되었으며 이 때문에 인증을 사용하게 되었다*인증 vs 인가 인증 방법에는 대표적으로 두 가지가 있다. JWT 방식과 Session 방식이다. 이 두 방식을 구분하는 가장 큰 차이는 인증 정보를 어디에 저장하느냐 이다. 세션은 서버에 저장된다. 정확히는 세션을 저장하는 데이터베이스 서버에 저장된다. JWT는 클라이언트에서 토큰을 가지고 있다가 서버 요청시 헤더에 넣어 보낸다. 2. 두 가지 인증 방법 (1) SessionSession 방식 동작 과정 1. 클라이언트가 로그인 시2. 서버에서 인..
2025.02.10 -
SNS 미니 프로젝트를 들어가기 앞서 SNS의 특징에 대해 살펴보았다. SNS의 핵심적인 기능은 [뉴스피드]이다. [뉴스피드] 기능에서 가장 중요하게 살려야 하는 특징으로는 실시간성인데, CAP 이론은 프로그램 설계 단계에서 SNS의 실시간성과 같이 프로그램의 특징에 따라 설계 모델을 결정하는 데에 기반이 되는 이론이다. CAP 이론 CAP는 일관성(Consistency), 가용성(Availability), 분할 내성(Partition tolerance)의 약자로, 이 세 가지 속성 중에서 동시에 모두를 만족시킬 수 없다는 이론이다. 일관성(Consistency) : 데이터가 누가 보든지 같은 데이터가 보여야한다. 당연하게 생각될 지 모르겠지만, 0.000001의 차이가 있더라도 같은 데이터가 보여야한다..
CAP 이론SNS 미니 프로젝트를 들어가기 앞서 SNS의 특징에 대해 살펴보았다. SNS의 핵심적인 기능은 [뉴스피드]이다. [뉴스피드] 기능에서 가장 중요하게 살려야 하는 특징으로는 실시간성인데, CAP 이론은 프로그램 설계 단계에서 SNS의 실시간성과 같이 프로그램의 특징에 따라 설계 모델을 결정하는 데에 기반이 되는 이론이다. CAP 이론 CAP는 일관성(Consistency), 가용성(Availability), 분할 내성(Partition tolerance)의 약자로, 이 세 가지 속성 중에서 동시에 모두를 만족시킬 수 없다는 이론이다. 일관성(Consistency) : 데이터가 누가 보든지 같은 데이터가 보여야한다. 당연하게 생각될 지 모르겠지만, 0.000001의 차이가 있더라도 같은 데이터가 보여야한다..
2025.02.02 -
기본적으로LIKE 와 %를 이용한다. 예제 1. 회원 중에서 박씨 성을 제외한 회원을 조회하시오not like '박%' 예제 2. 회원 중에서 이름에 '도'가 들어간 회원을 조회하시오like '%도%' 복잡한 패턴 검색은 정규식을 이용한다 예제 3. 혹시 전화번호가 포함되어있는 경우가 있는지 조회like '%-%-%'이 경우는 찾긴 찾는데 한글이 포함될 수있다 ex) 가-나-다전화번호는 숫자형태만 포함되어있다..! [정규식]대괄호 : 한 글자를 표현 ex) [123]1,2,3 중 하나대괄호 안에서 - : 범위 나타내기 ex) [1-3] 위와 동일한 표현역슬래시d : 0~9를 의미한다. /d/d/d/d이렇게 할래?중괄호 : 반복되는 수 지정 ex)/d{4} 위와 같은 표현, /d{3,4} 3자리 또는 4자..
[ORACLE] 문자열 패턴 검색기본적으로LIKE 와 %를 이용한다. 예제 1. 회원 중에서 박씨 성을 제외한 회원을 조회하시오not like '박%' 예제 2. 회원 중에서 이름에 '도'가 들어간 회원을 조회하시오like '%도%' 복잡한 패턴 검색은 정규식을 이용한다 예제 3. 혹시 전화번호가 포함되어있는 경우가 있는지 조회like '%-%-%'이 경우는 찾긴 찾는데 한글이 포함될 수있다 ex) 가-나-다전화번호는 숫자형태만 포함되어있다..! [정규식]대괄호 : 한 글자를 표현 ex) [123]1,2,3 중 하나대괄호 안에서 - : 범위 나타내기 ex) [1-3] 위와 동일한 표현역슬래시d : 0~9를 의미한다. /d/d/d/d이렇게 할래?중괄호 : 반복되는 수 지정 ex)/d{4} 위와 같은 표현, /d{3,4} 3자리 또는 4자..
2024.05.08 -
[작성순서]select -> from -> where -> group by -> having -> order by [작동 순서]from -> where -> group by -> having -> select -> order by따라서 select 에서 만든 별칭은 앞단계의 키워드에서는 사용 못한다
[ORACLE] SQL 작성 순서와 작동 순서[작성순서]select -> from -> where -> group by -> having -> order by [작동 순서]from -> where -> group by -> having -> select -> order by따라서 select 에서 만든 별칭은 앞단계의 키워드에서는 사용 못한다
2024.05.08