
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가 여..

https://golf-dev.tistory.com/75 동시 접속자가 많은 서비스에서 조회 기능 TPS 개선하기 흔히 요즘 DAU가 많은 서비스들을 흔하게 볼 수 있습니다. 카카오의 실시간 댓글 서비스는 DAU가 60만에 도달하기도 합니다. 그럼 DAU가 뭘까요? Daily Active User의 앞 글자만 따온 용어로 하루 활성화 golf-dev.tistory.com 무엇이 문제인가? Redis는 10만 TPS의 처리량을 보여주기 때문에 DB write 작업에 한번에 많은 트래픽이 몰릴 수 있습니다. 그리고 이러한 요청이 밀려 들어오면 장애로 이어지기 때문에 꽤나 중요한 문제일 수 있습니다. 또한 JPA를 사용하는 경우 자체적으로 Blocking Call을 하기 때문에 병목이 생길 수 있습니다. 그렇..

이번 포스팅은 인프런 강의를 보고 작성한 포스팅입니다. https://www.inflearn.com/course/%EC%84%A0%EC%B0%A9%EC%88%9C-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%8B%A4%EC%8A%B5/dashboard 실습으로 배우는 선착순 이벤트 시스템 - 인프런 | 강의 선착순 이벤트 시스템을 구현할 때 어떤 문제가 발생할 수 있고 어떻게 해결할 수 있는지 배워봅니다., - 강의 소개 | 인프런 www.inflearn.com 쿠폰 서비스 개발하기 100개의 쿠폰을 선착순으로 개발할 예정이고 1000명이 해당 쿠폰을 사려고 대기하고 있습니다. 다음 상황을 구현해봅시다. @Entity class Coupon(..

https://golf-dev.tistory.com/71 [보안] 개인키와 대칭키 지난번 개인 프로젝트 때 Jenkins 서버에서 배포 서버에 접근하기위해 RSA키와 .pem 파일을 가지고 접근을 허용해주어 배포할 수 있었던 기억이 있었습니다. 그리고 현재 이 방식에 대해 공부해보고 golf-dev.tistory.com 먼저 읽고 오시는 걸 추천드립니다. 개인키와 대칭키에 대해선 설명 따로 없을 예정입니다. 회사에서 ssl 인증서를 새로 붙이는데 문제가 생겨 고생했던 기억이 있는데, 반드시 ssl을 붙이는 이유가 무엇일까 궁금하여 포스팅을 해보려고합니다. SSL 인증서란? SSL 인증서는 웹 사이트나 애플리케이션과 사용자 사이의 안전한 통신을 위해 사용되는 디지털 인증서 입니다. SSL 인증서는 암호화와..
지난번 개인 프로젝트 때 Jenkins 서버에서 배포 서버에 접근하기위해 RSA키와 .pem 파일을 가지고 접근을 허용해주어 배포할 수 있었던 기억이 있었습니다. 그리고 현재 이 방식에 대해 공부해보고 앞으로 프로젝트에서 좀 더 잘 알고 배포하고자 정확히 뭔지에 대해 알기 위해 정리해보려고합니다. 대칭 키 대칭키는 암호화 방식은 암호화와 복호화에 동일한 키를 사용하는 암호화 기법이니다. 데이터를 암호화할 때 사용한 키를 그대로 복호화에도 사용하여 키를 그대로 복호화에도 사용하여 데이터를 해독합니다. 대칭키 암호화는 암호화와 복호화 과정에서의 연산이 빠르기 때문에 대량의 데이터를 빠르게 처리하는 데에 적합합니다. 대칭키 암호화에서는 키라는 값이 중요한 역할을 합니다. 키는 비밀로 유지되어야 하며, 암호화된..
GC는 안쓰는 인스턴스를 처리하기 전에 반드시 stop the world를 하고 이 순간 모든 애플리케이션 동작이 멈추고 GC는 빠르게 불필요한 인스턴스 메모리를 제거합니다. 실제로 회사에서 인터셉터에서 계속 호출되는 똑같은 형태의 객체가 존재하여 플라이웨이트 패턴을 이용하여 자주 참조되는 인스턴스를 static으로 선언하여 GC 동작이 자주 되는 코드를 개선한 경험이 있었는데요. GC가 자주 호출 되면 그 만큼 stop the world가 자주 발생하여 사용자 입장에서 느껴질 정도로 애플리케이션 동작이 지연될 수 있다고 한 글을 읽어 이러한 개선을 했던 것입니다. (메모리 측면도 물론 고려하여) 그렇다면 stop the world가 길어질 수록 성능이 떨어지기 때문에 GC 튜닝의 최종 숙제는 결국 st..

스프링 MVC 구조는 tomcat 엔진에 thread pool을 사용하고 webflux 구조는 netty 엔진의 이벤트 루프를 통해 스레드를 미리 만들어놓은 환경에서 작업을 처리합니다. 이렇게 미리 만들어놓고 쓰는 이유는 스레드를 생성될 때마다 비용이 비싸기 때문에 미리 만들어 놔야 한다고 알고 있을겁니다. 이번 포스팅에서는 그 이유에 대해 알아보도록 하겠습니다. One-To-One multi-threading model 먼저 JVM에서의 다중 Thread 모델은 one to one 모델을 따르고 있습니다. 그렇다면 이 모델은 도데체 무엇이고 thread pool 등장 배경과 무슨 관계 일까요? one to one 모델은 사용자 수준의 thread와 커널 스레드가 1대 1로 연결되어있는 형태를 말합니다...

GC를 알아보기 전 stop-the-world 라는 용어를 살펴보자, GC을 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것이다. stop-the-world가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춘다. 어떤 GC 알고리즘을 사용하더라도 발생 되며 GC작업이 완료된 이후에 다시 중단했던 작업을 시작한다. 대게 GC 튜닝은 이 stop-the-world 시간을 줄이는 것이다. Java 프로그램 코드에서 메모리를 명시적으로 지정하여 해제하지 않는다. 그렇기에 이 작업을 GC가 더이상 필요없는 객체를 찾아 지우는 작업을 한다. 가비지 컬렉션은 두 가지 가설하에 만들어 진 알고리즘이다. 대부분 객체는 금방 접근 불가능 상태가 된다. 오래된 객체에서 젊은 객체로의 참조는 아..

자세한 건 Github를 참고해주시기 바랍니다. 배경 개인 프로젝트를 진행하면서 redis를 인증번호 저장을 목적으로 개발을 하고 테스트 하던 과정에서 저장이 되더라도 get을 하지 않는 이슈가 발생하였습니다. 이를 트러블 슈팅하기 위해서 포스팅을 하게 되었습니다. 원인 @Transactional fun authorizePhoneNumber(phoneNumber: String, authNumber: Int): Boolean { val secureNumber = authNumberRepository.findByIdOrNull(phoneNumber.substring(4)) ?: throw SecureNumberNotFoundException(phoneNumber) return secureNumber.toIn..

JPA란? 이 관계를 알아보기 위해 JPA를 쓰는 이유에 대해서 알아봐야합니다. JPA는 ORM 기술 중 하나로 hibernate를 기반으로 자바의 객체와 DB 테이블 간의 패러다임 불일치 문제를 해결해주는 기술입니다. RDB와 Object는 엄연히 다른 존재이지만 이 불일치를 해결하기 위해 여태 많은 개발자들은 RDB 중심의 애플리케이션 개발을 주로 했습니다. 하지만 JPA가 나오면서 부터 이 불일치 문제를 해결하는 장점을 바탕으로 객체 중심의 개발이 이루어지기 시작했는데 이것이 바로 JPA의 장점이라 할 수 있습니다. public class Member { private Long id; private String email; private String password; private String na..
- Total
- Today
- Yesterday
- 면접준비
- 동시성
- 자바
- Spring
- docker
- 면접
- DevOps
- 게시판
- thread
- 인터뷰
- 프로젝트
- 취준
- 코드
- MySQL
- 개발
- lock
- Redis
- 취업
- java
- 면접 준비
- DB
- 프로그래밍
- IT
- 개발자
- 백엔드
- CS
- Kotlin
- 취업준비
- JPA
- 코딩
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |