728x90

Computer Science 403

[MySQL/Mac] root 비밀번호 초기화하기

개인 컴퓨터에서 개발을 하다보면 DB를 로컬 환경에 설치하게 되는데, 그때마다 root 비밀번호가 나를 곤란하게 한다. 비밀번호를 설정 안하고 싶지만, 그래도 형식상으로 설정을 하다보면 늘 비밀번호를 까먹게 된다. root 비밀번호를 초기화하는 방법에 대해 알아보자. MySQL 8 Mac에서 homebrew로 설치 위 환경을 전제로 썼지만, Mac OS + MySQL이라면 명령어는 거의 비슷할 것이다. (MySQL 버전에 따라 다를 순 있다.) 1. 서버 종료 후, mysqld_safe로 인증 없이 실행하도록 서버 실행 아래 명령어가 제대로 동작하지 않거나, 명령어가 없다고 뜨는 경우 환경변수를 체크해보도록 하자. mysql.server stop mysqld_safe --skip-grant-tables ..

Computer Science/DB 2024.02.12

프록시(Proxy) 패턴에 대해 알아보자.

프록시 패턴(Proxy Pattern)? 특정 객체로부터의 "접근을 제어"하는 대리인(객체)을 제공한다. 어떤 객체를 사용하려고 할 때, 객체를 직접 참조하는 것이 아니라 해당 객체에 대응하는 일종의 대리인 역할을 하는 객체를 통해서 대상에 접근하는 방식으로, 직접 참조하려던 객체가 메모리에 존재하지 않아도 기본적인 정보 참조나, 실제 사용 시점까지 생성 시점을 미루는 등의 행위가 가능해진다. 대표적인 세 가지 종류 원격 프록시 다른 JVM 상에서 존재하는 객체를 대신하는 로컬 객체를 만들어 사용한다. 로컬 객체에 있는 프록시 메서드를 호출하게 되면 원격 객체의 메서드를 호출하여 관련 작업을 처리하고 이 처리 결과를 넘겨받아서, 실제 로컬 환경에 원격 객체가 존재하는 것처럼 동작하게 하는 방법이다. 가상..

NGINX(엔진엑스) 명령어 및 옵션 정리

명령어 기본 명령어 및 옵션 설명 nginx nginx 기동 -?, -h 도움말 출력 -v nginx 버전 정보 출력 -V nginx 버전 정보 + 빌드 정보 및 바이너리에 포함된 모듈 + 설정 파라미터 정보 -t 설정 테스트. 설정을 변경했을 때 구문 체크 등에 활용 -T -t와 동일하게 테스트를 진행. 추가적으로 테스트 결과를 stdout으로 출력 -q 설정 테스트를 진행할 때 오류가 아닌 메세지는 제외하는 옵션 -p prefix nginx 경로 prefix를 지정 -c file 기본 설정 파일 대신 지정한 파일을 설정 파일로 사용 -e file 기본 파일 대신 오류 로그 파일을 사용하여 저장 stderr를 입력하면, 표준 오류 파일을 선택 -g directives 글로벌 설정을 설정할 때 사용 ng..

RAID(레이드)란 무엇인가?

Redundant Array Independent Disks 복수 배열 독립 디스크 여러 디스크를 배열해서 가용성 및 고성능, 안정성 등을 위해 사용하는 기술 RAID의 장점 운용 가용성 및 안정성 증대 디스크 용량 증설 용이성 디스크 I/O 성능의 향상 종류와 구성 방식 RAID 0 Concatenate 방식, Stripe 방식으로 나뉨 Concatenate 두 개 이상의 디스크에 데이터를 순차적으로 쓰는 방식 디스크 기본 공간이 부족할 때 데이터는 보존하여 여분의 디스크를 볼륨에 포함하여 용량 증설이 가능 RAID 0의 특성 상 디스크에 하나라도 장애가 발생하면 복구가 어렵고 패리티 체크를 지원하지 않음 Stripe RAID 0의 일반적인 방식 두 개 이상의 디스크를 랜덤하게 쓰는 방식 데이터 사용 ..

전략 패턴(Strategy Pattern)

Strategy Pattern이란? 교환이 가능한 객체를 정의하고, 런타임에 설정하고 변환하는 패턴 같은 문제를 해결하는 여러 알고리즘을 클래스별로 캡슐화하고 필요에 따라 교체할 수 있는 설계로, 이를 런타임에 수행할 수 있게 하려는 패턴이다. 예시 그림과 예시 그림에 있는 용어들에 대해서 정리하고 가자. Strategy 인터페이스나 추상 클래스로 외부에서 동일한 방법으로 알고리즘을 호출하는 방법을 명시 ConcreteStrategyA, B, C 앞서 설계한 추상 클래스 혹은 인터페이스를 필요 기능에 따라 실제 구현한 클래스 Context 전략 패턴을 이용하는 역할을 수행한다. 필요에 따라서, 동적으로 구체적인 전략을 바꿀 수 있는 setter를 제공한다. 사용하는 쪽에서는 Strategy만 바꿔주면 코..

템플릿 메서드 패턴(Template Method Pattern)

템플릿 메서드 패턴(Template Method Pattern) 슈퍼 클래스에서는 알고리즘의 구조를 정의한다. 서브 클래스에서는, 슈퍼 클래스가 정의한 구조는 변경하지 않고 그 내용만 오버라이딩한다. 알고리즘이 동일하여 같은 역할을 하는 메서드들이 여러 벌 생성될 수 있지만, 세부 구현은 다른 형태로(DB만 다르거나, 주고 받는 내용만 다르거나...) 이루어진 경우에 유용하다. 대부분 어떤 것을 만드는 클래스들로(XXXMaker, XXXBuilder) 구현하면서 예시를 드는데, 샌드위치 메이커라는 컨셉으로 한 번 구현해봤다. 샌드위치는 안에 들어가는 재료가 저마다 다르고, 빵의 끝을 잘라낼 수도 있고, 먹기 편하게 아예 반으로 자를 수도 있고 다양한 형태로 조리될 수 있다. 만드는 과정이나 재료는 여러모..

무엇이 다른가? HTTP/1.1 vs HTTP/2

HTTP/1.1 HTTP/1.0 릴리즈 이후(1996) 표준으로 등록된 새로운 프로토콜(1999) 표준 프로토콜이라 여전히 많은 서비스에서 이를 기본 버전으로 사용하고 있음 특징 Persistent Connection 기존 HTTP/1.0은 연결 당 하나의 요청만 처리 가능 HTTP/1.1부터는 Persistent 기능으로 여러 요청이 가능하도록 개선 HTTP Pipelining TCP 안에 2개 이상의 HTTP 요청을 담아 지연을 줄이는 방식 각각의 요청을 보내고 이에 대한 응답을 받아서 처리할 수 있게 함 Host Header HTTP/1.0은 1개의 IP = 1개의 도메인 HTTP/1.1에서는 Host 헤더의 추가로, Virtual Hosting이 가능해져 1개의 IP = N개의 도메인 지원 인증 ..

윈도우에 Redis 설치해서 사용하기 with Docker

필요한 것 윈도우 PC Docker Desktop 약간의 시간 Docker Desktop 설치 Docker 설치는 아래 경로에서 진행하면 된다. https://www.docker.com/products/docker-desktop 설치하고 재시작이 한 번 필요하므로 재시작을 해줘야 한다. x64프로세서(특히 AMD)를 사용하는 경우, WSL 2가 없으면 Docker Engine이 실행이 안된다. 별도로 설치해줘도 되고, 재시작을 하면 설치하라고 안내 해주는 경로가 나오는데 그곳에서 설치하면 된다. 경로를 찾지 못한 사람들은 아래 경로에서 "x64 머신용 최신 WSL2 Linux 커널 업데이트 패키지"를 설치하고, WSL 2를 기본 버전으로 설정하면 된다. https://docs.microsoft.com/k..

Computer Science/DB 2021.12.04

MySQL(MariaDB)의 EXPLAIN으로 실행 결과 분석하기

실행 계획이라고 하면, 쿼리가 어떻게 데이터를 불러오는지에 대한 계획을 의미한다. 실행 계획을 통해서 어떤 테이블이 어떤 방식으로 조회됐는지 확인할 수 있다. 조회 쿼리의 인덱스 사용 유무를 확인할 때, 전체 조회 대상 중에서 검색 조건에 의해 어느정도의 비율로 필터링 되는지와 같이 성능 튜닝에 필요한 요소들을 확인하고자 할 때 쿼리 실행 계획을 확인해보는 것이 좋다. 실행 계획을 확인하는 데 있어서, MySQL(MariaDB)에서는 EXPLAIN, DESCRIBE, DESC를 사용한다. 세 명령어 모두 같은 결과를 내기 때문에 편한 걸 사용하면 된다.(필자는 EXPLAIN을 많이 쓴다.) 사용 예시 EXPLAIN SELECT * FROM employee WHERE employee_num BETWEEN ..

Computer Science/DB 2021.11.07

Gradle의 라이브러리 의존성 옵션 정리

익숙함 문득 웹 프로젝트 관련 내용들을 정리해나가면서, gradle 파일을 보니까 다음과 같은 부분이 눈에 들어왔다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' } 언제부턴가 기존 프로젝트를 따라가는 방식으로 라이브러리 의존성을 작성하다 보니까, 이것들에 대한 이해하고 있..

728x90