gogoma의 등록된 링크

 gogoma로 등록된 티스토리 포스트 수는 196건입니다.

HTTPS에서 경고 없이 HTTP 리소스를 호출하는 방법 [내부링크]

인증서가 있는 사이트에서 인증서가 없는 사이트를 호출할 때 mixed content 오류가 발생합니다. 우선 인증서가 있는 사이트에서 인증서가 없는 사이트를 호출하는 것은 문제가 될 수 있으므로, 인증서를 사용하는 것이 가장 좋은 방법입니다. 그러나 내부에서만 사용하는 사이트이거나 인증서를 구매할 수 없는 환경이라면 아래와 같은 방법으로 해결할 수 있습니다. 기본적인 Nginx 설정 방법에 대한 지식이 없어도 아래 설정을 따라만 해도 가능합니다. Nginx로 proxy_pass 설정하기 인증서가 있는 사이트라면, 해당 인증서를 사용해서 Nginx 설정을 하여 우회할 수 있습니다. Nginx가 중개자 역할이 되어 보안 연결을 호출한 것처럼 위장할 수 있습니다. Nginx 설정 server { # liste..

Macbook :: 클립보드 앱 Maccy 무료로 이용하기 [내부링크]

Macbook에서는 클립보드 내역을 저장하고 꺼내쓸 수 있는 클립보드앱 Maccy가 있습니다. Maccy앱을 먼저 간단히 설명하자면, 앱을 열면 클립보드 내역을 확인할 수 있는 공간이 나와요. 만약 제가 1,2,3,4,5를 순서대로 복사를 했다고 가정을 할게요. 그럼 이렇게 클립보드 내역에 보관돼요. 텍스트 뿐만 아니라 말그대로 클립보드 내역이 그대로 보관되는 거라서 이미지도 보관됩니다. 근데 이거 AppStore에서는 유료거든요? 명령어를 통해서 다운로드하면 무료로 받을 수 있어요. brew install maccy그냥 터미널 열고 위의 명령어만 입력하고 기다리면 알아서 다운로드 됩니다. Homebrew를 사용한 적이 없거나 사용한지 오래 됐다면 업데이트 때문에 시간이 좀 걸릴 거예요. 그래도 기다리면..

Edge 브라우저 사용 시 'Alt+Tab' 탭 전환 막기 [내부링크]

Window에서 Edge 브라우저를 사용할 때, Alt+Tab 단축키로 탭 전환이 되는 것이 불편했습니다. 어차피 Ctrl+Tab 기능으로도 탭 전환이 되기 때문에 Alt+Tab은 제거하고 프로그램끼리만 전환되기를 원하기 때문에, 이 기능을 제거하는 방법을 작성합니다. 탭 전환 기능 제거 edge://flags/ edge에서 해당 링크로 이동 Browser tab experiences in Windows 검색 Enable -> Disable로 변경 하단에 뜨는 다시 시작을 누르면 Edge가 다시 시작되면서 적용됩니다.

나의 서버에 GitLab 설치하기 (Git, GitLab 설치 및 명령어) [내부링크]

권장사양 CPU : 4코어 이상 권장 메모리 : 4GB 이상 권장 (실행만 해도 3.5GB 정도 사용함, 사용자가 많을수록 많이 필요) 스토리지 : 데이터를 저장하기에 충분한 용량 필요 데이터베이스 : GitLab에 내장되어 있는 PostgreSQL을 기본적으로 사용하지만, 따로 데이터베이스를 사용하기 위해서 별도의 설정이 필요 (이 부분은 다루지 않습니다.) 나의 사양 운영체제 : CentOS 7 CPU : 4코어 grep 'cpu cores' /proc/cpuinfo | uniq 메모리 : 4GB free -h 디스크 : 459GB df -h Git 설치 시스템 업데이트 CentOS를 최신 상태로 업데이트한다. # CentOS 패키지 관리 도구를 최신상태로 업데이트 sudo yum up..

CentOS 7 에서 git version 2.x 이상 설치하기 [내부링크]

CentOS 7이 아니더라도 버전이 낮으면 sudo yum install git을 하더라도 git version 2.x 이상이 설치되지 않습니다. 저도 버전 1.8이 설치되어서 삭제 후 다시 설치했습니다. 기존에 설치된 git 제거 sudo yum remove git 의존성 설치 CentOS를 최신 상태로 업데이트한다. # CentOS 패키지 관리 도구를 최신상태로 업데이트 sudo yum update # 각종 코드를 컴파일하고 빌드하는 데 필요 sudo yum groupinstall "Development Tools" #Git을 빌드하는 데 필요한 추가 의존성 설치, 지금 설치해야 빌드 및 설치 과정에서 오류가 발생하지 않음. sudo yum install gettext-devel openssl-dev..

리소스 직접 접근 차단하고 소스에서만 허용하기 (PHP + .htaccess) [내부링크]

출발점 이 글을 작성한 이유는 www.example.com/file/font.ttf 에 폰트가 저장되어 있고, 해당 url로 접근하면 폰트를 직접 접근하여 탈취할 수 있기 때문에 이를 방지하고 싶었습니다. 소스에서는 접근이 가능해야 하고, 외부에서 url을 통해 직접 접근하는 것은 막아야 했습니다. .htaccess 우선 직접 접근을 막는 방법은 간단합니다. 디렉토리가 file 이면 해당 디렉토리에 .htaccess에 아래 코드를 추가합니다. 만약 .htaccess가 없다면 새로 만들어서 추가합니다. Order Allow,Deny Deny from all 차단하고자 하는 확장자를 모두 추가합니다. PHP 이제 file을 읽어올 PHP소스를 작성합니다. 예를 들어 fileLoader.php 로 작성했습니다..

DB에 저장된 JSON 데이터의 키 값을 쿼리로 추출하기 [내부링크]

추출 예시 DB에 JSON 형식을 문자열로 그대로 저장했을 경우 이것을 쿼리로 추출하는 방법입니다. { "filename":"test.png", "buttons":[ {"name":"test_name","url":"test_url"}, {"name":"test_name2","url":"test_url2"} ] }만약 이렇게 저장된 JSON 형식의 문자열 데이터가 있을 때, "filename"의 값인 "test.png" 만 가져오는 것이 목표입니다. 예시 DBMS는 MySQL입니다. 추출 쿼리 MySQL 5.7 버전 이상 (MariaDB 10.3 이상) MySQL 5.7 버전 이상부터 사용 가능하며, 내장 함수 중 하나인 JSON_EXTRACT()를 사용할 수 있습니다. JSON 데이터가 저장된 컬럼에서 ..

Nginx 환경 설정으로 원하는 자원(CSS,JS,이미지)만 캐싱하기 [내부링크]

Nginx 설정 (수정 전) server { listen 80; location / { auth_request /auth; proxy_pass https://front_new; } #인증 location = /auth { ... } } 문제점 Nginx 환경 설정으로 자원(CSS,JS,이미지)만 캐싱한 이유 Angular 프로젝트의 웹서버로 Nginx를 사용하고 있습니다. 메인 화면에서 로그인이 되지 않은 상태면 로그인 url로 넘기고 있는데, 문제는 이 과정에서 Nginx에서 설정한 auth_request가 호출되지 않고 브라우저 캐시로 인해 redirect 되고 있습니다. 예를 들어 'example.com/' 을 호출하면 'example.com/login' 으로 redir..

Connection Pool 사용 시 release() 코드 위치의 중요성 [내부링크]

관리하고 있는 채팅 시스템이 있는데 데이터베이스 연결 시 Connection Pool을 사용하고 있습니다. 코드는 커넥션을 얻고, 데이터베이스 결과값을 가져온 후에 다시 커넥션을 반환하는 과정으로 작성되어 있습니다. 커넥션 반환 문제 그러던 중 커넥션 풀을 사용할 때 문제가 생겼습니다. 커넥션이 계속 증가하고 있었는데, 그러다보니 커넥션 수 제한에 걸려서 서버 오류가 발생하기도 했습니다. 이 문제를 해결하기 위해 pool 생성할 때 connectionLimit을 크게 올려보기도 했지만 채팅 서버에서는 오류가 나지 않지만, DB서버 과부하로 처리가 매우 느려졌습니다. 마찬가지로 max_connections, wait_timeout 도 변경했지만 사용량이 많을 때는 속도가 상당히 떨어졌습니다. 그래서 이런 ..

프로그래머스 - 공원 산책 JAVA :: 172928 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/172928 문제 이해하기 시작은 어떤 공간에서든 할 수 있다. 대각선으로는 이동할 수 없고, 동서남북으로만 이동할 수 있다. 장애물이 있는 곳으로는 이동할 수 없으며, 이동할 수 없는 경우는 해당 명령은 아예 취소한다. 외부로 벗어나는 경우는 이동할 수 없으며, 이동할 수 없는 경우는 해당 명령은 아예 취소한다. 문제 풀이 boolean[][] parkFull = new boolean[park.length][park[0].length()]; int x = 0, y = 0; int xWall = parkFull.length, yWall = parkFull[0].length; for(int i..

프로그래머스 - 햄버거 만들기 JAVA :: 133502 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/133502 문제 이해하기 재료의 순서는 무조건 [빵, 야채, 고기, 빵] 순서가 되어야 하고, 그 재료를 빼더라도 남은 재료의 순서는 보존해야 하는게 핵심입니다. 예제를 보면 [야채, 빵, 빵, 야채, 고기, 빵, 야채, 고기, 빵] 3번째부터 [빵, 야채, 고기, 빵]이 첫 번째 햄버거가 됩니다. 첫 번째 햄버거의 재료를 제외하면 [야채, 빵, 야채, 고기, 빵]이 남게 됩니다. 2번째부터 [빵, 야채, 고기, 빵]이 두 번째 햄버거가 됩니다. 재료가 담긴 배열을 순서대로 수행하면서 햄버거가 완성되면 재료를 빼고 기존 재료들은 기억하고 있으면서, 다음 재료를 순서대로 가져오면 됩니다. 예..

메모리가 부족한 AWS Lightsail에서는 스왑 공간을 활용하자 [내부링크]

AWS Lightsail을 사용중이라면 보통 개발용서버 또는 간단한 용도일텐데, 조금만 무거운 작업을 실행하면 메모리 부족 현상을 만나게 됩니다. (저는 React 빌드를 하려고 하는데 메모리 부족 현상을 만났습니다.) 이를 해결하기 위해서 swap space를 활용해 디스크의 일부를 가상 메모리로 사용하여 물리적인 메모리 공간이 부족할 때 시스템이 사용할 수 있는 추가적인 메모리로 활용했습니다. swap space swapfile 생성 sudo fallocate -l 2G /mnt/swapfile 경로는 원하는 경로로 지정하면 됩니다. swapfile 권한 설정 sudo chmod 600 /mnt/swapfile swap space 설정 sudo mkswap /mnt/swapfile swap 활성화 s..

AWS Lightsail에서 파이썬 여러 버전 관리 및 사용 :: pyenv [내부링크]

pyenv 여러 버전의 Python을 사용하기 위해서 pyenv를 사용했습니다. AWS Lightsail에서는 pyenv를 설치하기 위해서 사전에 설치해야 할 패키지가 있습니다. 먼저 설치해야 할 패키지 sudo yum install @development zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl11 openssl11-devel xz xz-devel libffi-devel findutils tk-devel -y 각 패키지가 필요한 이유 @development 이 패키지 그룹은 일반적인 개발 도구 및 라이브러리(예: gcc, make 등)를 포함하고 있습니다. Python을 소스에서 빌드하려면 이러한 도구가 필요합니다...

AWS Lightsail에서 React 빌드&배포 시 멈추는 현상 (메모리 부족) [내부링크]

원인 AWS Lightsail에서 테스트 삼아 React를 빌드하려고 했는데 빌드가 완료되지 않고 계속 멈추는 현상이 발생했다. 내 인스턴스의 RAM은 512MB인데, React는 빌드 시 규모가 조금만 커져도 메모리 부족으로 빌드가 멈춰버리는 현상이 생기는 것이다. 아마 Lightsail 뿐만 아니라, 다른 서버도 RAM 용량이 부족하면 같은 현상을 겪을 것이다. 해결 방법 스왑메모리 설정 부족한 RAM 용량을 DISK의 용량으로 대체하는 방법이다. 당연히 DISK를 사용하는 것이기 때문에 성능면에서는 현저하게 떨어지지만 메모리 부족으로 인해 빌드가 중단되는 현상은 해결할 수 있다. 운영용으로는 부적합하지만 테스트 할 때에는 사용하기 좋다. $ sudo dd if=/dev/zero of=/mnt/swa..

Amazon Linux 서버에서 Selenium 사용하기 [내부링크]

AWS Amazon Linux 2 환경에서 google-chrome-stable 패키지로 설치하려 했으나, “gpg-key” 관련 오류가 지속적으로 발생하고, 이를 무시하려고 해도 “Segmentation Fault” 오류가 발생 해당 오류를 해결하려고 많은 시간이 소요되어 기록함. 서버 환경 NAME="Amazon Linux" VERSION="2" ID="amzn" ID_LIKE="centos rhel fedora" VERSION_ID="2" PRETTY_NAME="Amazon Linux 2" ANSI_COLOR="0;33" CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2" HOME_URL="https://amazonlinux.com/"명령어 $ cat os-release 로..

Python Web Scraping :: PS Plus 게임 카탈로그 만료일 추출하기 [내부링크]

목적 PS Plus 게임 카탈로그는 영구적으로 등록되는 게임이 아니다. 위 이미지에 ‘2023/2/22 오후…’ 처럼 만료일이 정해져 있는데, 만료일은 3개월 이내가 되면 사이트에 노출되어 확인할 수 있다. 그러나 만료일이 예정된 것만 따로 찾아볼 수 없으며, 리스트에서 직접 하나씩 눌러서 확인해야 하기 때문에 어떤 게임이 만료되는지 확인하기 매우매우매우 귀찮다. (약 250~300개의 게임을 모두 눌러서 확인해야 한다…) 그래서 웹스크래핑으로 모든 게임들의 목록과 PS4/PS5 지원 여부도 추출하고, 그 중에서 만료 예정일도 함께 추출하는 것이 목적이다. 기획 웹 스크래핑으로 PS Store 게임 카탈로그(https://store.playstation.com/ko-kr/category/05a2d027-..

프로그래머스 - 개인정보 수집 유효기간 JAVA :: 2023 KAKAO BLIND RECRUITMENT :: 150370 [내부링크]

문제 문제 링크 코딩테스트 연습 - 개인정보 수집 유효기간 | 프로그래머스 스쿨 (programmers.co.kr) 문제 설명 고객의 약관 동의를 얻어서 수집된 1~n번으로 분류되는 개인정보 n개가 있습니다. 약관 종류는 여러 가지 있으며 각 약관마다 개인정보 보관 유효기간이 정해져 있습니다. 당신은 각 개인정보가 어떤 약관으로 수집됐는지 알고 있습니다. 수집된 개인정보는 유효기간 전까지만 보관 가능하며, 유효기간이 지났다면 반드시 파기해야 합니다. 예를 들어, A라는 약관의 유효기간이 12 달이고, 2021년 1월 5일에 수집된 개인정보가 A약관으로 수집되었다면 해당 개인정보는 2022년 1월 4일까지 보관 가능하며 2022년 1월 5일부터 파기해야 할 개인정보입니다.당신은 오늘 날짜로 파기해야 할 개..

프로그래머스 - 크기가 작은 부분 문자열 JAVA :: 147355 [내부링크]

문제 문제링크 코딩테스트 연습 - 크기가 작은 부분 문자열 | 프로그래머스 스쿨 (programmers.co.kr) 문제 설명 숫자로 이루어진 문자열 t와 p가 주어질 때, t에서 p와 길이가 같은 부분문자열 중에서, 이 부분문자열이 나타내는 수가 p가 나타내는 수보다 작거나 같은 것이 나오는 횟수를 return하는 함수 solution을 완성하세요. 예를 들어, t="3141592"이고 p="271" 인 경우, t의 길이가 3인 부분 문자열은 314, 141, 415, 159, 592입니다. 이 문자열이 나타내는 수 중 271보다 작거나 같은 수는 141, 159 2개 입니다. 제한사항 1 ≤ p의 길이 ≤ 18 p의 길이 ≤ t의 길이 ≤ 10,000 t와 p는 숫자로만 이루어진 문자열이며, 0으로 ..

프로그래머스 - 푸드 파이트 대회 JAVA :: 134240 [내부링크]

문제 문제 링크 코딩테스트 연습 - 푸드 파이트 대회 | 프로그래머스 스쿨 (programmers.co.kr) 문제 설명 수웅이는 매달 주어진 음식을 빨리 먹는 푸드 파이트 대회를 개최합니다. 이 대회에서 선수들은 1대 1로 대결하며, 매 대결마다 음식의 종류와 양이 바뀝니다. 대결은 준비된 음식들을 일렬로 배치한 뒤, 한 선수는 제일 왼쪽에 있는 음식부터 오른쪽으로, 다른 선수는 제일 오른쪽에 있는 음식부터 왼쪽으로 순서대로 먹는 방식으로 진행됩니다. 중앙에는 물을 배치하고, 물을 먼저 먹는 선수가 승리하게 됩니다. 이때, 대회의 공정성을 위해 두 선수가 먹는 음식의 종류와 양이 같아야 하며, 음식을 먹는 순서도 같아야 합니다. 또한, 이번 대회부터는 칼로리가 낮은 음식을 먼저 먹을 수 있게 배치하여 ..

프로그래머스 - 삼총사 JAVA :: 131705 [내부링크]

문제 문제 링크 코딩테스트 연습 - 삼총사 | 프로그래머스 스쿨 (programmers.co.kr) 문제 설명 한국중학교에 다니는 학생들은 각자 정수 번호를 갖고 있습니다. 이 학교 학생 3명의 정수 번호를 더했을 때 0이 되면 3명의 학생은 삼총사라고 합니다. 예를 들어, 5명의 학생이 있고, 각각의 정수 번호가 순서대로 -2, 3, 0, 2, -5일 때, 첫 번째, 세 번째, 네 번째 학생의 정수 번호를 더하면 0이므로 세 학생은 삼총사입니다. 또한, 두 번째, 네 번째, 다섯 번째 학생의 정수 번호를 더해도 0이므로 세 학생도 삼총사입니다. 따라서 이 경우 한국중학교에서는 두 가지 방법으로 삼총사를 만들 수 있습니다. 한국중학교 학생들의 번호를 나타내는 정수 배열 number가 매개변수로 주어질 때..

프로그래머스 - 콜라 문제 JAVA :: 132267 [내부링크]

문제 문제 링크 코딩테스트 연습 - 콜라 문제 | 프로그래머스 스쿨 (programmers.co.kr) 문제 설명 오래전 유행했던 콜라 문제가 있습니다. 콜라 문제의 지문은 다음과 같습니다. 정답은 아무에게도 말하지 마세요. 콜라 빈 병 2개를 가져다주면 콜라 1병을 주는 마트가 있다. 빈 병 20개를 가져다주면 몇 병을 받을 수 있는가? 단, 보유 중인 빈 병이 2개 미만이면, 콜라를 받을 수 없다. 문제를 풀던 상빈이는 콜라 문제의 완벽한 해답을 찾았습니다. 상빈이가 푼 방법은 아래 그림과 같습니다. 우선 콜라 빈 병 20병을 가져가서 10병을 받습니다. 받은 10병을 모두 마신 뒤, 가져가서 5병을 받습니다. 5병 중 4병을 모두 마신 뒤 가져가서 2병을 받고, 또 2병을 모두 마신 뒤 가져가서 1..

프로그래머스 - 옹알이 (2) JAVA :: 133499 [내부링크]

문제링크 코딩테스트 연습 - 옹알이 (2) | 프로그래머스 스쿨 (programmers.co.kr) 문제 이해하기 발음할 수 있는 단어는 “aya”, “ye”, “woo”, “ma” 4개의 단어 뿐이다. 중복되어 나열된 단어는 발음할 수 없다. 불가능 : “ayaaya”, “yeye”, “woowoo”, “mamama” 가능 : “ayaye”, “wooma”, “mawoo”, “yemawoo”, “mawooma” 중복되지만 않고, 발음할 수 있는 단어만 나열되면 된다. 문제풀이 1번 풀이 (스택) 이전 단어의 중복을 체크하기 위해 Stack을 활용 import java.util.ArrayList; import java.util.List; import java.util.Stack; public class ..

JQuery :: paste or cut event to textarea in mobile :: 모바일 환경의 textarea 에서 잘라내기, 붙여넣기 이벤트 감지 [내부링크]

textarea에서 keyup으로 입력한 값의 이벤트를 감지하고 후처리하는 기능이 있는데, 붙여넣기 또는 잘라내기의 경우는 keyup의 이벤트를 감지하지 못했다. 문제의 코드 $(document).on("keyup", "#contents", function(){ // event } keyup은 모바일에서 자판으로 입력하는 것들은 감지했지만 붙여넣기, 잘라내기 등의 이벤트는 감지하지 못 해서 원하는 기능이 제대로 작동하지 않았다. 해결한 코드 $(document).on("input", "#contents", function () { // event } input은 모든 변경내역을 감지했으며 해당 코드로 해결할 수 있었다.

프로그래머스 - 숫자 짝꿍 JAVA :: 131128 [내부링크]

문제링크 숫자 짝꿍 | 프로그래머스 스쿨 (programmers.co.kr) 문제 이해하기 3 ≤ X, Y의 길이(자릿수) ≤ 3,000,000입니다. 나름 신경 쓴다고 썼는데 이것 때문에 시간을 많이 날렸다. 단순히 삼백만이 아니라 자릿수 삼백만이다… 어마어마한 숫자가 올 수 있다는 뜻 같은 수가 중복될 수 있다. X = "5255", Y = "1255"일 중복되는 수는 2, 5, 5이다. 주의할 점은 X의 5는 3개이지만 Y에는 2개만 있으므로 5는 2개만 짝꿍이다. 짝꿍이 없다면 "-1"을 반환한다. 기본적으로 숫자 개념이므로 "000..."같은 수는 없으므로 0으로 시작하면 0을 반환한다. 문제풀이 1번 풀이 (시간초과) import java.util.Arrays; public String sol..

MySQL/MariaDB :: 특정 날짜 사이의 년,월,주,일 Group By (with PHP) [내부링크]

특정 날짜 사이의 년,월,일 Group By 하는 포스팅은 꽤 많았지만, 특정 범위의 날짜만 구하는 것이 아니라, 넓은 범위의 날짜를 구한 후 Group By 하는 방식으로 되어 있었다. 나는 정확히 특정 범위의 날짜만 구해서 처리속도도 최소화 하고 싶었다. 기존에 사용했던 코드 select stat_date from ( select adddate('[시작날짜]',t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) stat_date from (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 u..

Nginx :: 이중화 과정에서 발생한 오류들 정리 [내부링크]

Nginx 이중화 하면서 발생한 오류들 정리 Address already in use 사용하려는 포트가 이미 사용중인 경우 사용중인 포트 확인하기 (만약 사용중인 포트가 꼭 필요한 포트라면 다른 포트로 우회해도 됨) $ netstat -lntp 중지시켜도 상관이 없다면 프로세스 중지시키기 $ kill -9 [pid번호] Permission denied 포트 권한이 없어서 발생하는 오류 포트가 열려있는데도 오류가 발생한다면 아래 CentOS 보안 정책에 의해 막혔을 수도 있음. 포트를 추가해보고 재시도 포트 추가 $ semanage port -a -t http_port_t -p tcp [포트 번호] 포트 확인 $ semanage port -l | grep http_port_t unable to verify..

Nginx :: 이중화, SSL, WebSocket [내부링크]

각 서버의 포트별로 나누어 이중화 하는 방법 데이터베이스 이중화는 MySQL/MariaDB :: 단방향, 양방향 이중화 (Replication) 에서 확인할 수 있습니다. 테스트 서버 정보 대상서버: 0.0.0.1 대상포트: 5000, 5010, 5020 Nginx 환경 설정 (기본) SSL 인증없이 HTTP로 접속하는 경우 upstream serv_a { server 0.0.0.1:5000; server 0.0.0.1:5000 backup; } upstream serv_b { server 0.0.0.1:5010; server 0.0.0.1:5010 backup; } upstream serv_c { server 0.0.0.1:5020; server 0.0.0.1:5020 backup; } server {..

MySQL/MariaDB :: 단방향, 양방향 이중화 (Replication) [내부링크]

데이터베이스 이중화에 대한 내용 2대 이상의 DBMS를 나눠서 데이터를 저장한다. 삽입, 수정, 삭제 모두 복제할 수 있으며, 함수까지도 복제가 가능하다. 부분적으로 복제하는 것도 가능하다. CentOS 7, mysql Ver 15.1 Distrib 10.3.37-MariaDB 데이터베이스 양방향 이중화 my.cnf 설정 1번 서버 my.cnf ... [mysqld] server-id=1 log-bin=binlog binlog_format=mixed sync_binlog=1 binlog_cache_size=2M max_binlog_size=512M expire_logs_days=7 log-bin-trust-function-creators=1 ... 2번 서버 my.cnf ... [mysqld] serve..

SSL :: crt와 key 파일로 pfx 만들기 [내부링크]

pfx 파일을 사용해야만 하는 경우가 생겼습니다. 가지고 있는 crt 파일과 key 파일로 pfx 파일을 만드는 방법 CentOS 7, OpenSSL 1.0.2k-fips 코드 openssl pkcs12 -export -in [crt파일] -inkey [key파일] -out [pfx파일] openssl pkcs12 -export -in aaa.crt -inkey aaa.key -out aaa.pfx 이후 암호를 입력하면 되는데, 암호는 필수가 아니라서 입력하지 않아도 된다. 참고자료 Export Certificates and Private Key from a PKCS#12 File with OpenSSL

nginx :: [warn] the "ssl" directive is deprecated 오류 해결 [내부링크]

오류 nginx 설정하는 과정에서 인증서를 추가하고 재시작 했더니 인증서 추가한 부분에 모두 경고가 발생 nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead in /etc/nginx/conf.d/default.conf:22 nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directive instead in /etc/nginx/conf.d/default.conf:40 nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl" directi..

CentOS7에 MariaDB 설치하기 :: MariaDB install for CentOS7 [내부링크]

MariaDB 저장소 추가 MariaDB를 다운받기 위해서는 yum 저장소에 MariaDB 저장소를 추가해야 합니다. vi /etc/yum.repos.d/MariaDB.repo [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.3/centos7-amd64/ gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1 baseurl의 경우 본인이 설치해야 하는 버전과 설치 환경에 맞게 입력해야 합니다. http://mirror.mariadb.org/yum/ 경로에서 확인할 수 있습니다. 저장 후 yum에 저장소가 제대로 추가 되었는지 확인합니다. yum repolist MariaDB 설치 yum i..

CentOS7에 nvm, nodejs 설치하기 :: nvm, nodejs install for CentOS7 [내부링크]

nvm install wget install 만약 wget이 설치되어 있지 않다면 wget을 먼저 설치해야 합니다. yum install wget nvm install wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash 만약 설치가 완료될 때 NVM_DIR 이 export 되지 않았다면 직접 추가해야 합니다. nano ~/bashrc export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" 설치 완료 후 소스 동기화..

cafe24 웹호스팅 서버 index 페이지 변경하기 (.htaccess, Apache, PHP) [내부링크]

cafe24 웹호스팅 서버를 사용하고 있는데, 도메인만 입력 시 접근되는 인덱스 페이지의 경로를 바꾸고 싶었습니다. 해당 방법은 서버에서 직접적으로 설정을 바꿀 수 없는 경우 활용해야 합니다. 서버에서 직접 설정을 바꿀 수 있는 경우는 이 방법을 사용하지 않는 것이 좋습니다. 첫 번째 방법 일반적 첫 번째 시도했던 방법은 redirect 방법입니다. if (defined("_INDEX_")) { header("Location: "이동경로"); return; } 기존 인덱스 페이지가 호출되는 부분 상단에 해당 코드를 추가합니다. 그누보드 예를 들어 그누보드를 사용한다면 아래와 같습니다.

JavaScript / Vanilla JS :: input file 이미지 미리보기, 삭제 :: image preview and remove [내부링크]

input file 로 이미지 업로드를 하는 과정에서의 이미지 미리보기, 이미지 삭제 구현입니다. input file multiple 은 아래 글을 참고하세요. (준비중) html 삭제 input file 의 이름은 #_img 이고 각 class는 #-img-section, #-img-preview, #-img-remove 로 정하면 됩니다. #에 원하는 네이밍을 부여하시면 됩니다. 이 부분이 아래에서 쓰일 tag 명칭이 됩니다. src="이미지경로" 에 이미지가 있다면 src="이미지경로" 에 이미지가 없다면 #을 넣어주세요. 이렇게 나오도록 javascript 를 작성합니다. 에러 처리는 onerror로 해도 되고, js에서 이벤트 error를 감지해서 처리해도 됩니다. javascript js 코드..

노마드코더 파이썬 챌린지 후기 [내부링크]

노마드코더 파이썬 챌린지 후기 챌린지를 시작한 이유 파이썬을 잠깐 공부했었는데, 거의 까먹은 거나 다름 없어서 공부도 하고 간단한 프로젝트도 만들고 싶어서 무료 챌린지를 시작했습니다. 챌린지 과정 일요일을 제외한 월~토 꾸준히 강의를 들어야하며 결과물을 제출해야 합니다. (결과물을 제출할 지식이 이미 있다면 꼭 강의를 듣지는 않아도 됩니다) 강의 초반부에는 간단한 퀴즈의 답만 제출하지만, 강의 후반부에는 직접 코드를 작성해 결과물을 제출해야 합니다. Slack에 노마드코더 커뮤니티가 있습니다. 커뮤니티에는 이미 전 기수 챌린지 선배들의 질의응답 내용들도 있고, 현재 챌린지를 진행하는 사람끼리 서로 질문을 주고 받을 수 있습니다. 챌린지 결과 과제를 제출하고 1주일 후에 결과가 나옵니다. 무사히 챌린지 졸..

Python :: virtual enviroment setting for windows :: 윈도우에서 가상환경 세팅하기 [내부링크]

Python :: virtual enviroment setting for windows :: 윈도우에서 가상환경 세팅하기 venv venv는 Python 가상환경 관리를 해주는 내장 모듈입니다. 단, Python3에서 내장된 모듈로 Python2에서는 사용이 불가능합니다. Python2에서는 virtualenv라는 외부 패키지를 사용해야 합니다. 가상환경 생성 및 연결 #cd [프로젝트 경로] cd C:\venv-test #python -m [가상환경 이름] python -m venv venv-test ###다음은 명령 도구에 맞게 실행하세요.### #[가상환경 이름]\Scripts\activate.bat - cmd .\venv-test\Scripts\activate.bat #[가상환경 이름]\Scr..

git :: 다른 branch의 특정 파일만 가져오기 [내부링크]

해당 방법은 A-branch에서 B-branch의 특정 파일을 가져오는 방법입니다. A-branch

Python :: virtualenv setting with homebrew for macOS M1 :: 맥에서 homebrew로 가상환경 설정하기 [내부링크]

macOS M1 환경에서 homebrew를 활용해 Python을 설치하고, pyenv를 활용해 가상환경을 만들고, autoenv를 활용해 각 프로젝트별로 가상환경을 자동으로 관리합니다. 만약 homebrew가 설치되어 있지 않다면 MacBook M1 Homebrew Install를 참고하세요. pyenv install pyenv brew install pyenv homebrew로 pyenv를 설치합니다. change python version echo 'eval "$(pyenv init --path)"' >> ~/.zshrc echo 'eval "$(pyenv init -)"' >> ~/.zshrc pyenv로 python의 global version을 바꾸기 위해서 환경 설..

git :: remote force pull / 원격 브랜치 강제로 pull [내부링크]

방법1 (local branch 작업 무시) git checkout master git fetch --all git reset --hard origin/master git pull origin master command detail checkout git checkout master local branch를 master로 변경 fetch git fetch --all remote brnach의 최신 내역을 local에 가져옵니다. reset git reset --hard origin/master 만약 이미 local branch의 작업 내용을 commit 했다면 reset 으로 commit 내역을 삭제합니다. pull git pull origin master remote -> local 방법2 (local..

a tag disable :: a 태그 동적 비활성화 :: a 태그 링크 제거 [내부링크]

a tag를 사용할 때 동적으로 disable처리를 해주어야 할 때가 있습니다. a tag에는 따로 disable속성이 없습니다. 그래서 동적으로 href를 변경하거나 지워야 합니다. 해결한 과정을 기록합니다. 방법 a tag 에 data-href 로 링크를 미리 담아둡니다. 또는 동적으로 여러개를 써야 한다면, data-href1, data-href2 이런 식으로 미리 담아두는 방법도 있습니다. 이벤트가 있을 경우 href 속성 값의 유무에 따라 동적으로 값을 추가하고 뺍니다. 테스트 코드 준비 버튼을 클릭하면 a 태그의 링크를 지우고, 다시 클릭하면 a 태그의 링크를 살리는 테스트를 진행하겠습니다. 결과물 코드 HTML 소스 toggle button 구글로 이동 이동JQuery 방식 $(documen..

JSFiddle에서 jQuery 사용하기 [내부링크]

간단한 html/css/js 를 테스트 할 때에는 JSFiddle을 주로 사용했습니다. JSFiddle에서는 기본적으로 javascript 문법만 지원하기 때문에 jQuery를 별도로 추가해야 사용할 수 있습니다. 해당 과정을 기록합니다. JSFiddle에 jQuery 경로 추가 JSFiddle 접속 https://jsfiddle.net/ Resources 클릭 JavaScript/CSS URL에 jQuery 경로 입력 후 +버튼 클릭 주의할 점은 script 문법이 아닌 URL 경로 그대로를 입력해야 합니다. ex) https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.1/jquery.min.js Resources에 jquery.min.js가 추가되었는지 확인합니다...

[Solution] MongoDB connect error for Windows :: connect ECONNREFUSED [내부링크]

MongoDB Compass로 localhost:27017 연결 시도 시 오류가 발생했습니다. 해당 오류를 해결하는 과정을 기록합니다. 오류 발견 localhost 접속을 위해 mongodb://localhost:27017를 시도 오류 connect ECONNREFUSED 127.0.0.1:27017 원인 mongod, mongo 서비스가 켜져 있지 않은 상태 근본적인 원인은 위와 같지만, 켜지지 않은 이유는 아래 해결에서 설명 해결 mongo 서비스 실행 mongod > mongo 순서로 실행 서비스의 경로 : C:\Program Files\MongoDB\Server\\bin 별도로 환경 변수 PATH가 잡혀 있으면 바로 다음으로 넘어가셔도 됩니다. mongod.exe, mongo.exe 순서대로 직접..

정규식 후방탐색 사파리 대체 [내부링크]

크롬 기반 브라우저에서는 정규식 후방탐색을 지원하지만, 사파리에서는 후방탐색을 지원하지 않기 때문에 다른 방법으로 대체해야 합니다. 대체하는 방법을 작성합니다. 후방탐색 일반적인 사용 방법 var input = `test string`; var regExp = /(?

티스토리 마크다운 파일/이미지 업로드 간단하게 하기 [내부링크]

마크다운으로 티스토리 글을 작성하다보면 불편한 점이 생긴다. 이미지 업로드와 파일 업로드가 불편하다. 기본적으로 마크다운에서는 이미지,파일 모두 링크로 표현해야 하는 방식이기 때문에 저는 구글 드라이브에 업로드 후 링크를 복사해 사용했었습니다. 이 과정에 많은 불편함이 있어 조금이나마 불편함을 해소하고자 할 때 사용하는 방법입니다. 기본적으로 티스토리의 cdn을 활용하는 방법이므로 만약 별도의 마크다운 에디터를 활용하지 않고 티스토리에서 바로 작성한다면 티스토리 글쓰기 창을 2개 띄워놓고 하시는 것을 추천합니다. 이미지 업로드 티스토리에 이미지 업로드 티스토리 기본 모드에서 사용하고자 하는 이미지를 복사해 붙여넣기 합니다. 이런 상태가 되어야 합니다. 링크 복사 & 붙여넣기 크롬 기반 브라우저 붙여넣기 ..

Cafe24 웹 호스팅 서버에 GitHub 연동하기 [내부링크]

Cafe24 웹호스팅 서버를 사용하는 경우에는 GitHub를 연동하기 어렵습니다. Cafe24 웹호스팅 서버에서 GitHub 연동이 어려운 이유 git은 지원하지만 ssh-keygen은 지원하지 않아서 ssh 사용 시 GitHub를 연동하기 어렵다. 웹호스팅 서버와 GitHub를 연동하는 과정을 작성합니다. FTP/Shell 접속 허용 해당 방법은 FTP/SSH를 사용하는 방법이므로 SSH 접속설정을 허용해야 합니다. 호스팅관리 > FTP/Shell 접속설정 Shell(SSH) 접속 설정 : 허용 Key 설정 Cafe24에서는 ssh-keygen을 지원하지 않으므로 온라인으로 key를 생성해야 합니다. putty로 key를 생성할 줄 아는 분은 putty로 생성하셔도 됩니다. Key 생성 링크(www.w..

프로그래머스 - 성격 유형 검사하기 :: 2022 KAKAO TECH INTERNSHIP :: 118666 [내부링크]

문제 링크 프로그래머스 - 성격 유형 검사하기 문제 이해하기 성격 유형 종류는 총 8개로 고정이다. 지표 번호 성격 유형 1번 R, T 2번 C, F 3번 J, M 4번 A, N 점수는 총 7개로 분류된다. 매우 비동의, 비동의, 약간 비동의, 모르겠음, 약간 동의, 동의, 매우 동의 단, input 데이터에 따라 어느 곳에 점수를 부여해야 하는지 달라진다. 배열 survey에는 성격 유형 종류 8개 중 각 지표가 쌍으로 들어간다. 각 지표끼리만 입력 받을 수 있고 지표내의 성격 유형 순서는 바뀔 수 있다. R, F: 이런 지문은 존재하지 않는다. (R, T, T, R) 각 지문의 성격 유형 순서는 바뀔 수 있다. 배열 survey와 choices의 요소는 1vs1로 매칭되는 요소이다. 점수는 세 가지 ..

Git ERROR: You're using an RSA key with SHA-1, which is no longer allowed [Solved] [내부링크]

오류 ERROR: You're using an RSA key with SHA-1, which is no longer allowed. Please use a newer client or a different key type. Please see https://github.blog/2021-09-01-improving-git-protocol-security-github/ for more information. 새로운 환경에서 ssh-keygen을 사용할 수 없는 상황이라 온라인으로 RSA 키를 생성하고 GitHub Push 했는데 오류가 발생했습니다. 원인 공식 블로그(Improving Git protocol security on GitHub | The GitHub Blog)에 따르면 이제는 SHA-..

WARNING: UNPROTECTED PRIVATE KEY FILE 해결 [내부링크]

경고 외부 환경에서 git 작업을 위해 새로 key를 생성해서 작업을 하다가 이런 귀여운 경고가 나왔어요. 경고라면서 오류처럼 더 이상 진행이 안 되더라구요... 원인 원인은 개인키가 소유자 외에도 변경 가능한 권한으로 되어 있어서 발생한 것입니다. 개인키가 보호받지 못하기 때문에 발생하는 경고입니다. 아마 권한을 확인해보면 그룹 또는 공개에도 권한이 부여되어 있을 거예요! 저는 filezilla를 사용중이라 GUI로 볼 수 있는데, 개인키(id_rsa) 경로에서 아래 커맨드를 통해 권한을 확인할 수 있습니다. ls -l 해결 소유자 권한의 읽기/쓰기 만 부여하면 되는데, 소유자가 수정할 권한까지 주려면 "쓰기" 권한까지 부여하고, 수정할 필요가 없다면 "읽기" 권한만 부여하면 됩니다. 커맨드로 수정하셔..

프로그래머스 - k진수에서 소수 개수 구하기 :: 2022 KAKAO BLIND RECRUITMENT [내부링크]

문제 코딩테스트 연습 - k진수에서 소수 개수 구하기 | 프로그래머스 스쿨 (programmers.co.kr) 풀이 문제가 복잡해 보이지만 간단히 해결할 수 있는 문제입니다. 문제의 핵심은 0P0, 0P, P0 해당 규칙에 포함되며 소수인 개수를 구해야 합니다. 0P0, 0P, P0 의 규칙은 0으로 Split 하면 쉽게 구할 수 있습니다. 지문의 예처럼 211020101011 을 0으로 Split하면 [ "211", "2", "1", "1", "11" ] 을 구할 수 있습니다. 해당 배열들이 소수인지 아닌지만 판별하면 됩니다. 코드1 class Solution { public int solution(int n, int k) { String n_to_k = changeNotation(n, k); int ..

티스토리 :: 링크를 새 창으로 여는 방법들 [내부링크]

1. 본문의 모든 링크를 새 창으로 열고 싶을 경우 ... 2. 현재 글 내에서 목차 이동을 위한 링크가 있어 현재 글 링크를 제외하고 새 창을 열어야 하는 경우 ... 3. 특정 링크는 무조건 새 창으로 열고 싶은 경우 ... 4. 참고자료 컴질닷컴 https://comzil.com/2992

프로그래머스 - 줄 서는 방법 JAVA :: 12936 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/12936?language=java 문제 이해하기 순서대로 완전 탐색을 할 수도 있겠지만 (물론 시도해 봤지만) 시간초과가 발생합니다. 그래서 패턴을 찾아보는 것으로 생각을 바꿨습니다. 경우의 수 우선 경우의 수 구하는 방법은 n! 입니다. $3! = 3*2*1 = 6$ $4! = 4*3*2*1 = 24$ 공식 유도 n=4에서 15번째 수를 구해보겠습니다. 15번째 수는 [3,2,1,4] 입니다. 그러나 배열은 0부터 시작이므로 k=14로 계산을 시작합니다. 첫 번째 수 구하기 두 번째 수 구하기 세 번째 수 구하기 네 번째 수는 4만 남았으므로 생략하겠습니다. 공식은 위와 같고 코드로 풀어..

PHP :: Cafe24 웹 호스팅 서버에서 SMTP 인증된 메일 발송하기 [내부링크]

본 글은 Cafe24 웹 호스팅 서버에서 SMTP 인증된 메일을 발송하는 과정입니다. 꼭 Cafe24 웹 호스팅 서버 환경이 아니더라도 PHP로 SMTP 인증된 메일 발송이 필요하다면 3번부터 참고하시면 됩니다. 1. 무료 웹메일 신청 cafe24 호스팅센터에 로그인 후 아래 링크를 클릭해 무료 웹메일을 가입하세요. 카페24 호스팅센터/서버호스팅 - 무료웹메일서비스 (cafe24.com) [호스팅 관리 > 무료그룹웨어/웹메일 신청] 신청하기 클릭 후 "웹메일 관리자 비밀번호 등록" 란에 비밀번호를 입력하면 바로 웹메일 신청이 완료됩니다. 메뉴 찾기가 어렵거나 동영상으로 보고 싶으신 분은 아래 igotit 님의 동영상을 참고하세요. 웹메일 신청 동영상 2. 무료 웹메일 관리자 로그인 - 계정 확인 및 추가..

JavaScript 에서 정규식 활용하는 방법들 [내부링크]

정규식 플래그에 관한 내용이 궁금하다면 아래 글을 참고해 주세요. 정규 표현식/정규식(RegExp) 플래그(Flag) 자세하게 알아보자! 정규식 패턴에 관한 내용이 궁금하다면 아래 글을 참고해 주세요. 예제로 정리한 정규식 패턴 1. Javascript에서 정규식을 만드는 두 가지 방법 RegExp 객체 const regExp = new RegExp(/reg/, 'g'); new RegExp(/pattern/, 'flag') RegExp 객체의 생성자를 호출해 정규 표현식을 만듭니다. 패턴과 플래그에 대한 자세한 내용은 다루지 않습니다. 해당 내용은 상단의 링크를 참고하세요. 정규 표현식 리터럴 const regExp = /reg/g; /pattern/flag 정규 표현식 리..

Warning :: <html> element must have a lang attribute: The <html> element does not have a lang attribute [내부링크]

경고 element must have a lang attribute: The element does not have a lang attribute 웹 개발을 할 때 개발자도구를 열었더니 위와 같은 경고가 발생했습니다. 원인 html-lang-valid 규칙을 지키지 않았기 때문에 발생하는 경고입니다. 웹 페이지의 언어를 지정해야 한다는 규칙입니다. 웹 페이지의 언어를 지정하지 않으면 screen reader는 사용자가 설정한 기본 언어로 가정합니다. screen reader는 언어의 특성에 따라 서로 다른 사운드 라이브러리를 사용합니다. 만약 문서에서 읽을 언어가 올바르게 지정되어 있지 않다면 screen reader가 다른 언어로 문서를 읽으므로 혼란스러운 부분이 생길 수 있습니다. 이러한 부분으로 인..

예제로 정리한 정규식 패턴 [내부링크]

예제 코드는 Javascript로 작성되었습니다. 예제 코드에 플래그 활용이 포함됩니다. 플래그를 모른다면 아래 글을 참고하세요. 정규 표현식/정규식(RegExp) 플래그(Flag) 자세하게 알아보자! 1. 기본 dot(.) : 줄바꿈(\n)을 제외한 모든 문자(특수문자 포함) var test = `1a 2b @#`; test.match(/./g) [ '1', 'a', '2', 'b', '@', '#' ] \d:모든 숫자 \D:숫자가 아닌 것(\d의 반대) var test = `1a 2b @#`; test.match(/\d/g) test.match(/\D/g) [ '1', '2' ] [ &#..

프로그래머스 - 숫자의 표현 JAVA [내부링크]

12924 https://school.programmers.co.kr/learn/courses/30/lessons/12924?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 연속된 자연수를 더해 n을 만들 때 연속된 자연수의 시작은 자신을 제외하면 n/2 를 초과할 수 없습니다. 예를 들어 n=6일 경우 3을 초과한 숫자는 연속된 수의 처음에 올 수 없습니다. 4부터는 무엇을 더해도 6을 초과하기 때문이죠 예시1) 6, 15 코드 public class Solution { public int solution(int n) ..

MacBook M1 ERROR :: 'Eclipse.app' 응용 프로그램을 열 수 없습니다. [내부링크]

오랜만에 이클립스 사용할 일이 있어서 열려고 했더니 열 수 없다는 오류가 발생했습니다... 해당 오류를 해결하는 과정을 남깁니다. 오류 Eclipse.app 실행 오류 뭐 오류가 났는데 따로 알려주는 것도 없습니다. ? 표시 눌렀더니 이렇게 나오네요... 아주 불친절합니다. 이럴거면 ?는 왜 있는 건지... 직접 찾아봐야겠네요ㅜㅜ 원인 찾아보니 이클립스 앱 내의 코드 서명이 깨졌기 때문에 발생한 오류입니다. 대부분 오류 원인들을 보니 MacOS 업데이트 이후 발생하는 오류였습니다. 그러고보니 저도 2일 전에 MacOS 업데이트를 했거든요. 공식문서에 따르면 App Store 외부에서 배포된 응용프로그램은 Apple에서 발급한 개발자용 ID인증서로 서명해야 한다고 합니다. 그런데 OS업데이트를 하면서 이 ..

정규 표현식/정규식(RegExp) 플래그(Flag) 자세하게 알아보자! [내부링크]

javascript 기반으로 작성합니다만, 플래그는 모든 언어에서 비슷하므로 플래그에 대한 이해에는 도움이 될 것입니다. 하단으로 내려갈수록 기존 플래그를 활용하는 부분도 있습니다. 원활한 이해를 위해 플래그 순서대로 읽어주세요! 정규식 패턴에 대한 내용이 궁금하다면 아래 글을 참고하세요. 예제로 정리한 정규식 패턴 1. 정규 표현식을 사용하는 방법 정규 표현식 선언 방법 // new RegExp('정규식', '플래그'); let regExp1 = new RegExp('hello', 'g'); // /정규식/플래그; let regExp2 = /hello/g; regExp1 new RegExp('정규식', '플래그')는 ..

프로그래머스 - 주차 요금 계산 JAVA :: 2022 KAKAO BLIND RECRUITMENT [내부링크]

92341 코딩테스트 연습 - 주차 요금 계산 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 주차요금 계산식 주차 요금 = 기본 요금 + [(주차 누적시간 - 기본시간) / 단위 시간] * 단위 요금 주차 누적시간 모든 주차 시간을 분단위로 변환하면 계산하기 편합니다. 예를 들어 입차시간이 02:30 이면 (2*60) + 30 = 150 그리고 출차시간이 03:30 이면 (3*60) + 30 = 210 그러므로 주차 누적시간은 210(출차)-150(입차) = 60(분) 입차 후 출차기록이..

프로그래머스 - 최댓값과 최솟값 JAVA [내부링크]

12939 코딩테스트 연습 - 최댓값과 최솟값 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 각 숫자들은 문자열 내에서 공백으로 구분되어 있습니다. ex) "1 2 -3 4" 공백으로 구분된 숫자를 가져와야 합니다. 각 숫자를 비교해 최솟값, 최댓값을 찾아야 합니다. 코드1 class Solution { public String solution(String s) { String[] sArr = s.split(" "); int min = Integer.MAX_VALUE, max = Inte..

프로그래머스 - 최솟값 만들기 JAVA :: 12941 [내부링크]

문제 링크 코딩테스트 연습 - 최솟값 만들기 | 프로그래머스 스쿨 (programmers.co.kr) 문제 풀이 한 번 뽑은 요소는 또 뽑을 수 없다. 그러므로 문제에서 두 배열의 각 원소를 곱하여 가장 작은 수를 구하는 방법은 각 배열의 (가장 작은 수 x 가장 큰 수) 1번 풀이 import java.util.Arrays; public class Solution { public int solution(int[] A, int[] B) { Arrays.sort(A); Arrays.sort(B); int sum = 0; for(int i=0; i

프로그래머스 - 양궁대회 JAVA :: 2022 KAKAO BLIND RECRUITMENT :: 92342 [내부링크]

문제 링크 코딩테스트 연습 - 양궁대회 | 프로그래머스 스쿨 (programmers.co.kr) 문제 이해하기 점수는 10~0점까지 11개의 점수가 있습니다. 남은 화살의 수가 어피치가 맞힌 화살의 수보다 크지 않으면 그 점수는 무시합니다. 라이언이 점수를 획득하는 조건은 무조건 어피치보다 많이 맞혀야 하니까요. 이제 예시와 함께 좀 더 자세히 살펴보겠습니다. 화살의 수는 총 5개이며 어피치는 10점(2개), 9점(1개), 8점(1개), 7점(1개) 입니다. 어피치의 화살 기본적으로 10점부터 시작해서 어피치의 점수를 빼앗는 조건 하에 점수차가 가장 많이 나는 조합을 찾는 방법으로 풀었습니다. 라이언의 화살 5발의 화살로 어피치의 점수를 빼앗는 첫 번재 방법은 10점에 3발, 9점에 2발을 쏴서 10점과..

프로그래머스 - N-Queen java :: 12952 [내부링크]

문제 링크 https://school.programmers.co.kr/learn/courses/30/lessons/12952?language=java 문제 이해하기 퀸은 가로,세로,대각선으로 이동할 수 있습니다. 퀸 하나를 내려 놓았을 경우 빨간색(가로,세로,대각선)에는 다른 퀸을 놓을 수 없습니다. 그러므로 한 행에는 반드시 하나의 퀸만 올 수 있습니다. 행렬은 반드시 $(n * n)$ 행렬입니다. 이 핵심들은 당연하게 보이지만 중요한 이유는 한 행에는 반드시 하나의 퀸만 올 수 있고, 행과 열의 수가 같다면 2차원 배열로 풀지 않고 1차원 배열로도 풀 수 있습니다. 즉, 처리속도를 확 낮출 수 있다는 의미입니다. 대각선을 구하는 방법은 |기존 퀸의 행 - 배치할 퀸의 행| == |기존 ..

Failed to load resource: the server responded with a status of 404 / 404 File not found / sourceMappingURL [내부링크]

1. 오류 저는 swiper-bundle.min.js 를 호출했더니 발생한 오류입니다. 2. 원인 문제의 원인을 이해하기 위해서는 sourceMap이 무엇인지 부터 알아야 합니다. 우선 JS와 CSS는 특정 도구(webpack)들을 이용해 번들링 되어 난독화&압축됩니다. 우리가 가끔 jquery 구문의 오류가 발생할 경우 어디서 발생한 오류인지 찾기 어려울 때가 있습니다. 브라우저의 디버깅 툴은 난독화된 코드에서 에러를 가리키기 때문에 어디서 발생한 오류인지 찾기 어렵습니다. sourceMap은 원본코드를 어떠한 알고리즘으로 인코딩하여 키워드로 매핑시켜놓은 것을 뜻합니다. 브라우저에서는 이렇게 인코딩된 것을 디코딩하여 복원시킬 수 있습니다. 그리고 이러한 sourceMap 파일을 연결하는 것이 sourc..

Angular :: Applying BootStrap / 부트스트랩 적용 (ng-bootstrap) [내부링크]

1. 프로젝트 생성 angular-cli @angular/cli 가 이미 전역에 되어 있는 분은 넘어가셔도 됩니다. $ npm i @angular/cli angular 프로젝트 생성 $ ng new angular-bootstrap-example 2. 버전 확인 및 패키지 설치 ng-bootstrap 설치 전, 자신의 버전을 확인해야 합니다. 해당 버전에 맞게 다른 패키지(bootstrap, ng-bootstrap)를 설치해야 하니까요. (생각보다 예민합니다. 버전을 최대한 맞춰주세요.) { "name": "angular-bootstrap-example", "version": "0.0.0", "scripts": { "ng": "ng", "start": "ng serve", "build": "ng build..

@ng-bootstrap/ng-bootstrap 설치 시 오류 :: peer @angular/common@"^13.0.0" from @ng-bootstrap/[email protected] [내부링크]

1. 개발환경 2. 오류 @ng-bootstrap/ng-bootstrap+설치 $ ng add @ng-bootstrap/ng-bootstrap 설치 시도 시 아래와 같은 오류 발생 오류 내용 npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: [email protected] npm ERR! Found: @angular/[email protected] npm ERR! node_modules/@angular/common npm ERR! @angular/common@"^14.0.0" from the root project npm ERR! npm ERR! Could not resolv..

프로그래머스 - 행렬의 곱셈 java [내부링크]

코딩테스트 연습 - 행렬의 곱셈 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 핵심은 2개입니다. 새로 만들 배열의 크기를 정한다. 새로 만들 배열에 기존 배열(arr1, arr2)을 계산하여 삽입한다. 문제를 잘 보면 arr1에 arr2를 곱한 결과를 반환하는 것입니다. 우선 이차원 배열 곱하는 방법을 알아보면 arr1의 첫행 첫열의 값만 계산해 볼게요. [0] = \( [ (2*5)+(3*2)+(3*2), (2*4)+(3*4)+(2*1), (2*3)+(3*1)+(2*1) ] \) 입니..

Angular(Front) + Node.js(Back) 연동하기 [내부링크]

1. Angular.js 프로젝트 생성 @angular-cli 패키지 설치 $ npm i -g @angular/cli angular-cli 설치가 되어 있는 분은 다음으로 넘어가시면 됩니다. Angular.js 프로젝트 생성 $ ng new client Angular 프로젝트를 생성하고자 하는 경로에서 명령어 실행하세요. 서비스 실행 및 확인 $ ng serve --watch 또는 $ pm2 start "ng serve" --name "client" --watch pm2를 사용하시려면 pm2 패키지 설치가 되어 있어야 합니다. pm2 설치는 npm install -g pm2 로 설치하면 됩니다. 윈도우 환경에서는 pm2 start "ng serve" 를 다른 방법으로 실행해야 합니다. 계속 수정하면서 결..

프로그래머스 - 피보나치 수 java :: 모듈로 연산 [내부링크]

문제 코딩테스트 연습 - 피보나치 수 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 시도1: 재귀함수 보통 피보나치는 재귀로 풀면 쉽습니다. 단, 재귀함수는 연산해야 할 양이 많아지면 차지하는 메모리의 양도 많아지고 처리속도의 효율도 매우 좋지 않아요. n은 최대 10만까지 입력이 가능하므로 재귀로 푸는 방법은 좋지 않은 방법입니다. (사실 저도 처음엔 재귀로 풀었다가 시간초과 나왔습니다.) 시도2: 반복문 재귀룰 포기하고 반복문으로 문제를 풀었습니다만... 문제는 7~14번이 계속 오류가..

프로그래머스 - 하노이의 탑 java (재귀/반복문) :: 12946 [내부링크]

문제 링크 코딩테스트 연습 - 하노이의 탑 | 프로그래머스 스쿨 (programmers.co.kr) 문제 이해하기 하노이의 탑 문제는 재귀 함수를 연습하는 대표적인 문제입니다. 재귀 함수를 구현하기 위해서는 규칙을 찾아야 합니다. n=3일 경우로 예를 들어보겠습니다. 이렇게 초기 상태인 [주황+노랑+초록]을 hanoi(n) 이라고 표현하겠습니다. 가장 큰 원판을 3번기둥으로 옮기는 방법은? 가장 아래에 있는 주황색 원판을 3번 기둥으로 옮기기 위해서는 [노랑+초록]이 2번 칸에 있어야 하며, 3번 기둥은 비어있어야 합니다. [노랑+초록]원판을 hanoi(n-1)이라고 표현하겠습니다. [노랑+초록]을 2번 기둥으로 옮기는 방법 [노랑+초록]을 2번으로 옮기기 위해서 위의 과정을 거쳐야 합니다. 1 -> 3..

프로그래머스 - JadenCase 문자열 만들기 java :: 12951 [내부링크]

문제 링크 코딩테스트 연습 - JadenCase 문자열 만들기 | 프로그래머스 스쿨 (programmers.co.kr) 문제 풀이 1번 풀이 모든 문자를 직접 순회하며 조건에 맞게 대/소문자 치환 public String solution(String s) { StringBuilder sb = new StringBuilder(); boolean flag = true; for(char ch : s.toCharArray()) { sb.append(flag ? Character.toUpperCase(ch) : Character.toLowerCase(ch)); flag = (ch == ' ') ? true : false; } return sb.toString(); } 대문자가 되는 기준은 첫문자와 ..

Node.js + express-session + db(MariaDB/MySQL) 연동 예제 :: 로그인 구현 [내부링크]

1. 기본 시작 소스 안내 기본 소스는 branch::ex-auth 에서 시작하며, 완성된 소스는 branch::ex-auth-mysql 입니다. https://github.com/gogoma-code/node-express-auth.git node와 express-session을 활용하는 기본(branch::ex-auth가 만들어지는 과정)은 아래 글을 참고해 주세요. Node.js + express-session :: 프로젝트 생성부터 로그인 구현하기 2. MySQL 예제 테이블 생성 기본적으로 MySQL은 설치가 되어 있다는 가정 하에 진행합니다. SQL 예제 테이블 생성문 /* 만약 test 데이터베이스가 이미 있다면 다른 이름을 사용하세요. */ CREATE DATABASE `test`; USE..

프로그래머스 - N개의 최소공배수 java [내부링크]

12953 풀이 최소공배수 구하는 방법은 두 가지 방법이 있습니다. 1. 최대공약수를 이용하는 방법 2. 소인수분해를 이용하는 방법 두 가지 방법으로 풀어보겠습니다. 풀이1 (최대공약수 이용) public int solution(int[] arr) { int lcm = arr[0]; for(int i=1; i

프로그래머스 코딩테스트 연습 Level 1 클리어 후기 (모든 문제 코드) [내부링크]

프로그래머스 코딩 테스트 풀이 코드 gogoma-code/programmers-codding-test (github.com) 현재는 Level1 JAVA 코드만 업로드 되어 있지만 더 높은 레벨, 다양한 언어를 추가할 예정입니다. 이제 Level 1에는 안 푼 문제는 없어요. 대부분 5분 내에는 풀었고, 조금 더 걸리는 문제들도 있었지만 심심할 때 하나씩 풀기 좋았어요. 처음에 알고리즘을 풀기 시작한 것은 java를 까먹지 않으려고 시작했어요. 최근에 java를 사용하지 않으면서 이대로 두면 언어도 많이 까먹을 것 같고, 또 최신 문법의 활용도 못 따라갈 것 같아서, 알고리즘 풀면서 언어에도 익숙해지려고 시작했어요. 실제로 내가 푼 코드와 다른 사람들의 코드를 비교하면서 문법의 활용성, 문제 해결의 접근..

프로그래머스 - 로또의 최고 순위와 최저 순위 java :: 2021 Dev-Matching: 웹 백엔드 개발자(상반기) [내부링크]

77484 https://school.programmers.co.kr/learn/courses/30/lessons/77484?language=java#fn1 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 로또의 수는 45개이고, 각 배열(lottos, win_nums)의 길이는 6개로 고정입니다. 알아야 할 것은 "몇 개를 맞췄느냐?", "몇 개가 낙서되었느냐?" 입니다. 위 두 개의 핵심으로 생각해보면 많이 맞춘 경우는 낙서된 수가 모두 당첨 번호라고 가정하고 [맞춘 개수 + 낙서된 수] 많이 맞추지 못한 경우는 낙서된 수가 모두 꽝이라고 가정..

프로그래머스 - 신고 결과 받기 java :: 2022 KAKAO BLIND RECRUITMENT [내부링크]

92334 https://school.programmers.co.kr/learn/courses/30/lessons/92334?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 저는 신고자의 기준이 아닌 신고 당하는 사람을 기준으로 코드를 작성했습니다. 결과는 신고자의 index의 값을 구해야 합니다. 신고자는 같은 유저를 2번 이상 신고해도 1번으로만 처리됩니다. (중복 신고가 불가능합니다.) 중복이 불가능하다는 뜻은 Set이 활용되기 가장 좋은 문제라는 뜻이기도 합니다. 풀이1 public int[] solution(St..

프로그래머스 - 숫자 문자열과 영단어 java :: 2021 카카오 채용연계형 인턴십 [내부링크]

81301번 코딩테스트 연습 - 숫자 문자열과 영단어 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 각 숫자에 매칭되는 알파벳이 있다. 영단어의 위치는 랜덤이며 2번이상 연속으로 영단어가 나올 수도 있다. 풀이1 public int solution(String s) { List alphabet = Arrays.asList( "zero","one","two","three","four","five","six","seven","eight","nine"); StringBuilder answer ..

프로그래머스 - 키패드 누르기 java :: 2020 카카오 인턴십 [내부링크]

67256번 코딩테스트 연습 - 키패드 누르기 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 키패드의 위치 중 left, mid, right를 기준으로 행의 위치를 알고 있으면 답을 구하기 쉬워요. 예를 들어 키패드를 그대로 행의 인덱스 값을 부여하면 아래와 같습니다. 0 0 0 1 1 1 2 2 2 3 3 3 거리 계산이 핵심인데, 거리 계산을 하기 위해서는 손가락의 위치를 먼저 알아야 해요. 그래서 3개의 핵심이 있는 것 같아요. 누르려는 엄지의 방향 (L / R) 누르려는 키의 위..

프로그래머스 - 신규 아이디 추천 java :: 2021 KAKAO BLIND RECRUITMENT :: 72410 [내부링크]

문제 링크 코딩테스트 연습 - 신규 아이디 추천 | 프로그래머스 스쿨 (programmers.co.kr) 1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다. 2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다. 3단계 new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다. 4단계 new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다. 5단계 new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다. 6단계 new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다. 만약 제거 후 마침표(.)가 new_id의 끝에 위치한..

Node.js + express-session 연동 예제 :: 프로젝트 생성부터 로그인 구현하기 [내부링크]

Window 10 환경에서 node.js를 사용했습니다. npm init 부터 로그인 UI까지 만드는 과정을 기록합니다. 편의상 node로 프론트화면까지 구성합니다. 기본적으로 node는 설치가 되어 있다고 생각하고 진행합니다. 1. express-generator로 프로젝트 생성 원하는 경로에 새로운 디렉터리를 만들어요. 저는 node-express-auth 라는 이름으로 디렉터리를 하나 만들었요. 이제 경로 내에 들어가 express-generator로 node 기본 구조를 만들 거예요. express로 프로젝트 생성 $ express ex-auth -e --git 의존 패키지 설치 $ cd ex-auth $ npm install $ npm install bootstrap --save $ npm in..

프로그래머스 - 크레인 인형뽑기 게임 java :: 2019 카카오 개발자 겨울 인턴십 :: 64061 [내부링크]

문제 링크 코딩테스트 연습 - 크레인 인형뽑기 게임 | 프로그래머스 스쿨 (programmers.co.kr) 문제 이해하기 2차원배열 board의 값이 0이면 해당 자리는 공백으로 봐야 합니다. 각 인형의 고유의 숫자로 표현되며, 인형을 뽑았으면 해당 인덱스의 값을 0으로 바꿔 공백으로 표현해야 합니다. 특정 공간에 넣었다 뺐다를 반복할 때 가장 좋은 방법은 Stack이라고 생각합니다. 문제 풀이 코드-1 public int solution(int[][] board, int[] moves) { int answer = 0, doll = 0; Stack stack = new Stack(); for(int move : moves) { move--; for(int i=0; i 0) { board[i][move]..

프로그래머스 - 없는 숫자 더하기 java :: 월간 코드 챌린지 시즌3 [내부링크]

86051번 https://school.programmers.co.kr/learn/courses/30/lessons/86051?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 numbers의 요소는 중복되지 않는다. numbers에 1~9까지 모든 요소가 있다고 가정할 때 그 요소의 합은 45이다. 이 두 가지 핵심을 이용하면 쉽게 풀 수 있습니다. 풀이1 public int solution2(int[] numbers) { int answer = 45; for(int num : numbers) { answer -= num..

프로그래머스 - 음양 더하기 java :: 월간 코드 챌린지 시즌2 [내부링크]

76501번 https://school.programmers.co.kr/learn/courses/30/lessons/76501?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 풀이1 public int solution(int[] absolutes, boolean[] signs) { int answer = 0; for(int i=0; i

Node.js :: express-generator 로 개발환경 세팅 [내부링크]

1. express-generator란? 이제는 거의 정형화 되어 있는 프로젝트의 구성을 자동으로 생성해주고, 이 구성을 잡아줄 때 필요한 패키지를 package.json을 통해 제공하기 때문에 빠르게 노드 프로젝트 구성을 할 수 있습니다. 2. express-generator 전역에 설치하기 window라면 powershell을, linux 환경이면 터미널을 열어주세요. $ npm i -g express-generator expree-generator 패키지를 전역에 설치합니다. 전역에 설치하는 이유는 보통 단일 프로젝트에만 쓰는 게 아니라 각종 프로젝트를 만들 때 사용하기 때문입니다. 3. express로 프로젝트 생성하기 $ cd C:\expert\node-express-generator 우선 프로..

프로그래머스 - 소수 만들기 java :: Summer/Winter Coding(~2018) :: 12977 [내부링크]

문제 링크 코딩테스트 연습 - 소수 만들기 | 프로그래머스 스쿨 (programmers.co.kr) 문제 풀이 코드-1 class Solution { public int solution(int[] nums) { int cnt = 0; for(int i=0; i

프로그래머스 - 내적 java :: 월간 코드 챌린지 시즌1 [내부링크]

70128번 https://school.programmers.co.kr/learn/courses/30/lessons/70128?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 그냥 각 인덱스를 곱한 후 더하는 문제라 별도 설명은 안하고 stream 풀이와 정석 풀이를 남기고 끝내겠습니다. 풀이1 public int solution2(int[] a, int[] b) { return IntStream.range(0, a.length).map(i -> a[i] * b[i]).sum(); } ️ 테스트 케이스 처리속도: 평균 3.5..

프로그래머스 - 완주하지 못한 선수 java :: 해시 :: 42576 [내부링크]

문제 링크 코딩테스트 연습 - 완주하지 못한 선수 | 프로그래머스 스쿨 (programmers.co.kr) 문제 풀이 주의할 점 동명이인이 있을 수 있기 때문에 remove 같은 메소드로는 정답을 구할 수 없습니다. 1번 풀이 public String solution(String[] participant, String[] completion) { String answer = new String(); HashMap map = new HashMap(); for(String runner : participant) map.put(runner, map.getOrDefault(runner, 0) + 1); for(String runner : completion) map.put(runner, map.get(runne..

프로그래머스 - K번째수 java :: 정렬 [내부링크]

42748번 코딩테스트 연습 - K번째수 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 주의할 점 i, j, k 모두 인덱스보다 1이 크다. i와 j로 새로 만든 배열을 정렬 후 k번째 수를 구해야 한다. 풀이1 public int[] solution(int[] array, int[][] commands) { int[] answer = new int[commands.length]; for(int m = 0; m

프로그래머스 - 체육복 java :: 탐욕법(Greedy) :: 42862 [내부링크]

문제 링크 코딩테스트 연습 - 체육복 | 프로그래머스 스쿨 (programmers.co.kr) 문제 풀이 보통 이런 문제들을 보면 정답의 기준에서 찾는 것보다 정답이 아닌 것을 기준으로 보고 푸는 게 효율이 좋더라구요. 모두가 체육복을 가지고 있다고 가정하고, 없는 사람을 제거하는 방식으로 풀었습니다. public int solution(int n, int[] lost, int[] reserve) { int[] haves = new int[n+2]; // 0번째 인덱스와, 마지막 인덱스는 비워두는 용도 int answer = n; for(int l : lost) haves[l]--; for(int r : reserve) haves[r]++; for(int i=1; i 0) { haves[i]++; hav..

프로그래머스 - 모의고사 java :: 완전탐색 [내부링크]

42840번 코딩테스트 연습 - 모의고사 | 프로그래머스 스쿨 (programmers.co.kr) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 뭔가 공식이 있는 문제는 아니고, 코드를 얼마나 효율적으로 짜는지가 중요한 문제 같습니다. 풀이1 public int[] solution(int[] answers) { // 수포자 패턴 int[][] supoja_pattern = { { 1, 2, 3, 4, 5 }, { 2, 1, 2, 3, 2, 4, 2, 5 }, { 3, 3, 1, 1, 2, 2, 4, 4, 5, 5 } }; // 정답수 구하기 List..

프로그래머스 - 실패율 java :: 2019 KAKAO BLIND RECRUITMENT :: 42889 [내부링크]

문제 링크 코딩테스트 연습 - 실패율 | 프로그래머스 (programmers.co.kr) 문제 풀이 코드 1 public int[] solution(int N, int[] stages) { List stagesList = new ArrayList(); List failureList = new ArrayList(); List answerList = new ArrayList(); for(int stage : stages) stagesList.add(stage); for(int i=1; i

프로그래머스 - 폰켓몬 java :: 찾아라 프로그래밍 마에스터 [내부링크]

1845번 코딩테스트 연습 - 폰켓몬 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 폰켓몬 당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다. programmers.co.kr 풀이 문제의 설명은 긴데 핵심은 하나입니다. 중복되지 않은 수를 구하되 (nums / 2) 이하여야 한다는 것입니다. 풀이1 public int solution(int[] nums) { return Math.min(nums.length / 2, IntStream.of(nums).boxed().collect(Collectors.toSet()).size()); } IntSt..

프로그래머스 - 약수의 개수와 덧셈 java :: 월간 코드 챌린지 시즌2 :: 77884 [내부링크]

문제 링크 코딩테스트 연습 - 약수의 개수와 덧셈 | 프로그래머스 (programmers.co.kr) 문제 풀이 1번 풀이 public int solution(int left, int right) { int answer = 0; for( int cur=left; cur

프로그래머스 - 3진법 뒤집기 java :: 월간 코드 챌린지 시즌1 :: 68935 [내부링크]

문제 링크 코딩테스트 연습 - 3진법 뒤집기 | 프로그래머스 (programmers.co.kr) 문제 이해하기 문제의 핵심은 3진법을 구하는 겁니다. 3진법 구하는 방법은 n을 3으로 나누어 떨어지는 수를 순서대로 나열하고 그 때마다 n을 3으로 나누면 됩니다. 이 과정을 n이 0이 될 때까지 반복하면 됩니다. 1 n = 45 45 % 3 = 0 45 / 3 = 15 2 n = 15 15 % 3 = 0 15 / 3 = 5 3 n = 5 5 % 3 = 2 5 / 3 = 1 4 n = 1 1 % 3 = 1 1 / 3 = 0 이렇게 구한 나머지 값들을 아래부터 순서대로 나열하면 3진법이 됩니다. (1200) 단, 우리는 3진법을 뒤집어야 하니 아래부터 순서대로 나열하지 말고 위에서부터 순서대로 나열하면 됩니다..

프로그래머스 - 예산 java :: Summer/Winter Coding(~2018) :: 12982 [내부링크]

문제 링크 코딩테스트 연습 - 예산 | 프로그래머스 (programmers.co.kr) 문제 풀이 최대한 많은 부서에 지원을 해줄 수 있는 '수'를 구하는 문제입니다. d를 정렬 후 순서대로 탐색하며 budget을 초과하지 않을 만큼의 수만 구하면 됩니다. 1번 풀이 public int solution(int[] d, int budget) { Arrays.sort(d); int count = 0; for(int num : d) { budget -= num; if(budget < 0) break; count++; } return count; } 입력 배열 d를 정렬 후 순서대로 탐색합니다. 순서대로 탐색하며 해당 금액을 budget에서 빼줍니다. 만약 뺐는데 budget이 0보다 작아지면 예..

프로그래머스 - 두 개 뽑아서 더하기 java :: 월간 코드 챌린지 시즌1 :: 68644 [내부링크]

문제 링크 코딩테스트 연습 - 두 개 뽑아서 더하기 | 프로그래머스 (programmers.co.kr) 문제 이해하기 배열 numbers에 있는 수의 1vs1 덧셈조합을 찾는 문제입니다. 단, 중복이 없어야 하고 오름차순 정렬이 되어야 한다는 게 포인트네요. 중복이 없어야 하니 Set을 사용하면 쉽게 풀 수 있을 거라 생각했고 그 중에서도 TreeSet을 이용하면 정렬까지 되니까 자바로는 아주 쉬운 문제였네요. 문제 풀이 코드 1 public int[] solution(int[] numbers) { Set set = new TreeSet(); for(int i=0; i

MacBook M1 우측 command 한영키로 바꾸기 (프로그램 미설치) [내부링크]

userkeymapping.plist 설정 아래 명령어 전부 복사해서 터미널에 그대로 붙여넣어 실행시키면 자동으로 키매핑이 준비됩니다. mkdir -p /Users/Shared/bin printf '%s\n' '#!/bin/sh' \ 'hidutil property --set '"'"'{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x7000000e7,"HIDKeyboardModifierMappingDst":0x70000006d},{"HIDKeyboardModifierMappingSrc": 0x7000000E6,"HIDKeyboardModifierMappingDst": 0xFF00000003}]}&#3..

프로그래머스 - 2016년 java [내부링크]

12901번 https://programmers.co.kr/learn/courses/30/lessons/12901?language=java 코딩테스트 연습 - 2016년 2016년 1월 1일은 금요일입니다. 2016년 a월 b일은 무슨 요일일까요? 두 수 a ,b를 입력받아 2016년 a월 b일이 무슨 요일인지 리턴하는 함수, solution을 완성하세요. 요일의 이름은 일요일부터 토요일까 programmers.co.kr 풀이 ️ 윤년이란 2월이 29일까지 있는 날입니다. 풀이1 public String solution2(int a, int b) { String[] days = { "THU", "FRI", "SAT", "SUN", "MON", "TUE", "WED" }; int[] numberOfDay..

프로그래머스 - 나머지가 1이 되는 수 찾기 java :: 월간 코드 챌린지 시즌3 [내부링크]

87389번 https://programmers.co.kr/learn/courses/30/lessons/87389?language=java 코딩테스트 연습 - 나머지가 1이 되는 수 찾기 자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다. 제한사항 입 programmers.co.kr 풀이 풀이1 public int solution(int n) { int answer = 0; for(int i=2; i n % i == 1).min().getAsInt(); } 너무 쉬운 문제라 이렇게만 끝내면 아쉬워서 Stream으로도 하나 풀어봤어요. 아무래도 2~n까지 전부..

프로그래머스 - 나누어 떨어지는 숫자 배열 java [내부링크]

12910번 코딩테스트 연습 - 나누어 떨어지는 숫자 배열 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 나누어 떨어지는 숫자 배열 array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하 programmers.co.kr 풀이 나누어 떨어지는 나누어서 나머지가 0이 나오는 요소만 찾기! 주의할 점은 배열은 나누어 떨어지는 요소가 없으면 배열에 { -1 } 을 담아 리턴해야 한다는 점입니다. 그리고 이 나누어 떨어진 값들도 정렬을 해야 합니다. 풀이1 public int[] solution(int[..

프로그래머스 - [1차] 비밀지도 java :: 2018 KAKAO BLIND RECRUITMENT [내부링크]

17681번 https://programmers.co.kr/learn/courses/30/lessons/17681?language=java 코딩테스트 연습 - [1차] 비밀지도 비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다 programmers.co.kr 풀이 이 예시만 봐도 문제의 핵심을 알 수 있습니다. 문제의 핵심을 OR 연산 입니다. 두 이진수의 or 연산은 하나라도 참일 경우 참으로 인지하기 때문에 결과와 같은 값을 구할 수 있습니다. 1 or 0 = 1 0 or 1 = 1 비트 연산만 알고 있다면 쉽게 풀 수 있는 문제입니다. 풀이 class Solution..

프로그래머스 [1차] 다트 게임 java :: 2018 KAKAO BLIND RECRUITMENT [내부링크]

17682번 코딩테스트 연습 - [1차] 다트 게임 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - [1차] 다트 게임 programmers.co.kr 풀이 사실 옵션만 잘 구분하면 되는 문제이기는 한데 주의할 점이 몇 개 있습니다. 숫자는 0~9 까지만 오는 게 아니라 10도 올 수 있다. 옵션 *, #은 있을 수도 있고 없을 수도 있다. 옵션 *은 현재 점수뿐만 아니라, 이전 점수까지 영향을 준다. 그래서 이전 점수가 있는지 없는지부터 체크해야 한다. 풀이1 public int solution2(String dartResult) { Stack stack = new Stack(); for (int i = 0; i < dartResult.length(); i++) { c..

프로그래머스 - 문자열 내 마음대로 정렬하기 java [내부링크]

12915번 코딩테스트 연습 - 문자열 내 마음대로 정렬하기 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 문자열 내 마음대로 정렬하기 문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱 programmers.co.kr 풀이 인덱스 번호=n 의 문자를 비교하는 문제인데, 주의할 점은 문자가 같을 경우에는 문자열 전체를 비교해야 한다는 점입니다. 풀이1 public String[] solution3(String[] strings, int n) { Arrays.sort(strings, (s1, s2)..

MariaDB :: root 비밀번호 초기화 방법 (Bitnami 포함) [내부링크]

MariaDB root 비밀번호를 까먹어서 초기화 시켰습니다. 해당 과정을 기록합니다. Windows 10 10.4.24-MariaDB 1. MariaDB 서비스 중지 Bitnami로 MariaDB 설치한 경우 WAMP packaged by Bitnami 실행 후 "MariaDB Database" 클릭 후 Stop 직접 MariaDB 설치한 경우 CMD 열고 아래 명령어를 입력해요. (Bitnami 는 이게 안 될 수도 있어요.) net stop mysqld 이거 안 되면 아래로 하면 99% 멈추게 할 수 있어요. tasklist | findstr "mysql" #mysqld.exe 1376 Services 0 14,952 K mariadb로 검색하시면 안 됩니다. mysql로 검색하셔야 해요. 그 다음..

프로그래머스 - 문자열 내림차순으로 배치하기 java [내부링크]

12917번 코딩테스트 연습 - 문자열 내림차순으로 배치하기 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 문자열 내림차순으로 배치하기 문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요. s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 programmers.co.kr 풀이 대문자는 소문자보다 작은 것으로 간주한다. => 코드 상에서 문자 비교 시 기본으로 대문자가 소문자보다 작다. ex) 'A' < 'a' 풀이1 public String solution(String s) { char[] array = s.toCharArray(); Arrays.sort(array); return ne..

Node.js :: 버전 변경하기 / nvm 활용 [내부링크]

node 버전을 downgrade 하여 사용해야 하는 경우가 생겼습니다. Window 환경에서 node.js 의 버전을 변경하는 방법을 기록합니다. 1. 현재 버전 확인 node가 설치되어 있지 않다면 바로 2번으로 넘어가세요. $ node -v v16.15.02. nvm 설치 nvm은 node version manager로 뜻 그대로 노드의 버전을 관리해주는 도구입니다. nvm 설치가 되어 있는 분은 패스해도 됩니다. 설치가 되어 있지 않으면 설치를 진행하세요. Releases · coreybutler/nvm-windows (github.com) 링크에 접속하셔서 하단의 Assets 에서 nvm-setup.zip 을 다운로드 합니다. 압축파일이 다운로드 될텐데 압축 해제 후 nvm-setup.exe 파..

프로그래머스 - 시저 암호 java [내부링크]

12926번 문제 코딩테스트 연습 - 시저 암호 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 시저 암호 어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀 programmers.co.kr 풀이 영어 알파벳은 대소문자 각각 26개 입니다. 즉 아무리 많은 값을 더하더라도 26이라는 범위 내에서 순환되어야 합니다. 알파벳의 아스키 코드 값은 'A' = 65 / 'a' = 90 입니다. A에 1을 더하면 66을 반환하며 이를 char 로 변환하면 'B' 입니다. 위 두가지 성질을 활용해 공식을 만들 수 있습니다. 공식 1..

오류 해결 :: VT-x is disabled in the BIOS for all CPU modes [내부링크]

저는 vagrant로 가상 환경 테스트를 진행하고 있었고, 가상 머신을 생성하려고 했는데 해당 오류가 발생했습니다. 해당 오류를 해결하는 과정을 기록합니다. 오류 원인 오류 내용을 해석하자면 BIOS에서 비활성화 됐다는 말인데, BIOS의 가상화 옵션이 비활성화 되어 있어서 발생한 오류입니다. 해결 방법 BIOS 접근 BIOS 설정으로 들어가야 합니다. BIOS 설정에 접근하기 위해서는 두 가지 방법이 있습니다. BIOS 설정 접근-1 요즘 윈도우는 설정 > 복구 > 고급 시작 옵션 의 지금 다시 시작을 클릭하면 자동으로 BIOS 설정에 접근할 수 있습니다. BIOS 설정 접근-2 두 번째 방법은 PC를 종료한 후 다시 시작하면서 제조사별에 맞는 키를 눌러야 하는데, 외우고 있지 않거나, 찾기 귀찮으시면..

MacBook M1 에서 사용가능한 MySQL/MariaDB 무료 DB관리 툴(Sequal Ace) [내부링크]

맥북에서 쓰기 편한 무료 DB관리 툴을 찾고 있었는데, 무료에 설치도 쉽고 사용하기도 편한 툴을 찾았습니다. 설치 방법은 패키지 관리자인 Homebrew로 설치하는 방법과, 앱스토어에서 직접 다운받는 방식이 있습니다. 설치 설치방법1: 앱스토어에서 설치하기 이 방법이 제일 쉽긴합니다. 앱스토어 열고 sequal ace 검색하면 바로 나옵니다. 설치방법2: Homebrew로 설치하기 % brew install --cask sequel-ace 참고자료 공식 GitHub: https://github.com/Sequel-Ace/Sequel-Ace

프로그래머스 - 최소직사각형 java :: 위클리 챌린지 :: 86491 [내부링크]

문제 링크 코딩테스트 연습 - 최소직사각형 | 프로그래머스 (programmers.co.kr) 문제 풀이 지문을 잘 보면 명함을 눕힐 수 있다는 부분이 있는데, 명함을 눕힐 수 있다는 것은 가로/세로의 구분이 없다는 말입니다. 코드 public int solution(int[][] sizes) { int maxX = Integer.MIN_VALUE, maxY = Integer.MIN_VALUE; for(int[] size : sizes) { maxX = Math.max(maxX, Math.max(size[0], size[1])); maxY = Math.max(maxY, Math.min(size[0], size[1])); } return maxX * maxY; } 가로/세로 구분이 없으니 명함의 큰 값을 ..

프로그래머스 - 부족한 금액 계산하기 java :: 위클리 챌린지 [내부링크]

82612번 문제 코딩테스트 연습 - 부족한 금액 계산하기 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 부족한 금액 계산하기 새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이 programmers.co.kr 풀이 주로 이런 문제는 반복문을 활용하면 쉽게 풀 수 있지만 count가 커질수록 성능은 많이 떨어지게 됩니다. 등차수열의 합 공식으로 문제를 풀면 빠르고 쉽게 해결할 수 있습니다. 풀이코드 public long solution2(int price, int money, int count) { return Math.max(((lo..

VS CODE 에서 FTP 여러개 동시에 사용하기 / FTP 디렉터리 안 나오는 오류도 해결! [내부링크]

확장 프로그램 ftp-simple 설치 Mac(Shift + Command + X) / Window(Control + Shift + X) 확장프로그램에 접근하려면 위 단축키를 통해서 접근할 수도 있고, 위 이미지에서 좌측의 표시된 아이콘을 통해서도 접근할 수 있습니다. 확장 프로그램 검색에 'ftp-simple'이라고 검색하면 아래 이미지 처럼 나올 거예요. 'ftp-simple'을 선택하셔서 설치해 주세요. ftp-simple: Config 설정 설치가 완료되면 ftp-simple Config 설정을 해야 합니다. Mac(Shift + Command + P) / Window(F1) 위 단축키를 입력한 후 ftp-simple을 입력하세요. 지금은 Config 설정을 하려고 하..

AngularJS :: @angular-cli로 파일 생성 시 html, css, spec 파일 생기지 않게 하기 [내부링크]

@angular-cli를 통해 빠르게 component 생성 시, 원하지 않는 html, css, spec 등의 파일들이 같이 생성이 됩니다. 필요한 파일만 생성하기 위해 옵션을 설정하는 방법입니다. component 생성 기본 예제) Component 생성 $ ng g c test # ng generate component test 와 같습니다. 저는 루트 디렉터리가 angular_test이기 때문에, angular_test 아래에 test 아래에 css, html, spec.ts, ts 파일들이 생성됐습니다. 근데 저는 component.ts 만 생성되길 원하는데 자꾸 다른 파일들도 같이 생성되니까 하나하나 지우기가 너무 귀찮았어요. angular.json에서 옵션을 주면 되더라구요. schemati..

AngularJS :: control must be defined as 'standalone' in ngModelOptions 오류 해결 [내부링크]

오류 & 오류 원인 ngForm 과 ngModel 을 같이 사용하려고 할 때, 코드를 위와 같이 작성했더니 오류가 발생했습니다. 오류 내용을 읽어보니 ngModel을 사용하려면 name 속성을 사용하거나, ngModelOptions을 standalone으로 정의되어야 한다고 합니다. ngModel만 사용할 때는 문제 없었는데, ngForm과 ngModel을 같이 사용하려고 하니 오류가 발생하네요. ngForm과 ngModel을 함께 쓰려면 위 조건을 잘 지켜주어야 하는 것 같습니다. 오류 해결 해결 방법1 name 속성을 주어서 해결할 수 있습니다. 해결 방법2 ngModelOptions을 standalone으로 정의하여 해결할 수 있습니다. 모든 입력 필드에는 속성 이름이 있는 것이 좋으니 더 좋은 해..

프로그래머스 - 가운데 글자 가져오기 java [내부링크]

12903번 문제 코딩테스트 연습 - 가운데 글자 가져오기 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 가운데 글자 가져오기 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다. 재한사항 s는 길이가 1 이상, 100이하인 스트링입니다. 입출력 예 s ret programmers.co.kr 풀이 단어 's'의 길이는 1 이상 홀수는 가운데 1글자, 짝수는 가운데 2글자 풀이1 public String solution(String s) { int len = s.length(); return s.substring((len-1) / 2, (len/2) + 1); } String.substring..

MacBook M1 openJDK Install & Version Change [내부링크]

지금 사용하려는 방법은 자바 설치를 위해서 Homebrew가 설치되어 있어야 합니다. Homebrew가 설치되어 있지 않다면 아래 링크를 참고해 Homebrew를 먼저 설치해 주세요. MacBook M1 Homebrew Install JDK 설치 패키지 저장소 추가 % brew tap AdoptOpenJDK/openjdk openJDK를 저장할 공간을 확보합니다. brew tap 이 뭔지 자세한 설명이 필요하다면 하단의 참조 링크를 통해 확인하세요. 설치할 버전의 패키지명 검색하기 % brew search adoptopenjdk 이런 식으로 정확히 패키지명이 무엇인지 쭉 나와요! 자바 개발을 위해서는 jdk만 설치하면 되고, 저는 이미 버전 8과 11을 설치했기 때문에 체크표시가 되어 있네요. openJ..

프로그래머스 - 헤비 유저가 소유한 장소 MySQL/Oracle [내부링크]

77487번 문제 코딩테스트 연습 - 헤비 유저가 소유한 장소 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 헤비 유저가 소유한 장소 PLACES 테이블은 공간 임대 서비스에 등록된 공간의 정보를 담은 테이블입니다. PLACES 테이블의 구조는 다음과 같으며 ID, NAME, HOST_ID는 각각 공간의 아이디, 이름, 공간을 소유한 유저의 아이디를 programmers.co.kr 풀이 공간을 소유한 유저의 아이디 - host_id 공간을 두 개 이상 등록한 사람이 "헤비 유저" 즉, places에 host_id가 2개 이상 있는 사람만 골라내면 됩니다. 풀이1 select a.id, a.name, a.host_id from places a join ( select host_id..

MacBook M1 Homebrew Install [내부링크]

맥북에 개발환경을 세팅하면서 가장 기초가 되는 패키지 매니저 역할을 해줄 Homebrew를 설치하는 과정입니다. Homebrew 설치 % /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 위 명령어를 그대로 입력해도 되고, 혹시 이 게시물이 시간이 많이 지나게 된다면 Homebrew 공식 사이트에서 설치 명령어를 복사해 입력하는 것을 추천합니다. https://brew.sh/index_ko 명령어 입력 후 중간에 패스워드 한 번 입력해야 하고 엔터 한 번 입력해야 합니다. 입력하라고 안내가 나오니 그대로 하시면 됩니다~~ 경로 설정 설치가 다 되면 Homebrew PATH를 잡아줘야 ..

GitHub Page에 Angular 배포하기 [내부링크]

https://.github.io// 에 Angular를 배포하기 위한 방법입니다. repository가 public으로 설정되어 있다는 가정 하에 진행합니다. 만약 repository가 private로 설정되어 있다면 GitHub Pro 이상의 계정을 구매해야 합니다. git 사용법에 대해서는 별도로 작성하지 않습니다. git 사용법이 궁금하다면 아래 링크를 참고해 주세요. Git :: 설치부터 기본 사용법까지 (1) - git 설치 Git :: 설치부터 기본 사용법까지 (2) - git 사용법(github, 명령어) Git :: 설치부터 기본 사용법까지 (3) - git 으로 협업(팀프로젝트)하기 패키지 설치 및 세팅 angular-cli-ghpages 패키지 설치 $ npm install -g an..

프로그래머스 - 같은 숫자는 싫어 java [내부링크]

12906번 문제 코딩테스트 연습 - 같은 숫자는 싫어 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 같은 숫자는 싫어 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 programmers.co.kr 풀이 입력값으로 들어오는 배열에는 0~9 까지의 숫자만 들어올 수 있다. 앞의 수와 비교해서 중복된 값이 아닌 경우만 탐색한다. 1번 풀이 public int[] solution(int[] arr) { List list = new ArrayList(); int saveNum = -1; for (int a : arr) { i..

AngularJS :: Subscribe Arguments 경고 해결 [내부링크]

Observable subscribe 를 사용할 때 아래와 같은 경고를 만났습니다. @deprecated — Instead of passing separate callback arguments, use an observer argument. Signatures taking separate callback arguments will be removed in v8. **해당 경고의 원인과 해결 방법을 기록합니다.** 경고 & 원인 예제1 of([1, 2, 3]).subscribe( v => console.log(v), e => console.error(e), () => console.log('complete') ); subscribe 부분에서 경고가 발생하는데, 이유는 직접적인 인수 입력을 통..

AngularJS :: 'event.target.value' Error Cause and Solutions [내부링크]

AngularJS 를 공부하는 중 input 태그에 이벤트를 다루는 중 해당 이벤트의 값을 가져오지 못하는 오류를 만났습니다. 해당 오류의 원인과 해결 방법을 기록합니다. 오류 & 오류 원인 예제 1 value = ''; handleInput(event: Event) { this. value = event.target.value; } 예제 2 오류가 나는 비슷한 패턴은 예제1 또는 예제2 에서 발생합니다. 오류의 원인은 TypeScript 가 event.target 의 정확한 타입이 무엇인지 모르기 때문에 발생하는 오류입니다. 예를 들어 target 이 HTMLInputElement 인지 HTMLTextareaElement 인지 모른다는 것입니다. 해결 방법 오류를 해결하는 방법은 두 가지..

프로그래머스 - 두 정수 사이의 합 java [내부링크]

12912번 문제 코딩테스트 연습 - 두 정수 사이의 합 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 두 정수 사이의 합 두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요. 예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다. 제한 조건 a와 b가 같은 경우 programmers.co.kr 풀이 1번 풀이 public long solution(int a, int b) { long sum = 0; for(int i=Math.min(a, b); i

MySQL :: 테이블 여러 개 한 번에 삭제하기 (delete + join) [내부링크]

delete로는 주로 단일 테이블을 삭제하는데 여러 테이블을 동시에 삭제해야 하는 경우가 있습니다. join 을 이용해 2개 이상의 테이블을 삭제하는 방법을 기록합니다. 단일 테이블 삭제 delete from tableA where table_key = 7또는 delete from a using tableA a where a.table_key = 7다중 테이블 삭제 delete from a using tableA a join tableB b on (a.table_key = b.table_key) where a.table_key = 7where 절에는 a의 값, b의 값 무엇이 들어와도 상관없습니다.

git :: error failed to push some refs to 오류 해결 [내부링크]

작업을 진행중인 곳에 새로운 repository 를 연결하려고 했습니다. git remote add origin "git주소" 로 정상적으로 연결을 했지만, push 과정에서 오류가 발생해 이를 해결하는 과정입니다. 오류 원인 failed to push some refs to "git addr" 해석하자면 일부 참조를 원격 저장소에 push 하지 못 했다는 뜻입니다. 그림과 함께 설명하자면, 내가 수정한 a.txt 파일을 원격 저장소에 push 하려고 했는데, 그 전에 누군가 b.txt 파일을 수정해서 push 했다. 즉, 내가 수정하지 않은 b.txt 파일과 현재 원격 저장소에 등록되어 있는 b.txt 파일의 내용이 다르기 때문에 발생하는 오류입니다. 당연히 새로운 repository 를 만들었다면 원..

TypeScript :: 타입(자료형)에 대해 알아보자. [내부링크]

Windows 10 Node v16.15.0 TypeScript 4.7.3 타입스크립트 설치 과정이 필요하다면 아래 링크로 이동하세요. 2022.06.10 - [Develop Log/Coding Log] - TypeScript: 설치부터 JavaScript 변환까지 타입스크립트의 기본 타입 (자료형) null & undefined null 값이 없다는 것을 명시 undefined 값을 할당하지 않은 변수의 초깃값 null 과 undefined는 다른 값의 하위 타입으로 다른 타입에 할당할 수 있습니다. let _null: null = null; console.log(_null); // null let _undefined: undefined = undefined; console.log(_undefined)..

프로그래머스 - 문자열 내 p와 y의 개수 java :: 12916 [내부링크]

문제 링크 코딩테스트 연습 - 문자열 내 p와 y의 개수 | 프로그래머스 (programmers.co.kr) 문제 풀이 코드-1 boolean solution(String s) { int total = 0; for(char ch : s.toLowerCase().toCharArray()) { switch(ch) { case 'p': total++; break; case 'y': total--; break; } } return total == 0; } 최종적으로 p와 y의 개수 차이를 구하기 위한 total 이라는 변수를 선언했습니다. 먼저 String 의 toLowerCase()로 활용해 모든 문자열을 소문자로 만들었습니다. toCharArray()로 char 타입의 배열을 순..

TypeScript :: 설치부터 JavaScript 변환까지 [내부링크]

TypeScript 설치해서 JavaScript 로 변환해 실행시키는 과정입니다. 기본적으로 Node 설치가 되어 있어야 합니다. Windows 10 Node.js v16.15.0 TypeScript 설치 $ npm install -g typescript -g 옵션은 global 하게, 즉 전역에 설치를 하겠다는 의미이며 보통 개별 프로젝트에만 사용할 목적이 아니기 때문에 전역에 설치를 진행합니다. TypeScript 설치 & 버전 확인 $ tsc -v 이제 설치가 완료되었으니 타입스크립트 문법으로 작성을 해보고, 자바스크립트로 변환을 하겠습니다. Transpiling (트랜스파일링) TypeScript 예제 코드 (tstest.ts) enum Color1 {Red, Green, Blue}; tstest..

Babel 을 사용해 오류 없는 javascript 코드를 만들자! [내부링크]

Babel 이란? 자바스크립트는 실행 환경에 따라 최신 문법을 사용할 수도 있고, 사용하지 못할 수도 있습니다. 이러한 실행 환경에 맞춰서 항상 최신 문법의 자바스크립트로 코딩이 가능하도록 도와주는 도구입니다. Babel 을 사용하는 이유 예제 코드 let a = 1; let b = 2; const sum = (x, y) => x + y; console.log(sum(a, b)) // 3 흔히 람다라고 불리는 화살표함수(=>)는 ES6 부터 사용할 수 있습니다. 일반적으로 IE 에서는 ES5 까지만 지원하기 때문에 해당 코드를 사용하면 오류가 발생합니다. 이를 해결하기 위해서는 ES6 코드로 작성한 부분을 실행환경에 맞게 변경할 수 있어야 합니다. 이를 도와주는 도구가 'Babel' 입니다..

Node.js :: Express 로 Cookie 올바르게 활용하기 [내부링크]

이 예제에는 두 가지 패키지를 사용하고 있습니다. (cookie는 없어도 됩니다) express: 4.18.1 cookie: 0.5.0 기본 예제 틀 만들기 const express = require('express'); const app = express(); app.use(express.urlencoded({ extended: false })); app.get('/', (req, res) => { let html = ` `; res.send(html); }); app.post('/cookie', (req, res) => { res.send('cookie test!'); }); app.listen(3000, () => { console.log(&..

Node.js :: Express generator 로 프로젝트 생성 시 PM2 안 되는 오류 [내부링크]

Node.js 에서 Express generator 로 프로젝트 기본 구조를 생성했을 경우 일반적으로 사용하는 PM2 사용법으로 서버가 실행되지 않을 수 있습니다. 저 역시 일반적으로 쓰던 것처럼 "PM2 start app.js" 를 했지만 실행이 되지 않았고, 해당 오류를 수정하는 과정을 기록합니다. 오류 & 오류 원인 > PM2 start app.js Express generator 로 프로젝트 기본 구조를 생성하면 app.js 로 서버를 실행하게 되면 list 화면에는 [status=online] 이지만 도메인을 입력하면 오류가 발생합니다. 이유는 생성된 구조를 보면 /bin/www 가 있을텐데, 실제로는 이곳에서 포트번호 및 서버를 세팅하는 역할을 합니다. 즉, 우리가 기존에 하던 서버 세팅의 역..

PowerShell 스크립트 실행 안 될 때 (pm2 명령어 사용하기) [내부링크]

Windows cmd 로는 PM2를 잘만 사용했는데, PowerShell에서 사용하려고 하니 오류를 만났습니다. 오류의 원인과 해결하는 과정을 기록합니다. 환경: Windows 10 오류 오류 내용 PowerShell 에서 pm2 list 를 입력했는데 오류가 발생했습니다. 오류 내용에 https://go.microsoft.com/fwlink/?LinkID=135170 해당 링크를 참조하라고 나오길래, 한 번 들어가 봤습니다. 오류 원인 PowerShell 에는 실행 정책이 있는데, 악성 스크립트의 실행을 방지하기 위해 이러한 정책이 있다고 합니다. 실행 정책에 대한 자세한 내용은 위 링크를 참조하시면 됩니다. Windows 클라이언트 컴퓨터에 대한 기본 실행 정책은 Restricted 인데, 개별 명령..

Node.js :: PM2 기본 간단 정리 [내부링크]

PM2 를 활용하여 Node.js 서비스하기 추가 설명 없이 간단하게 정리한 것이므로 자세한 설명을 원한다면 가장 하단의 References 의 블로그를 참조하시기 바랍니다. PM2 설치하기 Node.js 가 설치되어 있다는 가정 하에 진행합니다. Node.js 의 패키지 매니저인 npm으로 PM2 를 설치합니다. > npm install pm2@latest -g https://pm2.keymetrics.io/ 예시 애플리케이션 파일 준비 var http = require('http'); var url = require('url'); var app = http.createServer(function(request,response){ var _url = request.url; ..

윈도우에서 HEIC/HEVC 파일 미리보기/열기 (무료) [내부링크]

Microsoft Store 를 사용할 수 있는 Window 환경에서만 가능합니다. heic, hevc 파일을 미리보기/열기 가능합니다. HEIF Image Extensions Microsoft Store 에서 (위)사진과 같은 확장 프로그램을 찾아야 합니다. HEIF Image Extensions 라고 검색해서 찾고자 하는 확장프로그램이 나오면 설치하면 됩니다. (작성일 기준 유료 프로그램 아님) 그러나 확장프로그램에서 제대로 못 찾았다면 주소창에 아래 링크를 입력하면 바로 스토어로 이동할 수 있습니다. ms-windows-store://pdp/?ProductId=9PMMSR1CGPWG HEVC Video Extensions HEIF 설치 시 설명란에 HEVC 확장 프로그램도 같이 설치해야 한다고 명시..

Tacotron2 TTS 한국어 예제 실습 (KSS datasets) - (2) [내부링크]

Development Environment - Colab Plus Toolkit - ESPnet TTS Model - Tactron2 dataset - KSS 본 글은 훈련이 완료된 모델을 활용하는 과정입니다. ESPnet 설치 및 훈련 과정이 필요하다면 다음 글을 참고하세요. Tacotron2 TTS 한국어 예제 실습 (KSS dataset) - (1) 기본 세팅 google drive connect from google.colab import drive drive.mount("/content/drive",force_remount=True) 패키지 설치 !pip install espnet_model_zoo !pip install noisereduce !pip install --upgrade parall..

Tacotron2 TTS 한국어 예제 실습 (KSS dataset) - (1) [내부링크]

Development Environment - Colab Plus Toolkit - ESPnet TTS Model - Tactron2 dataset - KSS 본 글은 ESPnet 설치부터 훈련까지의 과정입니다. 활용 예제를 보시려면 다음 글을 참고하세요. Tacotron2 TTS 한국어 예제 실습 (KSS datasets) - (2) dataset 준비 https://www.kaggle.com/datasets/bryanpark/korean-single-speaker-speech-dataset 위 링크에서 dataset 및 script 다운로드 기본 세팅 google drive connect # google drive 연결 from google.colab import drive drive.mount(&#..

Java: 윈도우 명령어 사용하기 / Window Command [내부링크]

Java로 윈도우 명령어를 사용해야 하는 경우가 생겼습니다. 명령어 메소드 및 사용법을 정리합니다. 명령어 실행 메소드 public String execCmd(String cmd) { try { Process process = Runtime.getRuntime().exec(new String[]{"cmd", "/c", cmd}); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream(), "MS949")); String line = null; StringBuffer sb = new StringBuffer(); sb.append(cmd); while ((line = reader.readLine()) !=..

JavaScript: split 공백값 제거하는 여러가지 방법 [내부링크]

Split 할 때 맨 뒤에 구분자가 붙으면 배열에 빈 값이 하나 들어옵니다. 이를 제거하기 위해 데이터를 전처리 하는 과정이 필요합니다. 전처리 하기 위한 여러가지 방법입니다. split: 기본적인 방법 let text = "123.456.789."; let text_split = text.split("."); console.log(text_split); ['123', '456', '789', ''] split: 공백제거하기 방법 1: filter filter() 를 사용해 조건을 통과하는 값만 남긴다.let text = "123.456.789."; let text_split = text.split(".").filter(Boolean); conso..

MS-SQL: 정규식 사용하기 / GetRegExReplace [내부링크]

쿼리를 통해 데이터 전처리가 필요한 경우가 생겼다. 정규식을 활용해 데이터 전처리를 했다. GetRegExReplace (정규식 함수) CREATE FUNCTION dbo.GetRegExReplace ( @TargetText VarChar(MAX), -- 원본 문자열 값 @Expression VarChar(80),-- 정규 식 형태 문자열 @ReplaceValue VarChar(80) -- 교체할 문자 ) RETURNS VARCHAR(MAX) AS BEGIN DECLARE @ReturnValue VARCHAR(MAX) = @TargetText; IF ISNULL(@ReturnValue,'') = '' RETURN @ReturnValue; WHILE 1 =1 BEGIN IF P..

MS-SQL: html 태그 제거하기 / html tag remove [내부링크]

html 태그 제거 함수 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[cleanHTML](@strHTML VARCHAR(8000)) RETURNS VARCHAR(8000) AS BEGIN DECLARE @strTEXT VARCHAR(8000) DECLARE @char VARCHAR(2) DECLARE @len INT DECLARE @i INT SET @strTEXT = '' SET @char = '' SET @len = LEN(@strHTML) SET @i = 1 WHILE @i ') SET @strTEXT = REPLACE(@strTEXT, '

SQL: 웹(Web)에서 SQL 테스트 사이트 / SQL 무설치 테스트 사이트 [내부링크]

SQL 설치는 하지 않고 테스트만 진행하고 싶은 경우가 있습니다. 각종 DBMS 테스트 진행이 가능합니다. 사이트 추천 SQL 테스트 사이트 추천 http://sqlfiddle.com/ MySQL, Oracle, PostgreSQL, SQLite 테스트 가능 테이블 생성 가능 그 외 SQL 테스트 사이트 https://sqltest.net/ MySQL, Oracle, MS SQL Server 테스트 가능 테이블 생성 가능 https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all 9개의 준비된 테이블이 있으며, 별도로 테이블 생성은 불가 SQL_Fiddle 사용법 원하는 DBMS 선택 Build Schema 입력 좌측의 입력 후 Build S..

프로그래머스 - 이상한 문자 만들기 java :: 12930 [내부링크]

문제 링크 코딩테스트 연습 - 이상한 문자 만들기 | 프로그래머스 (programmers.co.kr) 풀이 풀이-1 public String solution(String s) { StringBuilder sb = new StringBuilder(); boolean evenFlag = true; for (char ch : s.toCharArray()) { sb.append(evenFlag ? Character.toUpperCase(ch) : Character.toLowerCase(ch)); evenFlag = (ch == ' ') ? true : !evenFlag; } return sb.toString(); } 예제) try hello world -> TrY HeLlO WoRlD 주의할 점은..

CSS: em, px, pt, percent 변환 및 공식 [내부링크]

em을 px로, px을 em으로 변환해야 하는 경우가 생겼습니다. 단위를 변환한 공식을 정리합니다. em, px 기준 px 장치(모니터)에 따라서 상대적인 크기를 가짐. 화면 해상도에 대한 상대크기 em 해당 폰트의 대문자 M의 너비를 기준으로 함. 지정되거나 상속받은(또는 상위 Element)에 대한 백분율 상대 크기 percent(%) 기본글꼴의 크기에 대하여 상대적인 값을 가짐 pt(point) 일반 문서(워드)에서 많이 사용하는 단위 변환 기준 기준 폰트 사이즈: 16px px em percent(%) pt(point) 16px 1em 100% 12pt 기준 폰트 사이즈: 16px px em percent(%) pt(point) 50px 3.125em 312.5% 37.5pt 변환 공식 기준 폰트..

Android Studio - 안드로이드 스튜디오 구버전 다운로드 [내부링크]

Android Studio 구버전 다운로드 링크(https://developer.android.com/studio/archive?hl=ko)를 통해 안드로이드 스튜디오 다운로드 자료실로 이동 가장 하단으로 스크롤하면 마지막에 "약관에 동의합니다" 클릭 원하는 버전 다운로드

프로그래머스 - 자연수 뒤집어 배열로 만들기 java :: 12932 [내부링크]

문제 링크 코딩테스트 연습 - 자연수 뒤집어 배열로 만들기 | 프로그래머스 (programmers.co.kr) 문제 풀이 1번 풀이 public int[] solution(long n) { int len = (""+n).length(); int[] arr = new int[len]; for(int i=0; i 54321) 그러므로 자연수 n의 길이를 반환할 배열의 크기로 정한다. 자연수 n의 길이만큼 반복적으로 일의자리를 구하여 배열에 순서대로 저장한다. 예시1. 자연수 n = 12345 ️ n=12345, 일의자리: 5 ️ n=1234, 일의자리: 4 ️ n=123, 일의자리: 3 ️ n=12, 일의자리: 2 ️ n=1, 일의자리: 1 일의자리를 구한 순서대로 배열에 삽입한 결과: 54321 ..

프로그래머스 - 콜라츠 추측 java [내부링크]

12943번 문제 - 콜라츠 추측 코딩테스트 연습 - 콜라츠 추측 | 프로그래머스 (programmers.co.kr) 풀이 입력된 수 num이 1이 될 때 까지 두 개의 공식(1-1, 1-2)을 반복합니다. num이 1이 되었다면 반복한 수를 반환합니다. 500번을 반복했는데도 num이 1이 되지 않았다면 -1을 반환합니다. 1번 풀이 public int solution(int num) { long numL = num; for(int cnt=0; cnt

PHP 문자열 출력 시 한글 깨지는 경우 [내부링크]

개발환경이 PHP 7.4 미만 버전이라 mb_str_split 함수를 사용하지 못하는 경우입니다. @UTF-8 파일에서 문자열을 순서대로 출력하려고 했는데 한글이 깨지는 오류를 만나 해결하는 과정입니다. 한글 깨지는 오류 $word = "한글테스트"; for ($i=0; $i < strlen($word); $i++) { #echo $word[$i]. " "; echo substr($word, $i, 1). " "; } substr() 함수를 사용해도, 주석된 코드를 사용해도 모두 한글이 깨집니다. 한글이 포함된 문자열을 순차대로 출력하려고 할 때 가공하지 않고 그대로 출력할 때는 문제가 되지 않습니다. 그러나 문자열에서 출력할 문자가 한글일 경우 해당 문자와 연산을 하려고 하면 한글이 깨지는 현상이 발생..

JavaScript 문자열 중복 제거하기 [내부링크]

Set을 활용하여 문자열 중복 제거하기 문자열을 Set 형식으로 만든다. let word = "aabbccddee"; let word_set = new Set(word); console.log(word_set_ary_join); Set(5) {'a', 'b', 'c', 'd', 'e'} Set을 Array 형식으로 변환 let word_set_ary = [... word_set]; console.log(word_set_ary); ['a', 'b', 'c', 'd', 'e'] Array를 String 으로 변환 let word_set_ary_join = word_s..

파이썬 아나콘다(Anaconda): 주피터 노트북(Jupyter Notebook) 설치 및 시작하기 [내부링크]

개발환경 : Windows 11 64Bit 이전 포스팅도 참고 바랍니다. 파이썬 아나콘다(Anaconda): 사용법 - 가상환경 설정 주피터 노트북 설치 및 실행 가상환경 활성화 conda activate study study 에 생성한 가상환경 이름을 입력하면 됩니다. 가상환경 생성 및 활성화 관련 내용은 이전 포스팅 참고하시면 됩니다. 주피터 노트북 설치 conda install jupyter notebook conda install -c anaconda jedi jupyter notebook 은 주피터 노트북을 설치하는 것입니다. jedi 는 편집기에서 자동완성, 메소드 설명 확인 등을 도와주는 패키지입니다. 주피터 노트북 실행 jupyter notebook 주피터 노트북 실행하면 웹으로 실행되며 ..

파이썬 아나콘다(Anaconda): 사용법 - 가상환경 설정 [내부링크]

아나콘다(Anaconda) 파이썬의 패키지/의존성 관리 및 배포를 편리하게 해주는 조건부 무료 오픈 소스 소프트웨어 쉽게 말해 파이썬 오픈소스를 모아놓은 개발 플랫폼이다. 장점으로는 가상환경을 제공하고 패키지 관리자를 제공한다. 아나콘다 버전 확인 및 업데이트 #버전확인 conda --version #업데이트 conda update conda 현재 아나콘다의 버전을 확인할 수 있으며 아나콘다 버전을 최신 버전으로 업데이트 할 수 있습니다. 가상환경 생성 conda create -n test python=3.7 test 에 원하는 가상환경 이름을 넣으시고 python=원하는 버전 을 입력하시면 가상환경이 생성됩니다. 가상환경 확인 conda info --envs 가상환경 리스트를 확인할 수 있습니다. 기본..

프로그래머스 - 정수 제곱근 판별 java :: 12934 [내부링크]

문제 링크 코딩테스트 연습 - 정수 제곱근 판별 | 프로그래머스 (programmers.co.kr) 문제 풀이 1번 풀이(바빌로나이법) public long solution(long n) { long count = 30; double x = 1.0; while(0 < count--) { x = (x + (n / x)) / 2; } return (x % 1 == 0.0) ? (long) ((x+1) * (x+1)) : -1; } 위 공식은 바빌로니아법 공식입니다. 위의 공식을 반복하면 제곱근의 근사값을 구할 수 있다는 원리입니다. 위의 공식을 예를 들어 설명하겠습니다. 구하고자 하는 값 S=9라고 가정하고, x = 1 부터 시작해서 일정횟수 반복합니다. ️ (1.0 + (9 / 1.0)) / 2 = 5...

프로그래머스 - 짝수와 홀수 java [내부링크]

12937번 문제 - 짝수와 홀수 코딩테스트 연습 - 짝수와 홀수 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 짝수와 홀수 정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요. 제한 조건 num은 int 범위의 정수입니다. 0은 짝수입니다. 입출력 예 num return 3 "Odd" 4 "Even" programmers.co.kr 풀이 어떤 수를 2로 나눈 나머지가 0이면 짝수, 아니면 홀수 class Solution { public String solution(int num) { return num % 2 == 0 ? "Even" : "Odd"; } }

자연어 처리(NLP) 개념 잡기 (3) - 정제, 정규화, 불용어 [내부링크]

자연어 처리(NLP)를 학습할 때 필요한 용어들을 기초적인 지식 수준에서 이해하기 쉽게 정리합니다. 예제 코드는 Google Colab 을 기반으로 작성했습니다. 자연어 처리(NLP) 개녀 잡기의 다른 포스팅도 참고하세요. 자연어 처리(NLP) 개념 잡기 (1) - 말뭉치, 토큰화 자연어 처리(NLP) 개념 잡기 (2) - 표제어, 어간 정제(Cleaning) 정제 및 정규화는 텍스트 데이터를 용도에 맞게 바꾸는 방법이다. 말뭉치로부터 노이즈 데이터를 제거한다. 토큰화 작업에 방해가 되는 부분을 제거한다. 보통 토큰화 작업 전에 정제 작업을 진행하지만 토큰화 작업 후에도 남아있는 노이즈 데이터를 지우는 데 활용하기도 한다. 정제 작업에서 제거할 노이즈 데이터라고 하면 의미가 없는 단어(특수문자, 공백 등..

자연어 처리(NLP) 개념 잡기 (2) - 표제어, 어간 [내부링크]

자연어 처리(NLP)를 학습할 때 필요한 용어들을 기초적인 지식 수준에서 이해하기 쉽게 정리합니다. 예제 코드는 Google Colab 을 기반으로 작성했습니다. 자연어 처리(NLP) 개념 잡기의 다른 포스팅도 참고하세요. 자연어 처리(NLP) 개념 잡기 (1) - 말뭉치, 토큰화 자연어 처리(NLP) 개념 잡기 (3) - 정제, 정규화, 불용어 표제어(Lemmatization) 표제어는 단어의 기본형이다. 보통 사전에 대표로 실린 단어를 뜻한다. 예를 들어 '사과들' 을 뜻하는 단어는 'apples' 이지만 이 단어의 표제어는 본래의 뜻이 '사과'인 'apple' 이다. 또한 'apples' 단어로 어간과 접사를 나누어 보면 어간:..

GitHub: git not autorized 오류 [내부링크]

원인 기존에 GitGub 인증 방식을 [계정/비밀번호] 로 사용이 가능했지만 2021-08-13 부터 계정/비밀번호를 인증 방식을 승인하지 않는다. 토큰을 사용해 인증을 하라는 노트가 있으니 아래 링크를 참고. Token authentication requirements for Git operations | The GitHub Blog 해결 방법 토큰을 발급 받아 비밀번호 대신 토큰을 입력하면 해결된다. 토큰 발급 계정 > Settings > Developer Settings > Personal access tokens 메뉴로 이동 우측 상단의 Generate new token 클릭 새로운 토큰을 발급받는 화면이 나온다. Note에 간단한 메모를 작성한다. 유효기간 설정하는 부분이 있는데 유효기간을 설정..

프로그래머스 - 하샤드 수 java [내부링크]

12947번 문제 - 하샤드 수 코딩테스트 연습 - 하샤드 수 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 하샤드 수 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하 programmers.co.kr 풀이 조건은 1~10000 사이의 자연수 1. 구하고자 하는 자연수를 각 자릿수의 합을 구하고 2. 자연수를 합으로 나누었을 때 나머지가 0이면 하샤드 수 예1) 152 = 1+5+2 = 8 152 / 8 = 19 (하샤드 수) 예2) 13 = 1+3 = 4 13 / 4 = 3.25 (하샤드 수 X) 1번 풀이 pu..

프로그래머스 - 문자열 다루기 기본 java [내부링크]

12918번 문제 코딩테스트 연습 - 문자열 다루기 기본 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 문자열 다루기 기본 문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다. 제한 사항 s는 길이 1 programmers.co.kr 풀이 문제는 어렵지 않은데 문제를 제출하니 5번,6번 예제에서 실패가 나왔다. 문제 설명을 다시 읽어보니 문자열의 길이에 제한이 있더라... 1번 풀이 public boolean solution2(String s) { int len = s.length(); return (len == 4 || len ..

Android Studio: Ctrl+Y 로 Redo 하기 / 단축키 변경하기 [내부링크]

Android Studio 사용 시 습관적으로 Ctrl+Y 로 Redo 를 시도하게 된다. 기본적으로 Android Studio 에서 Ctrl+Y 는 Delete Line 이므로 라인이 지워지게 된다. 다른 에디터를 자주 사용하다가 Android Studio 사용 시 실수가 잦아서 Ctrl+Y 를 Redo 로 변경한다. File > Setting > Keymap 기존의 Delete Line 에서 Ctrl+Y 액션 제거하기 검색창에 delete 입력 시 Editor Actions 아래에 Delete Line - [Ctrl + Y] 를 확인할 수 있다. 더블클릭 또는 마우스 우측 클릭을 하면 수정할 수 있는 작은 창이 나오는데, Remove Ctrl+Y 를 클릭해 제거한다. 필자는 "Delete Line" ..

안드로이드 앱 빌드 시 "Invalid keystore format" 오류 해결 [내부링크]

android studio 에서 keystore 등록해도 빌드하면 "Invalid keystore format" 오류가 발생했다. 또는 빌드는 되더라도 실행하는 과정에서 오류가 발생했다. 이 오류의 원인과 해결방법을 남긴다. 오류 로그 Execution failed for task ':app:packageDebug'. > A failure occurred while executing com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable > com.android.ide.common.signing.KeytoolException: Failed to read key AndroidDebugKey from s..

자연어 처리(NLP) 개념 잡기 (1) - 말뭉치, 토큰화 [내부링크]

자연어 처리(NLP)를 학습할 때 필요한 용어들을 기초적인 지식 수준에서 이해하기 쉽게 정리합니다. 예제 코드는 Google Colab 을 기반으로 작성했습니다. 자연어 처리(NLP) 개념 잡기의 다른 포스팅도 참고하세요. 자연어 처리(NLP) 개념 잡기 (2) - 표제어, 어간 자연어 처리(NLP) 개념 잡기 (3) - 정제, 정규화, 불용어 말뭉치 말뭉치는 원시 텍스트(ASCII나 UTF-8)와 이 텍스트에 연관된 메타데이터를 포함한다. 메타데이터는 식별자, 레이블, 타임스탬프 등 텍스트와 관련된 어떤 부가 정보도 될 수 있다. 즉, 말뭉치는 텍스트를 가공·처리·분석할 수 있는 형태로 모아 놓은 자료의 집합이다. 단순하게 생각하면 우리가 사용하는 텍스트 표본이라고 볼 수 있다. 모두의 말뭉치 (kor..

프로그래머스 - 문자열을 정수로 바꾸기 java [내부링크]

12925번 문제 코딩테스트 연습 - 문자열을 정수로 바꾸기 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 문자열을 정수로 바꾸기 문자열 s를 숫자로 변환한 결과를 반환하는 함수, solution을 완성하세요. 제한 조건 s의 길이는 1 이상 5이하입니다. s의 맨앞에는 부호(+, -)가 올 수 있습니다. s는 부호와 숫자로만 이루어져있습니 programmers.co.kr 풀이 생각 핵심은 맨앞의 문자는 '+', '-' 부호가 올 수 있다는 것 부호를 먼저 판별하고 남은 문자를 수로 변환하면 되겠다. 1번 풀이 public int solution(String s) { char first = s.charAt(0); boolean minus = (first == '-') ? true..

프로그래머스 - 약수의 합 java :: 12928 [내부링크]

문제 링크 코딩테스트 연습 - 약수의 합 | 프로그래머스 (programmers.co.kr) 문제 풀이 1번 풀이 약수를 구하는 방법 어떤 수를 나눈 나머지가 0인 경우 약수 public int solution(int n) { int sum = n; for (int i = 1; i

프로그래머스 - 자릿수 더하기 java [내부링크]

12931번 문제 코딩테스트 연습 - 자릿수 더하기 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 자릿수 더하기 자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요. 예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다. 제한사항 N의 범위 : 100,000,000 이하의 자연수 입출 programmers.co.kr 풀이 생각 각 자릿수의 합을 구하는 방법은 0이 될 때까지 10으로 나눈 나머지를 더하기 예) 123 n n/10 n%10 sum 12345 1234 5 0 + 5 = 5 1234 123 4 5 + 4 = 9 123 12 3 9 + 3 = 12 12 1 2 12 + 2 = 14 1 ..

프로그래머스 - 정수 내림차순으로 배치하기 java [내부링크]

문제 링크 - 12933번 코딩테스트 연습 - 정수 내림차순으로 배치하기 | 프로그래머스 (programmers.co.kr) 문제 이해하기 선택정렬 내림차순 {5, 7, 1, 3} 5, 7 비교 : 5 < 7 이므로 자리 교체 {7, 5, 1, 3} 7, 1 비교 : 7 > 1 이므로 그대로 {7, 5, 1, 3} 7, 3 비교 : 7 > 3 이므로 그대로 {7, 5, 1, 3} {7, 5, 1, 3} 5, 1 비교 : 5 > 1 이므로 그대로 {7, 5, 1, 3} 5, 3 비교 : 5 > 3 이므로 그대로 {7, 5, 1, 3} {7, 5, 1, 3} 1, 3 비교 : 1 < 3 이므로 자리 교체 {7, 5, 3, 1} {7, 5, 3, 1} 문제 풀이 1번 풀이 public long solution..

파이토치로 배우는 자연어 처리 - 리뷰 [내부링크]

자연어처리의 기본을 공부하기 위해 '파이토치로 배우는 자연어처리'를 읽고 작성한 리뷰입니다. 지인에게 선물 받은 책으로 작성한 리뷰입니다. 책 소개 파이토치로 배우는 자연어 처리 - 딥러닝을 이용한 자연어 처리 애플리케이션 구축 출판사 : 한빛미디어 지은이 : 델립 라오(Delip Rao), 브라이언 맥머핸(Brian McMahan) 옮긴이 : 박해선 리뷰 이 책의 목표는 자연어 처리와 딥러닝을 처음 접하는 독자에게 두 분야에서 중요한 주제를 맛보도록 하는 것이라고 설명하고 있습니다. 그 목표에 맞게 사전지식이 없고 수학이 어려운 사람들에게 접근하기 쉽게 작성한 책입니다. 첫 번째로 마음에 들었던 부분 중 하나는 수학 공식이 거의 없다는 것입니다. 보통 인공지능 관련 책을 보게 되면 많은 ..

PHP 주말,공휴일 제외한 영업일(날짜) 구하기 [내부링크]

공휴일 계산은 공공데이터포털의 한국천문연구원_특일 정보 API를 사용합니다. 공휴일 구하기 API 인증키 받기 공휴일을 구하기 위해 공공데이터포털의 한국천문연구원_특일 정보 API를 사용했다. 해당 API를 사용하기 위해서는 아래 링크에서 활용 신청을 해야 한다. 한국천문연구원_특일 정보 | 공공데이터포털 (data.go.kr) 활용 신청을 하면 하단에 일반 인증키를 받게 됩니다. 환경 또는 호출 조건에 따라 두 인증키를 적용하면서 구동되는 키를 사용하라고 합니다. 저는 일반 인증키(Encoding)을 사용했습니다. API로 공휴일 데이터 가져오기 function getHoliday($year,$month) { $key = "your API Key"; $param = 'ServiceKey=&#39..

프로그래머스 - 제일 작은 수 제거하기 java [내부링크]

문제 링크 - 12935 코딩테스트 연습 - 제일 작은 수 제거하기 | 프로그래머스 (programmers.co.kr) 문제 이해하기 배열을 순서대로 탐색하며 가장 작은 수를 찾아서 해당 수만 제거하고 새로운 배열에 담으면 되겠다. 배열이 빈 경우에는 -1 리턴이므로 입력 배열의 길이가 1이면 바로 -1 을 리턴하면 되겠다. 문제 풀이 1번 풀이 public int[] solution(int[] arr) { if(arr.length == 1) return new int[] {-1}; // 순서대로 탐색하며 가장 작은 수 찾기 int min = Integer.MAX_VALUE; for(int a : arr) { if(min > a) min = a; } // 위에서 찾은 가장 작은 수를 제외하고 새로운 배열..

프로그래머스 - 최대공약수와 최소공배수, 유클리드 호제법 java [내부링크]

12940번 문제 코딩테스트 연습 - 최대공약수와 최소공배수 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 최대공약수와 최소공배수 두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 programmers.co.kr 풀이 생각 최대공약수를 구하는 유클리드 호제법을 활용 최소공배수 = n * m / 최대공약수 1번 풀이 public int[] solution(int n, int m) { int gcd = gcd(n, m%n); int lcm = n * m / gcd; return new int[] {gcd, lcm}; } public..

프로그래머스 - 핸드폰 번호 가리기 java [내부링크]

12948번 문제 코딩테스트 연습 - 핸드폰 번호 가리기 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 핸드폰 번호 가리기 프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다. 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자 programmers.co.kr 풀이 과정 무조건 뒤에서부터 4개만 보여주고 나머지는 *로 처리 1번 풀이 public String solution(String phone_number) { StringBuilder sb = new StringBuilder(phone_number); for (int i = 0; i < phone_number.length()-4; i..

프로그래머스 - 행렬의 덧셈 java :: 12950 [내부링크]

문제 링크 코딩테스트 연습 - 행렬의 덧셈 | 프로그래머스 (programmers.co.kr) 문제 이해하기 행과 열이 같은 행렬의 덧셈 같은 행, 같은 열의 값을 더한 결과 행, 열 만큼 반복하며 같은 행, 열을 더하면 되겠다. 문제 풀이 코드-1 public int[][] solution2(int[][] arr1, int[][] arr2) { int[][] arr = new int[arr1.length][arr1[0].length]; IntStream.range(0, arr1.length) .forEach(i -> IntStream.range(0, arr1[0].length) .forEach(j -> arr[i][j] = arr1[i][j] + arr2[i][j])); return arr; } 스트림..

프로그래머스 - x만큼 간격이 있는 n개의 숫자 JAVA [내부링크]

12954번 문제 코딩테스트 연습 - x만큼 간격이 있는 n개의 숫자 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - x만큼 간격이 있는 n개의 숫자 함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요. programmers.co.kr 풀이 과정 x를 n번만큼 반복하며 증감하면 되겠다 n x value array_in 1 x = 2 2 {2} 2 x = x + 2 4 {2, 4} 3 x = x + 4 6 {2, 4, 6} 4 x = x + 6 8 {2, 4, 6, 8} 5 x = x + 8 10 {2, 4, 6, 8, 10..

PHP 암호화된 압축파일 해제 후 다운로드 [내부링크]

PHP 압축파일에 암호가 걸려있을 경우 압축파일 해제 후 압축파일 내의 파일들 다운로드 PHP 5.2 이상의 환경에서 사용 가능하다. 압축파일에 암호화를 설정하고 싶은 경우에는 링크(PHP 압축파일에 암호화 후 다운로드)를 참고하세요. 사용할 함수 이해하기 ZipArchive::open(filename, flag) : 압축파일을 연다. filename: 열려는 압축 파일의 이름 flag: 압축 파일 모드 (overwrite, create, readonly, excel, checkcons) ZipArchive::close : 열렸거나 새로 만든 압축파일을 닫는다. ZipArchive::setPassword(password) : 파일에 비밀번호를 설정한다. (암호를 부여/해제 할 때 모두 사용) passwo..

프로그래머스 - 직사각형 별찍기 JAVA [내부링크]

12969번 문제 코딩테스트 연습 - 직사각형 별찍기 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 직사각형 별찍기 이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다. 별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요. 제한 조건 n과 m은 각각 1000 이하인 자연수 programmers.co.kr 풀이 1번 풀이 (스트림을 활용한 람다식 풀이) import java.util.Scanner; import java.util.stream.IntStream; class Solution { public static void main(String[] args) { Scanner sc = new Scanner(System.in); in..

프로그래머스 - 평균 구하기 JAVA [내부링크]

문제 코딩테스트 연습 - 평균 구하기 | 프로그래머스 (programmers.co.kr) 풀이 1번 풀이 public double solution(int[] arr) { int sum = 0; for (int num : arr) sum += num; return (double) sum / arr.length; } 2번 풀이 import java.util.stream.IntStream; class Solution { public double solution(int[] arr) { return IntStream.of(arr).average().getAsDouble(); } } IntStream.of(arr) - 배열에 대한 int 스트림 생성 average() - 스트림의 평균값 getAsDouble() -..

파이토치로 텐서 기본 조작하기 (Manipulating Tensor with PyTorch) [내부링크]

개발환경 : Google Colab 텐서를 만들기 전에 텐서 정보를 계속 확인하기 위해 사전 함수를 만든다. #Tensor 상세 정보 확인 def desc(x): print("타입: {} / 크기: {}".format(x.type(), x.shape)) print("값: {}\n".format(x)) 텐서 만들기 기본 import torch desc(torch.Tensor(2, 2)) ''' 타입: torch.FloatTensor / 크기: torch.Size([2, 2]) 값: tensor([[1.2292e+09, 3.0907e-41], [8.5479e-44, 4.4842e-44]]) ''' 파이썬 리스트로 만들기 import torch a = [[1, 2, ..

Google Colab 에서 GPU 환경 사용하기 [내부링크]

Google Colab 을 사용할 때 기본으로는 CPU 환경만 사용할 수 있기에 GPU 환경을 사용하기 위해서는 설정 변경을 해야 한다. Google Colab 에서 GPU 환경 세팅하기 Google Colab 실행 자신의 드라이브에서 Google Colaboratory 을 실행한다. 런타임 유형 변경 상단 목록에서 [런타임 > 런타임 유형 변경] 을 선택 하드웨어 가속기 [None -> GPU] 로 변경 GPU 설정 완료 GPU 환경 테스트 import torch print(torch.cuda.is_available()) ''' CPU 환경일 경우: False GPU 환경일 경우: True '''

머신러닝 기초다지기, 지도 학습이란? [내부링크]

자연어처리 공부를 하며 남기는 기록 지도 학습 지도학습이란 샘플에 대응하는 정답을 예측하는 학습 방법 중 하나이다. 훈련 데이터로부터 하나의 함수(예측 모델)가 유추되고, 예측 모델에 대한 평가를 통해 가중치를 최적화하며 정확도를 높인다. 훈련 데이터 정답을 예측하기 위해 샘플이 되는 데이터이다. 일반적인 알고리즘에서는 Input(입력)과 같은 말이며 'x'로 표기한다. 레이블 훈련데이터에 상응하며 예측되는 대상이다. '정답'과 같은 말이며 'y'로 표기한다. 예측 모델 모델은 x를 받아 y를 예측하는 함수이다. 즉, 훈련데이터로 정답을 예측한다. 가중치 훈련 데이터를 잘 예측하기 위해서, 추가적인 제약 조건을 만족시키기 위해서 사용한다. 즉, 정확도를 높이기 ..

PHP 압축파일에 암호화 후 다운로드 [내부링크]

PHP 파일 다운로드 시 압축파일로 만들기 / 압축하는 파일에 암호 걸기. PHP 7.2 이상의 환경만 가능한 방법이다. (ZipArchive::setEncryptionName를 사용하기 위해서) 압축파일만 생성할 거라면(암호화 X) PHP 5.2 이상의 환경에서도 사용 가능하다. 압축파일 해제를 원하면 링크(PHP 압축파일 해제 후 다운로드)를 참고하세요. 사용할 함수 이해하기 ZipArchive::open(filename, flag) : 압축파일을 연다. filename : 열려는 압축 파일의 이름 flag : 압축 파일 모드 (overwrite, create, readonly, excel, checkcons) ZipArchive::close : 열렸거나 새로 만든 압축파일을 닫는다. ZipArchi..

JAVA 버전 변경이 안 되는 경우 (환경변수를 바꿔도 안 될 때) [내부링크]

Window10 64비트 환경에서 여러 버전의 JAVA 설치 시 버전변경이 되지 않아 해결하는 과정 단순히 환경변수를 변경하면 해결이 될 줄 알았는데 해결이 안 되는 경우가 있다. 이것저것 하면서 해결했는데 그 방법들을 순서대로 나열한다. 첫 번째 방법 : 환경변수 설정 제일 먼저 확인했던 것은 환경변수 설정이다. 운영체제가 어떤 경로, 어떤 개발환경에서든 자바를 인식하기 위해서는 환경변수 설정이 필요하다. [Win+R] 실행창 열어서 [sysdm.cpl ,3] 을 입력하면 시스템속성 창이 나온다 시스템 변수에 'JAVA_HOME' 을 새로 만든다. 'JAVA_HOME' 의 경로를 내가 원하는 JAVA 버전의 경로로 맞춘다. 그리고 PATH 에 "%JAVA_HOME%\bin"..

Git :: 설치부터 기본 사용법까지 (3) - git 으로 협업(팀프로젝트)하기 [내부링크]

환경 : Window 11 64비트, github 사용 git push 까지는 알았다고 가정하고 병합하는 과정에 대한 내용 만약 기초부터 알아야 한다면 아래 링크에서 확인할 수 있다. git 설치가 필요하다면 Git 설치부터 기본 사용법까지 (1) - git 설치에서 확인할 수 있다. git 사용법(github, 명령어)이 궁금하다면 Git 설치부터 기본 사용법까지 (2) - git 사용법(github, 명령어)에서 확인할 수 있다. Git 으로 협업(팀프로젝트)을 하는 방법 팀프로젝트란 팀원들이 모두 함께 작업할 수 있어야 하고 팀원들이 작업한 내용이 모두 반영되어야 하고 반영된 내용이 최신화가 되어야 한다. 팀프로젝트를 할 경우 전체적인 작업 순서는 아래와 같다 master branch git pul..

Git :: 설치부터 기본 사용법까지 (2) - git 사용법(github, 명령어) [내부링크]

환경 : Window 11 64비트, github git init ~ git push 까지 기본 사용법 git 설치가 필요하다면 Git 설치부터 기본 사용법까지 (1) - git 설치에서 확인할 수 있다. git 기본 사용법은 이미 알고 있고 협업(팀프로젝트) 하는 방법이 궁금하면 Git 설치부터 기본 사용법까지 (3) - git 으로 협업(팀프로젝트)하기에서 확인할 수 있다. Git 이해하기 git을 사용하기 전 git 용어에 대한 개념이 잡혀있어야 한다. Repository (Local / Remote) 저장소 / 히스토리, 태그, 소스를 브랜치에 따라 버전을 나누어 저장한다. 변경한 모든 히스토리를 확인할 수 있다. 로컬 저장소와 원격 저장소와 반드시 구분지어서 이해해야 한다. Working Tre..

log4j 보안 취약점 해결 (logback 으로 쉽게 라이브러리 교체) [내부링크]

log4j는 그 동안에도 이슈가 종종 있었는데 이번 보안 취약점은 심각한 보안 결함이라고 한다. 현재(2021.12.9 ~ 2021.12.13) 사건이 이슈화 되었고 나는 이것을 빠르게 해결하기 위해 log4j 를 Logback으로 변경했다. Log4j 란? 개발자는 여러 이유로 프로그램에 로그를 기록한다. 이것은 오류를 체크하는 로그일 수도 있고, 단순히 모니터링을 위한 로그일 수도 있다. Log4j는 이러한 프로그램에 로그를 기록할 수 있도록 도와주는 라이브러리이다. 보안 취약점 원인 이 보안 취약점은 JNDI와 LDAP를 이용한다. JNDI : JAVA 프로그램이 디렉토리를 통해 데이터(JAVA 객체)를 찾을 수 있도록 하는 서비스 LDAP : 분산 디렉터리 서비스에서 사용자, 시스템, 네트워크, ..

Git :: 설치부터 기본 사용법까지 (1) - git 설치 [내부링크]

설치환경 : Window 11 64비트(Window 10 64비트도 동일하게 진행 가능), github 사용 git init ~ git push 까지 기본 사용법 git 설치 git download 링크(Git - Downloads)로 이동하면 아래 사진과 같이 바로 다운로드 할 수 있는 페이지가 나온다. 우측의 [Download for Windows] 클릭 시 바로 다운로드가 된다. git 설치 라이센스에 관한 내용. 궁금하면 읽어봐도 되고... 자연스럽게 [Next] 클릭 설치할 경로를 지정, 262.5MB 필요하므로 충분한 저장공간으로 지정 후 [Next] 클릭 사용하고자 하는 git에 포함된 컴포넌트를 선택하는 과정 기본적으로 그냥 넘기면 되지만 중요한 것만 설명하자면 [Git Bash Here]..

JAVA/자바 :: 설치 및 환경변수 설정 [내부링크]

개발환경 : 윈도우10 64비트, JDK1.8 자바 설치 및 환경변수 설정하기. JAVA 설치 JAVA 다운로드 링크(Java Archive Downloads - Java SE 8) 로 이동 자신의 운영체제 환경에 맞는 파일 다운로드 (32비트는 x86, 64비트는 x64) 설치 파일 실행 설치파일 실행 후 "Development Tools" 클릭하고 Next 하면 설치가 바로 진행된다. 설치가 완료되었다고 나오면 C:\\Program Files\\Java 로 이동해 jdk 관련 폴더가 생성되었는지 확인한다. 버전에 따라 모든 파일이 같지는 않지만 아래 사진과 비슷하게 나온다면 설치 완료이다. 환경변수 설정 변수 JAVA_HOME 생성 Win+R 실행창 열어서 sysdm.cpl ,3 을 입력하면 시스템속..

일학습병행 SW개발 :: 외부평가 문제 및 후기 [내부링크]

일학습병행 SW개발_L5_ver2.0 외부평가 응시 후 기억나는 문제들을 정리한 글. 만약 외부평가 준비할 자료가 필요하다면 일학습병행 SW개발 외부평가 준비 과정 에서 확인할 수 있다. 지필문제 지필문제는 3가지 유형이 나온다. 프로그래밍 언어 활용, 응용SW 기초 활용, 애플리케이션 테스트 관리 지필문제는 OX문제, 연결식 문제, 단답식 문제가 나온다. OX퀴즈 1. 라우터의 특징이 설명되어 있고 네트워크 계층과 관련해서 맞는지 틀리는지 2. 살충제 패러독스(Pesticide paradox)에 대한 설명이 맞는지 틀리는지 3. 기억 안 남... 연결식 1. Reqeust, Session, Application 에 맞는 설명을 연결하는 문제 2. 추상화, 단순화 에 맞는 설명을 연결하는 문제 주관식 1..

일학습병행 SW개발 :: 외부평가 준비 과정 [내부링크]

일학습병행 SW개발 L5 자격증 공부를 하며 준비한 과정 외부평가 응시 후 문제 및 후기가 궁금하다면 일학습병행 SW개발 외부평가 문제 및 후기에서 확인할 수 있다. 자료 준비 1. 일학습병행 공개자료 아래 링크로 이동 후 분류 검색창에 SW개발을 검색해 자신의 버전에 맞는 공개자료를 다운로드 한다. 공개문제 자료실 (q-net.or.kr) 2. 지필평가 자료 [20.정보통신 > 01.정보기술 > 02.정보기술개발 > 02.응용SW엔지니어링] 아래 경로로 이동 후 위 순서대로 학습모듈을 찾는다. NCS통합 > NCS 및 학습모듈검색 > NCS 및 학습모듈 검색 직무명 응용SW엔지니어링을 찾으면 하단에 NCS능력단위 별로 PDF를 다운로드 할 수 있다. 자신의 공부 과목에 맞게 다운로드 하면 된다. SW개..

티스토리 구글/네이버 웹마스터 도구 등록하고 Sitemap/RSS 추가하기 [내부링크]

네이버 블로그에서 티스토리 블로그로 이전하면서 각 웹마스터 도구를 새로 등록하면서 기록을 남긴다. 구글 웹마스터 도구 구글 웹마스터 도구로 이동 Google Search Console에 오신 것을 환영합니다 우측 URL 접두어에 자신의 티스토리 블로그 URL 입력 소유권 확인 HTML 태그 클릭하면 나오는 meta 태그 복사 티스토리 블로그관리 페이지에서 플러그인 선택 메타 태그를 찾아서 선택 메타 태그 중 name의 내용은 이름에, content의 내용은 내용에 입력한다. 예) 메타 태그가 위와 같다면 이름에는 google-site-verification, 내용에는 gogomacode_1234567890 를 입력하면 된다. 구글 웹마스터 도구 접속 메타태그 적용 후 다시 구글 웹마스터 도구로 돌아가 확..

DAsP(데이터아키텍처 준전문가) :: 공부방법, 후기 [내부링크]

DAsP(데이터아키텍처 준전문가) 자격증 취득을 위한 과정과 후기 도서 데이터아키텍처 전문가 가이드 (50,000원) DAP 자격증도 같이 공부할 수 있는 책이며 정석이라고 부를 수 있는 책이다. 이 책만 구매해서 꼼꼼히 읽어도 합격할 수 있다. 물론 나는 그렇지 못할 것 같아서 책을 하나 더 구매했다. 데이터아키텍처 자격검정 실전문제 (18,000원) SQLD 자격증 취득할 때 자격검정 실전문제 책이 도움이 많이 되어서 신뢰가 생겨 구매했다. 책 제목처럼 문제만 있는 책이며 해설도 있으니 개념 공부 후에 이 책으로 문제풀이를 하면 도움이 많이 된다. 나는 문제들이 많이 헷갈렸는데 만약 이 책을 보지 않았다면 불합격 했을 것 같다… 후기 & 결과 제 45회 데이터아키텍처 준전문가(DAsP) 과목 점수 합..

SQLD :: 공부방법(책 추천, 요약 정리, 기출 문제) / 후기 [내부링크]

SQLD는 SQL개발자 자격증으로 데이터베이스 SQL 국가공인 자격증이다. 이 글은 SQLD 자격증 취득을 위해 노력한 과정이다. 도서 1. 도서 : SQL 전문가 가이드 (50,000원) 이 책만 정독하고 실습한다면 충분히 합격할 수 있다. 나는 가격이 비싸서 중고로 찾아보려고 했지만 중고책이 없어서 결국 SQLP 까지 공부할 마음으로 정가를 주고 구매했다. 자격증 합격을 위해서 이 책은 필수라고 생각한다. 2. 도서 - SQL 자격검정 실전문제 위에서 설명한 "SQL 전문가 가이드" 책은 예시 문제 자체가 많이 없다. 그래서 "SQL 전문가 가이드" 책으로만 공부하면 문제풀이가 부족하다고 생각이 될 것이다. 그 부족한 문제를 채울 수 있는 책이다. 아래에서 설명할 3번 책과 이 책이 가격이 같으니 둘..

MySQL/MariaDB :: 중복 없는 난수 생성 [내부링크]

예측 불가능한 중복없는 난수를 생성하여 테이블에 저장하는 프로시저 만들기 중복 없는 난수 UUID SELECT UUID(), UUID(), UUID() #30e6956e-5752-11ec-853f-6c2b59c11615 #30e69572-5752-11ec-853f-6c2b59c11615 #30e69574-5752-11ec-853f-6c2b59c11615UUID를 통해 중복없는 난수를 생성할 수 있다. UUID() 는 UUID 버전1의 값을 반환한다. UUID 버전 1은 네트워크 랜 카드와 시간을 기반으로 유니크한 ID를 생성한다. 그렇기 때문에 위 코드 예시 중 (1-2-3-4-5) 로 가정했을 때 1번을 제외한 2,3,4,5 는 같은 수가 나온다. 네트워크 랜 카드와 시간을 기반으로 생성한 ID이기 때..

Apache + PHP :: 윈도우(Window) 연동하여 웹개발 시작하기 [내부링크]

Apache 와 PHP를 연동하여 웹개발을 시작하기 위한 기초 개발환경을 설정하는 과정이다. 개발환경 : Window 10 64bit, Apache 2.4.51, PHP7.4 (7.4.26) Apache 설치 다운로드 경로로 이동 Apache VS16 binaries and modules download (apachelounge.com) 아파치 최신 버전 설치 자신의 운영체제에 맞는 Zip 파일을 다운로드 받으면 된다. 나는 Window 64비트 이므로 Apache 2.4.5 Wind64를 다운로드 한다. 압축 해제 후 "Apache24" 폴더만 원하는 경로로 이동 예) C:\\Program Files\\Apache24 PHP 설치 다운로드 경로로 이동 PHP For Windows: Binaries an..

PHP :: 클라이언트의 접속 정보 상세하기 확인하기 (device, os, browser) [내부링크]

browscap 의 getBrowser() 활용하여 클라이언트 접속 정보를 확인하는 방법 browscap 을 활용하는 정상적인 방법 php_browscap.ini 또는 lite_php_browscap.ini 파일을 다운로드 특정 경로에 저장 후 php.ini 를 수정 (browscap = 저장경로/php_browscap.ini) 아파치 재시작 그러나 지금부터 설명할 방법은 php.ini 를 수정할 수 없는 상황(권한이 없거나 소스 수정만 가능한 경우)에 활용할 수 있는 방법이다. PHP 접속 정보 상세하게 확인하기 원하는 경로에 Browscap.php 파일 생성 원하는 경로에 cache 파일 생성 후 쓰기 권한 부여 예) cache/browscap\_cache.php browscap 활용하여 클라이언트 ..

Window 10 설치(부팅) USB 만들기 [내부링크]

USB 준비 Window 10 설치에 필요한 용량은 4~5GB를 차지하므로 8GB 이상의 USB를 준비한다. 준비된 USB를 포맷한다. 윈도우 설치 파일 다운로드 https://www.microsoft.com/ko-kr/software-download/windows10 위 링크에서 지금 도구 다운로드 클릭 설치(부팅) USB 만들기 설치파일 실행 관련 통지 및 사용 조건 "동의" 클릭 원하는 작업 "다른 PC용 설치 미디어(USB 플래시 드라이브, DVD 또는 ISO 파일) 만들기" 클릭 언어, 아키텍처 및 버전 선택 언어 : 한국어 에디션 : Windows 10 아키텍처 : 64비트(x64) 만약 꼭 32비트를 써야 한다면 변경하면 되지만 32비트는 메모리를 4기가밖에 인식하지 못하므로 특별한 이유가 ..

정보처리기사 :: 필기/실기 준비과정과 후기 [내부링크]

필기 책 시나공 정보처리기사 필기로 공부했으며 이론 내용은 하나도 안 보고 기출문제만 봤다. 총 공부시간은 6~7시간 정도 공부했다. 필기는 출제되는 문제가 매번 비슷했고 문제 자체도 거의 바뀌지 않는다. 그리고 단순 암기형 문제가 많아 기출문제만 봐도 충분했다. 실기 책 이기적 정보처리기사 실기 기본서로 기본적인 개념부터 문제까지 꼼꼼히 정리하며 공부했다. 주변에서 실기 탈락이 꽤 나와서 더 열심히 공부했었다. 전체 공부시간은 15시간 정도이며 반은 개념공부, 반은 기출문제 풀고 오답노트 정리하고 다시 푸는 방식으로 공부했다. 실기도 문제유형이 전 시험들에서 크게 벗어나지 않는다. 다만 주관식(서술형) 문제가 있어서 책에서 중요하다고 짚어주는 내용은 더 확실히 이해하고 암기했었다. 이기적 책이 개념부터..

네이버 블로그에서 티스토리로 이전 [내부링크]

공부를 하며 단순하게 기록을 남기고 싶었고 기록의 시작은 네이버 블로그였다. 활동을 이어가며 블로그에 글이 점점 많아지고 네이버 애드포스트에도 가입할 기회가 생겨 수익이 생기기 시작했다. 네이버 애드포스트로 수익을 본 지 약 20개월 정도 되어 가는데 많은 수익을 볼 때도 있고 수익이 거의 없을 때도 있었다. 그래서 궁금했다. 공부도 하고 수익도 생기는 것 좋은데 다른 블로그의 수익 구조는 어떨까? 티스토리의 수익 구조는 애드센스인데 승인 과정이 어렵다고 한다. 동일한 포스팅으로 애드포스트와 애드센스 수익을 비교한 글을 보았는데 애드센스의 수익이 약 2배 정도 많았다. 또한 유입 키워드로 봤을 때 네이버 블로그는 일상, 맛집 포스팅이 상위권이고 티스토리는 정보성 포스팅이 상위권인데 내 글은 주로 개발, ..

프로그래머스 - 정수 내림차순으로 배치하기 java [내부링크]

12933번 문제 코딩테스트 연습 - 정수 내림차순으로 배치하기 | 프로그래머스 (programmers.co.kr) 코딩테스트 연습 - 정수 내림차순으로 배치하기 함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자..