
내부 프로젝트로 Testcase를 자동으로 정리해주는 프로젝트를 진행하게 됐다. 백엔드에서 서비스로직만 처리할 게 아니라, 화면을 추가로 그려야했기 때문에 자연스럽게 자바스크립트를 보게 됐고... 너무 많은 이슈들을 마주쳤다.(별로 언급하고 싶지 않은 이유로 발생한 것들이다...) 그 중 하나가 Object의 깊은 복사(Deep Copy) / 얕은 복사(Shallow Copy) 이슈였고, 이거 때문에 몇 시간을 끌었다. 어떤 문제 였나? 결론부터 이야기하자면, 나는 깊은 복사가 하고 싶었다. 그런데 배열 안의 오브젝트의 처리에 문제가 있었다. Java에서의 배열(Array) 모두 같은 자료형만을 취급한다. 하지만 Javascript의 Array는 제한 없이 사용할 수 있다. a = [ 'abc', { a..

1. 캐시란? 서버는 많은 리소스들을 저장하고 있다. 개중에는 엄청나게 큰 파일을 요청하는 경우가 있는데, 이럴 경우 여러번 같은 파일을 요청할 경우 서버는 많은 사용자가 사용 중이 아니어도 과부하 상태 빠질 것이다. 위와 같은 경우를 대비해서 서버-클라이언트 서비스 간에 캐시(Cahce)를 둬서 리소스에 대한 좀더 빠른 접근할 수 있도록 한다. 캐시의 위치는 구현법과 솔루션에 따라 나뉘는데, 1. 인 메모리 캐싱(In-memory caching): 서버의 RAM에 데이터를 저장해 캐싱된 데이터에 빠르게 접근할 수 있도록 한다. Java 라이브러리 ehcache가 대표적인 예이고, 스프링 내부적으로도 제공하는 @Cacheable도 인메모리 캐싱이다. 2. 디스크 캐싱(Disk caching): 데이터를 ..
1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/120922 2. 풀이 수학문제를 조금 풀어본 적이 있다면, 보자마자 점화식 관련 문제인지 파악할 수 있었을 것이다. 2 x 2 = 3 2 x 3 = 5 3 x 2 = 5 3 x 3 = 8 4 x 2 = 7 4 x 3 = 11 5 x 2 = 9 5 x 3 = 14 조건에서 M >=N 일 때, N x (M -1) + (N -1) 이라는 결과를 도출해 낼 수 있어야한다. 3. 코드 class Solution { public int solution(int M, int N) { int answer = 0; int up = M; int down = N; if( M
1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/120956 2. 풀이 문자열을 어떻게 다루면 좋을까를 묻는 문제. 처음봤을 때는 옹알이가 나오는 모든 경우의 수를 생각하는 거였는데, 구현방식이 잘 떠오르지도 않았다. 다행히 옹알이 문자가 포함관계에 있는게 없어서 치환으로 풀었다. 나는 1로 치환했는데, 다른거로 치환해도 된다. 처음엔 ""으로 치환했었는데, 다행히 반례가 문제 중에 있어서 쉽게 해결했다. 없었으면 찾는데 좀 걸렸을 듯 3. 코드 import java.util.*; import java.util.stream.Collectors; class Solution { public int solution(String[] babblin..

1. logrotate란? 서버를 운영하다 보면 의도치 않은 서버의 상태 변경이나 장애가 발생한다. 이에 대비하기 위해 가능하면 서비스의 모든 로그(LOG)를 남기도록 설정한다. 하지만 서버에는 저장해야할 다양한 로그들이 있으며, 별도의 설정을 하지 않으면 시간이 지나면 이 로그들이저장공간 대부분을 차지하게 된다. 서버의 용량을 모두 잡아먹을 정도로 커지기 전에 로그들을 잘 관리하도록 설정하는 기능이 logrotate다. 2. 설치 및 실행 순서 기본적으로 Linux에 설치되어 있다곤 하는데 apt로도 설치가 가능하다. apt install logrotate cron.daily 아래의 /etc/cron.daily/logrotate logrotate 설정을 등록해놓고 매일 실행시켜 사용한다. 설치하면 자동..

이전 프로젝트에서 과부하 제어에 관한 작업을 했었다. WAS에서 Request가 들어올 때마다 interceptor에서 과부하 수치를 카운팅하고, Response가 나갈 때마다 차감되는 형태로 구현했었다. 서버에 정상적으로 반영됐고, 트래픽이 몰려도 평균 과부하 수치가 10 이내 유지되면서 문제 없이 가동되고 있었다. 문제는, 외부 API에서 우리 서버에서 한 요청을 제대로 응답해 주지 못해 익셉션이 발생했을 때 생겼다. 익셉션이 발생했을 때 Response가 정상적으로 종료되지 않아 interceptor를 타지 않고 종료되면서 과부하 수치가 차감되지 않는 문제였다. 다행히 문제를 조기 발견해 조치를 했지만, 익셉션 처리를 제대로 할 필요를 느껴서 공부해봤다. Spring에서는 익셉션을 한곳에서 관리하는..
1. 문제 https://school.programmers.co.kr/learn/courses/30/lessons/131705 2. 풀이 이 문제를 보자마자 떠올려야할 게 있다. 조합(Combination) 문제라는 것. 때문에 대략적인 시행 횟수를 예측할 수 있다. 주어진 조건을 보면 3 ≤number의 길이 ≤ 13 을 보면 최대 시행 횟수는 13C3 = 286인 걸 알 수 있다. 조건만 맞추면 다중 for문을 마음껏 써도된다는 뜻이다. 모든 조건을 탐색하기 때문에 Brute Force 문제라고도 할 수 있겠다. 3. 코드 class Solution { public int solution(int[] number) { int answer = 0; for(int i =0; i

내가 담당하고 있는 서비스는, 불행하게도 CI/CD가 없다. 그러면 어떻게 배포하느냐? 다 수동이다. 이클립스에서 gradle build 생성된 war 파일을 git을 이용해 서버에 업로드 서버에서 스크립트를 통해 배포 간단해 보이는 과정이지만 이 서비스가 갖고 있는 Java 프로젝트만 10개가 넘고, 임시로 생성된 branch들 때문에 수동으로 배포하게 되면 실수가 발생할 수 밖에 없다. 또 코드를 배포하는 사람이 한명이 아니기 때문에, 실제로도 반영되지 말아야되는 버전의 코드가 배포되는 등의 생겼었다. 상용화된 서비스에 바로 반영해볼수는 없기 때문에 로컬환경에서 먼저 작업해봤다. 문제는 내 로컬 OS가 윈도우라는 것 때문에 제법 큰 문제가 발생했었고, 이 문제를 수정하는데 너무 진을 뺐었다. 이 내용..
- Total
- Today
- Yesterday
- terraform
- 스프링부트
- Kotlin
- lambda
- GIT
- ChatGPT
- Spring
- Redis
- OpenAI
- java
- S3
- 후쿠오카
- EKS
- elasticsearch
- 오블완
- serverless
- AWS
- cache
- CloudFront
- 티스토리챌린지
- AOP
- CORS
- docker
- Log
- ecs
- 인프런
- 람다
- springboot
- JWT
- AWS EC2
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |