![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/8LFBy/btrSZS2PAe2/jhaDFqEtD5m7ujR6lKOXuk/img.png)
💡 Introduction 이번 포스트에서는 스프링 부트 핵심 가이드 책에서 나온 Spring Security 를 사용해 토큰 인증을 구현하는 과정을 내가 구현한 순서에 따라 설명해본다. 🧾 단계별로 클래스 생성하기 먼저, 컨트롤러를 생성한다. 컨트롤러는 아래와 같이 토큰을 생성해서 토큰을 반환한다. 빨간색으로 나온 JwtTokenProvider 를 생성해주자. 그리고 내부에 createToken() 메서드 구현 전에, 필요한 의존성이 있다: 이제 준비가 되었으니, JwtTokenProvider 를 구현해본다. 클래스 생성 후, JSON Web Token 라이브러리에서 제공하는 다양한 기능을 사용하여 토큰을 발급하는 기능을 createToken() 메서드에서 구현했다: 이 정도 시점에서 우선 어플리케이션..
💡 Introduction 지난 포스트에서는 예시 그래프를 통해 다익스트라 알고리즘 (Dijkstra's algorithm) 이 어떻게 동작하는지 살펴보았다. 이번 포스트에서는 다익스트라 알고리즘을 실제 프로그래밍 언어를 사용하여 구현할 준비를 한다. 💼 그래프의 표현 가장 먼저, 그래프를 어떻게 표현할지 생각해보자. 일단 각 정점들은 변수를 사용하고, 각 정점들과 그 사이의 거리를 다음과 같은 형식으로 표현할 수 있다: (정점 1, 정점 2, 거리) 그러므로, 지난 포스트에서 사용된 그래프는 중첩 리스트나 배열을 사용하여 다음과 같이 표현할 수 있다: [[A, B, 3], [A, C, 5], [B, D, 4], [C, D, 7]] 막상 이 방식은 A, B, C, D 와 같이 문자열 형태로 정점을 나타내..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/c4KTk5/btrSMHT01Bh/dweZC8aoukYSayz8l0rPIK/img.png)
💡 Introduction 다익스트라 알고리즘 (Dijkstra's algorithm) 은 탐욕법 (Greedy) 의 대표적인 응용 알고리즘이다. 이번 포스트에서는 다익스트라를 예시 그래프를 통해 설명하고, 다음 포스트와 그 다음 포스트를 이용해 직접 코드로 구현해본다. 🔍 다익스트라 알고리즘이란? 다익스트라 알고리즘은 가중 그래프 (Weighted Graph, 정점간의 거리가 나타나 있는 그래프) 에서 각 정점까지의 최단 거리를 찾아낼 수 있는 알고리즘이다. 바로 예시를 통해 설명하도록 하겠다. 📃 다익스트라 알고리즘 예시 먼저, 아래 사진의 왼쪽에 놓여진 것과 같은 그래프가 있다고 하자. 이 그래프를 분석하여 오른쪽 표에 쓰여진 두 종류의 정보를 파악할 수 있다. A 가 시작점일 때, A 는 자기 자..
⏰ date vs datetime vs timestamp 프로젝트 중 스키마 안에 업로드 날짜나 만료 날짜와 같이 날짜와 시간을 나타내는 컬럼을 포함하는 테이블들이 많았다. MySQL 은 날짜와 시간을 나타내는 데이터 타입으로 date 와 datetime 을 사용하지만, 실제 많은 ERD 에서는 timestamp 를 대신 활용하고 있는 것을 본 적이 있었다. 차이를 알지 못해서, 구글링을 통해 현재 프로젝트에는 무엇을 적용하는 것이 올바른지 고민해보았다. 찾은 내용을 표로 정리해보았다. 분류 값 저장 형태 특징 표현 범위 date YYYY-MM-DD 날짜만 표현 가능, 시간 X 1000-01-01 ~ 9999-12-31 datetime YYYY-MM-DD hh:mm:ss 날짜와 시간 표현 가능 1000-..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/pFbvD/btrSF6zrZtP/AqPLErKP0tt0Zdt4nwx0K0/img.gif)
에라토스테네스의 체 동작 원리 Introduction 아래 그림과 같이 N 이하의 모든 소수를 찾으려면 2부터 시작해서 모든 숫자의 배수들을 제외하면 된다. 어떤 숫자의 배수라는 것은 합성수이고 소수가 아니라는 의미이기 때문이다. 이 때, 배수를 제외하는 연산은 생각보다 많지 않다. 어차피 작은 숫자부터 시작해서 배수를 지우면 뒤로 갈수록 앞에서 이미 많이 걸러져서 제외할 숫자가 많이 남아있지 않기 때문이다. N 이하의 모든 소수를 에라토스테네스의 체로 걸러서 구하는 순서 1. 사이즈 N 의 배열에 2부터 시작해서 이하의 소수를 모두 구하고 싶은 숫자까지를 모두 넣는다. 주의할 점은 모두 숫자와 일치하는 인덱스에 넣어야 한다는 것이다. (2는 배열의 인덱스 2, 3은 배열의 인덱스 3, .... N 은 ..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/niaza/btrSHLwPbg2/5vzvnagxYc6oZT6HgGBKK1/img.png)
성공적인 앱을 개발하기 위해서는 매력적인 UI 디자인만으로는 부족하다. 편리한 기능과, 빠른 속도, 보안, 구조적 뛰어남이 있어야 하고 치명적인 에러가 없어야 한다. 다시 말해서, 신중하게 모바일 앱 아키텍처를 설계해야 한다. 모바일 앱 아키텍처란? 모바일 앱 아키텍처는 모바일 어플리케이션을 개발하는 방법에 대한 규칙들, 기술들과 패턴들의 본질이다. 즉, 아키텍처 설계는 기술 스택이 어떤지, 구조가 어떻게 이루어져 있는지, 데이터를 어떻게 관리할 것인지 에 대한 고민들을 포함한다. 사용자의 요구사항 파악 (요구 공학) 아키텍처를 설계할 때 소프트웨어 개발자들이 따라야 할 세 종류의 원칙이 있다: 1. SOLID - 유지 보수가 쉽고 확장성이 좋은 앱을 만들기 위한 객체 지향 설계의 5가지 원칙 2. KI..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/dfLQA4/btrSC9Ej4Yy/anPHnzmEVNqu0M5IBKkKnk/img.png)
Abstract Spring Security 를 적용하고 컨트롤러 테스트를 했는데 에러가 발생했다. 403 에러였고, 찾아보니 클라이언트가 접근 권한이 없을 때 발생하는 forbidden 에러였다. 해결 먼저 Spring Security 적용 후에 컨트롤러 테스트를 하기 위해서는 테스트에서도 API 에 접근할 수 있어야 하므로 새로운 의존성을 추가해야 한다. 바로 spring-security-test 이다. 추가한 후에는 컨트롤러 테스트에서 MockMvc 클래스의 가짜 객체에 서비스의 의존성을 주입해 사용하여 post 요청을 보낼 때 .with(csrf()) 를 붙여주어야 한다. Note CSRF는 Cross-Site Request Forgery 의 줄임말로, 어떤 사이트에 로그인 된 유저들을 이용해서 ..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bAqRqm/btrSwMvmSDj/FFlyXSs5j4GJfSrWBcDXK0/img.png)
Gradle 은 빌드 과정을 기록해서 보여주는 build scan 을 생성하는 기능을 제공해준다. Gradle 4.3 이나 그 이상의 버전에서는 다음 커맨드를 사용해서 build scan 을 생성할 수 있다. $ gradle build --scan 하지만, Intellij 에서는 조금 다르다. 터미널을 기반으로 빌드하고 있지 않기 때문이다. 다음과 같은 방법을 사용했다. 이렇게 설정값을 바꾼 후, 새롭게 설정된 build 를 더블 클릭하면 아래와 같은 화면이 나온다. 링크가 등장하는 것을 볼 수 있었다. 클릭하니 다음 화면이 나왔다. 자 이제 빌드를 프로파일링 해보자. 프로파일링은 빌드의 각 단계에 소모되는 시간은 얼마인지, 어떤 과정을 어떻게 거치고 있는지를 분석하는 것을 말한다. Performance..
- Total
- Today
- Yesterday
- 프로그래머스
- JPQL
- JPA
- 깃랩
- 인증/인가
- FCM
- ci/cd
- 도커
- 지연 로딩
- google cloud
- @RequestBody
- 코테
- N+1
- 실시간데이터
- 기지국 설치
- Firebase
- JOIN FETCH
- json web token
- DeSerialization
- 알고리즘
- Jackson
- LazyInitializationException
- gitlab
- Java Data Types
- 가상 서버
- spring
- 역직렬화
- DTO
- Spring Boot
- docker
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |