나는 서비스를 사용하기 전에 자주 망설인다.
·
UX
이 페이지를 떠나면 다시는 해당 기회를 잡을 수 없습니다.위와 같은 문구로 사용자들의 떠나려는 발걸음을 멈춰 세우려는 의도된 다크 패턴을 심심치않게 나는 마주할 수 있었다.다크 패턴 : 웹사이트나 앱에서 사용자를 속이거나 혼란스럽게 만들어, 의도하지 않은 구매, 정보 제공, 구독 가입 등을 유도하는 교묘하고 기만적인 사용자 인터페이스(UI) 디자인 전략 물론 다시는 볼 수 없다라는 문구와는 다르게 우리는 다시금 해당 페이지에 접근하여 동일한 구성의 상품 혹은 서비스를 만날 수 있다.하지만 나는 해당 경험이 딱히 좋은 기억으로 자리 잡지 못했다.나는 많은 것을 꼼꼼하게 비교하고 결정하고 싶은 사용자이다.그러면서도 "마지막" 기회 등이라는 말에 꽤나 민감한 사용자이다.이렇다보니 나는 해당 문구를 마주하게 ..
[2일차] 1-2 들어올때는 마음대로였겠지만 나갈 때는 아니란다
·
카테고리 없음
30가지 심리학 이야기로 풀어보는 UX 디자인 - 윤하린로츠 모텔과 의도된 다크 패턴📌 핵심 개념로츠 모텔: 바퀴벌레 덫을 의미. "바퀴벌레가 체크인은 하지만 체크아웃은 하지 않습니다!"라는 기발한 카피라이팅이지만, 해당 장에서는 의도적인 다크 패턴 디자인으로 인해 빠져나오지 못하는 사용자들의 모습을 빗대어 표현하고 있다.현상 유지 편향: 특별한 이득이 주어지지 않는 이상 현재의 방식을 바꾸지 않으려는 경향피츠의 법칙: 시작 지점에서 목표물까지 도달하는 시간이 목표물의 크기와 목표물까지의 거리에 따라 달라진다는 인간-컴퓨터 상호 작용 이론피크 엔드 법칙: 인간이 경험 중 감정의 절정과 경험의 마지막에서 느끼는 감정들로 경험 전체를 평가한다는 이론반응 저항: 특정 행동의 자유를 위협하는 환경에서 발생하는..
[스터디 1일차] 1-1 디자이너의 날갯짓이 불러일으킨 태풍
·
UX
30가지 심리학 이야기로 풀어보는 UX 디자인 - 윤하린UX 디자인의 코브라 효과와 다크 패턴📌 핵심 개념코브라 효과: 긍정 의도로 시작했으나 바람직하지 않은 결과를 초래하는 상황다크 패턴: 사용자를 속이며 기업 이익을 극대화하는 디자인💡 오늘의 인사이트챗터 예제들이 코브라 효과와 다크 패턴의 공통점을 보인다는 문장을 읽고 처음엔 의아했는데, 다음 내용을 보고 이해가 되었습니다.기업이 의도적으로 사용자를 속이려 한 건 아니지만, 결과적으로 부정적 경험을 주면 사용자는 "속았다"고 느낄 수 있다는 점이 저에게 있어 신선한 접근이었습니다.UX 관점은 단기 목표뿐 아니라 장기적 효과에 대한 고민이 기본으로 필요하다는 걸 느꼈습니다.❓ 문득 든 궁금증UX는 모든 사용자를 아우를 수 없는데, 실무에서는 어느 ..
C# 동기(Wait) vs 비동기(await) 대기 방식 비교
·
C#
개요C#에서 순차적인 작업 실행이 필요할 때, 대기 방식을 어떻게 구현하느냐에 따라 동작이 완전히 달라집니다. 특히 WinForms 기반 브라우저 자동화 작업에서 이 차이를 이해하는 것이 중요합니다.1. 동기 방식 (Wait - 블로킹)구현 예시public bool Wait(int TimeOut){ int LoadingSleep = 10; int i = 0; while (true) { Application.DoEvents(); // UI 이벤트 처리 Thread.Sleep(LoadingSleep); // 10ms씩 대기 i += LoadingSleep; if (i >= TimeOut) { r..
옵티마이저의 인덱스 선택
·
DB
여러 인덱스가 있을 때 DB는 어떻게 선택할까?1. 옵티마이저란옵티마이저(Optimizer)는 SQL 쿼리를 실행할 때 가장 효율적인 실행 계획을 결정하는 DB 내부 엔진이다. 여러 인덱스가 존재할 때 어떤 인덱스를 사용할지, 또는 인덱스를 사용하지 않고 풀스캔을 할지 자동으로 판단한다.2. 예시 상황다음과 같은 테이블과 인덱스가 있다고 가정한다. sql-- 테이블 생성CREATE TABLE TESTTABLE ( A NUMBER PRIMARY KEY, -- PK 인덱스 자동 생성: (A) B NUMBER, C NUMBER);-- 추가 인덱스 생성CREATE INDEX IDX_TESTTABLE_C_B ON TESTTABLE (C, B);현재 인덱스 상태:인덱스명컬럼생성 방식PK 인덱..
데이터베이스 인덱스
·
DB
1. 인덱스란 무엇인가인덱스는 책의 목차나 색인과 같은 개념이다. 책에서 특정 내용을 찾을 때 처음부터 끝까지 읽는 대신 목차를 보고 바로 해당 페이지로 가는 것처럼, 데이터베이스도 인덱스를 통해 원하는 데이터의 위치를 빠르게 찾는다.인덱스가 없는 경우: 테이블 전체를 처음부터 끝까지 스캔 (Full Table Scan)인덱스가 있는 경우: 정렬된 구조에서 빠르게 위치 탐색 (Index Seek/Scan)2. 인덱스의 내부 구조 (B-Tree)대부분의 RDBMS는 B-Tree(Balanced Tree) 구조를 사용한다. [50] ← 루트 노드 / \ [20,..
LEFT JOIN 이 뭔데,
·
DB
LEFT JOIN 기본 개념왼쪽 테이블 기준으로 오른쪽 테이블을 결합한다.왼쪽 테이블의 모든 행은 무조건 포함되고, 매칭되는 오른쪽 데이터가 없으면 NULL로 채워진다.. sqlSELECT *FROM 왼쪽테이블 ALEFT JOIN 오른쪽테이블 B ON A.id = B.id시각적 예시테이블 구조 sql-- 사원 테이블 (왼쪽)employees┌────┬────────┬──────────┐│ id │ name │ dept_id │├────┼────────┼──────────┤│ 1 │ 김철수 │ 10 ││ 2 │ 이영희 │ 20 ││ 3 │ 박민수 │ NULL │ -- 부서 미배정└────┴────────┴──────────┘-- 부서 테이블 (오른쪽)departm..
[MyBatis] PreparedStatement와 #{}, ${} 차이점 정리
·
DB
PreparedStatement 개념PreparedStatement는 SQL을 미리 컴파일해두고, 실행 시점에 파라미터만 전달하는 방식이다.// 일반 Statement (위험)String sql = "SELECT * FROM users WHERE name = '" + userName + "'";// userName = "admin' OR '1'='1" 이면 SQL Injection 발생// PreparedStatement (안전)String sql = "SELECT * FROM users WHERE name = ?"; // ? = 플레이스홀더PreparedStatement pstmt = connection.prepareStatement(sql);pstmt.setString(1, userName); /..
세마포어(Semaphore) 완전 이해하기
·
CS
멀티스레드 환경에서의 permit, acquire, release, drainPermits 개념 정리세마포어(Semaphore)는 운영체제와 멀티스레드 프로그래밍 전반에서 사용되는 대표적인 동기화 기법이다.여러 스레드가 동시에 공유 자원에 접근하는 것을 제어하며, 정해진 수의 스레드만 특정 자원에 접근하도록 제한하는 역할을 한다.세마포어의 핵심 개념permit의 의미와 acquire release의 동작drainPerints의 동작1. 세마포어의 기본 개념세마포어는 내부적으로 정수 카운터 하나를 가진다. 이 카운터는 현재 자원에 접근할 수 있는 스레드의 수를 의미하며, 이를 permit이라고 한다.permit이 3이면 동시에 3개의 스레드가 자원 접근 가능permit이 0이면 스레드는 접근할 수 없고 대..
소유권에 대하여, Mutex vs Semaphore
·
CS
멀티스레딩 환경에서 동기화를 위해 흔히 사용하는 도구가 Mutex와 Semaphore이다. 둘 다 임계 구역에 접근하는 스레드를 제어한다는 공통점이 있지만, 개념과 동작 방식에는 중요한 차이가 있다. 이 글에서는 특히 많은 개발자들이 혼동하는 Semaphore.Release()의 의미와 WaitOne()의 동작을 중심으로 정리해보겠다.Mutex와 Semaphore의 핵심 차이구분MutexSemaphore역할단 하나의 스레드만 접근 허용허용 가능한 스레드 수 제한방식하나의 키(잠금)를 획득/반납카운터를 증가/감소하며 허용량 관리상태Lock / UnlockCount 증가 / 감소사용 예단일 공유 자원 보호동일 자원에 여러 스레드 허용 (최대 N개)Mutex는 말 그대로 "열쇠" 개념이다. 열쇠는 하나이며, ..
Mutex(뮤텍스), Semaphore(세마포어), Lock
·
CS
세마포어, 뮤텍스, Lock의 관계와 차이점1. 관계도와 개념동기화 메커니즘 (Synchronization Primitives)├── 세마포어 (Semaphore) - 카운팅 기반├── 뮤텍스 (Mutex) - 세마포어의 특수한 경우 (바이너리)└── Lock/Monitor - 언어별 구현 ├── C# - lock 키워드 ├── Java - synchronized └── Python - threading.Lock()2. 각 메커니즘 상세 비교특성세마포어뮤텍스Lock (C#)카운트N개 (다중)1개 (바이너리)1개범위프로세스 간 가능프로세스 간 가능프로세스 내부만소유권없음있음 (스레드 소유)있음 (스레드 소유)재진입불가능가능가능성능중간느림 (커널 객체)빠름 (유저 모드)용도리소스 풀 관리프로..
단일 실행 프로그램 만들기 (feat. public Mutex(bool initiallyOwned, string name, out bool createdNew) 생성자)
·
C#
C# Mutex로 단일 실행 프로그램 만들기1. Mutex란 무엇인가?Mutex(Mutual Exclusion)는 프로세스 간 또는 스레드 간에 하나의 리소스를 단독으로 사용하도록 보장하는 동기화 개체이다.특히 Windows OS에서 Mutex는 프로세스 간 공유가 가능하며, 이를 활용하면 하나의 프로그램이 여러 번 실행되는 것을 방지하는 단일 실행(Single Instance) 기능을 구현할 수 있다. 2. Mutex 생성자 살펴보기public Mutex(bool initiallyOwned, string name, out bool createdNew)각 인자의 의미는 다음과 같다:매개변수설명initiallyOwnedMutex 생성 시 즉시 lock(소유권)을 획득할지 여부name생성할 Mutex 이름..