얼마전부터 회사에서 기존 production 환경의 서비스를 AWS로 이관하는 프로젝트를 하고 있다.


그리고 지금도 하고 있다. 담당하고 있는 도메인이 api provider로써의 도메인과 api consumer로써의 도메인, 서로 다른 두 도메인을 담당하고 있는지라 양쪽의 관점에서 판단하고 결정해야 할 부분들이 사뭇 달랐던 것은 또 다른 이야기이지만....

아무튼 이 커다란 프로젝트에서 AWS 서비스들을 이해하는 것도 중요하였지만 결국은 '요구사항 및 dependency 분석', '실행', '테스트', '배포계획 작성 및 배포'를 준비하고 실행하는 것이 가장 중요하였으며 이러한 것들은 프로젝트의 일정과 critical path 관리에 직결되는 것이었다. 결국은 이런 것들이 이 프로젝트를 성공적으로 끝내느냐 마느냐에 대한 것이다. 이 과정에서 얻어지는 지식들은 그 과정의 보상일 것이다.

AWS라는것 자체가 무엇인지 모르는 것 보다는 AWS에서 제공되는 서비스들을 많이 알면 좀 더 수월하게 프로젝트 진행이 가능 할 것이다.. 하지만 분명한 것은 그것만으로는 절대 충분하지 않다는 것이다.

내가하는 모든 업무는 항상 비지니스 요구사항을 분석하고 이를 실행에 옮겨 서비스를 launch 하는 것이며, 그 환경이 api provider로써 혹은 consumer로써인적도 있었다. 그리고 어느 환경에서나 필요했던 부분은 요구사항을 분석하고 꼼꼼히 설계하고 개발하고 테스트하는 능력이었다.


저작자 표시 비영리 변경 금지
신고
Posted by 용식

팀이 한국/중국 개발자로 이루어져있고

실제로 사무실도 따로따로 떨어져 있어서 출장으로 오가며 같이 일을 하다보니

사실 communication이 힘든 경우가 종종 있다. 팀원들도 중국인/한국인이 거의 반반..


그러다보니 당연히 모든 의사소통은 영어로 이루어진다.


물론... 작년에 팀으로 온 우리 뉴 쿠키는 중국어가 네이티브 수준이라..

이 녀석은 예외로 친다....


아무튼... 보통 큰 프로젝트를 할 때는 출장을 가서 논의하고 개발하고 오픈을 같이 하는데

어쩌다가 이 과정을 같은 공간에서 하지 못 할 때가 있다.


그럼 mail / slack / conference call등을 이용하여 디자인/설계/리뷰등을 진행해야 하고 업무 분장까지 이루어져야 한다.

face to face로 이야기하는거에 비해 컨퍼런스 콜로 회의를 하는게 배는 어렵다..


이번에도 아주 큰 플젝은 아니었으며 여러개의 테이블이 새로 생성되어야 하는 새로운 기능을 백오피스에 추가하는

작업이 있었고, 출장을 가지 못 하고 위와 같이 원격으로 필요한 논의들을 진행하였다.


사실 같이 일한지가 이제 1년이라 어! 하면 아!하고 알아듣는 수준도 되고

서로가 서로의 장단점을 알고 있기 때문에 그나마 회의들은 괜찮은 편이었고, 테스트를 진행하여 어느정도 정리가 되는 과정이었다.


다른 일 때문에 이쪽 테스트를 거의 신경쓰지 못 하다가 오픈에 임박하여 직접 테스트를 진행하고

코드를 리뷰하고, 실제 새로 생성된 테이블들의 데이터를 하나하나 살펴보는 과정에서 몇 가지 문제를 발견했었다.


1) 특정 컬럼에 값이 들어가지 않았다. 문제는 이 컬럼의 값이 없어도 기능이 잘 동작했기에 테스트 과정에서

발견이 되지 않았고, 직접 데이터를 하나하나 보는 과정에서 발견되었다.


2) SQL과 코드를 리뷰하는 과정에서 서로가 이해하고 있는 부분에 약간씩 차이가 있음을 알게 되었다.


아무래도 원격으로 하다보니, 큰 틀에서는 목표가 일치하지만 디테일로 들어 갈 수록

이해가 조금씩 다른 경우가 있었다. 어디가 제대로 이해했고 어디가 잘못 이해한게 아니라 그냥 서로 다르게 이해한 상황인데

이게 교묘하게 기능이 잘 돌아가는 것처럼 보여 테스트에서 잘 나오지 않는 케이스들이 있었다.


아무래도 노력이 더 많이 들어가야 하지만..

그래도 이런 경험이 쌓이는건 개인적으로 좋은 발전의 밑거름이 되는 것 같다.




저작자 표시 비영리 변경 금지
신고
Posted by 용식

Ubuntu 설치

DevStory 2016.01.06 09:54

우분투 설치 관련 link

항상 설치 할 때마다 찾아보게 되는 것들...

-- create install usb on OSX

http://computers.tutsplus.com/tutorials/how-to-create-a-bootable-ubuntu-usb-drive-for-pc-on-a-mac--cms-21187

http://www.ubuntu.com/download/desktop/create-a-usb-stick-on-mac-osx


-- 한영전환

http://blog.daum.net/bagjunggyu/154


-- install vmware horizon client

http://vdisage.blogspot.kr/2015/01/installing-horizon-view-320-client-on.html


-- install mysql 5.6

https://www.digitalocean.com/community/questions/upgrade-mysql-5-5-to-5-6-ubuntu-14-04


-- create desktop short cut

##############

// create file:

sudo vim /usr/share/applications/intellij.desktop


// add the following

[Desktop Entry]

Version=13.0

Type=Application

Terminal=false

Icon[en_US]=/home/rob/.intellij-13/bin/idea.png

Name[en_US]=IntelliJ

Exec=/home/rob/.intellij-13/bin/idea.sh

Name=IntelliJ

Icon=/home/rob/.intellij-13/bin/idea.png



// mod permissions

sudo chmod 644 /usr/share/applications/intellij.desktop

sudo chown root:root /usr/share/applications/intellij.desktop

##############

https://gist.github.com/rob-murray/6828864


-- mongodb

http://zzaps.tistory.com/226


-- redis

http://www.tutorialbook.co.kr/entry/Ubuntu-Redis-%EC%B5%9C%EC%8B%A0-stable-%EB%B2%84%EC%A0%84-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0


-- boot volume full

http://askubuntu.com/questions/89710/how-do-i-free-up-more-space-in-boot

confirm kernal version : uname -a

remove old kernel : sudo apt-get purge linux-image-3.16.0-46


-- install mysql workbench if it has a dependency issue with mysql-client

http://bgasparotto.com/install-mysql-workbench-ubuntu/

저작자 표시 비영리 변경 금지
신고
Posted by 용식

코드에서의 빈줄

DevStory 2014.06.02 10:18

나는 개발할때 메서드의 길이와 상관없이 빈줄을 곧 잘 넣는 편이다.


시각적으로 읽기 편하기 때문에...
어쩌면 블로그 포스팅하던 습관이 코드에 그대로 들어가버린듯 하기도하고....
객체 생성부분 사용부분 이런것들을 문단을 나누듯이 좀 나누는 편이다.


그런데 이번에 같은 팀 후배 저스틴이랑 페어를 하는데 이 친구는 빈칸을 모두 없애버린다. ㅎㅎ. 

'다른코드를 넣기전에 한번 더 생각하게 된다. 그리고 강하게 묶여있는 듯한 느낌을 준다.'라는 의견이었다. 


함께 페어를 하면서 만들어낸 메서드가 길지 않게 리팩터링 된 상황이라 나 역시 오케이하고 넘어갔었는데 오늘 "이펙티브 유닛테스팅" 책에 살짝 언급 된 부분을 발견하여 반가워서 현욱이에게 "저스틴 여기 니 얘기 나왔다."라고 알려줌 ㅋㅋ


책에서는 아래와 같이 언급되어있다.


"동료 개발자중에는 빈칸을 모두 없애는 개발자가 있다. 이것 역시 코드 냄새이기 때문이다. 맥락 이해를 위해 빈칸이 필요 할 정도라면 이미 메서드가 너무 커졌다는 뜻이다. 다소 극단적으로 들리겠지만 분명 근거 있는 주장이다."


습관탓에 아직은 빈줄이 적절하게 들어가있는 코드가 보기 편하지만..

뭐 죽어도 넣어야한다! 라고 우길만한 사항은 아니기에.. 한번 다른 형태로도 노력해보기로~

저작자 표시 비영리 변경 금지
신고
Posted by 용식

페북에서 유명환 대표님께서 공유해 주신 링크입니다.


http://javarevisited.blogspot.kr/2011/07/java-multi-threading-interview.html#.UpVjzUptx1I.facebook



아래는 간단한 발번역 질문과 답변에 걸려있는 링크들..

읽어보면 참 좋을듯 합니다. 


1. 스레드 T1,T2,T3가 있을때, T1 -> T2 -> T3 순으로 스레드가 실행되는 것을 보장하는 방법?

 - join


2. Lock interface가 synchronized block에 비해 advantage가 무엇?

 - reading / writing에 대해 각각의 Lock을 사용 할 수 있다. -> high performance


3. wait 과 sleep의 차이

 - wait은 lock 혹은 monitor를 반환하지만, sleep은 하지 않는다.

 - wait은 스레드간 통신을 위해 사용되나, sleep은 실행중 정지에 사용된다. (pause on execution)

 - http://javarevisited.blogspot.sg/2011/12/difference-between-wait-sleep-yield.html

 - http://javarevisited.blogspot.sg/2011/05/wait-notify-and-notifyall-in-java.html


4. blocking queue 구현

 - 만약  wait() and notify() method로 구현하였다면, java 5 concurrent class들로 다시 구현해보라고 할 수 있음


5. solve Produce consumer problem

 - 여러 방법이 있겠으나 BlockingQueue를 사용해서 구현하는 것도 하나의 방법


6. deadlock에 빠지는 프로그램을 구현 할 수 있나? 그리고 어떻게 해결 할 것인가?

 - http://javarevisited.blogspot.kr/2010/10/what-is-deadlock-in-java-how-to-fix-it.html


7. atomic operation이란?

 - http://javarevisited.blogspot.kr/2011/04/synchronization-in-java-synchronized.html


8. volatile란? synchronized method와 다른점은?

 - http://javarevisited.blogspot.kr/2011/06/volatile-keyword-java-example-tutorial.html


9. race condition이란? race condition을 어떻게 찾고 수정할것인가?

 - http://javarevisited.blogspot.sg/2012/02/what-is-race-condition-in.html


10. thread dump 뜨는 법, 분석하는 법

 - unix kill -3 , windows ctrl+break


11. run() 메서드를 직접 호출하지 않고, start() 메서드를 호출하는 이유는?

 - start() 메서드를 호출하면 새로운 스레드를 만들고, run() 메서드를 실행한다. 

 - http://javarevisited.blogspot.sg/2012/03/difference-between-start-and-run-method.html


12. blocked thread를 깨우는 방법?

 - wait(), sleep() or join() 메서드로 InterruptedException을 생성하며 깨어날것임

 - http://javarevisited.blogspot.sg/2012/02/what-is-blocking-methods-in-java-and.html


13. CyclicBarriar 와 CountdownLatch의 차이점

 - CyclicBarrier는 재사용 가능하나, CountdownLatch는 불가


14. immutable object란 무엇인가? 이게 병렬프로그래밍에서 어떠한 장점을 주는가

 - http://javarevisited.blogspot.kr/2010/10/why-string-is-immutable-in-java.html


15. 병렬처리 환경에서 일반적으로 부딫히는 문제가 무엇인가? 그리고 어떻게 해결하는가?

 - Memory-interference, race conditions, deadlock, live lock and starvation 

저작자 표시 비영리 변경 금지
신고
Posted by 용식

CMD회고.


1주일간 누구의 허락도.. 기획도 필요없이 전사적으로 올라온 아이디어와 개발자가 하고 싶은 것들을 아무거나 골라 개발하는 기간이 주어졌었다.

그리고 오늘은 그것을 대표님을 포함한 경영진 그리고 같은 개발자들과 현업들 앞에서 발표를 하는 날이었다.


모바일/프론트/백오피스등으로 나누어져 발표가 진행되었고..

예상외로.. 정말 예상외로 반응이 무척 뜨거웠다. 첫 발표를 진행하였던 맨하탄/퀸즈팀에서 화려하게~~~~ 첫발을 너무 잘 떼어주었다.! 처음에 관심을 확 끌어주니 그 뒤에 이어지는 오후 세션들까지 힘을 계속 받은 느낌!


회고!


0. 레깅썸 The Begnning. -전설의 시작-


1. 개발자에게 이런 기간을 주어진다는 것은, 개발자들에게 큰 cheer up이 되는 것 같다. 만들어진 성과물들이 아무리 생각해도 1주일동안 나올만한 것들이 아니었는데..

자발적/능동적 참여는 언제나 +a의 결과와 생산성을 만든다.


2. 개발자 개인이 자신이 만든 결과물을 대표님을 포함한 전사 구성원들 앞에서 발표하고 박수를 받을 수 있는 회사가 그리 많지 않을것 같다. 좋은 피드백은 개발자도 춤추게 만든다.


3. 우리팀인 모리셔스팀 이야기를 안 할 수가 없다. 물류 프로젝트를 하면서도 틈틈히 3개의 CMD를 진행하였다. 역시, 안정적 발표의 빌리님과 데모 임팩트의 귀재 레깅썸님, 첫 데뷔를 성공적으로 마친 저스틴님 모두 수고 하셨습니다~


4. 많은 CMD가 진행되면서 이미 배포가 된것도 현재 A/B 테스트가 진행되고 있는 것도 있다. 그리고 개발완료 혹은 좀 더 디테일한 작업이 필요한 CMD도 있는데... 오늘 배포가 안된 CMD 중에서 정말 좋은 것들이 많았던것 같다. 이런것들 PO님들과 애자일 조직이 잘 챙겨서 꼭 실서비스에 반영이 되었으면 좋겠다. 그냥 신나는 행사도 좋지만 역시 결과물이 서비스에 반영이 되어야..... 진짜 신나는 일이지...


5. 발표와 데모는.. 전체적으로 잘 흘러가는 발표도 듣기 좋지만.. 확실히 임팩트가 중요하다! 비슷한 컨셉의 우리팀 CMD와 키튼님의 CMD.. 포돌이 한방에 완전히 승기를 잡으신 키튼님. ㅋㅋ 레깅썸 형님 못지 않은 임팩트였습니다. ㅎㅎㅎ


너무 자주하면 그것도 부담일것 같고... 분기별 1회 정도하면 좋을 것 같다.

저작자 표시 비영리 변경 금지
신고
Posted by 용식

1. Git 과 Github 소개
2. Mybatis 소개 및 Proxy 패턴을 사용한 Mybatis의 Mapper 인터페이스 구현, Proxy 패턴으로 구현한 11번가 SearchAPI 소개
3. Annotation을 활용한 테스트 프레임웍 만들어보기
4. 자바를 이루는 핵심. Object의 4개 메서드. equals, clone, toString, hashCode
5. Class.class란? Enum을 활용한 Legacy코드 리팩토링 전략
6. Freemarker를 사용한 메일 템플릿 시스템(A-Mail 같은) 개발
7. Service Provider Interface 알아보기
8. Annotation을 활용한 MVC Framework 구현
9. List와 Map으로 검색엔진 구현해보기. Generic과 Class.class를 활용한 Object DB의 구현
10. Apache Common Pool을 활용한 Object Pool 구현. ThreadExecuter Framework 소개
11. 검색엔진 라이브러리 Lucene 소개 및 Lucene으로 개발한 http기반의 Crescent 검색엔진 소개 (https://github.com/need4spd/crescent)
12. 머하웃(Mahout) 소개 및 간단한 예제 시연
13. node.js 소개 및 간단한 예제 시연
14. maven 소개


지난 3개월간..

블로그에 작성했던 내용 및 공부했던 내용을 바탕으로 진행한 세미나 리스트입니다.


"코딩위주", "개념 및 소개 중심" 이 사이의 균형을 잘 못 잡은 부분들이 많았습니다.

라이브코딩이 많이 들어가면 자료가 부실해지고..

반대로하면 재미가 없어지고... 이래저래 좀 다듬긴해도 여전히 부족한 자료들과 내용이네요.


1주일에 한번 진행하기 위해 매주 주말 새벽에 예제코드 만들고 자료 만들고 했었는데

이제 안해도 되니 마음이 편하네요. ㅎㅎ. 


나름 2년에 걸쳐 총 6개월에 걸쳐 진행했던 내용들이라 (각 2회씩..) 기념으로 남겨봅니다. :)

저작자 표시 비영리 변경 금지
신고
Posted by 용식

처음 이 회사에 입사하여 매일 손으로 작업하던 업무들을 정리해가던 중 개인적인 시간을 내어

개발을 했던 것이 검색 로그분석기이다. 단순히, 인기검색어등의 분석만이 아니라

쿼리별 평균응답시간부터, remote client ip, 호출 클래스, 정렬조건, 페이지, 색인시간등 

검색 운영에 필요한 전반적인 정보들을 모두 분석해서 웹으로 보려고 했던 것이 이 개인 프로젝트 시작이었다.


제일 초기버전은 로그를 분석 할 파서를 개발하고

이렇게 분석된 정보들을 Java Programm에서 Map을 사용하여 일별로 집계하는 방식이었다.

그리고, 이렇게 집계된 데이터는 Lucene으로 색인하여 저장하고, 조회 또한 Lucene으로 검색하여

조회하는 방식이었다.


이렇게 약 1년을 사용하다보니 이 프로그램을 유지보수해야하는 다른 파트원들이 접근하기가 쉽지 않은 부분이 있었다.


Lucene 라이브러리 자체도 생소하고

통계를 내는 방식도, select sum group by~ 가 아니라 왠 Map에다 넣어놓고 loop로 돌면서 열개가 넘는 항목을 계산하고 있었으니... 


그래서 1년 후에 이 부분을 고쳐보았다.

우선 파서로 로그를 분석하여, 하나의 로그에 대한 모든 정보 (키워드,정렬조건,페이지,아이디,IP,캐시히트여부..)를 Oracle에 저장한다. 그러면 검색로그의 라인수 만큼의 데이터가 생성된다.


그리고 이것을 SQL을 사용하여 각 항목별로 데이터를 select하고 이 데이터를 Lucene으로 색인 - 조회하는 형태였다.


색인하는 부분의 인터페이스만 수정하였고, 데이터를 만드는 것 자체는 익숙한 SQL을 사용하여 마음대로 추가 할 수 있는 구조였다.


이러한 구조로 또 한 2년을 넘게 사용하였는데.. 이제 다른곳에서 좀 문제가 되기 시작했다.


일단 가장 중요한 것이 Lucene으로 색인된 데이터에 대한 핸들링이 어려운 부분이 가장 컸다.


일단 기본적인 CRUD만 해도 각각의 케이스에 대해서 Lucene 라이브러리로 개발하고

서버에 올려서 이걸 사용해서 java로 실행해야 하는 형태였고..

저장된 데이터를 보는 것도 어려웠다. 데이터가 많지 않을때는 인덱스 파일을 로컬로 내려서 

Luke를 사용하기도 했지만 기본적으로 인덱스 파일 자체가 서버에 있다보니, 이걸 local로 내리기도 쉽지 않았다.


전반적으로 관리할 수 있는 페이지를 만들려고도 했지만 왠지 배보다 배꼽이 더 큰 느낌이었다.


그리고 이러한 문제점은 최근에 한번 만들어보려고 했던 실시간 급상승 인기검색어를

추출하는 프로그램을 개발하는데도 많은 제약이 생겼다. 데이터를 좀 바꿔가면서 테스트하는 것 자체가 너무

어려운 상황..


그래서 한번 바꿔야겠다... 하고 생각하던 중 개발그룹에서 Hadoop Infra를 구축해주었고

마침 관심이 있던차에 이걸 한번 고쳐봐야겠다... 싶었다. 그래서 손을 댄것이 3주째.. 중간에 한 3번 정도 '아 내가 이걸 왜 손댔지...' 하고 심각히 고민했었음.. --;


큰 틀은 하둡으로 로그를 파싱하고 Map-Reduce를 사용해 분석한 다음 이걸 sqoop을 사용하여

MySQL DB에 각 분석 항목을 테이블별로 밀어넣는 방식으로 잡았고, 조회 페이지 또한 MySQL DB에 접근하여 

조회하는 형태로 잡았다.


현재 상태는 분석->MySQL까지 구현 및 셋팅은 다 되어서 분석을 하고 있고

조회페이지 및 원래 이 수정의 목적이었던.. (하마터면 까먹을뻔한 --) 실시간 급상승 인기검색어 로직을 만들고

구현하면 되는 상황..


작년에 하둡관련 서적을 한권 읽어보긴 하였으나 제대로 사용해보지 못하여 거의 머리에서 날아가 있는 상태에서 

1월에 3일동안 Hadoop 책 한권 읽고 개발을 진행한것이라 거의 초보적인 수준의 Map-Reduce 프로그램이고 

성능 또한 고려하지 않아.. 튜닝의 여지도 많은 상태임에는 분명..

그리고, 일별 데이터가 뭐 수백기가까지는 안되는 상황이라 분석 속도가 크게 빨라지지는 않았지만

일별,월별 그리고 사용자가 임의로 요청한 기간동안의 집계를 하둡을 사용해서 가져오도록 (정확히는 Pig나 뭐 그런거겠지만..) 고려를 하고 있어서 일단 Hadoop의 사용은 괜찮은 것 같다.


초보적인 관점에서 AS-IS, TO-BE의 느낌을 보면..


AS-IS (Oracle+Lucene)

1. 보관된 데이터의 핸들링이 어려움 (CRUD)

2. 일별로 집계되는 데이터를, 특정 기간동안 혹은 월별/ 년도별로 만들기가 조금 난해.

3. 특정 키워드등에 대한 검색은 굉장히 좋음 (원래 검색엔진이니..ㅋㅋ)

4. 스킴이 자유로워서 항목을 추가하기 쉬우나, 그만큼 관리도 어려워짐 (이건 설계가 잘못된 문제일수도..)

5. 파싱된 RAW 데이터가 Oracle DB에 있다보니, 운영을 위한 다른 데이터를 얻기가 쉬움 (N초 이상 쿼리등)

6. 분석되어 있는 데이터로부터 2차 가공된 데이터 혹은 2차 가공을 위한 데이터를 얻어내기가 번거로움


TO-BE (Hadoop+MySQL)

1. 분석 - 조회가 완전히 나눠짐.

2. 분석 항목이 약 2배정도 늘어남 (기존에는 성능문제등으로 하지 못 했던.. 의미있는 데이터인지에 대한 검증은 필요)

3. 하둡으로의 분석 속도도 괜찮으나, 분석된 항목이 많아 MySQL로 데이터를 export 할 때 Sqoop의 효율성이 좀 떨어짐. 분석은 몇분 안걸리는데 export 시간이..--; (다소 데이터가 작고 많은 테이블에 대해서는 효율이 좀 떨어지는듯.. 대량 데이터 전송은 속도가 아주 좋았음. 이건 각 sqoop 실행 shell을 백그라운드로 돌리면 좀 더 나을지 테스트 해보려고 함)

4. 조회 페이지에 대한 유지보수가 간단해짐 (일반적인 DB를 사용한 웹어플리케이션)

5. Map-Reduce 프로그래밍이 처음이라서 로그를 보거나 디버깅하는데 상당히 헤맸음.. 


개발자 입장에서는 꼭 필요한 업무를 사용하고 싶었던 라이브러리등을 사용하여 구축해봤던 부분에서는 만족...


저작자 표시 비영리 변경 금지
신고
Posted by 용식
TAG hadoop, Lucene

Crescent : http://ec2-54-248-115-161.ap-northeast-1.compute.amazonaws.com/adminMain.devys


강한구님 덕분에 일취월장한 UI -_-b



올해 두번째로 참가하였던 공개소프트웨어 개발자대회에

1차 심사를 통과 후 2차 심사에서 또다시 낙방하였다.


올해도 두손에 참가확인증을 꼬옥~~ 쥐게 되었다.


작년에 떨어지고 "볼륨이 너무 작았나..그러고보니 보여 줄 화면이 하나도 없었네..." 라는 생각을 하면서 다시 도전하였는데 아무래도 비슷한 실수(?)를 또 하지 않았나싶다.


검색엔진이라는 것을 만들고.. 이것을 PR을 해야하는데..

이번에 완성된 버전으로는 보여줄게 참 없었구나.. 싶은 생각이 들었다.


검색엔진이 색인/검색만 되면 되지.. 이게 아니라..

내가 이걸 만들기 시작한 이유.. 검색 서비스 개발 및 운영 6년의 노하우를 살려

사용자가 쓰기 쉽고 필요한 기능들을 직접 구현해보고 싶었던..


그러한 내용들이 기능에도.. PPT 발표시 내용에도 많이 빠져있었다는 생각이 떨어지고 나서야 들었다. -_-;

깨달음이 너무 빠른게지.....


그래서, 수~~ 많은 기능개선 리스트중에서 일단 누구나 들어와서 한번 볼 수 있는

그런 페이지를 먼저 만들어 놓자.. 라는 생각이 들었다.


어차피 AWS 놀고있는거..

이거 사용해서 한번 열어놓자. 싶어서.. 일단 틀을 좀 만들었다.

강한구님께서 잡아주신 Bootstrap 틀을 좀 수정해서.. 일단 commit.


단기 목표는 이 관리자 및 테스트 페이지의 기능 구현.


http://ec2-54-248-115-161.ap-northeast-1.compute.amazonaws.com/adminMain.devys


현재까지 구현된 것은 사전관리, 형태소분석 테스트..


추가적으로..

인덱스 파일을 조회 할 수 있는 (텀과 텀 개수등.. Luke와 비슷한 이미지로..) 화면과

collections.xml을 수정하고 관리 할 수 있는 페이지 (스킴 관리)

검색을 직접 해볼 수 있는 페이지 (현재 개발 중)를 붙여보려고 한다.


내년 대회때 입상하지 못한 프로그램에 대해서 베스트 업그레이드상 지원이 될지 모르겠지만

암튼... 그것과 상관없이 누가봐도 그럴듯한 모습은 좀 갖춰놓고 싶어졌다.


이제 올해는 좀 쉬며 마무리하고..

내년을 기약하며~ 아침에 병원가야하는데 빨랑 자야지... 


https://github.com/need4spd/crescent





저작자 표시 비영리 변경 금지
신고
Posted by 용식

며칠전부터 영 디버깅이 안되는 부분이 있었다..


파일에서 읽어오는 "nbsp"라는 String과

사용자가 입력한 "nbsp"라는 String이 equals를 하면 false가 나오는 것이었다.


공백이 있나? 로직이 잘못되었나?


해서 이래저래 막 디버깅해보고 바꿔보고 해봐도..

도무지 모르겠었다.


그래서 혹시나해서 파일에 직접 "nbsp"라고 한줄을 더 넣었다.


그랬더니, Map의 키에 nbsp가 두개가 생겼다.!

뭐여 이게..??




혹시나해서 원래있던 nbsp를 지우고 새로 입력해 넣었더니

정상작동을 한다. 뭔 상황인지도 모르고 상황이 해결되어버려서 그냥 놔둘까하다가..

문득, 혹시..? 해서 각 char의 유니코드 값을 찍어보았다.


                        D : 65279  <- ??? 응????

F : 110

D : 110

F : 98

D : 98

F : 115

D : 115

F : 112

D : 112


맨 앞에 110이 아니라 뭔가 큰 값이 나왔다.!


뭔가해서 찾아보니..

ZERO WIDTH NO-BREAK SPACE

란다..


단어도 처음들어본다..--; 암튼 이거 덕분에 며칠을 삽질했는데..

그래도 원인을 찾아서 다행이지 싶다... 아오..ㅠㅠ

저작자 표시 비영리 변경 금지
신고
Posted by 용식


티스토리 툴바