분류 전체보기 52

Javascript Event Loop로 알아보는 Event Driven Programming

Event Driven Programming자바스크립트나 파이썬, Redis 등 싱글 스레드 기반으로 동작하는 프로그래밍 도구들을 보면 모두 내부적으로 이벤트 기반 프로그래밍(Event Driven Programming) 을 활용한다는 걸 알 수 있다. 다중 스레드 기반으로 운영되긴 하지만 네트워크 프레임워크 Netty 역시 이벤트 기반 프로그래밍 방식으로 구현되어 있어서 이벤트 루프가 핵심이라고 한다. 이벤트 기반 프로그래밍은 프로그램의 동작이 이벤트에 의해 트리거되는 방식으로 설계되는 프로그래밍 패러다임이다. 쉽게 말하면, 이벤트들을 처리하기 위해서 작업을 큐에 넣고 이벤트가 발생하면 꺼내서 처리하는 방식인 셈이다. 멀티 스레딩의 복잡성을 버리고, 프로그램의 구조를 단순화하고 비동기 작업을 보다 용이..

개발/Javascript 2025.01.12

Lock-Free 알고리즘 살펴보기(CAS, Volatile, Java Atomic Variables)

들어가기 앞서JVM이 새로운 객체를 생성할 때 발생하는 메모리 할당 방식을 보면 CAS 라는 개념이 나온다. 이 글에서는 자바를 기반으로 CAS 연산에 대해 좀 더 구체적으로 알아보고자 한다. 먼저 연관되는 배경지식을 알아보자.(미리 말하지만 알아야 될 내용이 많아서 멀리 돌아간다..) 멀티쓰레드가 동작하는 환경에서 데이터의 안정성을 보장하는 방법이 뭐가 있을까? synchronized(동기화)대표적인 방법이 Mutex나 Semaphore를 이용한 Lock 기반 알고리즘이 있다. 이 둘은 바이너리 세마포어(동기화 대상이 오직 하나뿐)이냐 카운팅 세마포어(동기화 대상이 하나 이상)이냐에 따라 차이점이 존재하지만 결국 동시에 공유 자원에 접근하는 것을 막기 위해 Critical Section(임계 영역)에 ..

개발/Java|Spring 2024.12.08

대용량 테이블을 위한 DB 파티셔닝

들어가기 앞서회사 내 DB 중에는 매월 약 40만 건 정도의 데이터가 누적되는 테이블이 존재한다. 게다가 10년동안 쌓여서 현재 약 4천만 건 정도 된다. 테라 단위의 빅데이터를 다루는 회사에 비할 바는 아니지만 테이블 하나에 조금 많은 양의 데이터를 저장하고 있는 것은 맞다. 가만히 놔두면 테이블이 점점 비대해져 아무 생각없이 쿼리를 날렸다가는 이도저도 못 하는 난처한 상황을 맞닥뜨리게 될 것이다.매월 약 40만건씩 늘어나는 테이블을 어떻게 관리하고 있을까?그렇다면 우리의 DB는 어떻게 되어 있을까?호기심은 여기서부터 시작했다.해당 테이블 DDL을 잠깐 보겠다.(실제와 다른 예시이다.)DDL (Data Definition Language) 데이터 정의어 데이터베이스를 정의하는 언어를 말하며 데이터를 생..

개발/DevOps 2024.12.08

트랜잭션과 격리 수준(Isolation Level)

1. 트랜잭션(transaction)이란?trans와 action이 합쳐진 단어로, trans는 변화나 이전을 의미하고, action은 행동이나 조치를 통해 뭔가 진행이 되는 걸 의미한다.데이터베이스에서 트랜잭션이란, 하나의 논리적 작업 단위를 구성하는 일련의 연산들의 집합을 트랜잭션이라고 한다. 주로 다양한 데이터 항목들을 엑세스하고 갱신하는 프로그램 수행 단위를 의미한다. 트랜잭션이 성공하면 전체 작업이 정상적으로 완료되어야 하고, 실패하면 아무 것도 실행되지 않고 처음 상태로 돌아가야 하는 등 흔히 ACID 라고 일컫는 특징이 있다.ACID란?ACID(원자성, 일관성, 독립성, 지속성)는 데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어이다. 즉 데이터베이스의 동시..

개발/DevOps 2024.12.08

SQL 기본 문법

*해당 문서는 Oracle을 기본으로 하고 있습니다. 명령어 종류 명령어 설명 데이터 조작어 (DML : Data Manipulation Language) SELECT INSERT UPDATE DELETE 데이터 제어어 (DCL : Data Control Language) GRANT REVOKE 데이터 정의어 (DDL : Data Definition Language) CREATE ALTER DROP RENAME TRUNCATE 트랜젝션 제어어 (TCL : Transaction Control Language) COMMIT ROLLBACK SAVEPOINT - 테이블 생성과 데이터 조회 / 입력 / 수정 / 삭제 CREATE TABLE 테이블명 ( 칼럼명1 데이터 유형 [제약조건], 칼럼명2 데이터 유형 [..

개발/Etc 2023.06.13

스프링 HTTP 헤더와 요청 파라미터 조회하는 방법

1. @Controller에서 헤더 정보 가져오기 헤더 정보가 필요한 경우가 많은데 스프링 @Controller에는 파라미터를 통해 헤더뿐만 아니라 많은 정보를 가져올 수 있다. 사실 자주 사용하는 것만 기억나고 가끔 쓰게 되는 건 찾아보게 된다. 아래 공식 매뉴얼 참고. @RequestMapping("/headers") public String headers( HttpServletRequest reqeust, HttpServletResponse response, HttpMethod httpMethod, // method 정보 Locale locale, // 위치 정보 @RequestHeader MultiValueMap headerMap, // 모든 헤더 정보 @RequestHeader("host") S..

개발/Java|Spring 2023.04.10

스프링 핵심원리 기본 - IoC, DI, ApplicationContext, 의존관계 주입 등

아주 오랜만에 김영한님 강의를 핵심원리부터 다시 보기 시작했다. 기본적인 내용이지만 다시 들어보니 머릿속이 좀 정리가 되는 기분이다. 그 땐 몰랐는데 다시 보니 팍팍 꽂히는 내용도 수두룩하다. 도대체 처음 듣던 당시엔 뭘 이해했던 건가 싶어 자괴감이 들기도... 그래도 그간 줏어듣고 코드 쫌 깨작거렸다고 이해도가 약간은 올라갔나보다. 또 돌아서면 까먹을 게 뻔하니 조금이라도 기록하고 남겨보자. 내용이 방대해서 부분적으로 발췌하고 요약했다. 1. 제어의 역전(IoC) 스프링은 좋은 객체 지향 설계를 위해 역할과 구현을 분리시킬 수 있는 많은 방법을 제공하는데, 그 중 가장 기본적이고 좋은 도구가 바로 DI 컨테이너이다. 구현 객체는 자신의 로직을 실행하는 역할만 담당하고 프로그램의 제어 흐름은 스프링이 맡..

개발/Java|Spring 2023.04.06

좋은 객체 지향 설계의 5가지 원칙 SOLID

SOLID 원칙 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리 SRP(Single Responsibility Principle) 단일 책임 원칙 OCP(Open/Closed Principle) 개방 폐쇄 원칙 LSP(Liskov Substitution Principle) 리스코프 치환 원칙 ISP(Interface Segregation Principle) 인터페이스 분리 원칙 DIP(Dependency Inversion Principle) 의존관계 역전 원칙 SRP 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수 있고, 작을 수 있다. 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단..

개발/Java|Spring 2023.03.29

javascript에서 onclick과 addEventListener 차이점(+이벤트 캡처링 vs. 버블링)

자바스크립트 onclick과 addEventListener를 둘 다 사용하다가 문득 두 메서드의 차이가 궁금해져서 간략히 정리해 본다. onclick - 단일 콜백 함수(리스너)만 지정 사용 가능 - 하나의 이벤트만 사용하므로 중복될 경우 앞선 이벤트를 덮어씀 - 거의 모든 브라우저에서 작동 - 구형 IE(9 이하)에서도 동작 addEventListener - 모던 자바스크립트로 넘어오면서 새롭게 추가 - 이벤트 중첩이 가능함 - 여러 개의 이벤트를 등록해도 모두 동작(덮어쓰지 않음) - IE9 이상 거의 모든 브라우저에서 작동 - 이벤트 전파 단계(캡처링 vs. 버블링) 조절 가능 (3번째 options 매개변수) 이벤트 캡처링 vs. 버블링 (Propagation) 기본값은 버블링 = {capture..

개발/Javascript 2023.03.29

토이프로젝트 Plus Typo

토이프로젝트를 하나 완성했다. 앞으로 수정하고 업데이트 할 일이 많아보이는데, 조급해하지 않고 천천히 하려고 한다. 의식의 흐름대로 쓴 작업 수기는 이미 네이버 블로그에 올렸기 때문에 여기선 거기서 못 다 한 로고 애니메이션을 코드와 함께 풀어볼까 한다. 완성된 사이트 : http://typo.co.kr/ Plus Typo Combine photos and text to create an image for Instagram. typo.co.kr 이전에 리액트를 깨작거리면서 자바스크립트에 대한 갈증이 많이 생겼었다. 자바스크립트도 잘 모르는데 대뜸 리액트부터 들이박다보니 너무 많이 허둥댔던 기억이 난다. 그래서 이번에 html, css과 함께 바닐라 자바스크립트만 가지고 작업을 마무리 했다. 어차피 Nod..

개발/Etc 2023.03.20
728x90
반응형