전체 글
-
Spring @Transactional에 대한 모든 것공부 이야기/JAVA 2025. 5. 18. 12:17
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/jdbc/datasource/DataSourceTransactionManager.html DataSourceTransactionManager (Spring Framework 6.2.7 API)Return a transaction object for the current transaction state. The returned object will usually be specific to the concrete transaction manager implementation, carrying corresponding transaction state in a ..
-
mutex 개념으로 살펴보는 Python의 GIL공부 이야기/그냥 찾아보는 공부 2025. 5. 2. 19:40
Global Interpreter Lock이라고 불리는 파이썬의 GIL은 CPython 레벨에서 파이썬 오브젝트에 대한 mutex 잠금 장치이다.여기서 잠깐! mutex란?mutex는 latch, lock과 다르게 매우 빠르고 가벼운 잠금 기법이다. -> 매우 빠르다는 뜻은, 잠금 획득부터 해제까지 소요되는 시간이 짧다는 뜻이고-> 가볍다는 뜻은, 잠금 대상의 메모리 할당이 상대적으로 작다는 뜻이다.오라클 기준으로, 블록보다는 행이, 행보다는 파라미터 변수가.자바 기준으로, 클래스보다는 변수 하나가 메모리 할당이 작기 때문에 더 빠르고 가벼운 잠금이 가능하다.mutex는 보통 이렇게 적게 메모리를 할당받는 객체에 대해 짧은 시간 동안만 잠금을 유지할 때 사용된다.latch랑 lock처럼 명시적 acqui..
-
인증 방식 세 가지공부 이야기/그냥 찾아보는 공부 2025. 1. 5. 10:28
인증은 산소 같은 존재다.분명 사용하고 있는데 그 개념이 너무 아리송송하기 때문이다.인증 방식에는 세 가지가 있다.먼저 인증 정보를 어디서 관리하냐에 따라 세션 방식, 토큰 방식으로 구분할 수 있다.세션 방식은 서버의 DB에서 정보를 관리하는 방식이고클라이언트의 쿠키 저장소를 활용하는 방식이 토큰 방식이다.세션 방식은 매번 DB 조회를 하기 때문에 서버 부담이 될 수 있다.토큰 방식은 중간 공격자에 의한 보안 위험이 발생할 수 있다.마지막 방식은 OAuth로 네이버 로그인, 구글 로그인과 같이 제 3의 공증 기관을 통해 인증하는 방식이다.
-
Redis를 사용하는 이유 (웹)공부 이야기/REDIS 2025. 1. 5. 10:19
웹에서 레디스를 사용하는 진정한 이유는 Session 관리 때문이다.사용자(유저) 인증 방식에는 크게 1.Session 2.Token 방식이 있다.인증에서 필요한 데이터를 저장하는 공간으로 나눈 것인데서버에서 저장하는 방식이 Session이다.Session 방식에 사용되는 인증 데이터는 크기가 크진 않지만 빈번히 조회하는 특성을 가진다.크기가 크지 않은 탓에 DB로 분리 저장할 필요가 없으며 빠른 인증 처리를 하기 위해 redis를 쓰게 되는 것!
-
[docker] 완전 기본 개념 - docker compose, docker hub, -dit, attach, commit & push카테고리 없음 2024. 12. 22. 15:57
https://youtu.be/YmcgYejtGAg?si=NVQzhLej_-IpRKzt참고했던 유튜브 영상1. 도커 컨테이너, 이미지에 대한 개념은 이해 완료 -- Docker Compose, Docker Hub2. 도커 컴포즈는 하나 혹은 여러 개의 이미지를 이용해 실행된 N개의 컨테이너를 조합으로 묶어서 사용하기 위해 나온 개념3. MySQL의 Replica 서버 3대를 한 쌍으로 묶어서 관리하는 것이 가능하다.4. 도커 허브는 클라우드 서버에 컨테이너를 업로드 및 다운로드할 수 있도록 하는 기능 -- dit, attach 옵션5. dit은 docker run 명령어로 컨테이너를 실행할 때, 이미지 pull을 동시에 실행할 때 사용하는 명령어docker run -dit --name myubuntu u..
-
리눅스의 io_uring에 대해공부 이야기/그냥 찾아보는 공부 2024. 11. 17. 21:45
1. 리눅스의 Async I/O는 일반 I/O에서 발생하는 블로킹 문제를 해결해주긴 함2. 그 이유는 사용자가 파일 시스템에 데이터를 쏘면 커널이 별도의 메모리 공간을 할당해서 처리 응답을 저장하기 때문임3. 사용자는 커널이 대신 응답 처리를 해줄 때까지 기다릴 필요가 없음4. 하지만 사용자 공간, 커널 공간 두 곳 모두 동일한 메모리를 할당해야 하는 비효율이 생김5. 이를 해결하기 위해 io_uring은 사용자, 커널 양쪽 다 접근 가능한 공유 메모리 영역을 만들어 놓고 관리함6. 두 번 복사할 필요가 없음7. 이는 메모리 공간의 효율 향상뿐만 아니라 복사 행위에서 발생되는 CPU cost도 줄임8. 한편, 공유 메모리 영역에는 요청 원형 큐, 완료 원형 큐를 둠9. AIO는 요청이 발생할 때마다 시스..
-
[JS] Closure란?공부 이야기/그냥 찾아보는 공부 2024. 9. 15. 18:14
함수가 실행됐을 때의 스코프(컨텍스트)를 기억하는 기능을 뜻한다.여기서 '스코프'란 지역변수가 될 수 있다.무슨 의미인지 와닿지 않을 수 있기 때문에 아래 코드를 통해 설명하겠다.function createCounter() { let count = 0; return function() { count += 1; return count; };}const counter = createCounter();console.log(counter()); // 1console.log(counter()); // 2console.log(counter()); // 3 js는 다른 언어와 다르게 함수를 값을 취급해서 넘길 수 있다.함수를 값으로 취급했기 때문에 고차함수, 동적 처리, 콜백..
-
[Redis] Redis는 key expiration을 어떻게 관리할까?공부 이야기/REDIS 2024. 6. 9. 20:47
1. CPU가 1초마다 전체 키를 순회하면서 expire을 체크하는 방식일까? (Polling)2. 이 방법은 CPU 사용과 같은 자원 소모가 막심할 것으로 보인다.3. expire time이 설정된 키는 TTL(Time2Live) 값을 가진다.4. 이 값은 Secondary Hash Table에 저장된다.5. 키에 접근할 때 (GET), 해당 테이블에 값이 있는지 없는지 먼저 확인한다.6. 만약 만료되었다면, 키를 제거하고 nil을 반환한다.7. 즉, Redis가 1초마다 전체 키를 순회 및 체크하는 방식이 아닌, 만료용 보조 테이블을 통해 관리한다.8. 하지만 여기서 클라이언트가 해당 키에 단 한 번도 접근하지 않는다면?9. 만료가 되어도 키가 제거되지 않은 채 공간만 차지하고 있을 것이다.10. 이..