![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bGVNLw/btrUDhUeuU4/ZvfmABMIDuD3Vyw1FSwZr1/img.png)
Configuration 클래스에서 HandlerExceptionResolver 주입하기 기존 SecurityConfig 클래스에 다음 두 줄을 추가한다: private final HandlerExceptionResolver exceptionResolver; public SecurityConfig(@Qualifier("handlerExceptionResolver") HandlerExceptionResolver exceptionResolver) { this.exceptionResolver = exceptionResolver; } 그리고 기존에 JwtAuthenticationFilter 는 매개 변수로 비밀 키만 받고 있었는데, 필드 변수로 생성된 exceptionResolver 도 받도록 변경한다. 보안 ..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bzCE7w/btrT6deouGE/82P73Vp6FqbbKy3waUrBSK/img.png)
🚀 사건의 전말 GitLab 으로 버전 관리를 하는 프로젝트에 CI, 지속적 통합을 적용하기 위해서는 YAML 파일 .gitlab-ci.yml 에 프로젝트 리포지토리에 변경이 일어날 때마다 실행될 파이프라인에서 사용할 명령어들로 구성된 스크립트를 작성해야 한다. 내 프로젝트에서는 Docker 를 이용해 애플리케이션을 Gradle 로 빌드하여 Docker 이미지를 만들어야 했다. 아래와 같이 YAML 파일을 작성하였다. 레포지토리에 있는 Dockerfile을 사용해서 Docker 이미지를 생성한다. 그리고 깃랩의 컨테이너 레지스트리에 등록한다. stages: - dockerbuild-push package: image: docker:latest stage: dockerbuild-push services: ..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/tNf4N/btrTViev9uV/ts12fOLgZTh1S0IBPYzRp0/img.png)
📌 개요 위치에 따라 번호가 매겨져 있는 아파트들의 옥상에 5G 기지국을 설치하려고 한다. 5G 기지국은 기존에 설치되어 있는 4G 기지국과는 전파의 전달 범위가 다르다. 기존에 4G 가 설치되어 있는 아파트들의 목록을 담은 배열 stations 와 총 아파트의 개수 N, 그리고 5G 기지국을 설치했을 때의 전파 전달 범위를 나타내는 W 가 주어졌을 때, 모든 아파트에 전파를 전달하기 위해 설치해야 하는 기지국의 최소 개수를 구하여라. 예) N = 11, stations = [4, 11], W = 1 4번 아파트와 11번 아파트에 전파 전달 범위 1 의 기지국이 설치되어 있으므로, 전파를 전달받을 수 있는 아파트는 위 그림과 같이 3, 4, 5, 그리고 10, 11번 아파트이다. 나머지 1, 2, 6, ..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/buhIw9/btrTQPDJvLR/M9k6SftLjtOdd9SKoFv350/img.png)
📃 Introduction 웹 어플리케이션을 배포하여 서비스로서 제공할 때, 클라우드를 사용한 가상 서버 호스팅 또는 물리적인 서버를 직접 구매 또는 임대하는 방법이 있다. 오늘은 가상 서버 호스팅이 무엇인지에 댇해서 알아보고자 한다. 📌 가상 서버의 정의 사용하는 방식에 따라 정의가 달라질 수 있다고 한다. 서버는 물리적인 데이터 센터 또는 클라우드 환경에 위치할 수 있는데, 하나의 물리적인 서버를 다른 이들과 공유하기 위해 사용되는 것이 바로 가상 머신이다. (Virtual Machine) 서버는 본래 하나의 기업이나 개인을 위해 사용되는 것이 일반적이었으나, 서버의 가상화를 통해 한 서버가 제공하는 자원을 다양한 사용자가 나누어 사용할 수 있게 되었다. 가상 서버는 물리 서버에 비해 하드웨어가 필요..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/kx63E/btrTfZIzJMy/d8DVsE68WZnFQfoznHqOlk/img.png)
📝 Summary Mustache 를 사용해서 웹 페이지를 만들고 있다면, HTML 태그 중 과 을 사용해서 POST 요청을 처리한 경험이 있을 것이다. 이 때, 만약 API 가 문자열 형태의 데이터를 받는다면, 태그 안에는 반드시 type="text" 라고 명시해주어야 한다. 그렇지 않으면 문자열을 인식하지 못해 null 로 인식하게 된다... 라고 생각했던 프로젝트의 과정 중 일부를 소개한다. 프로젝트 중 컨트롤러에서 API 를 설계한 후 mustache 템플릿을 이용해서 view 를 처리하고 있었다. 로그인 정보를 입력하면 사용자를 로그인시킨 후, 다음 화면으로 넘어가는 동작을 구현하고 있었다. 다음과 같은 API 를 작성했다: 이 API 들을 활용하기 위해 home.mustache 에 아이디를 f..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/Dd1So/btrTdHFTWTG/cYfi6HzG2t4YXJhhsW7pm0/img.png)
🧱 CI/CD 📌 CI - Continuous Integration, 지속적인 통합 💡 Instruction CI 라는 개념이 와닿지 않아서, 리팩토링의 저자 마틴 파울러의 블로그를 번역하며 공부해보았다. 아래 글은 출처를 밝힌 사이트의 번역 글이다. 지속적인 통합은 조직의 구성원들이 빈번하게 - 평균적으로 최소 하루에 한 번 -자신의 작업을 통합하여 하루에 여러 번 통합이 일어나게끔 하는 소프트웨어 개발 루틴이다. 각 통합은 최대한 빠르게 통합 시의 에러들을 파악하기 위해 빌드 자동화 (테스트를 포함하는) 를 활용한다. 많은 조직들은 이 접근방법이 통합 과정에서의 문제를 현저하게 감소시키고 더 빠르게 일관된 소프트웨어를 개발할 수 있게 한다는 것을 발견했다. - 마틴 파울러 - 🦾 CI 활용의 이점 C..
Longest Common Subsequence(LCS) 동적 계획법을 사용하는 대표적인 알고리즘으로, 문자열 두 개가 주어졌을 때 처음부터 끝 순서로 문자를 뽑아서 만들 수 있는 가장 큰 부분 문자열을 구하는 알고리즘이다. 🔍 동적 계획법 사용 이유 쉽게 생각할 수 있는 가장 큰 부분 문자열을 구할 수 있는 방식 중 하나는 각 문자열에서 부분 문자열을 모두 구한 후 중복되는 부분 문자열 중 가장 큰 문자열을 찾는 방법이다. 이 때 동적 계획법을 사용하면 이전까지의 기록을 참고해서 문자열의 각 문자 하나씩을 검사해 나가기 때문에 연산의 개수가 줄어든다. 💡 Note 부분 문자열을 하나씩 모두 찾아내는 완전 탐색 (Brute Force) 방법을 사용하기 때문에 문자열의 길이가 늘어날 수록 소요되는 시간이 ..
💡 Introduction 우선 직관적으로 문제 설명에 맞게 코드를 짜본다. 이후 리팩토링을 진행한다. 📢 문제 설명 요약 프로그래머스 레벨 3 문제로, 한 번에 하나의 일만 처리할 수 있는 디스크 컨트롤러에 소요 시간이 다양한 요청들이 각각 다른 시간에 들어올 때, 각 작업을 어떤 순서로 처리해야 요청된 작업들이 평균 대기 시간을 최소로 가질 수 있는지를 구하는 문제이다. 🔍 Hint 평균이 최소라는 것은 결국 합이 최소라는 의미이다. 합을 최소화하는 데에 집중해보자. 합이 최소화되기 위해서는 어떻게 해야 할까? 우선 디스크 컨트롤러의 동작 원리에 대해서 알 필요가 있다. 디스크 컨트롤러는 두 가지 일을 반복해서 한다: 모든 요청들을 나열 요청 하나를 선택해 처리 이 반복되는 동작들 중 1번 요청 나열..
- Total
- Today
- Yesterday
- JOIN FETCH
- Java Data Types
- json web token
- Firebase
- 지연 로딩
- 알고리즘
- FCM
- Spring Boot
- gitlab
- docker
- @RequestBody
- 실시간데이터
- google cloud
- 깃랩
- LazyInitializationException
- N+1
- 인증/인가
- ci/cd
- 가상 서버
- 도커
- Jackson
- DTO
- 프로그래머스
- 역직렬화
- 기지국 설치
- DeSerialization
- JPQL
- JPA
- spring
- 코테
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |