일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Baekjoon
- 애자일프로그래밍
- Java
- 백준
- 코딩
- 애자일
- 코딩테스트
- db
- 그리디
- Elasticsearch
- 개발
- database
- 개발자
- API
- Spring
- cleancode
- 클린코드
- 스프링
- ES
- 프레임워크
- 애자일기법
- JPA
- 그리디알고리즘
- 읽기쉬운코드
- 엘라스틱서치
- framework
- 자바
- 데이터베이스
- 알고리즘
- 코드
- Today
- Total
목록전체 글 (139)
시뻘건 개발 도전기
엘라스틱 서치 검색엔진은 웹에서 정보를 수집해 검색 결과를 제공하는 프로그램이다. 검색 결과로 제공되는 데이터의 특성에 따라 구현 형태가 달라진다. 검색 시스템은 대용량 데이터의 검색 결과를 제공하기 위해 검색엔진을 기반으로 구축된 시스템이다. 수집기를 이용해 데이터를 수집하고 이를 다수의 검색엔진을 이용해 색인하여 UI로 검색 결과를 제공한다. 엘라스틱서치는 이와 같은 검색엔진이며 이를 사용하여 검색 시스템을 구축할 수 있다. 검색 시스템 검색 시스템의 구성 요소 검색 시스템은 데이터를 수집하는 수집기, 데이터를 저장하는 스토리지, 데이터를 검색에 적절한 형태로 변환하는 색인기, 색인된 데이터에서 일치하는 문서를 찾는 검색기로 구성된다. 수집기 수집기는 웹에서 필요한 정보를 수집하는 프로그램이다. 웹상..
이전 포스팅에서 우리는 대표적인 낙관적 락과 비관적 락에대해서 간략하게 살펴보았다. 사실 나는 낙관적 락도 사용하지 않았고 비관적 락도 사용하지 않았다. DB의 부하를 줄일 수 있는 방법을 몰색하다가 redis를 사용한 [분산 락]이라고 하는 녀석을 파보았다. "왜 분산 락을 사용해야만 했는가?"에 대해서는 마지막에 언급하겠다. 분산 락 (Distributed Lock) 동시성 이슈(경쟁)로 동일한 리소스에 대해서 접근이 이루어질 때 리소스의 결함이 생기지 않게하기 위해서 분산된 서버들을 하여금 원자성을 보장한다. 분산서버로 쉽고 간편한 redis를 사용하였다. redis client 그렇다면 redis client로 무엇을 사용해야할까. 결론을 먼저 이야기 하자면 Redisson을 사용하는 것이 좋다...
최근 토이 프로젝트를 진행하면서 맞이한 동시성 이슈. 그 이슈는 "게시글의 조회수 증가"에서 맞이하게 된다. 서로 다른 사용자가 동시에 게시글을 열람한다면, 조회수는 +2가 되어야할테니... 따라서 동시성 이슈를 해결하기 위해 락을 획득하기로했다. 일반적으로 알고 있는 락은 낙관적 락(Optimistic Lock)과 비관적 락(Pessimistic Lock)이있다. 낙관적 락(Optimistic Lock) 동시에 동일한 데이터에 대한 수정을 서로 연관되지 않게 방지하는 기능으로써 해당 데이터의 "version"을 확인하여 엔티티의 변경을 감지한다. "낙관적"이라는 말처럼 "여러 트랜잭션이 동일한 데이터를 동시에 수정하지 않는다."라는 가정을 가지고 트랜잭션의 충돌을 방지한다. 한 마디로 "일단 데이터 가..
일단 방금 유레카를 외치면서 한 바탕 감동의 쓰나미를 즐기다 왔다. 지금 토이프로젝트를 하고 있는데 워낙 사이즈가 크다 보니 별 삽질을 다 하는거 같다ㅜㅜ 방금 내가 무엇을 했냐면 minio로 Object Storage를 구축하고 CDN을 사용했다. Object Storage가 뭐고 CDN이 뭔지는 GPT가 나보다 더 잘 알려줄테니 넘어간다. 자!!! 오늘의 삽질을 기록한다. 1. minio 구축 일단 나의 서버는 arm architecture 32bit를 사용한다.(확인하는 방법 또한 gpt에게로..) minio 바이너리의 최신 버전을 받는다. cd /usr/local/bin/ wget https://dl.min.io/server/minio/release/linux-arm/minio 실행 권한을 부여한..
jenkins 2.4를 설치하려한다. 젠킨스는 jvm 위에서 동작하기때문에 젠킨스 버전 별로 자바 버전도 영향을 받는다. 그래서 젠킨스의 require java version을 알기 위해 아래 공식 포스팅을 보면 좋겠다. https://www.jenkins.io/blog/2022/06/28/require-java-11/ Jenkins requires Java 11 or newer As noted above, members of the Jenkins community began working on Java 11 support in 2018, well before the present author’s involvement in the project and well beyond the present autho..
커널은 OS의 핵심이라고 봐도 무방할 정도로 시스템의 모든 것을 완전하게 통제한다. 운영체제의 다른 부분 및 으용 프로그램 수행에 필요한 여러 서비스를 제공하게되는데 [그림 1]과 [그림 2]을 함께 살펴보면 이해하기 쉬울 것이다. APP은 라이브러리를 통해서 개발이 되는데 라이브러리는 System Call을 통해서 kernel space에 진입하게된다. 만약 하드웨어의 자원이 필요하다! 그런다고하면 Device Driver를 통해 하드웨어에 접근도 가능하다. 그래서 리눅스 커널의 주요 기능은 뭘까? 하드웨어 관리/추상화 디바이스 드라이버만이 하드웨어가 제공하는 기능이나 프로토콜에 관여한다. 사용자 프로그램은 하드웨어에 종속정인 작업이 필요하지 않다. 프로세스와 스레드 관리 cpu 타임 공유와 메모리 보..
Alpine linux에 대해 살짝 알아보고 가자. 알파인 리눅스는 보안/간편성/리소스 효율을 위해서 디자인된 리눅스 배포판이다. [그림 1]과 같이 알파인 리눅스는 glibc 대신에 musl libc를 사용하게 되었는데 라이브러리의 size 차이가 많이 차이나는 사실을 알 수 있다. docker images 상기 command로 OS 이미지의 크기를 [그림 2 ]와같이 알 수 있다. 타 OS 이미지와 비교해보았을 때 알파인이 훨신 더 경량화되어있다는 것을 알 수 있다. 이 처럼 size가 중요한 이유는 메모리/디스크 공간을 적게 잡아먹고, 로딩이 빠른만큼 앱이 올라가는 속도가 빨라진다. 하지만 많은 dependency 라이브러리가 빠져있기 때문에 멀티 스테이지 빌드 방식을 사용한다. # Alpine l..
이번 포스팅에서 하는 이야기는 Docker의 다중 운영체제이다. [그림 1]과 같이 Docker에서 다중 운영체제 사용이 가능할까? 백문이 불여일견이라고, 한 번 해보면 평생 기억할 것 같아 직접 해본다. Docker Hub에 접속하면 다양한 OS의 이미지를(배포판) 다운받을 수 있다! 혹은 아래와 같이 command로도 가능하다. cat /etc/os-release# Host OS 확인 docker pull fedora# fedora 이미지 다운 docker run --rm fedora cat /etc/os-release# 실행 실행을 해본다면 [그림 1]의 그림이 가능한 이야기인지 알 수 있을 것이다. (정답은 가능하다.) 그 이유는 무엇일까? docker는 OS레벨 가상화 기술이라고 한다. 그럼 O..