반응형

분류 전체보기 136

[Algorithm] 코딩과 디버깅에 관하여

읽기 쉬운 코드 코딩 테스트에서 좋은 성적을 내기 위한 비결을 당장 빨리 코드를 작성하는 것이 아니라 읽기 쉬운 코드를 작성하는 것이다. 복잡하고 읽기 어려운 코드는 디버깅에 있어서 어려움이 있고, 한 번에 정확하게 작성하기도 어렵기 때문이다. 아래는 특별히 중요한 몇 가지 원칙들에 관하여 설명한다. 전역 변수의 광범위한 사용 전역 변수를 많이 사용하면 프로그램의 흐름을 파악하기 어려워지고 때문에 대개 사용을 지양한다. 하지만 짧은 시간 안에 알고리즘을 평가하는 코딩 테스트의 경우에는 작성하는 코드의 구조가 매우 단순하고 각 변수를 읽고 쓰는 부분이 어디인지 비교적 명확하기 때문에 전역 변수를 사용하더라도 잃는 것이 많지 않다. 적극적인 코드 재사용 간결한 코드를 작성하기 위한 가장 직접적인 방법은 코드..

[Algorithm] Algorithm 문제에 접근하는 방법

문제 해결 능력이란? 알고리즘 문제란 대개 '어떤 값을 읽어 들여 어떤 값을 계산하는 프로그램을 작성하시오.'와 같은 형태를 갖는다. 이러한 문제를 풀기 위해서는 프로그램이 사용할 수 있는 최대 메모리와 시간제한 등 다양한 제약 조건이 있다. 이러한 제약 조건과 요구사항을 이해하고 최선의 방법을 찾아내는 능력을 문제 해결 능력이라고 한다. 문제 해결 능력은 프로그래밍 언어나 알고리즘처럼 실체가 없는 추상적인 개념이다. 그래서 단순한 반복만으로는 능력을 향상시키는데에 어려움이 있다. 좋은 문제 해결자가 되기 위해서는 좀 더 높은 차원의 수련이 필요하다. 이를 위해서는 자신이 문제를 어떤 방식으로 해결하는지를 의식하고 어느 부분이 부족한지, 어떤 부분을 개선해야 할지 파악해야 한다. 문제 해결 과정 1. 문..

[Dialogflow] Dialogflow를 사용하여 챗봇 만들기

이번에는 이전 포스팅에서 언급한 Intent, Entity, Context를 이용하여 Dialogflow를 이용하여서 챗봇을 만들어보도록 하겠다. Intents 첫번째로 Intent의 새로운 의도를 만들고 훈련시켜보도록 하겠다. Dialogflow는 Intent를 통해서 사용자가 말하는 것에 대한 의도를 파악한다. 예를 들어, "당신의 이름은 무엇입니까?", "이름이 있습니까?" 또는 "이름"만 물어볼 수도 있다. 이러한 각 표현은 고유하지만 동일한 의도를 갖는다. 오른쪽 상단에 CREATE INTENT 버튼을 눌러 INTENT를 생성한다. INTENT NAME을 'name'으로 입력하고, Training phrases에서 다음과 같은 텍스트를 입력한다. ※ 의도일치의 정확성을 올리기 위해서는 최소한 1..

AI/Dialogflow 2019.10.18

[Node.js] Express와 CSV를 이용해 조 편성 애플리케이션 만들기

이번 포스팅에서는 express를 이용해서 조원들을 검색해보고, 조를 섞어보는 간단한 애플리케이션을 만들어보도록 하겠다. 완성된 프로젝트의 구조는 아래와 같다. public 디렉토리에 csv라는 디렉토리를 만들어주고 해당 파일에 member와 group이라는 이름의 csv파일을 만들어주도록 한다. ※ CSV란? Excel과 DB와 호환되는 텍스트 형식이다. 첫 번째 줄에는 필드 이름이 들어가고, 2번째 줄부터 각 row에 해당하는 값이 들어 있다. 우리는 이제부터 여기있는 csv파일을 데이터로 사용하여 데이터를 불러와 조회 및 조작해보도록 하겠다. 먼저 프로젝트 설계를 해보도록하겠다. 서버를 작동시켰을 때, localhost:3000/api/group group전체의 정보를 조회한다. localhost:..

[Java] JSP와 Servlet이란?

JSP jsp의 개념 JSP(Java Server Page)는 Java를 이용하여 동적인 웹 페이지를 만들기 위해 Sun Microsystems사가 개발한 기술이다. 사용자의 요청에 맞는 결과를 동적으로 표시해주는 웹 페이지를 웹 서버 측에서 사용자에게 전송해 주기 위해서는 요청의 처리결과에 따라서 자동으로 응답을 생성할 수 있는 역할을 한다. html 코드 안에 java코드가 삽입된 형태이다. 〈%...%>,, 와 같은 형태의 코드가 자바 코드이다. JSP가 html과 java코드를 동시에 사용할 수 있는 이유 JSP 파일이면 웹 컨테이너는 먼저 JSP 파일을 파싱(Pairsmg)하여 자바 코드로 변환한다. 파싱이란 코드를 해석해서 그에 맞는 변환 코드로 바꾸는 작업이다. 각각의 패그를 자동으로 감지하..

Language/Java 2019.10.13

[Tech] session/cookie 방식이란?

HTTP protocol의 특성 http protocal의 대표적인 특징 중 하나는 상태를 유지하지 않는다는 것이다. 클라이언트가 한번 요청을 하고 서버에서 응답을 하면 해당 클라이언트와 서버는 연결을 유지되지 않는다는 것이다. 위의 그림과 같이 http 프로토콜은 상태를 유지하지 않기 때문에 첫 번째 클라이언트의 요청에 대해서 서버가 응답을 보내면 똑같은 클라이언트가 두 번째 요청을 했을 때 서버에서는 두 번째 요청을 한 클라이언트가 첫 번째 요청을 한 클라이언트인지 인식하지 못한다. 이러한 특징 때문에 서버는 동시에 여러 개의 요청을 효과적으로 처리할 수 있지만 로그인, 장바구니 등 상태가 유지되어야 할 프로그램을 작성하기에는 무리가 있다. 이러한 단점을 보완하기 위한 방법이 바로 세션이다. Sess..

[Error Log]Python: No module named _tkinter에 관한 이슈

Issue 설명 _tkinter는 Python의 GUI 모듈이다. 그런데 간혹 Mac이나 Linux에서 모듈을 설치했음에도 tkiner를 찾을 수 없다는 에러가 뜰 때가 있다. 에러명은 다음과 같다. error: ImportError: No module named _tkinter backend 변경해보기 mac에서의 경우 기본 backend가 TkAgg로 설정되어있지 않아서 에러가 난다. 그럴 경우에 스크립트상에 다음 코드를 추가해준다. import matplotlib matplotlib.use(“TkAgg”) 매번 코드를 추가하기 귀찮으므로 bash상에 설정을 바꾸어주는 방법도 있다. echo "backend: TkAgg" >> ~/.matplotlib/matplotlibrc 여기서 말하는 backen..

Error Log 2019.10.11

[Dialogflow] Google NLP엔진 Dialogflow

NLP 란? NLP (Natural Language Processing, 자연어 처리)는 텍스트에서 의미있는 정보를 분석, 추출하고 이해하는 일련의 기술 집합이다. 우리가 익히 사용하고 있는 IOS의 siri, Android bixby나 챗봇과 같은 것들이 nlp에 해당된다. 우리 생활에 밀접한 연관성을 띄고 차세대 기술로 뜨고 있는 machine learning 카테고리 중 하나로써 현재 많은 기업에서 투자하고 개발하고 있는 분야이다. 그중 이번 posting에서 소개할 플랫폼은 Google의 Dialogflow 플랫폼이다. 지금은 구글에 계신 조대협님이 meet up에서 "스스로 만드는 것보다 남이 만든걸 잘 쓰는 게 최고다!"와 같은 말씀을 남기신 것처럼 본인이 R&D 영역에 뜻이 있는 것이 아니라..

AI/Dialogflow 2019.10.11

[Python] 메서드 지역변수로 할당으로 time complexity 줄이기

반복문 안에서 메서드를 호출할 때 그냥 호출하는 것보다, 반복문에 들어가기 전에 메서드를 미리 지역변수로 할당해놓고 반목 문에서 지역변수로 저장된 메서드를 호출하면 빠르게 동작한다. 위의 예제에선 list.pop을 했을 때보다 list_pop 변수에 list.pop 메서드를 저장 후 list_pop을 호출했더니 시간이 약 3/5까지 줄어들었습니다. 알고리즘이나 코드 플로우를 바꾸지 않고 시간을 줄일 필요가 있을 때 사용하면 좋을 것 같다. 저 위의 예시를 예로 들면, 첫번째 test_list.pop 하기 전에 print(locals())를 하면 pop 메서드가 지역변수에 없는 것을 알 수 있다. 그 말은 pop 메서드를 가져오려면 List 클래스의 pop 메서드가 담겨있는 메모리의 위치까지 접근해서 가져..

Language/Python 2019.10.11

[Node.js] npm이란?

Node Pacackage Manager. 이하 npm은 이름 그대로 노드 패키지 매니저이다. 세상에는 많은 자바스크립트 프로그래머들이 있고, 그들이 유용한 자바스크립트 패키지들을 이미 만들어 두었고, 그런 코드들이 공개되어 있는 것이 바로 npm이다. npm은 세계 최대 규모의 패키지들을 보유하고 있다. 이러한 패키지들은 노드의 생태계를 더욱 견고하게 만들었다. npm에 업로드된 노드 모듈을 패키지라고 부른다. 모듈이 다른 모듈을 사용할 수 있는 것처럼, 패키지도 다른 패키지를 사용할 수 있다. 이러한 관계를 의존 관계라고 한다. https://www.npmjs.com/ npm | build amazing things Bring the best of open source to your company n..

반응형