본문 바로가기

[프로젝트 수행 일기 ] 프로세스 작성 및 요구사항 정의서 작성 프로젝트 투입해서 진행되는 중요한 업무와 사건들, 프로젝트가 망하지 않으려면 주의해야할 사항을 일기 형식으로 작성해보려고 합니다. 첫번째 이유는 제가 기억력이 좋지 않기 때문에 나중에 제가 다시 보기 위함이고 두번째 이유는 공공기관 프로젝트는 어떤식으로 진행되는지 궁금하신 분들도 참고하시면 도움이 될거 같기 때문입니다. 7월 1일 공공기관 프로젝트 투입 각종 서류 작성 보안서약서 : 프로젝트 수행간 알게 된 사실을 외부에 알리지 않겠다 출입신청(신원진술서) : 공공기관 사업을 수행함에 있어 신원에 이상이 없다(법적으로 처벌받은 적 없다)는 것을 증명하기 위해 신원진술서와 함께 가족증명서 등을 첨부해서 제출합니다. 신원진술서에 연락처, 주민번호, 주소, 직장, 가족관계, 학력, 경력, 병역(군대) 등을 입..
서로 다른 도메인을 사용하는 부모창과 자식창(iframe) 간 데이크 통신하는 방법(크로스도메인, postMessage, eventListener message) 부모창에서 iframe을 이용해서 부모창과 다른 도메인을 가진 자식창을 호출해야 하는 경우가 있습니다. 예를 들면, 내가 만든 홈페이지에 구글 애드센스나, 애드픽 등을 넣는 경우 등이 해당됩니다. 아래와 같은 구조가 되는 거죠. 부모창에서 다른 도메인을 가진 iframe 페이지 표시하는 방법 일반적으로 부모창에 서로 다른 도메인을 가진 iframe을 추가하게 되면 아래와 같이 에러가 발생하면서 자식창이 화면에 표시가 안됩니다. 에러 메세지 : Refused to display 'http://localhost:8181/' in a frame because it set 'X-Frame-Options' to 'sameorigin'. 같은 도메인에서만 호출을 허용하도록 설정이 되어 있기 때문입니다. 그래서 아래..
전자정부 웹사이트 UI·UX 가이드라인 배포 및 활용 안내 요점정리 보통 공공기관 SI 프로젝트의 제안요청서(RFP)에는 아래와 같은 요구사항이 표시되어 있는 경우가 많습니다. 사용자 인터페이스 구성 ● 정보기술에 대한 미숙련자도 쉽게 사용 가능하고 직관적인 사용자 인터페이스를 제공해야 함 ● 공공자원 공유 서비스의 사용자 편의성, 유지보수 효율성 강화 등을 위한 UI/UX표준을 수립하고 전문가에 의한 검증 수행 후, 적용해야 함 ● 국민 대상으로 안전하고 편리한 보안 서비스 제공을 위해서는 사용자 경험이 충분히 반영된 UI/UX 설계 필요 ● 개발 소프트웨어와 도입 패키지 소프트웨어에 ActiveX 적용을 최소화하며, ActiveX 사용이 불가피할 경우에는 사업자와 협의하여 결정하여야 함 ● 입력항목에 대해 필수, 선택 등 항목별 정확한 안내와 함께 입력사항에 대한 체..
[개발환경] 개발서버를 이용해서 여러명의 개발자가 공동작업하는 환경에 대한 설명 프로젝트 수행시 개발서버를 이용해서 여러명의 개발자가 함께 작업하는 환경 및 방법에 대해서 설명하려고 합니다. 개발자 PC 및 개발서버 구성 개발자 클라이언트 PC 소프트웨어 통합개발환경 : 이클립스 프레임워크 : 전자정부(Egov)프레임워크 (스프링(Spring) 프레임워크) 빌드 및 라이브러리 관리 : Maven JDK : 1.8 톰캣서버 : 8.5 문서 및 소스형상관리 : Tortoise SVN 서버 PC 지속적이고 자동화된 빌드 및 배포 : 젠킨스(Jenkins) Maven : 라이브러리 관리 톰캣서버 : 8.5 JDK : 1.8 소스형상관리서버 : Visual SVN Server 개발환경을 위해 해야할 업무 서버 PC Visual SVN Server 설치 레파지토리 생성(SVN Server UR..
[개발환경]이클립스(eclipse)와 서브버전(SVN) 연동해서 프로젝트 소스형상관리하는 방법 이번엔 이클립스와 SVN을 연동해서 개발소스를 형상관리하는 방법을 알아보도록 하겠습니다. 관련된 이전 포스팅 [개발환경] Visual SVN Server와 Tortoise SVN Client 툴을 설치하고 연동해서 활용하는 방법(문서공동작업, 소스형상관리) Visual SVN Server에 Repository 생성 SVN Server에 소스형상관리할 새로운 Repository를 추가하고, 권한을 설정합니다. SVN Server 를 설치하지 않은 분은 아래 글을 참고하세요. [개발환경] Visual SVN Server와 Tortoise SVN Client 툴을 설치하고 연동해서 활용하는 방법(문서공동작업, 소스형상관리) 새로운 Repository의 URL을 잘 기억해 놓습니다. 이클립스와 SVN 연동 소스..
[개발환경] Visual SVN Server와 Tortoise SVN Client 툴을 설치하고 연동해서 활용하는 방법(문서공동작업, 소스형상관리) 이번엔 Visual SVN 서버를 설치하고, 여러 사용자들이 SVN 클라이언트 툴인 Tortoise SVN을 설치해서 활용하는 방법을 알아보겠습니다. 여러사람이 공동으로 문서를 작업하거나 개발소스를 관리하는 경우 SVN은 필수죠. 물론 요즘 Git이 많이 사용되긴 하지만, 둘 다 사용해봤을 때 SVN이 훨씬 간단하고 쉬운거 같습니다. 개발환경 관련 이전 참고 포스팅 [개발환경] 웹 프로젝트 빠르게 실행하기(샘플 프로젝트를 이용해서 무작정 따라하면 HelloWorld 볼 수 있음, 이클립스 + Maven Web Project + Spring + 톰캣서버) 기본적인 구조 특정 서버 PC에 Visual SVN 서버를 설치하고 Repository를 만들면, SVN을 이용해서 공동으로 작업하려는 사용자들의 PC에..
[개발환경] 젠킨스(Jenkins) + 톰캣(Tomcat) 서버 + 서브버전(SVN) + 메이븐(Maven) Project 자동빌드 및 배포 설정 총정리 이번엔 마지막으로 젠킨스를 이용해서 SVN에 있는 Maven 프로젝트를 젠킨스를 이용해서 빌드 후 톰캣서버에 디플로이하는 방법을 알아보겠습니다. 개발환경 관련 이전 포스팅 [개발환경] Visual SVN Server와 Tortoise SVN Client 툴을 설치하고 연동해서 활용하는 방법(문서공동작업, 소스형상관리) [개발환경]이클립스(eclipse)와 서브버전(SVN) 연동해서 프로젝트 소스형상관리하는 방법 1. 젠킨스 설치 https://jenkins.io/ Jenkins Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their s..
[개발환경] 웹 프로젝트 빠르게 실행하기(샘플 프로젝트를 이용해서 무작정 따라하면 HelloWorld 볼 수 있음, 이클립스 + Maven Web Project + Spring + 톰캣서버) 얼마 전 회사에서 사용하는 노트북을 최신형으로 교체했습니다(제건 아니고 임대..ㅡㅡ) 처음부터 개발환경을 설정해야 했는데 이게 거의 2년만에 하는거라 또 가물가물하더군요. 그래서 이번기회에 나중에 다시 필요할 때 무작정 따라하면 개발환경이 설정될 수 있도록 정리했습니다. 자바 JDK(Java Development Kit) 다운로드, 설치 https://www.oracle.com/technetwork/java/javase/downloads/index.html Java SE - Downloads | Oracle Technology Network | Oracle Which Java package do I need? Software Developers: JDK (Java SE Development Kit). F..
파비콘(Favicon) 만들어야하는 이유, 만드는 방법, 모바일웹에서 홈 화면 추가하는 스크립트 까지 총정리 파비콘(Favicon)을 만들어야 하는 이유 파비콘은 웹페이지에 접속했을 때 상단 탭에 보여지는 아이콘을 말합니다. 즐겨찾기를 등록할 때 사이트 옆에 아이콘으로 표시가 되죠. 즉, 웹사이트를 대표하는 로고로 생각하시면 됩니다. 요즘은 모바일에서 웹페이지 바로가기를 추가할 때 모바일 바탕화면(홈화면)에 바로가기를 추가할 경우 파비콘이 사용되기 때문에 다양한 사이즈의 파비콘이 필요하게 되었습니다. 물론, 기본 사이즈의 파비콘을 사용해도 됩니다. 그런데 PC 의 웹페이지 에서는 아이콘이 작게보이니까 상관이 없었지만 모바일에서는 아래처럼 아이콘이 크게 보이기 때문에 파비콘을 다양한 사이즈로 제공하는게 중요해졌습니다. 왼쪽은 png 파일 형식의 큰 사이즈이고, 오른쪽은 ico 파일 형식의 작은 사이즈 입니다. 오..
[소스형상관리] 이클립스 프로젝트를 Github(깃허브)에 연동해서 형상관리하는 방법 오늘은 Github를 이용해서 개발소스 형상관리를 하는 방법에 대해 알아보겠습니다. Github에 연동할 일이 드물게 일어나다보니 할 때마다 헷갈려서 정리합니다. 참고로, 원래 깃허브에서 Private모드는 유료였는데 MS사가 깃허브를 인수하면서 무료로 사용할 수 있도록 변경하였습니다! (단, 개인만 무료이고, 팀단위로 사용하고자 할 경우는 유료입니다.) 최대 1인당 3개까지 Private모드로 프로젝트를 생성할 수 있습니다. 혹시 소규모 프로젝트를 진행하면서 Private모드로 프로젝트 팀원과 같이 사용하는 방법은 아래 블로그를 참고해주세요. https://blog.naver.com/nainside/221465617015 깃허브(GitHub) Private모드 사용법과 프로젝트 팀원 공유하기 Priva..
[경험담] SI 프로젝트 초급 개발자가 효율적으로 공부하는 방법(기본적인 문법 익인 이후) 개발경력 8년차에 접어들고 있습니다. 시간이 정말 빠르네요. 이제 분석설계 위주로 하다보니 1년 중 개발하는 시간이 정말 짧아지고 있습니다. 그동안의 경험을 바탕으로 초급 개발자가 효율적으로 공부하는 방법을 공유하려고 합니다. 각 개발 언어에 대한 공부는 기본! Html5, Javascript(jQuery), Java, 스프링 프레임워크, SQL 등에 대한 기본적인 문법 공부는 기본이겠죠. (공공기관 SI 프로젝트에서 주로 사용하는 프로그래밍 언어 기준) 그런데 단순히 구글링이나 책등을 통해서 개발언어에 대해 공부 하는것만으로는 실제 프로젝트 투입해서 개발할 때는 부족합니다. 정해진 기간 내에 반드시 개발을 완료해야하기 때문이죠. 그래서 평소에 공부하는 방법을 좀 달리할 필요가 있습니다. 단순히 문법을 ..
[경험담] 프로젝트 성공을 위해 중요한 통합테스트 이야기 (단위테스트, 테스트 주도 개발 등 소스코드 레벨 이야기 아님) 테스트 종류 프로젝트 테스트에는 크게 두 가지가 있습니다. 1. 단위테스트 하나의 기능(모듈)을 테스트하거나, 여러 기능이 제공되는 하나의 웹서비스 화면 하나를 테스트하는 걸 의미합니다. 아무래도 프로그래밍 개발코드와 관련된 테스트를 의미하죠. 요즘 TDD(Test-Driven Development, 테스트 주도 개발) 이란 말이 많이 나오고 있는데, 단위 테스트를 활용하여 보다 높은 수준의 코드 품질을 확보하는 개발 방법 중 하나입니다. 아무튼 단위 테스트는 결국 소스코드(기능), 또는 웹서비스 화면 하나를 대상으로 진행합니다. 그리고 그걸 테스트하는 사람은 결국 개발자 또는 주변 개발자 동료(코드 리뷰)인 거죠. 2. 통합 테스트 단위 테스트를 마친 전체 기능, 전체 웹서비스를 테스트하는 겁니다. 화..
[HTML5] 핵심포인트만 정리. 어떤 기능이 있는지 빠르게 훍어보기 HTML5란 간단하게 모든 웹브라우저의 표준 마크업 언어라고 생각하시면 됩니다. HTML5는 월드 와이드 웹 (World Wide Web)의 핵심 마크업 언어로서, 차기 표준 제안이다. 비디오, 오디오 등 다양한 부가기능과 최신 멀티미디어 콘텐츠를 액티브X 없이 브라우저에서 쉽게 볼 수 있게 하는 것을 목적으로 한다. W3C는 2014년 10월 28일 HTML5 표준안을 확정했다고 발표했다. 출처. 위키백과 HTML5 기본구조 html 파일 상단을 로 선언하면 끝! 기존 HTML4 : Content of the document...... 새롭게 추가된 Elements semantic element HTML4에서는 각 콘텐츠의 의미를 구분하기 위해 와 같이 고유한 ID를 이용했습니다. 그런데 이로인해 검색..
동일한 이름을 가진 input radio 배열을 서버에 전송하는 방법(Java, nodeJS, 쉬움) 먼저 어떤 기능인지 예시 화면을 보겠습니다. 필수, 선택을 선택하는 부분이 input radio 폼 요소로 구성되어 있습니다. 사용자가 새로운 row를 추가하거나 삭제할 수 있는, 즉 가변적으로 input radio가 추가/삭제 되는 형태입니다. 필수 선택 필수 선택 .... 당연히 각 row별로 사용자는 필수여부를 다르게 선택할 수 있어야 하므로 radio의 name은 각 행마다 달라야 합니다. radio는 동일한 이름을 가진 것 중 한 개만 선택할 수 있으니까요. input radio 그룹의 개수가 정해져 있다면 name값을 명확하게 명시하고, 서버에서도 request에서 파라미터 값을 가져올 때 동일한 name을 이용해서 request로부터 파라미터를 가져올 수 있습니다. //Java 예시. Str..
[경험담] 프로그래머(개발자)가 하루 1시간 이상 산책을 해야하는 이유 신입때는 단순히 개발(코딩)이 좋았습니다. 뭔가 만들게 있으면 바로 코딩하고 싶어졌죠. 코딩하면서 화면으로 보면서 수정하면 된다고 생각했으니까요. 그래서 머리속에 그려지는 화면을 구현하기 위해 뭔가에 홀린 듯 정신없이 코딩을 했었죠. 점심 먹는 시간 제외하고 거의 10시간 넘게 앉아있는 경우도 있었습니다. 그런데 다음 날 다시 기능을 구현하기 위해 코딩을 하는데 어제 작성한 코딩의 30% 정도를 다시 수정했습니다. 기능은 돌아가는데 뭔가 마음에 들지 않는 겁니다. 변수명이 이상하거나, 메서드 역할이 분리가 잘 안되어 있거나, 중복되는 로직이 있거나...화면 구조가 맘에 안드는 경우도 있었습니다. 이런 식으로 개발 로직을 계속 변경하다 보니 개발 시간이 계속 길어지더군요. 뭔가 아니다 싶었습니다. 그 다음..
[Javascript] HTML5 Web Storage 를 언제 사용해야 할까? (cookie 대신 활용한 사례) Web Storage 란? HTML5부터 제공하는 기능으로 해당 도메인과 관련된 특정데이터를 서버가 아니라 클라이언트 웹브라우저에 저장할 수 있도록 제공하는 기능입니다. 우리가 알고 있는 쿠키(cookie) 와 비슷한 기능인거죠. Web Storage가 필요한 이유? 쿠키와 Web Storage 모두 브라우저에 저장되기는 하지만 쿠키는 아래와 같은 단점이 있기 때문에 Web Storage를 사용합니다. 4KB의 데이터 저장 제한 HTTP Request에 암호화 되지 않은 상태로 사용하기 때문에 보안에 취약 쿠키는 모든 HTTP Request에 포함되어 있어 웹서비스 성능에 영향을 줄 수 있음 Web Storage 종류 기존에 우리가 흔히 사용했던 쿠키와 세션(Session) 처럼 Web Storage도 ..
[JAVA] 자바 enum 을 활용해서 코드 심플하게 개선하기(이런 것까지 가능하다) 저번에 자바 인터페이스를 활용한 경험담을 소개했었는데 그 당시 코드에 보면 if else를 이용해서 클래스를 생성하는 부분이 있었습니다. 2019/05/09 - [JAVA] - [JAVA] 자바 인터페이스(Interface)는 어떤 경우에 사용하나?(실전 프로젝트 경험담) 문제가 되는 소스코드 public ApiI getApi(String apiKey){ ApiI api = null; if(apiKey =="API_A"){ api = new ApiA(); }else if(apiKey =="API_B"){ api = new ApiB(); }else if(apiKey =="API_C"){ api = new ApiC(); } ..... return api; } 이런 로직을 사용하는 경우가 많을 겁니다. 보통은..
[JAVA] 자바 인터페이스(Interface)는 어떤 경우에 사용하나?(실전 프로젝트 경험담) 여러분은 자바로 프로젝트할 때 인터페이스(Interface) 많이 사용하시나요? 전 공공기관 SI 프로젝트 위주로 스프링 프레임워크를 이용해서 개발을 진행하다 보니 Serviec Interface를 제외하고는 거의 사용할 일이 없었습니다. 공공기관 SI 프로젝트는 대부분 데이터 위주이다 보니 대부분의 코드는 아래처럼 흘러갑니다. 사용자 요청(HTTP request) Controller 가 받아서 Service로 넘기고 Service는 DAO를 호출하고 DAO는 DB에서 데이터를 조회해서 다시 Service로 리턴하고 Service는 데이터를 이용해서 로직을 수행하고 결과를 다시 Controller로 넘기고 Controller는 다시 사용자에게 응답하게 되죠. 대부분 이런 로직이다 보니 Service 의 ..
서버작업 없이 엑셀파일 내용을 JSON으로 변환해서 활용하는 예제(HTML5 FileReader + Javascript SheetJS) 오늘은 클라이언트에서, 즉, 순수하게 html과 javascript만으로 엑셀 파일을 핸들링하는 방법과 어떤 경우에 활용했는지 알아보겠습니다. 일단, 기존에는 엑셀파일을 핸들링할 때 서버단에서 JAVA를 이용해서 엑셀 파일을 읽거나 만들어야 했는데, HTML5에서 FileReader 객체를 지원하게 되면서 엑셀과 같은 파일을 읽거나 만들 수 있게 되었습니다. HTML5의 FileReader를 이용해서 파일 읽기 HTML5의 FileReader 란? HTML5의 FileReader 객체를 MDN에서는 아래와 같이 설명하고 있습니다. FileReader 객체는 웹 애플리케이션이 비동기적으로 데이터를 읽기 위하여 읽을 파일을 가리키는File 혹은 Blob 객체를 이용해 파일의 내용을(혹은 raw data버퍼로..
[JAVA] HTTP requst 정보 (클라이언트 IP, 헤더, URL 등) 총 정리 자주 사용하는데 막상 사용하려고 하면 메서드명이 잘 생각나지 않아서 request 정보 정리했습니다. 사용자 로그를 저장하거나, 사용자 접속환경 등을 판단할 때 자주 사용했습니다. JSP 파일로 만들어서 사용했던거라 문구가 추가되어 있습니다. ■ local의 기본 정보 (IP, Name, Port) Local IP : Local Name : Local Port : ■ 클라이언트의 정보 Remote IP : Remote Host : Remote Port : ■ 서버 이름과 포트 (일반적으로 local 기본정보와 동일) Server Name : () Server Port : ■ 지역 정보 (대부분 한국을 의미하는 ko가 나옴) Locale : ■ 사용하는 프로토콜 ("프로토콜/메이저버전.마이너버전" 의 형태..
[JAVA] Secure 코딩, 취약점 해결, 보안을 위한 방법 정리 프로젝트를 진행하면 반드시 시큐어코딩을 점검하게 됩니다. 대부분 툴로 돌리기 때문에 오탐도 많이 나오긴 하지만 일단 기본적인 보안 취약점 요소와 해결방안을 간략하게라도 알고 코딩하는게 좋습니다. Unreleased Resource Abstract : 프로그램이 시스템 리소스를 해제하지 못할 수도 있음 Explanation : 전반적인 소프트웨어 안정성 문제를 일으키지만 공격자가 의도적으로 리소스 누출을 일으킬 수 있는 경우 리소스 풀을 고갈시켜 denial of service 공격을 일으킬 수도 있습니다. Recommendation : 개체를 사용해서 처리하는 동안 예외가 발생하면 close() 등의 자원반납 메서드가 실행이 안될 수 있다. 따라서 예외발생시에도 자원반납이 이루어지도록 try catch를..
서버 to 서버간 통신(http, https) 로직 개발시 체크해야할 사항 자바 내부 로직에 다른 서비스의 API를 호출해서 사용하는 로직을 개발한 적이 있었습니다. 로컬 개발환경에서는 테스트가 잘 되었는데 통합테스트 환경에서는 작동을 안하더군요. 그 때 오류 처리했던 사항들에 대해 공유하고자 합니다. 출발지서버와 도착지서버간 http(s)를 이용해서 api 통신할 경우 조치사항 //예제소스 URL url; HttpURLConnection connection = null; try { // Create connection url = new URL(targetURL); connection = (HttpURLConnection) url.openConnection(); .... } 1. 출발지서버가 인터넷이 막혀있고 내부망만 허용될 경우 도착지서버 ip를 확인해서 호스트를 등록해야 합..
[경험담] 공공기관 SI 프로젝트 전체 프로세스(정보전략계획부터 사업철수까지) 소개 오늘은 공공기관 SI 프로젝트 프로세스에 대해서 알아보려고 해요. 아직 프로젝트를 처음부터 끝까지 진행해보지 않으신 분들이 궁금해하실거 같아서 작성해봤어요. 나름 의미가 있는 굵직한 업무 단위로 작성했고, 지나치게 디테일한 내용은 제외했어요. 소프트웨어 개발방법론을 말하자면 정보공학 방법론(폭포수 모델) 입니다. 공공기관 SI 프로젝트 하면서 다른 방법론(예:Agile 등)을 쓰는 곳은 못봤어요. 아무래도 공공기관은 데이터를 중심으로 시스템이 개발되기 때문에 어쩔 수 없는거 같습니다. 제가 경험한 사업규모는 8억 이상 사업들이었으니 참고바랍니다. (보통 몇백억 하는 큰 규모의 차세대 프로젝트는 저도 처음부터 경험한 적은 없어서 잘 모르겠네요. 그런데 회사나 주변사람들에게 들어봤을 때 큰 차이는 없는거 같..
[JAVA] 스프링(Spring) 에서 스케줄러 직접 실행하기 (Spring Quartz + job scheduler + JobKey + triggerJob) 저번에는 스프링에서 스케줄러를 설정하는 방법을 알아봤었습니다. 2019/04/10 - [JAVA] - [JAVA] 스프링(Spring) 에서 자동실행 스케쥴러 설정하기 (Spring Quartz + job scheduler + Cron Expression) 그런데 해당 기능을 사용하다가 수동으로 직접 스케줄러를 실행해야하는 경우가 발생할 수 있습니다. 오류가 발생해서 스케쥴러 실행이 안되었거나 스케줄러 실행결과가 잘못되어 다시 실행해야하는 경우 등등.. 저는 스케쥴러를 뉴스 RSS 를 통해 이슈 키워드를 분석하는 서비스에 스케쥴러를 설정했는데 가끔 데이터가 잘못 나오는 경우가 있더군요. 아무래도 새벽 6시에 돌아가는데 간혹 RSS 로 내보내는 뉴스기사가 부실한 경우에 데이터가 맘에 안들게 나왔습니다. 주..
[경험담] 성공적인 프로젝트 수행을 위해 요구사항 정의가 중요한 이유(야근을 하게 되는 이유) 오늘은 프로젝트를 수행하기 전 요구사항 분석과 정의가 얼마나 중요한지 경험담을 통해 알려드리겠습니다. 프로젝트를 고객이 발주할 때는 RFP라는 제안요청서를 작성하게 됩니다. 즉, 고객입장에서 고객이 원하는 요구사항을 정의한 문서인거죠. 이 문서를 업체들이 확인하고 수행할 수 있는지 여부를 판단하고 제안서를 작성해서 입찰을 하고 사업을 수주하고 프로젝트를 진행하게 되는거죠. (프로젝트 전반적인 진행 프로세스는 다음에 알아보도록 하겠습니다. ) 제안요청서에 적힌 한 줄의 요구사항 얼마전에 제안요청서에 이런 요구사항이 적혀있었습니다. 요구사항 : 물품 인수인계 관리 여러분은 어떠신가요? 저 문구를 보고 어떻게 구현할지 머리에 그려지시나요? 저 요구사항에는 얼마의 금액(FP)가 산정되어 있을가요? 저 문구를 구..
[Node.js 12강] 파일 업로드 하기 (multer 모듈 사용, 한번에 파일 여러개 업로드하기, 삽질한 결과 공유) 이번엔 nodejs에서 파일을 업로드하는 방법을 알아보도록 하겠습니다. 한번에 여러 이미지를 업로드하는 케이스를 개발했는데 상당히 삽질을 했습니다. 1개만 업로드 할 때는 쉽게 처리하는건 굉장히 쉬운데 말이죠. 1. multer 모듈 설치 npm install --save multer 2. HTML 구조 form 안에 input type="FILE"이 여러개 있을 수 있는 형태입니다. DB의 PK는 TEST_SN + Q_SN 형태로 저장됩니다. (갑자기 PK 구조를 언급한 이유는 뒤에 나옵니다.) form의 method는 POST, enctype은 'multipart/form-data'로 설정해야 합니다. ... ... 3. 라우트 파일 3.1 파일명이나 파일경로를 변경없이 사용하고자 할 경우 var m..
[책요약] 자바 성능을 결정짓는 코딩습관과 튜닝이야기 - 이상민 저 전 개발자 신입일 때부터 에버노트를 이용해서 프로그래밍 관련된 내용을 정리하고 있습니다. 티스토리를 시작하면서 포스팅만할 내용을 찾고자 예전에 작성했던 문서들을 보고 있는데 책요약한게 있네요. 이 책을 읽고 난 후 벌써 5년이라는 시간이 지났네요. 개발 2년차 때 읽고 요약했던건데 지금 다시 읽어보니 유용한 내용이 있어서 같이 공유하고자 포스팅합니다. 책 제목 : 자바 성능을 결정짓는 코딩습관과 튜닝이야기 책 저자 : 이상민 디자인 패턴 Service Locator : 서비스와 컴포넌트 검색을 쉽게 하는 패턴 ==> 빈번히 사용되는 객체를 찾을 때 소요되는 응답속도를 감소시키기 위해 Map객체에 찾은 객체를 보관하고 있다가 그 객체를 필요로 할 때 메모리에서 찾아서 제공한다. public class Se..
[Javascript] 재귀함수 실제 적용한 예제. 사용자가 입력한 여러 키워드를 조합하는 기능 재귀함수란? 자바스크립트 함수 안에서 다시 자신의 함수를 호출하면서 로직을 처리하는 경우를 말합니다. 일단 개념 자체는 아주 단순합니다. function recurcive(){ ... recurcive(); } 어떤 경우에 사용했나? 아래와 같이 사용자가 입력한 여러 키워드를 조합해서 가능한 모든 경우의 수를 표시해야하는 경우가 있다고 합시다. 대략 어떤 기능인지 이해가 가시나요? 에 사용자가 엔터로 구분된 키워드를 입력하면 모든 경우의 수를 고려해서 키워드를 조합해서 보여주는 기능입니다. 는 1개가 될 수도 있고 5개가 될 수도 있기 때문에 자바스크립트 html의 textarea 태그와 무관하게 작동해야했습니다. 이런 경우 필요한게 자바스크립트의 재귀함수 였습니다. 재귀함수를 사용하지 않을 경우 tex..
[jquery] li 태그의 data 속성을 이용해서 정렬하는 방법(jquery sort() 함수 사용) 어떤 경우에 사용했나? 보통 리스트성 데이터는 DB에서 조회해서 가져올 때 'order by' 를 이용해서 정렬된 데이터를 가지고 옵니다. 목록 데이터에 대한 정렬기준을 여러가지 제공하는 경우 매번 request를 요청하는건 불필요한 행위지요. 이럴 경우에는 jquery의 sort 함수를 이용해서 쉽게 정렬을 변경할 수 있습니다. html 기본구조 node.js에서 ejs 템플릿 엔진을 이용해서 html을 만든 예제입니다. 정렬의 기준이 되는 데이터를 html의 data 속성을 이용해서 각 li 태그에 설정해놓아야 합니다. (정렬을 위해 루프를 돌 때 정렬 기준 데이터를 가져올 수 있는 방법으로 세팅합니다.) //테스트 목록 //정렬 버튼 최신순 인기순 javascript 부분 $("#btnCreatDt..
[오픈API] 특정단어 출현빈도를 파악하기 위해 사용한 형태소분석기 오픈API (데모 지원) 매일매일 뉴스에서 많이 언급된 단어를 추출해서 출현빈도가 높은 단어 목록과, 해당 단어와 관련된 뉴스기사 Top5를 보여주는 서비스를 개발하려고 했습니다. 이 서비스를 개발하려면 뉴스기사에서 유용한 단어를 뽑아내는게 중요했기 때문에 형태소분석기를 알아봤고, 그 중 형태소분석기(언어분석기술) API를 무료로 제공하는 곳을 알게되었습니다. 한국전자통신연구원(ETRI)에서 제공하는 언어기술분석 API http://aiopen.etri.re.kr/service_introduce.php 공공 인공지능 오픈 API·DATA 서비스 포털 과학기술정보통신부의 R&D 과제를 통해 개발한 다양한 인공지능 기술 및 데이터를 누구나 사용할 수 있도록 제공 aiopen.etri.re.kr 다른 형태소분석기도 사용해봤는데 jar..