소프트웨어에서 이름은 어디나 쓰인다. 우리는 변수에도 이름을 붙이고, 함수에도 이름을 붙이고, 소스 파일이 담긴 디렉토리에도 이름을 붙인다. jar 파일에도 이름을 붙이고 war 파일에도 이름을 붙이고.. 여기저기 이름을 사용한다. 이렇듯 이름을 잘 지으면 여러모로 편하다. 이 번에는 이름을 잘 짓는 간단한 규칙을 몇가지 배우게 된다. 의도를 분명히 밝혀라 의도가 분명한 이름은 매우 중요하다. 좋은 이름을 지으러면 시간이 걸리지만, 좋은 이름으로 절약하는 시간이 훨씬 더 많이 소요되고 코드를 읽는 사람이 좀 더 행복해질 수 있다. 변수나 함수 그리고 클래스 이름은 다음과 같은 굵직한 질문에 모두 답해야 한다. 변수의 존재 이유는? 수행 기능은? 사용 방법은? 만약 따로 주석이 필요하다면 의도를 분명히 드..
원초적 난제 프로그래머는 근본적인 가치에서 난제에 봉착한다. 개발을 어느정도 해봤다면 누구나 나쁜 코드가 업무 속도를 늦춘다는 사실을 익히 안다. 그럼에도 모든 프로그래머가 기한을 맞추려면 나쁜 코드를 양산할 수 밖에 없다고 느낀다. 간단히 말해 빨리 가기 위해 시간을 들이지 않는다. (뜨끔1) 진짜 전문가. 정말 실력있는 개발자라면 두번째 부분이 틀렸다는 사실을 잘 알고 있다. 나쁜 코드를 양산하면 기한을 맞출 수 없다. 오히려 엉망진창인 상태로 인해 속도가 곧바로 늦어지고, 결국 기한을 놓치게 된다. 그래서 기한을 맞추는 유일한 방법은, 언제나 코드를 깨끗하게 유지하려는 습관이다. 깨끗한 코드? 나쁜 코드가 심각한 장애물이라는 사실을 납득했다고 가정해보자. 빨리 서비스를 만들려면 코드를 깨끗하게 유지..
실제 서비스를 배포하고, 운영하면 문제가 생기기 마련이다. 이 문제를 사전에 막기 위해서는 테스트 코드가 큰 영향을 주는데 테스트 코드는 작성하기도 귀찮고 안일해지게 되는것 같다. 테스트 코드를 관리하지 않으면 어느새 코드 커버리지는 낮아지게 되고 코드 커버리지가 낮다는 것은 코드가 충분히 검증되지 못했다는 것을 의미한다. 이 문제를 어떻게 하면 개선할 수 있을까.. 코드 커버리지가 일정 수준보다 낮으면 배포가 되지 않도록 하면 되지 않을까?? 이 의문까지 도달했을때 이미 관련된 도구가 있다는 것을 알게 되었다. 그리고 이번 글의 주제인 JaCoCo가 그 주인공이다. JaCoCo는 Code Coverage를 측정하는 라이브러리이다. 테스트를 실행하고 그 결과를 html 파일이나 xml, csv를 통해 시..
[Redis] Redis Sentinel vs Cluster 이전에 나는 면접에서 'Redis를 캐시로 사용했을 때, Redis가 멈출 수도 있는데 어떻게 대처하겠는가?'에 대한 질문을 받은 적이 있었다. 이 질문은 장애 대처 능력에 대해 물어본 것인데, 지식이 부 jojaeng2.tistory.com Sentinel에 관련된 개념을 정리한 적이 있다. 이번에는 Redis Sentinel을 직접 사용해보기로 하자. HA를 제대로 적용하기 위해서는 Master와 Slave를 물리적으로 다른 호스트에 둬야 한다. 하지만 나는 돈이 없고, 2개의 VM을 돌리기에는 노트북 사양이 부족하므로, 하나의 호스트에서 포트만 바꿔서 구축할 예정이다. 동작 프로세스에 대해 먼저 살펴보자. 한대의 Master Node를 두..
이전에 나는 면접에서 'Redis를 캐시로 사용했을 때, Redis가 멈출 수도 있는데 어떻게 대처하겠는가?'에 대한 질문을 받은 적이 있었다. 이 질문은 장애 대처 능력에 대해 물어본 것인데, 지식이 부족해 죄송합니다를 연발했던 기억이 난다. 이 문제를 해결하려면 Redis의 HA를 구성하는 방법에 대해 알아야 한다. 간단하게 위와같이 서비스를 구축하게 된다면, Redis가 고장 났을 때 서비스에도 영향을 줄 수밖에 없다. 하지만, Redis를 여러 개 띄우고, 하나의 Redis처럼 사용할 수 있다면 문제를 해결할 수 있을 것이다. Redis의 HA(고가용성)을 구성하는 방법은 크게 Sentinel과 Cluster, 2가지가 존재한다. 이번에는 이 두 가지 방식을 비교하는 글을 작성해보려고 한다. Re..
다른 사람과 나의 코드 작성법은 다를 수밖에 없다. 그래서 다른 사람의 코드를 이해하는데 많은 시간을 사용하게 되고 생산성이 떨어지게 된다. 이를 위해 '코드 컨벤션'이라는 것이 존재하는데, 코드 컨벤션은 개개인이 신경을 써야만 만족시킬 수 있다. 그렇다면 코드 컨벤션을 강제적으로 지킬 수밖에 없도록 만들 수는 없을까? 이를 위해 checkstyle이라는 것이 존재한다. checkstyle을 프로젝트에 적용해 보고, 강제적으로 자바 컨벤션을 지키는 방법에 대해 알아보자. intellij의 plugins에 들어가서, checkstyle을 검색하고 설치하자. 설치 후, Checkstyle 설정을 할 수 있는데, default 값으로 2가지가 존재한다. Sun Checks Google Checks 위의 두가지..
요청에 대한 응답 시간을 줄이거나, 좀더 효율적인 코드가 필요할때, 비동기 처리를 고려하는 것은 하나의 해결 방법이 될 수 있습니다. 이번에는 Spring에서 제공하는 Async annotation에 대해서 공부 해볼 것입니다. Spring이 제공하는 @Async를 공부하기 앞서 순수한 Java에서 기본적으로 사용할 수 있는 비동기 처리 방법에 대해 살펴본 후, Spring @Async를 사용하는 이유를 알아보는 순서로 작성할 것입니다. 순수한 Java는 멀티 스레드로 비동기 처리를 할 수 있는데요, 코드로 살펴봅시다. @Slf4j @NoArgsConstructor public class SyncService { public void execute() { for(int i=1; i { for(int i=..
서버를 구축하다보면, 사용자 요청에 대한 로그를 남겨야 하는 작업이 필요합니다. 저에게 주어진 요구사항은 사용자의 IP, 접속한 브라우저, 사용자의 요청을 처리한 후 어떤 결과가 나왔는지에 대한 정보를 로그를 남기는 것입니다. 먼저 구축된 서버의 아키텍처를 아주 간단하게 나타내면 아래의 그림과 같습니다. 가장 먼저 기존의 코드를 건드리지 않고, 요구사항을 만족할 수 있는 방법이 없는지 고민했고 Nginx의 Access Log를 이용하는 방법을 생각해봤습니다. 172.18.0.1 - - [28/Sep/2022:07:04:30 +0000] "OPTIONS /api/v1/channels HTTP/1.1" 200 Chrome/ Nginx의 Access Log는 별도의 설정 없이 위와같은 로그를 Default로 ..
- Total
- Today
- Yesterday
- network
- effective
- GORM
- cs
- soft delete
- ARP
- Database
- 공지
- paging
- fiber
- algorithm
- OS
- spring
- Operating System
- mmu
- java
- Effective Java
- go
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |