본문 바로가기

전체 글

(127)
DB 실행 계획 분석 EXPLAIN - 1 데이터 베이스에서 실행 계획을 분석함으로써 효과적인 쿼리를 사용하는지 분석할 수 있다. 그 명령에 사용되는 것이 EXPLAIN 명령어이다. EXPLAIN 명령을 실행하면 실행 계획을 산출한다. 실행 계획을 나타내는 각 컬럼이 무슨 정보를 가지고 있는지 알아보자. 1. id 칼럼 실행계획에 대한 id 정보 같은 id를 가진다면 조인을 한다는 것. 2. select_type 칼럼 쿼리가 어떤 타입의 쿼리인지 표시되는 칼럼으로 다음 값을 가지고 있다. SIMPLE 서브쿼리나 유니온을 사용하지 않은 아주 단순한 쿼리 PRIMARY 유니온이나 서브쿼리가 포함된 쿼리에서 가장 바깥에 실행되는 쿼리 UNION 유니온 연산이 필요한 쿼리 B의 경우를 보면 알 수 있다. UNION RESULT 유니온의 결과를 담아두는 ..
[Spring security] Redis를 이용한 글로벌 세션 스토리지 시작글 Spring security는 Authentication 인증 객체를 세션에 보관하여 사용하는 것이 디폴트이다. 하지만 세션은 분산 컴퓨팅 환경에서 세션 또한 분산된다. 이점은 로그인 처리시에 로그인 상태를 확인하는 기능을 구현할 때 장애를 유발할 수 있다. 따라서 세션을 이용한 로그인 상태 처리 방식은 분산 환경에서 결함을 지니고 있다. 이를 해결하기 위한 방법은 in memory database를 이용하는 방법이다. 이런 DB 중에 하나가 Redis인데 이것을 이용하여 세션을 대체하는 방법을 적용해보자. +) 처음에는 SecurityContextRepository와 SecurityContext를 커스텀해서 사용해야하나? 생각했는데 다행히 더 좋은 효과적인 방법이 있었다. 이 방법은 HttpSe..
[Spring] UsernamePasswordAuthenticationFilter 를 통한 폼 로그인 하기 로그인 구현하기 UsernamePasswordAuthenticationFilter 는 폼 양식을 통한 로그인 처리를 시도할 때, 최소한의 개발로 로그인 처리를 쉽게 처리할 수 있게 도와준다. 폼 로그인을 구현하기 위해서 폼의 액션과 메서드 POST 방식 그리고 인풋 name이 username, password이어야 정상적으로 동작하기에 이를 주의하자. 구현을 위한 절차는 이렇다. 1. UserDetailsService 구현하기 요청한 로그인 유저이름을 통해서 db에 유저 정보를 조회하여 UserDetails 객체에 담아서 반환하도록 구현해야한다. 2. UserDetails 구현하기 UserDetails 인터페이스에 따른 역할에 맞게 구현해주면 된다. 메서드 이름을 보면 어떤 것을 구현할지 명확해서 이해하..
[프로그래머스] 고고학 최고의 발견 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제를 분할하는 방법은 문제 해결 방법의 절차를 쪼개는 방법과 문제의 범위를 쪼개는 방법이 있다는 것을 생각하게 해주는 문제였다. 여기에서는 문제의 범위를 쪼개서 생각하는 것이 중요한데 절차적으로 어떻게 해결하면 좋을지만 생각하니 문제 해결의 실마리를 놓치고 삽질을 하게된 원인인 것 같다고 생각한다. 해결 과정 완전 탐색으로 문제를 푼다고 가정하면 각 시계가 90도, 180도 270도 0도 회전하는 경우를 생각하고 그것이 연속적으로 n제곱 만큼 있다. 그래서 완전탐색으로 모든 경우를 탐색하게 되면 4의 n제곱..
[프로그래머스] 등대 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 처음 풀때는 너무 복잡하게 생각해서 접근도 힘들었던 문제였다. 구글링을 해도 이해하기 쉬운 코드나 블로그가 보이지가 않았고 내 풀이가 조금 특이한 방법이라고 생각해서 공유하면 좋겠다는 생각에 포스팅을 해보았다. import java.util.*; import java.util.stream.Collectors; class Solution { Map map = new HashMap(); public void initMap(int[][] lighthouse) { for (int[] house : lighthouse..
[프로그래머스] 퍼즐 조각 채우기 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제의 조건에 따라 정확하게 구현하는가를 판단하는 문제로 로직은 그렇게 복잡하지는 않았다. 하지만 도형을 회전시켜 같은 도형인지를 판단하는 부분에서 애를 먹었다. 내가 접근한 방식은 두가지 방식이다. 1. 무식하게 회전시키는 방법 사실 코딩테스트에서 문제를 풀때는 깔끔한 코드는 필요없어서 이런 간단한 방법이 더 좋은 선택지일 수 있다고 생각한다. 아래의 코드는 data에 저장된 모양을 90, 180, 270, 360 회전한 결과를 따라 입력 각도에 따라 출력하는 함수이다. 순서는 각도와 상관없다. privat..
even, far, much, a lot, still 비교급 강조 뉘양스 이 글의 출처는 다음과 같습니다. 비교급 단어의 강조어는 much, even, still, far, a lot 이라고? 수능 문제나 토익에서도 간간이 출제되는 비교급 단어의 강조 수식어 문제.이 문제를 잘 풀기 위해 그동안 우리는 비교급 단어를 강조할 때는 "much, even, still, far a lot"을 쓴다고 달달달 외웠다.과 gijungish.egloos.com 수능 문제나 토익에서도 간간이 출제되는 비교급 단어의 강조 수식어 문제. 이 문제를 잘 풀기 위해 그동안 우리는 비교급 단어를 강조할 때는 "much, even, still, far a lot"을 쓴다고 달달달 외웠다. 과연 이 모든 단어가 비교급 단어를 똑같이 사용되는 것일까? A. Jane is even taller than Bi..
Oath2 로그인 구현 - 구글 Spring Oauth2 client를 이용하여 구글 로그인을 구현해 보자. 구현 절차 1. 구글 api 콘솔 프로젝트 등록 https://console.cloud.google.com/apis/dashboard?project=natural-reserve-315509 Google 클라우드 플랫폼 로그인 Google 클라우드 플랫폼으로 이동 accounts.google.com OAuth 동의 화면 설정하기 사용자 인증정보 > + 사용자 인증 정보 만들기 > OAuth 클라이언트 ID 만들기 "/login/oauth2/code/google" 이 디폴트 설정이라서 그대로 작성하면 되지만 중간에 url을 매핑 처리하는 어플리케이션 라우터 Kong을 운영하고 있어서 백엔드로 리디렉션을 요청할 수 있도록 "/api"..