728x90
git --branch <branch name> url
728x90
반응형
728x90

div태그를 textarea와 같이 사용하는 것은, 종종 쓰이므로 간단하게 정리를 해보고자 한다.

 

stackoverflow에서 쉽게 찾아볼 수 있지만 언제 지워질지 모르기에 기록을 해둔다.

 

<textarea>I am a textarea</textarea>

<div id="textarea" contenteditable>I look like textarea</div>

<input value="I am an input" />

<div id="input" contenteditable>I look like an input</div>

 

위의 것들을 직접 실행시켜 보면 어떻게 다른지 어떻게 쓰일수 있는지 짐작이 갈것이다.

 

나는 이 중에서 div contenteditable을 사용할 예정이다.

728x90
반응형
728x90

npm ERR! git Refusing to remove it. Update manually,

npm ERR! git or move it out of the way first.

 

>> 해당 에러에는 어느 라이브러리에 오류가있는지 함께 나타남

프로젝트 경로에서

rm -rf node_modules/라이브러리/.git

으로 해결가능

728x90
반응형
728x90

지난 3개월 동안 cafe24의 node.js호스팅을 사용하며 느낀 점들을 소개할까 합니다.

장단점이 있었습니다.


1. 장점

 - 가벼운 홈페이지 운영정도를 생각한다면 저렴한 가격으로 구축 가능하다는 것

 

 - 무엇보다 장점은 다른 세팅없이 node.js프로젝트만 구축해서 올리면 된다는 것

( 다른 세팅이라 하면, 포트포워딩이나 nginx설정 등 기타 작업들을 말합니다.)


 - 안정적인 서버를 저렴하게 구축할 수 있다는 것


2. 단점

 - 서비스 확장을 위해서는 상위 가격의 제품을 써야만 한다는 것(cafe24에 의존적)

(nginx 설정 등을 통해, 직접 load balancing등을 구현하는 것은 불가능 합니다. 일반적인 웹호스팅이라고 보시면 됩니다.)


 - 치명적인 단점으로 .env를 통해 환경변수에 접근할 수 없다는 것

(cafe24에서 자체적으로 사용해서 저희는 쓸수 없다고 하네요)


 - 보통 클라우드 서비스나, 서버호스팅과 달리 node_modules 폴더를 푸시할때 같이 올려야 한다는 것

(push하는데 엄청난 시간이 소요됩니다. 거의 뭐 5분... node_modules를 올리지 않으면 당연히 에러가 발생합니다 npm install같은 행위는 저희가 할수 없기 때문입니다.)


 - 디렉토리 구조에서 web.js(http혹은 https서버를 실행시키는 스크립트파일) 를 반드시 root directory에 위치시켜야 한다는 것




저는 앞으로 정말 가벼운 서비스를 운영할 때는 이용할지도 모르겠습니다만, 글쎄요...

개인적인 의견으로는 node.js는 aws서비스를 이용하시는것이 아무래도 정신건강에 이로운것 같습니다.



ps. cafe24의 고객센터 서비스는 정말 응답이 빠릅니다.  이 부분은 서비스 이용간 가장 만족스러운 부분이었습니다.

728x90
반응형
728x90
12장. 창발성
 - 코드 구현에 있어서 다음의 네가지를 준수해보자. (중요도 순이다)
1) 모든 테스트를 실행한다.
2) 중복을 없앤다.
3) 프로그래머 의도륵 표현한다.
4) 클래스와 메서드 수를 최소로 줄인다.

 - 계속해서 강조하는 만큼 중요하다. 테스트 케이스를 만들어 실행하라. 낮은 결합도와 높은 응징력이 자연스럽게 따라온다.

 - 점진적으로 리팩터링 해라. 리팩토링에있어 코드 품질을 높이는 기법이라면 무엇이든 적용해듀 좋다. 응집도를 높이고, 결합도는 낮추고, 관심사를 분리하고, 시스템 관심사를 모듈로 나누고, 함수와 클래스 크기를 줄이고, 더 나은 이름을 선택하라.

 - 중복은 없애라
728x90
반응형
728x90

11장. 시스템

본 장은 필자가 이해에 있어 가장 어려움을 겪고있는 장이다. 핵심이 빠질수 있으며, 요약내용의 전달력이 떨어질 수 있으니 양해바랍니다.


 - 시스템을 제작하는 것과 사용하는 것은 아주 다르다. 이 의미를 여러번 곱씹어 생각해보길 바란다.


 - 시스템을 생성과 사용을 분리하는 한가지 방법으로는, 생성과 관련한 코드는 main(프로그램 실행시 돌아가는)이나 main이 호출하는 모듈로 옮기고, 나머지 시스템은 모든 객체가 모든 의존성이 연결시킨다. 그리고 애플리케이션은 그저 객체를 사용하면 될 뿐이다. 애플리케이션은 main이나 객체가 생성되는 과정을 전혀 모른다.


 - TDD와 리팩토링으로 얻어지는 깨끗한 코드는 코드 수준에서 시스템을 조정하고 확장하기 쉽게 만든다.하지만 시스템 아키텍처는 사전 계획이 필요하다. 단순한 아키텍처를 복잡한 아키텍처로 조금씩 키우는건 불가능한 것이 현실이다.


 - 코드 수준에서 아키텍처 관심사를 분리할 수 있다면, 진정한 TDD아키텍처 구축이 가능해진다. 그때그때 새로운 기술을 채택해 단순한 아키텍처를 복잡한 아키텍처로 키워갈 수 있다. BUDF(구현 전 모든 사항을 설계하는 기법)를 추구할 필요가 없다.


 - 아주 단순하면서도 멋지게 분리된 아키텍처로 소프트웨어 프로젝트를 진행해 결과물을 재빨리 출시한 후, 기반 구조를 추가하며 조금씩 확장해 나가도 괜찮다.


 - 반드시 그런것은 아니나 결정을 마지막 순간까지 미루는 방법은 최선이다. 게으르거나 무책임해서가 아니라, 최대한의 정보를 모아 최선의 결정을 내리기 위함이다. 성급한 결정은 불충분한 지식으로 내린 결정이다. 너무 일찍 결정하면 고객 피드백을 더 모으고, 프로젝트를 더 고민하고, 구현방안을 더 탐험할 기회가 사라진다.



[출처] 클린코드 - 로버트C.마틴 지음

728x90
반응형
728x90

10장. 클래스

 - 클래스를 만들 때 첫번 째 규칙은 크기다. 클래스는 작아야 한다. 두번째 규칙은 더 작아야 한다.


 - 클래스의 이름은 클래스의 책임을 기술해야 한다. 실제로 작명은 클래스의 크기를 줄이는 첫 관문이다. 클래스를 표현할 간결한 이름이 떠오르지 않는다면 필경 클래스의 크기가 너무 커서 그렇다. 혹은 클래스의 이름이 모호하다면 클래스의 책임이 너무 커서 그렇다.


 - 단일책임원칙(SRP)를 잊지말자. 클래스나 모듈을 변경할 이유는 단 하나뿐이어야 한다.


 - 도구상자를 어떻게 관리하고 싶은가? 작은 서랍을 많이 두고 기능과 이름이 명확한 컴포넌트를 나눠 넣고 싶은가? 아니면 큰 서랍 몇개를 두고 모두를 던져넣고 싶은가?


 - '함수를 작게, 매개변수 목록을 짧게'라는 전략을 따르다 보면 때때로 몇몇 메서드만이 사용하는 인스턴스 변수가 아주 많아진다. 이는 십중팔구 새로운 클래스로 쪼개야 한다는 신호다.


- OCP도 잊지말자. 클래스는 확장에 개방적이고 수정에 폐쇄적이어야 한다.


 - 클래스에는 구체적인 클래스와 추상 클래스가 있다. 구체적인 클래스는 상세한 코드를 포함하며, 추상 클래스는 개념만 포함한다. 추상클래스 및 인터페이스를 사용해 구현이 미치는 영향을 격리시키자.



[출처] 클린코드 - 로버트C.마틴 지음

728x90
반응형
728x90
9장. 단위 테스트
 - TDD(Test Driven Development)에는 중요한 3가지  규칙이 있다.
 1) 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 마라.

 2) 컴파일은 실패하지 않으면서 살행이 살패하는 정도로만 단위 태스트를 작성하라.

 3) 현재 실패하는 태스트를 통과할 정도로만 실제 코드를 작성하라.

 - 실제 코드가 진화하면 태스트 코드도 변경되어야 한다. 테스트 코드가 지저분하면 변경이 어려워진다.
 
 - 코드에 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 바로 단위 테스트이다. 테스트 코드가 있어야 변경이 두렵지 않기 때문이다.

 - 테스트 코드는 단순하고, 간결하고, 표현력이 좋아야 하지만 실제 코드만큼 효율적일 필요는 없다.

 - 개념 당 assert 단위를 최소로 줄이자. 테스트 함수 하나는 개념 하나만 테스트하라.

 - 마지막으로 FIRST를 소개한다.
 Fast) 테스트는 빨라야한다. 빨라야 자주 돌리고, 그래야 초반에 문제를 발견한다.

 Independent) 각 테스트는 서로 의존적이면 안된다. 완전히 독립적이어야 한다.

 Repeatable) 테스트는 어떤 환경에서도, 반복적으로 실행 가능해야 한다.

 Self-validating) 테스트는 부울값을 반환해야 한다. 성공 아니면 실패의 결과만 있을 뿐이다.

 Timely) 단위 테스트는 테스트하려는 실제 코드를 구현하기 직전에 구현해야 한다.


[출처] 클린코드 - 로버트C.마틴 지음
728x90
반응형
728x90
8장. 경계(외부 코드 사용에 있어서...)
 - 패키지 제공자나 프레임워크 제공자는 적용성을 최대한 넓히려 애쓴다. (더 많은 사용자 확보를 위해) 반면, 사용자는 자신의 요구에 집중하는 인터페이스를 원한다. 따라서, 경계부분에 있어 문제의 소지가 많다.

 - 외부의 코드를 사용하는건 어렵다. 곧바로 코드에 적용하려 하기보다는 간단한 테스트 케이스를 만들어 보며 익히는것이 좋다.
(심지어 그냥 하려는거보다 더 빠르다.)

 - 이러한 학습테스트를 통해 필요 지식만을 습득할 수 있으며, 이해도를 높여주는 정확한 방법이다.


[출처] 클린코드 - 로버트C.마틴 지음
728x90
반응형
728x90
7장. 오류처리
 - 오류가 발생하면 예외를 던지는 편이 낫다

 - 먼저 강제로 예외를 일으키는 테스트 케이스를 작성한 후 테스트를 통과하게 코드를 작성하는 방법을 권장한다. 그러면 자연스럽게 try블록의 트랜잭션 범위부터 구현하게 되므로 범위 내에서 트랜잭션의 본질을 유지하기 쉬워진다.

 - 오류 메시지에 정보를 담아 예외와 함께 던진다. 실패한 연산 이름과 실패 유형도 언급한다. 애플리케이션이 로깅 기능을 사용한다면 catch 블록에서 오류를 기록하도록 충분히 정보를 넘겨준다.

 - null을 반환하는 코드는 일거리를 늘릴 뿐만 아니라 호출자에게 문제를 떠넘긴다. 누구 하나라도 null 확인을 빼먹는다면 애플리케이션이 통제 불능에 빠질지도 모른다.

 - 메서드에서 null을 반환하는 방식도 나쁘지만 메서드로 null을 전달하는 방식은 더 나쁘다.


[출처] 클린코드 - 로버트C.마틴 지음
728x90
반응형