728x90

Computer Science 404

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' } 언제부턴가 기존 프로젝트를 따라가는 방식으로 라이브러리 의존성을 작성하다 보니까, 이것들에 대한 이해하고 있..

GitHub에서의 Git 토큰 인증

맥북 세팅을 진행하면서 GitHub에 있는 학습용 repository를 로컬에 clone을 진행하려고 보니까 아래와 같은 문구를 내뿜었다. Cloning into 'Self-Study'... Username for 'https://github.com': Twinparadox Password for 'https://Twinparadox@github.com': remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. remote: Please see https://github.blog/2020-12-15-token-authentication-requir..

옵저버 패턴(관찰자 패턴, Observer Pattern)에 대해 알아보자

옵저버 패턴(Observer Pattern)? 어떤 클래스(들)의 동작이 특정 상태 변화에 따라서 동작해야 하는 경우를 생각해보자. 예를 들어서, 어떤 구독 서비스를 이용하는 유료 회원과 무료 회원이 존재한다. 구독한 유료 회원에게만 신규 콘텐츠가 등록되면 뉴스 레터 형태의 알림이 전송되어야 한다. 이런 상황에서 무료 회원은 반드시 해당 서비스의 페이지에 들어가서 신규 콘텐츠가 존재하는지를 확인해야 한다. 유료회원은 구독 서비스가 전송한 뉴스 레터를 통해서도 확인할 수 있는 추가적인 방법이 생기는 셈이다. 이 때, 구독 서비스가 새로운 내용(콘텐츠)가 등록되었을 때 모든 유저들에게 뉴스 레터를 전송하는 방식을 구성하는데 적용해볼 수 있는 것이 옵저버 패턴이다. 여기서 유료 회원은 Observer고, 신규..

Elasticsearch와 RDBMS의 용어 비교, 그리고 장단점

Elasticsearch와 RDBMS의 용어 비교 RDBMS Elasticsearch Schema Mapping Database Index Partition Shard Table Type Row Document Column Field Elasticsearch를 써야 할 때? RDBMS 단순 텍스트 매칭에 근거해서 검색을 지원한다. 최신 RDBMS는 Full-text 검색을 지원하지만, 아직도 많은 곳에서 사용하는 RDBMS에서는 이를 지원하지 않는다. 지원한다고 하더라도, 한글에서는 썩 좋은 능력을 보여주지 못하는 부분이 있다. 반면 Elasticsearch는 n-gram 기반 Full-text 검색을 지원한다. 여러 단어로 변형하거나, 동의어/유의어에 근거한 검색도 가능하고 여러 플러그인으로 형태소 기..

Computer Science/DB 2021.06.13

M1 맥북에서 MySQL 설치하기

MySQL은 호환성 문제가 없는 편인 것 같다. M1 맥북에서 MySQL을 설치하는 방법은 기존 맥과 다르지 않은 편인데, 혹시나 싶어서 망설이고 있는 사람들과 초보자들을 위해 글로 남긴다. 기본 설정 Homebrew는 맥을 사용해본 사람이라면 한 번쯤은 사용해본 패키지 관리자로, 이번 설치에서 활용할 수 있다. Homebrew를 설치하고 나서 cask 패키지를 설치하고 업데이트 체크를 한 번 수행해주자. brew install cask brew update MySQL 설치하기 Homebrew를 설치해줬다면, 이제 MySQL을 설치해볼 차례다. 먼저 아래 명령어를 통해 MySQL 패키지 목록을 확인해보자. brew search mysql 여기서 그냥 mysql을 설치한다고 하면, 기존 맥에서는 다음 명령..

객체 지향 설계 5원칙 - SOLID

이론적으로만 알고 있던 SOLID에 대해서 다시 한 번 정리해볼 필요가 있다고 생각해서 정리했다. 면접 준비할 때만 개념적으로 이해하고 있던 내용도 있고, 주변에서 항상 들어왔던 이야기를 바탕으로 최대한 신경 쓰려고 하는 원칙도 있었던 것 같다. 코딩 면접을 준비하는 사람들은 최소한 아래 용어에 대해서는 알고 있어야 한다. 이 글에서는 해당 용어에 대한 설명 외에도, 다른 분의 정리와 본인의 생각을 결합하여 끄적여봤다. SRP, Single Responsibility Principle, 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임?? 아무것도 모르던 시절엔 이 "책임"의 범위를 정하는 것이 가장 어려운 것 같다. 크고 작은 것을 어떻게 정할 것인지에 대한 기준이 필요하지 않을까?..

MySQL에서 sql 파일로 데이터 추가 시 한글 깨짐 문제(feat:명령프롬프트)

Workbench 같은 좋은 SQL 관련 프로그램들이 많이 나와 있어서 흑백 바탕에 무언가를 입력하는 사람들이 많이 줄어든 것 같다. 그래도 아직까지는 명령어가 편한 사람들이 많고, 특히 입문자들은 명령 프롬프트(cmd.exe)를 이용해서 mysql에 접속해서 쿼리를 날리는 것 같다. MySQL 대부분의 인코딩 문제는 인코딩 관련 설정 문제라서 관련 글들을 참조하면 잘 해결할 수 있다. 보통의 경우 UTF-8로 데이터를 설정하는데 설정 문제에서 해결을 보면 좋지만, 그게 아닌 경우가 간혹 있다. 예를 들어, sql 파일을 source 명령어로 실행하는 경우라면 입력 데이터와 DB의 인코딩 설정이 문제가 아닐 수가 있다. 분명 모든 설정들, SQL과 입력되는 데이터까지 UTF-8로 인코딩이 되어 있는 상황..

Redirect와 Forward에 대한 간단 비교

모든 내용을 언급하기 앞서 둘의 가장 큰 차이를 딱 하나로 말하라고 하면, 사용자에게(웹 브라우저에서) URL이 변경되어 보이는지 여부일 것이다. Forward Web Container에서의 페이지 이동만 진행되므로 웹 브라우저에는 해당 내용이 노출되지 않는다. 웹 브라우저에는 최초 호출 URL만 남아 있고, forward 과정에서 거쳐가는 URL은 노출되지 않으며, forward를 통해서 Request 객체와 Response 객체가 공유된다. 이러한 특성 때문에, 경우에 따라서 forward를 쓰면 문제가 발생할 수 있다. 예를 들어, 유저가 글쓰기나 삭제, 수정 과 같은 변경 작업을 요청으로 보냈고 그에 대해 응답을 할 수 있도록 forward로 응답 페이지를 불러온다고 가정하자. 이 과정에서 어떤 ..

토막 정보 - Command Line으로 MySQL 원격 접속 시 옵션 값들

EC2 위에 올려놓은 MySQL에 접속하거나, 다른 워크스테이션의 DB 등에 접근할 때, 원격 접속을 할 일이 생기는데 그때마다 주로 Workbench로 처리를 하는 편이었다. Workbench가 시각적으로 활용하는 것이나, 환경 확인하는데 있어서는 되게 쉬운 편이지만, 입문을 CLI 환경에서 하다 보니 편하지 않을 때가 많고, Workbench를 사용하지 못하는 경우가 생긴다. 최근에 딱 그런 상황이 왔는데, 원격 접속을 하려니 완전히 애를 먹었다. 대충 다음과 같은 상황이라고 가정했을 때, 주소 : 255.255.255.0 포트번호 : 3306 ID : user PW : user CLI에서 MySQL 외부 접속을 위해서는 다음과 같은 명령어를 쳐야 한다. mysql -h 255.255.255.0 -P..

강화학습 Deep Q-Network(DQN)에 대한 정리

현재 학교 졸업 프로젝트로 강화 학습 관련 프로젝트를 진행하고 있다. 그러면서 DQN에 대한 차이를 설명하면서 여러 자료를 보게 됐고, 이를 좀 정리하기 위해 남겨 놓는다. Deep Q-Network Q-Learning에 Value Function Approximation(VFA)을 사용하는 것은, Weight Update 과정에서 샘플들 간의 상관관계와, Non-stationary Target으로 인해 수렴하지 않고 발산 가능성이 있다. 이러한 문제를 해결할 필요가 있는데 Deep Q-Learning(DQN)이 이 문제를 Experience Repaly와 Fixed Q-targets으로 해결을 시도하였다. State, Action을 Q-Table로 정의하기에 Table이 너무 방대해지는 경우(ex, 간..

728x90