소프트웨어 개발 과정에서 예기치 못한 상태 변경으로 인한 버그를 마주합니다. 이런 경우 디버깅도 힘들어지고 이후 객체의 개발 의도가 변경되고 비대해지면서 더 찾기가 힘들어집니다. 이런 문제를 개선하기 위해선 어떤 방법이 있을까요?불변성불변성이란 한번 생성된 객체는 이후 어떤 방법으로든 상태가 변경되지 않는 것을 말합니다. 불변 객체는 상태가 바뀌지 않기 때문엔 여러 스레드에서 동시접근 해도 안전하고, 예측가능하고 디버깅이 쉬운 코드 작성을 돕습니다.보통 final class로 불변 클래스를 선언해주고 내부적으로도 상태를 변경하는 코드가 없어야 합니다. 다음은 불변을 위반한 상황입니다. val person = Person("1996-08-12", "golf", 27, 179, 72)println(perso..
세팅글을 쓴다는게 너무 오랫동안 방치되다보니 과거 코드보단 그래도 나름 최신 코드가 예제로 쓰기 좋은거 같아 코틀린 최신 코드로 되어있다는 점 양해부탁드립니다.여기서 잠깐이 글을 읽기 전 사전 지식이 필요합니다.전자 서명: 전자 서명은 디지털 형식으로 문서나 데이터의 서명 및 인증을 수행하는 방법입니다. 전자 서명은 종이 서명의 디지털 대응물로, 문서의 진위성, 무결성, 서명자의 신원을 확인하는 데 사용됩니다.주요 특징은 다음과 같습니다.1. 인증: 서명자가 누구인지 확인할 수 있습니다.2. 무결성: 서명된 문서가 변경되지 않았음을 보장합니다.디지털 서명의 동작 원리디지털 서명은 공공 키 기반 구조(PKI, Public Key Infrastructure)를 사용합니다.키 쌍 생성: 서명자는 공개 키와 비..
문제 상황 svelte 프로젝트에서 @roxi/routify 라이브러리를 활용하여 SPA를 구현하던 중 인증 실패 시 다시 root 페이지로 렌더링 하기위해 $goto function을 사용하였습니다. 코드로 살펴보면 다음과 같았습니다. const handleError = async (error) => { const { config } = error; const refreshToken = localStorage.getItem('refreshToken'); // ... other code // 실패 시 $goto('/') 로 root page 이동 alert(error.response.data.body.message); $goto('/'); } 하지만 $goto function이 동작하지 않아 제가 예상한..
svelte는 UI를 그리기 위한 javascript 기반 framework로 2016년 비교적 최근에 출시되었습니다. 이 framework는 많은 사랑을 받고 있기도 한데요. state Js of 2023 사이트의 자료에 의하면 매우 높은 비율로 흥미를 보이고 있습니다. 그럼 svelte에 대해 알아볼까요? real-dom 기반의 framework 보통 react나 vue.js 같은 대중적인 js framework는 대다수가 virtual dom 기반의 spa를 지원합니다. 이유는 간단한데요 DOM을 경량화하여 가상으로 존재하게 하여 실제 DOM을 렌더링하는 것 보다 성능상으로 이점이 많기 때문입니다. VDOM은 전체 UI를 VDOM에 재렌더링하고 이전 VDOM과 비교하여 변경된 부분만 실제 VDOM에..
회사에서 업무 중 OOM이 발생하며 트러블 슈팅을 하면서 배웠던 내용들을 공유드릴려고 합니다. OOM이란? out of memory의 앞글자에서 따온 말로 heap 영역에 인스턴스나 더미 데이터들이 정해놓은 heap 크기보다 커졌을 때 보통 발생합니다. 또는 스레드 스택 메모리나 메타 스페이스 등에 데이터가 꽉차더라도 문제가 발생할 수 있습니다. 더 이상 인스턴스에게 새로운 메모리 공간을 할당할 수 없기 때문에 서버는 에러를 내고 서버를 죽입니다. 다음은 OOM이 발생하는 코드를 만들어봤습니다. 이 코드에선 계속해서 ArrayList에 데이터를 append하여 추가하다가 어느 순간 메모리 공간이 부족해지면 에러가 발생하여 프로그램이 동작을 멈출 것입니다. fun main() { val list = mut..
jenkins로 CI를 하던 와중 jenkins 서버 내 용량이 이상하리 만큼 많이 쌓여서 원인을 분석하면서 storage driver에 대해 알게 됐습니다. storage driver를 잘 알고 있지 못하면 생기는 문제 그리고 storage driver 종류에 따라 생기는 문제를 알아보겠습니다. Storage Driver란? docker storage driver는 docker image로 부터 container를 생성하는데 이 때 docker image는 application code, system, library등을 포함합니다. 그리고 이를 저장하고 관리하기 위해선 store system이 필요한데 이것을 storage driver 이라고 합니다. 또한, storage driver는 image가 여..
JVM 기반의 언어를 사용할 때 보통 돈 같은 필드는 타입을 BigDecimal로 사용하는 경우가 많습니다. 그리고 필자도 개인 프로젝트를 하면서 돈과 관련된 필드는 무조건 BigDecimal을 사용했습니다. 그 이유가 궁금해서 찾아보면서 깊게 알아본 내용들을 바탕으로 정리해보겠습니다. 부동 소수점이란? BigDecimal을 쓰게된 이유를 찾기 위해선 부동 소수점이라는 개념을 먼저 알고 있어야합니다. 보통 PC에서 실수를 표현하고 연산할 때 소수점의 위치가 고정되어있는 것이 아닌 움직일 수 있는 경우를 부동 소수점이라고 합니다. IEEE 754 표준으로 보면 다음과 같이 표현할 수 있습니다. 단정 밀도의 경우 부호 : 1비트 지수 : 8비트 가수 : 23비트 배정 밀도의 경우 부호 : 1비트 지수 : 1..
이번에 유스콘을 처음으로 오프라인 참석을 해봤습니다. 유스콘은 유쾌한 스프링이라는 오픈 카카오톡 커뮤니티에서 시작된 행사로 매년 많은 주니어 분들이 지식 공유를 위해 자원하여 발표 하고 있는 행사입니다. 이번에 총 6개의 발표 세션을 들었습니다. 이에대한 후기를 좀 써볼가 합니다. 모두의 Server-Sent-Events 처음 들었던 세션은 server sent events를 hands on으로 따라쳐보면서 실습하며 뭔지 알아가는 시간을 갖는 발표였습니다. Server sent evnets는 websocket과 polling과 같은 기술과 비교되는 실시간성 알림같은 기능에 쓰이는 기술인데요. websocket과 달리 단방향 프로토콜이며 이벤트가 서버 -> 클라이언트 방향으로만 흐르는 단방향 통신 채널이라..
회사에 Docker Swarm을 사용하여 현재 하나 씩 Docker rising 하며 옮기고 있습니다. 도입하고 나니 뿌듯함도 있었습니다. 뭔가 많이 개선된 점들이 보였기 때문인데요. 하나 씩 차근차근 살펴봅시다. CI와 CD의 완전 자동화 기존에는 하나의 서버를 병합 후 배포하는 동안 트래픽이 빠져나가는 걸 확인하고 이 후 배포 한 후 다시 트래픽이 들어오고 나서 개발자가 수동으로 다음 서버를 배포하는 방식이었습니다. 하지만 docker compose로 세밀한 배포 프로세스 조정이 가능하다보니 이를 docker swarm에 맡기고 배포 할 때 알아서 트래픽이 들어가야만 다음 컨테이너가 교체되어 개발자 입장에선 자동화 된 시스템에 맡길 수 있게 됐습니다. 이 동안 다른 시스템 배포를 하여 배포 시간을 줄..
이번엔 Docker swarm을 운영하면서 다양한 편리한 Tool 또는 기능을 소개해보겠습니다. 소개할 기술은 총 3가지입니다. 정적 Resource 파일을 관리하기 위한 Docker swarm config Docker 운영 GUI툴인 Portainer apm monitoring 위한 scouter 연동 Docker Swarm Config Docker swarm config는 Kubernetes의 configmap과 비슷한 기능을 제공합니다. 정적인 파일들을 관리하고 서비스 단위로 공유가 가능합니다. 또한 볼륨을 주입해줄 수 있어 클러스터간 파일을 공유할 수 있습니다. 하지만 k8s의 RBAC(Role-Based-Access-Control)이나 etcd를 이용한 전체 데이터 암호화 등의 기능은 제공하지 ..
- Total
- Today
- Yesterday
- DB
- java
- docker
- 취업준비
- swarm
- DevOps
- JPA
- MySQL
- 프로그래밍
- 게시판
- Spring
- 코딩
- 동시성
- 프로젝트
- 개발자
- 취업
- Redis
- 면접준비
- 백엔드
- 자바
- IT
- Kotlin
- CS
- thread
- 코드
- 면접 준비
- 인터뷰
- 면접
- 취준
- 개발
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |