분류 전체보기
-
JavaScript for...of와 for...in의 차이자바스크립트 2021. 12. 1. 22:26
for..of는 "값"을 순회하고, for...in은 "인덱스"를 순회한다. 배열을 예로 들면 아래와 같다. var array = ['a', 'b', 'c']; for (var value of array) { console.log(value); } // a b c for (var index in array) { console.log(index); } // 0, 1, 2 객체의 경우 인덱스는 속성(key)이다. var object = {a: '한국', b: '미국', c: '러시아'}; for (var value of object) { console.log(value); } // 한국, 미국, 러시아 for (var index in object) { console.log(index); } // a, b, c
-
리눅스 그룹(Group)리눅스 2021. 11. 14. 17:05
그룹은 리눅스 OS 사용자 계정의 모임이다. 기본적으로 사용자 계정은 사용자 계정과 같은 이름의 그룹에 속한며, 신규 사용자 계정이 생성되면 사용자 계정 이름과 같은 이름의 그룹이 생성된다. 특정 사용자 계정의 그룹을 조회하려면 아래와 같이 "id" 명령어를 사용하면 된다. id 그룹 목록은 /etc/group에서 확인할 수 있다. cat /etc/group 리눅스의 파일 또는 디렉토리는 권한, 소유자, 소유 그룹 정보를 가진다. 즉, 소유자 뿐만 아니라 그룹 단위로도 해당 리소스를 소유할 수 있다. 소유자 권한 변경 시 그룹까지 지정하려면 chown 명령어 다음에 "사용자 계정:그룹 이름"의 형태를 사용하면 된다. 아래 예시는 디렉토리의 소유자를 user1으로 소유 그룹을 group1으로 변경하는 명령..
-
Plain jar vs Executable jar(feat. plain jar 생성 방지)자바/스프링 2021. 11. 8. 23:38
스프링 부트 gradle 플러그인 2.5 버전부터 gradle 빌드 시 JAR 파일이 2개 생성된다. 별도의 설정을 하지 않았을 때 하나는 "프로젝트 이름-버전.jar", 다른 하나는 "프로젝트 이름-버전-plain.jar"이라는 이름을 가진다. Plain Archive "-plain"이 붙은 jar 파일을 "plain archive"라고 한다. (여기서 archive는 jar이든 war이든 빌드 결과물을 의미한다.) plain archive는 gradle의 "jar" task로 생성된다. plain archive는 어플리케이션 실행에 필요한 모든 의존성을 포함하지 않고, 작성된 소스코드의 클래스 파일과 리소스 파일만 포함한다. 이렇게 생성된 jar 파일을 "plain jar", "standard jar..
-
데이터베이스를 Docker 환경에서 운영하면 안되는 이유DB 2021. 11. 7. 21:39
Docker와 같은 컨테이너 기술에서 컨테이너는 stateless하다고 가정한다. 즉, 실행 중에 컨테이너에 지속적으로 유지되어야 할 데이터를 저장해서는 안 된다. 컨테이너는 함수와 같이 취급되어야 한다. Docker 자체가 stateful한 서비스를 위해 설계된 것이 아니며, 컨테이너가 제거될 때 컨테이너 실행 중에 생성된 데이터도 제거된다. 또한 쿠버네티스와 같은 오케스트레이션 도구는 트래픽에 따라 컨테이너를 생성하고 삭제할 수 있다. 같은 이미지로 같은 컨테이너를 생성하더라도, 데이터베이스의 경우 각 컨테이너의 데이터가 다르면 트래픽 분산을 하는 의미가 없어진다. 만약 하나의 컨테이너만 운영한다면, 트래픽 분산이 불가능하다. 물론 Docker 볼륨 등을 이용하여 지속적으로 데이터를 유지할 수 있다...
-
PostgreSQL 외부 접속 허용 및 IP주소 제한DB 2021. 11. 7. 00:23
클라우드 인스턴스에서 PostgreSQL의 포트를 열어놓고 외부 접속을 허용했더니, 디도스 비슷한 트래픽 공격으로 서버 메모리가 치솟은 경험이 있다. 이 때문에 외부 접속은 허용하되, IP주소로 제한을 걸어서 특정 사용자만 외부에서 접근할 수 있도록 정책을 바꾸었다. 해당 설정 방법에 대해 공유한다. 요약부터 하면, postgresql.conf 파일에서 외부 모든 아이피의 접속을 허용하고, pg_hba.conf 파일에서 허용할 아이피를 제한한다. 이게 일반적인 설정 방법이다. 먼저 pg_hba.conf 파일을 열어서 수정한다. (파일 위치: /etc/postgresql/버전/main/pg_hba.conf) vim /etc/postgresql/버전/main/pg_hba.conf 문서 제일 하단 IPv4 l..
-
다중 태그 검색 SQL문DB 2021. 10. 31. 21:39
post 테이블과 tag 테이블이 있고, 두 테이블을 매핑하는 post_tag_relation이라는 테이블이 있다고 가정한다. 사용자가 여러 개의 태그를 모두 가지고 있는 포스팅만을 조회한다고 할 때의 SQL 문은 아래와 같다. SELECT post_id FROM post_tag_relation WHERE tag_id IN (SELECT id FROM tag WHERE name IN ('tag1','tag2')) GROUP BY post_id HAVING COUNT(tag_id) >= 2; 위의 SQL문을 조금 더 최적화하려면, 서브쿼리를 조인으로 바꾸면 된다. left outer join이 서브쿼리보다 빠르기 때문이다. (출처: https://stackoverflow.com/questions/25771..
-
Node.js replaceAll() is not a function 에러자바스크립트/Node.js 2021. 10. 30. 22:53
자바스크립트에서는 기본적으로 string.replaceAll() 함수가 제공되지 않는다. 브라우저에 따라 제공되는 경우가 있지만 백엔드 개발에서는 해당 사항이 없다. 따라서 sting.replace() 함수를 사용하되 정규표현식을 쓴다. 자바스크립트 정규표현식 문법은 아래와 같다. var re = /pattern/flags 아래와 같이 정규표현식의 g 플래그를 이용하면 replaceAll() 함수처럼 사용할 수 있다. var example = '사과, 배, 사과, 바나나, 배, 복숭아'; console.log(example.replace(/사과\, |배\, /g, ''); >>> 바나나, 복숭아
-
Ubuntu에서 PostgreSQL 설치 및 데이터 저장 위치 변경하기DB 2021. 10. 26. 22:27
먼저 아래 명령어를 통해 PostgreSQL을 설치한다. sudo apt update sudo apt upgrade -y sudo apt install postgresql-12 위 명령어는 아래 공식 문서에서 확인하였다. https://www.postgresql.org/download/linux/ubuntu/ PostgreSQL: Linux downloads (Ubuntu) Linux downloads (Ubuntu) PostgreSQL is available in all Ubuntu versions by default. However, Ubuntu "snapshots" a specific version of PostgreSQL that is then supported throughout the life..