엔지니어링
객체지향 도메인 모델 설계와 멘탈 모델의 연관성
객체지향 도메인 모델 설계와 멘탈 모델의 연관성
2020.12.12최근에 객체지향의 사실과 오해(조영호) 이라는 책을 읽던 중 도메인 모델 설계을 멘탈 모델(심성모형)을 통해 설명하는 부분에서 충격을 받았다. 어떻게 이 두 개념의 연관을 이렇게 지을 수 있었을까? 멘탈 모델(심성모형) 나는 인간중심디자인(Human Centered Design)이라는 수업에서 멘탈모델에 대해 배웠었고, DB 모델링이나 프로그래밍을 통해 설계도 조금은 익숙한데 이 두 개념을 전혀 연관을 짓지 못했다. 멘탈모델에 대해 다시 알아보고 싶어서 구글링을 하던 중 귀여운 사례로 멘탈 모델에 대해 설명하는 글을 발견했다. 아래 글을 요약하자면 멘탈 모델이란 어떤 사물이 어떻게 동작할 것이라는 믿는 사고 방식이고, 개개인마다 동일한 사물에 대해서도 멘탈 모델이 다르기 때문에 발생한 귀여운 해프닝에 대..
Git 브랜치명과 폴더명이 중복되었을 경우
Git 브랜치명과 폴더명이 중복되었을 경우
2020.12.04후... git checkout 를 했더니 수 많은 파일이 overwrriten 되었다. 내 몇 안되는 지식으로는 checkout했을 때 왜 이런 현상이 발생하는 지 애하가 가지 않았다. 커밋이 되지 않은 파일은 체크아웃 된 브랜치로 딸려오고, 커밋된 경우에는 스무스하게 스위칭되야한다고 생각했다. 내가 이해했던 현상과 진짜 원인을 알아보자. 내가 이해했던 현상 로컬 브랜치에 아래 파일들 작업 후 commit - add => new_file.java - delete => deleted_file.java - modify => modified_file.java IDEA를 통해 리모트에 있는 브랜치로 checkout했다가 다시 기존에 작업중이던 브랜치로 checkout 시 에러 발생 git checkout 다른..
리눅스 메모리 용량 확인과 로그파일 관리
리눅스 메모리 용량 확인과 로그파일 관리
2020.10.28보통 서버가 죽는 이유는 메모리 문제일 가능성이 높다. 프로세스별로 점유하고 있는 메모리가 무척 높거나, 혹은 서버 용량이 거의 다 찼을 때 비정상적으로 종료된다.서버 상태를 확인할 수 있는 간단 명령어df -h : 디스크 사용량ps -ef --sort -rss : 메모리 사용량순 프로세스 조회대체로 로그 파일이 너무 많이 쌓여서 서버가 죽을 때가 많은데, 주기적으로 들어가서 삭제하는 것 보다는 정책을 세워 관리하는 것이 좋다. 예를 들어 개발기 같은 경우 일주일이 지나면 로그파일 압축, 한 달이 지나면 압축된 로그파일 삭제 와 같은 정책이 있다면 이를 자동으로 수행하는 shell 파일을 만들어 주기적으로 수행되도록 배치 등록을 하면 된다. (운영기의 로그는 S3나 별도의 스토리지 서버에 저장해두고 몇 ..
[책] 객체지향의 사실과 오해 요약(5)
[책] 객체지향의 사실과 오해 요약(5)
2020.10.105. 책임과 메시지 자율적인 책임 설계의 품질을 좌우하는 책임 자신의 의지에 따라 증언할 수 있는 자유 객체가 자율적이기 위해서는 객체에게 할당되는 책임의 수준 역시 자율적이어야 한다. (어떤 책임이 있는 지 구체적으로 세세하게 정하지 말라는 뜻) 너무 추상적인 책임 어떤 책임이 자율적인지를 판단하는 기준은 문맥에 따라 다르다는 사실에 유의하라. 재판이라는 협력 안에서는 '증언하라'라는 책임이 무자 장수의 자율권을 보장하는 가장 적절한 수준의 책임이지만 다른 상황에서는 오히려 '설명하라'라는 책임이 자율권을 보장하는 최선의 선택이 될 수 있다. 어떤 책임이 가장 적절한가는 설계 중인 협력이 무엇인가에 따라 달라진다. 성급한 일반화의 오류를 피하고 현재의 문맥에 가장 적합한 책임을 선택할 수 있는 날카로운..
[책] 객체지향의 사실과 오해 요약 (4)
[책] 객체지향의 사실과 오해 요약 (4)
2020.10.104장 역할, 책임, 협력 최후 통첩 게임을 통해 인간이 어떤 본직절인 특성을 지니고 있느냐가 아니라 어떤 상황에 처해있느냐가 인간의 행동을 결정한다는 것을 설명한다. 즉, 각 개인이 처해 있는 정황 또는 문맥(context)이 인간의 행동 방식을 결정한다는 것이다. 여기서 인간의 행동을 결정하는 문맥(context)는 타인과의 협력이다. 가장 흔한 실수는 문맥을 고려하지 않은 채 객체가 가져야 할 상태와 행동부터 고민하기 시작하는 것이다. 객체의 행동(책임)보다는 협력을 먼저 고민하라. 훌륭한 객체지향 설계자는 객체들 간의 요청과 응답 속에서 창발하는 협력에 초점을 맞춰 설계한다. 협력이 자리를 잡으면 저절로 객체의 행동이 드러나고 뒤이어 적절한 객체의 상태가 결정된다. 어떤 협력에 참여하는 지가 객체에..
[책] 객체지향의 사실과 오해 요약 (3)
[책] 객체지향의 사실과 오해 요약 (3)
2020.10.093장 타입과 추상화 해리 백이 창조한 지하철 노선도의 핵심은 지도가 당연히 가져야 한다고 생각되는 정확성을 버리고 목적에 집중한 결과다. 승객이 꼭 알아야 하는 사실만 정확하게 표현되고 몰라도 되는 정보는 무시함으로써 이해하기 쉽고 단순하며 목적에 부합하는 지하철 노선도를 창조해낸 것이다. 해리 벡의 가장 위대한 업적은 지하철 노선도를 추상화한 것이다. 추상화를 통한 복잡성 극복 추상화의 정의 어떤 양상, 세부 사항, 구조를 좀 더 명확하게 이해하기 위해 특정 절차나 물체를 의도적으로 생략하거나 감춤으로써 복잡도를 극복하는 방법이다. 추상화는 현실에서 출발하되 불필요한 부분을 도려내가면서 사물의 본질에 집중하여 복잡성을 극복한다. 추상화의 목적은 복잡성을 이해하기 쉬운 수준으로 단순화하는 것이다. 복잡성..
[책] 객체지향의 사실과 오해 요약 (2)
[책] 객체지향의 사실과 오해 요약 (2)
2020.09.27이상한 나라의 객체 객체지향 패러다임은 지식을 추상화하고 추상화한 지식을 객체 안에 캡슐화함으로써 실세계 문제에 내재된 복잡성을 관리하려고 한다. 객체를 발견하고 창조하는 것은 지식과 행동을 구조화하는 문제이다. - 레베카 워프스브록 객체지향 패러다임 객체지향 패러다임은 실세계와 같이 소프트웨어 세계 역시 인간이 인지할 수 있는 다양한 객체들이 모여 이루어져 있다는 믿음에서 출발한다. 하지만 현실세계와 소프트웨어 세계의 유사성은 여기까지이다. 객체지향 패러다임의 목적은 현실 세계를 모방하는 것이 아니라 그를 기반으로 새로운 세계를 창조하는 것이다. 객체 객체란 식별 가능한 개체 또는 사물이다. 객체는 자동차처럼 만질 수 있는 구체적인 사물일 수도 있고, 시간처럼 추상적인 개념일 수도 있다. 객체는 구별 ..
[책] 객체지향의 사실과 오해 요약 (1)
[책] 객체지향의 사실과 오해 요약 (1)
2020.09.26조영호님의 책 객체지향의 사실과 오해를 통해 그 동안 맹신에 가까웠던 객체지향에 대한 미신을 되짚어 보고, 진정한 객체지향이란 무엇인가에 대한 생각의 실마리를 열어 준다. 기존에 객체지향을 설명할 때 들었던 붕어빵 틀(클래스)과 붕어빵(객체)라는 것에서 벗어나보자. 총 7장으로 이루어져있으며, 각 장별 내용을 요약하여 실제 코딩할 때에도 객체지향적으로 설계할 수 있도록 연습할 계획이다. 1장 협력하는 객체들의 공동체 객체지향의 목표 : 실세계를 모방하는 것이 아니라, 고객과 사용자를 만족시킬 수 있는 새로운 세계를 창조하는 것 객체 지향을 설명할 때 실세계를 비유하는 이유? 실세계 모방이라는 개념은 실무적으로 부적합하지만, 객체지향이라는 용어에 담긴 기본 사상을 이해하고 학습하는 데는 효과적이기 때문이다..
네이버 클라우드 DB서버에 공인IP 없이 외부 원격 접속하기
네이버 클라우드 DB서버에 공인IP 없이 외부 원격 접속하기
2020.08.14처음에는 네비어 클라우드 플랫폼(NCP)에서 말하는 포트포워딩 이 무슨 의미인지 몰랐었다. 메뉴 뒤적거리고, 가이드를 여러 개 읽어본 뒤에야 조금 감이 잡혔다. 네이버 클라우드 플랫폼(NCP) 구조 간략하게 구조에 대해서 설명하겠다. 네이버 공식 가이드 : https://docs.ncloud.com/ko/database/database-9-10.html 파란색 부분은 NCP 계정 내 사설 네트워크 영역이다. 처음 계정을 생성하면 NCP에서 제공하는 네트워크 영역이 할당된다. 예제에서는 106.x.x.x가 나에게 할당된 사설IP 영역이라고 보면 된다. 노란색 부분은 각 인스턴스에 대한 부분이다. 인스턴스는 NCP에서 제공하는 사설 네트워크 영역에 생성되고, 각 인스턴스별로 사설 네트워크 망에서 접근할 수 ..
AWS S3 버킷 생성 중 "버킷 이름이 이미 있습니다."
AWS S3 버킷 생성 중 "버킷 이름이 이미 있습니다."
2020.07.31Amazon AWS S3에 버킷을 생성했는데 이미 존재하는 이름이라고 메시지가 나왔다. 나는 버킷을 생성한 적이 없는데?! According to the AWS docs: An Amazon S3 bucket name is globally unique, and the namespace is shared by all AWS accounts. This means that after a bucket is created, the name of that bucket cannot be used by another AWS account in any AWS Region until the bucket is deleted. Someone else has already created a bucket with this name..
네이버클라우드 ubuntu 서버에 NGINX 설치 및 포트포워딩
네이버클라우드 ubuntu 서버에 NGINX 설치 및 포트포워딩
2020.07.18이번 포스팅에서는 네이버 클라우드에서 서버를 생성하고 NGINX 설치를 진행해보겠다. CentOS로 NGINX를 설치했을 때에는 수월하게 진행되었는데, ubuntu로 설치할 때에는 오류가 떠서 당황스러웠다. 때문에 ubuntu에 nginx 설치하는 방법에 대해 참고했던 문서를 정리해보겠다. 서버 생성 서버 생성은 네이버클라우드 공식문서를 보고 진행하였다. 네이버클라우드 서버 생성 가이드: https://www.ncloud.com/guideCenter/guide/1 서버 : ubuntu-18.04 (bionic) 아래와 같이 생성하였다. 네이버는 조금 독특하게 인스턴스가 한 겹 감싸져 있다. 위에서 말하는 포트 포워딩 정보가 뜻하는 바는, 내가 생성한 인스턴스와 네이버에서 제공하는 내 계정의 사설IP+PO..
로드밸런서(Load balancer)와 프록시(Proxy)
로드밸런서(Load balancer)와 프록시(Proxy)
2020.04.20로드밸런서와 프록시가 어떻게 다른 지 명확하게 이해를 못하겠다. 구글링 중에 굉장히 잘 정리된 "빛과 소금같은 문서"를 발견했다. (번역해주셔서 감사합니다) 내가 혼동하고 있었던 부분을 명확히 짚어주었고, 로드밸런서와 프록시를 설명하고 있다. 뉴비인 내가 이해하기에는 많은 개념들이 있지만 존재만으로도 감사한 문서다. 나에게 필요한 수준에서 간단히 내용을 정리한다. [번역] 최신 네트워크 로드 밸런싱 및 프록시 소개 Introduction to modern network load balancing and proxying 로드밸런싱 위키 정의 컴퓨팅에서 로드 밸런싱은 컴퓨터, 컴퓨터 클러스터, 네트워크 링크, 중앙 처리 장치 또는 디스크 드라이브와 같은 여러 컴퓨팅 리소스에서 작업 부하 분산을 향상시킵니다...