분류 전체보기 50

NTP Server 설치 - OpenNTPD

사내 서버에서 자꾸만 time sync가 어긋나면서 그 위에서 동작하는 애플리케이션들이 문제를 일으키기 시작했다. 문제의 원인은 이렇다. 사내 서버는 보안을 위해서 오직 사내에서만 사용하기 때문에, 외부 네트워크 연결이 안 된다. 그래서 public NTP 서버에 접속이 안 되고, 계속 조금씩 조금씩 시간이 어긋나게 된 것이었다. 해결 방법은 간단했다. 사내에서 외부로 인터넷 연결이 가능한 컴퓨터에 NTP 서버를 설치하고, 사내 서버에서 해당 NTP 서버에 연결하면 된다. 설치 방법은 아래와 같다. - NTP Server 설치 및 실행 sudo pacman -S openntpd sudo systemctl enable --now openntpd > 인터넷 연결할 수 있는 컴퓨터 OS가 Archlinux 인..

편(編)/설치 2022.03.02

nextcloud - 비밀번호 초기화

살면서 가장 짜증스럽고 당황스러운 기억은 비밀번호를 잊어버릴 때가 아닐까? 다행스럽게도 nextcloud에서는 이를 위한 해결책은 제공한다. occ(ownCloud Console)를 이용해 비밀번호를 초기화할 수 있다. PHP_MEMORY_LIMIT=512M ./occ user:resetpassword occ 위치는 docker image의 경우 /var/www/html 에 위치한다. 직접 설치한 경우라면, nextcloud를 설치한 위치에 존재하지만, 기억이 나지 않는다면 아래의 커맨드로 찾길 바란다. sudo find / -name "occ" 실패 - 메모리 부족 occ를 환경 변수 없이 그대로 실행하면, 메모리가 부족하다는 에러가 발생한다. PHP_MEMORY_LIMIT=512M 를 꼭 붙여주도록 ..

저(著) 2022.03.01

git - 불필요한 로컬 브랜치 제거

회사에서 일할때도 집에서 혼자 프로젝트를 진행할때도 git을 기본으로 사용한다. 코드를 변경해야 할 때, main(이전에는 master)에서 브랜치를 만들고 해당 브랜치에서 코드 변경 후에 머지한다. 그런데 필자가 귀찮아서 인지, 계속해서 로컬에 머지했던 브랜치가 쌓인다. 브랜치를 변경해야할때 여러개에서 선택하는것도 귀찮다. 그래서 필요없는 브랜치를 전부 삭제하는 방법을 소개한다. git fetch -p && for branch in $(git branch -vv | grep ": gone]" | awk "{print $1}"); do git branch -D $branch; done git fetch -p remote 서버에서 브랜치 정보를 업데이트한다. 이때, 이미 가져 온 것 중 remote에서 사..

저(著) 2022.02.08

오케스트레이션 vs 코레오그래피

서비스 제어 방식 마이크로서비스는 하나의 거대한 서비스가 아니라 여러 개의 서비스를 두고, 이를 통해 사용자에게 필요한 기능을 제공하는 아키텍처이다. 서비스가 여러 개로 쪼개어졌으니, 사용자에게 기능을 제공하기 위해서는 서비스들이 서로 협력하여야 한다. 보통 두 가지 방법이 제시되며, 이는 아래와 같다. Orchestration Choreography Orchestration 중재자 서비스를 두고 여러 서비스를 조율하는 방법이다. 중재자 서비스는 사용자에게 기능을 제공하기 위해 어떤 서비스를 어떤 순서로 호출할지 알고 있어야 한다. 서비스 간의 커플링은 증가하지만, 개발자 관점에서 기능 자체를 이해하기 쉽다. Choreography 중재자 서비스 없이 서로가 알아서 소통하는 방법이다. 보통 서비스들은 이..

술(述)/비교 2022.01.20

OCP

정의 SOLID 중 O에 해당한다. OCP는 Open-Closed Principle의 약자로, 개방 폐쇄 원칙이다. 코드가 확장에 대해 열려 있고, 변경에 대해 닫혀 있어야 한다는 원칙이다. 주의! 변경을 최소화하자는 말이지, 변경하지 말라는 것이 아니다. 천재가 아닌 이상에야 완벽한 추상화를 하기는 어렵다. 위반 사례 OCP를 위반하면 비슷한 if else 문 다수 존재하거나 switch 문이 존재하게 된다. import "log" func doSomething(op string, a, b int64) int64 { switch op { case "+": return a + b case "-": return a - b default: panic("panic") } } func main() { ret :..

술(述)/풀이 2022.01.04

ISP

정의 SOLID 중 I에 해당한다. ISP는 Interface Segregation Principle의 약자로, 인터페이스 분리 원칙이다. 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙이다. (인터페이스의 SRP) ISP의 장점 소프트웨어를 디커플링된 상태로 유지하게 해준다. 리팩토링, 변경, 재배포를 더 쉽게 할 수 있게 해준다. 이 글을 쓰다가 문득, “그럼 인터페이스에 메소드를 하나씩만 넣으면 되지 않을까?” 생각했는데, 생각만 해도 끔찍하더라, 뭐든 적당한 게 좋다. 일단 코드 크기부터가 미칠 것 같다. 위반 사례 인터페이스가 클라이언트가 사용하지 않는 메소드를 가지는 경우 어떻게 될까? 아래 예시는 프린터가 스캔과 출력 메소드를 가지는 경우이다. type Printer ..

술(述)/풀이 2021.12.29

SRP

정의 SOLID 중 S에 해당한다. SRP는 Single Responsibility Principle의 약자로, 직역하면 단일 책임 원칙이다. 여기서 말하는 책임은 무엇일까? 이 책임이라는 단어가 애매해서, 프로그래머가 모든 모듈이 하나의 일을 해야 한다는 의미로 받아들이기가 쉽다. 필자가 생각하기에 Responsibility라는 단어보다는 Persona라는 단어가 더 어울린다고 생각한다. 즉, 하나의 모듈은 하나의 Persona에 의해 좌지우지돼야 한다. SRP의 창시자 "Robert C. Martin"은 책임을 변경의 이유로 정의했다. 즉, 단일 책임 원칙은 변경의 이유가 반드시 하나이어야 한다. 더보기 Martin defines a responsibility as a reason to change,..

술(述)/풀이 2021.12.13

LSP

정의 SOLID 중 L 에 해당한다. 리스코프 치환 원칙(Liskov Substitution Principle)은 Barbara Liskov(바바라 리스코프)가 처음 소개했다. 즉, 리스코프가 개발한 치환 원칙이다. 그렇다면 뭘 치환할까? 바로 상위 타입을 하위 타입으로 치환하는 것을 말한다. 이때 하위 타입으로 치환하더라도 치환하기 이전처럼 정상적으로 동작해야 한다는 것이 리스코프 치환 원칙이다. 위반사례 전통적으로 직사각형/정사각형 문제가 있다. type Tetragon interface { SetHeight(height uint64) SetWidth(width uint64) Area() uint64 } 위 예시처럼 사각형(tetragon)이라는 인터페이스가 존재할 때, 직사각형과 정사각형을 구현하면..

술(述)/풀이 2021.12.10

alias

리눅스 명령어를 사용하다 보면, 굉장히 빈번히 사용하게 되는 명령어들이 있다. 심지어 그 명령어가 굉장히 긴 경우에 그것을 반복적으로 입력하는 것은 굉장한 고역이 될 것이다. 리눅스에서는 이를 해결하기 위해서 alias 명령어를 제공한다. 이 포스팅에서는 alias 사용 방법을 소개한다. 명령어 사용 방법 먼저 alias 명령어를 사용하는 방법을 소개하겠다. 단, 이 방법은 해당 터미널을 빠져나가는 순간 생성한 alias들이 사라지므로 주의하기를 바란다. 만약, 영구 적용하고 싶다면, 영구 적용 세션으로 가길 바란다. - 목록 조회 alias 출력 예시 alias ls='ls --color=auto' - 생성 alias ="COMMAND" > 주의: "=" 의 앞뒤를 띄어 쓰면 안 된다! 예시: 가장 큰..

저(著) 2021.12.06

bash 설정 파일

bash는 다양한 설정 파일을 가지고 있습니다. /etc/profile ~/.bash_profile ~/.bashrc 이 포스팅에서는 이 설정 파일들이 무엇인지, 언제 실행되는지를 알아보겠습니다. 그 전에 먼저 Bash에서 제공하는 모드들에 대해 알아보겠습니다. interactive 모드 interactive 모드는 사람의 개입이 필요할 때 사용하는 모드입니다. 이는 다시 두 가지 모드를 제공합니다. login 모드 CLI에서 로그인할 때와 SSH를 통해 로그인할 때 사용하는 모드입니다. 이 모드는 아래의 설정 파일들을 실행합니다. /etc/profile ~/.bash_profile 보통 ~/.bash_profile에는 환경 변수를 지정합니다. PATH PS1 등등 non-login 모드 이미 로그인한 ..

술(述)/풀이 2021.12.05