🧱 CI/CD 📌 CI - Continuous Integration, 지속적인 통합 💡 Instruction CI 라는 개념이 와닿지 않아서, 리팩토링의 저자 마틴 파울러의 블로그를 번역하며 공부해보았다. 아래 글은 출처를 밝힌 사이트의 번역 글이다. 지속적인 통합은 조직의 구성원들이 빈번하게 - 평균적으로 최소 하루에 한 번 -자신의 작업을 통합하여 하루에 여러 번 통합이 일어나게끔 하는 소프트웨어 개발 루틴이다. 각 통합은 최대한 빠르게 통합 시의 에러들을 파악하기 위해 빌드 자동화 (테스트를 포함하는) 를 활용한다. 많은 조직들은 이 접근방법이 통합 과정에서의 문제를 현저하게 감소시키고 더 빠르게 일관된 소프트웨어를 개발할 수 있게 한다는 것을 발견했다. - 마틴 파울러 - 🦾 CI 활용의 이점 C..
Longest Common Subsequence(LCS) 동적 계획법을 사용하는 대표적인 알고리즘으로, 문자열 두 개가 주어졌을 때 처음부터 끝 순서로 문자를 뽑아서 만들 수 있는 가장 큰 부분 문자열을 구하는 알고리즘이다. 🔍 동적 계획법 사용 이유 쉽게 생각할 수 있는 가장 큰 부분 문자열을 구할 수 있는 방식 중 하나는 각 문자열에서 부분 문자열을 모두 구한 후 중복되는 부분 문자열 중 가장 큰 문자열을 찾는 방법이다. 이 때 동적 계획법을 사용하면 이전까지의 기록을 참고해서 문자열의 각 문자 하나씩을 검사해 나가기 때문에 연산의 개수가 줄어든다. 💡 Note 부분 문자열을 하나씩 모두 찾아내는 완전 탐색 (Brute Force) 방법을 사용하기 때문에 문자열의 길이가 늘어날 수록 소요되는 시간이 ..
💡 Introduction 우선 직관적으로 문제 설명에 맞게 코드를 짜본다. 이후 리팩토링을 진행한다. 📢 문제 설명 요약 프로그래머스 레벨 3 문제로, 한 번에 하나의 일만 처리할 수 있는 디스크 컨트롤러에 소요 시간이 다양한 요청들이 각각 다른 시간에 들어올 때, 각 작업을 어떤 순서로 처리해야 요청된 작업들이 평균 대기 시간을 최소로 가질 수 있는지를 구하는 문제이다. 🔍 Hint 평균이 최소라는 것은 결국 합이 최소라는 의미이다. 합을 최소화하는 데에 집중해보자. 합이 최소화되기 위해서는 어떻게 해야 할까? 우선 디스크 컨트롤러의 동작 원리에 대해서 알 필요가 있다. 디스크 컨트롤러는 두 가지 일을 반복해서 한다: 모든 요청들을 나열 요청 하나를 선택해 처리 이 반복되는 동작들 중 1번 요청 나열..
💡 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 와 같이 문자열 형태로 정점을 나타내..
💡 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-..
에라토스테네스의 체 동작 원리 Introduction 아래 그림과 같이 N 이하의 모든 소수를 찾으려면 2부터 시작해서 모든 숫자의 배수들을 제외하면 된다. 어떤 숫자의 배수라는 것은 합성수이고 소수가 아니라는 의미이기 때문이다. 이 때, 배수를 제외하는 연산은 생각보다 많지 않다. 어차피 작은 숫자부터 시작해서 배수를 지우면 뒤로 갈수록 앞에서 이미 많이 걸러져서 제외할 숫자가 많이 남아있지 않기 때문이다. N 이하의 모든 소수를 에라토스테네스의 체로 걸러서 구하는 순서 1. 사이즈 N 의 배열에 2부터 시작해서 이하의 소수를 모두 구하고 싶은 숫자까지를 모두 넣는다. 주의할 점은 모두 숫자와 일치하는 인덱스에 넣어야 한다는 것이다. (2는 배열의 인덱스 2, 3은 배열의 인덱스 3, .... N 은 ..
- Total
- Today
- Yesterday
- spring security
- 알고리즘
- 도커
- ci/cd
- JOIN FETCH
- 프로그래머스
- json web token
- 코테
- Java Data Types
- 깃랩
- 가상 서버
- ResponseEntity
- 역직렬화
- Spring Boot
- DeSerialization
- 서버 호스팅
- 코딩 테스트
- LazyInitializationException
- Jackson
- DTO
- 지연 로딩
- @RequestBody
- JPQL
- N+1
- gitlab
- 기지국 설치
- google cloud
- docker
- JPA
- 인증/인가
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |