| Redis란?

 

레디스(Redis)는 고성능 key-value 저장소로서 리스트, 해시, 셋 정렬된 셋 등 여러 형식의 자료구조를 지원하는 NoSQL입니다. 메모리에 상주하면서 RDBMS의 캐시 솔루션으로서 주로 사용되며 라인, 삼성전자, 네이버, Stackoverflow, 인스타그램 등 여러 IT 대기업에서도 사용하는 검증된 오픈소스 솔루션입니다. 

 

제가 일하는 회사에서도 Redis를 쓰고 있으며 RDBMS의 read부하를 줄이기 위해 Redis 클러스터 형태로 운영하고 있습니다. 

 

| Redis 사용용도

 

Redis는 Message Queue, Shared Memory, Remote Dictionary 용도로 사용할 수 있습니다. 특히 Remote Dictionary로서 RDBMS의 캐시 솔루션으로 사용 용도가 굉장히 높다고 생각하고 있습니다. RDBMS에서 SELECT 쿼리문을 날려 특정 데이터들을 FETCH했을 때, RDBMS의 구조상 DISK에서 데이터를 꺼내오는 데 Memory에서 읽어들이는 것보다 천배 가량 더 느리기 때문입니다. 

 

이 때 Redis같은 유연한 자료구조를 가지는 인메모리 Key-value 솔루션을 사용하여 DB 부하의 Read 연산의 부하를 분산시키는 데 적용하는 것은 바람직한 것 같습니다. (DB 캐시 적중률을 높이면 되겠지만 어느 정도 한계가 있다고 생각합니다

 

| Redis 특징

 

  Key-Value Store

 

레디스는 거대한 맵(Map) 데이터 저장소입니다. Key와 value가 매핑된 단순한 맵 데이터 저장소로서 데이터를 레디스에 쉽고 편하게 읽고 쓸 수 있습니다. 장점은 익히기 쉽고 직관적인 데 있고 단점은 Key-value 형태로 저장된 데이터를 레디스 자체내에서 처리하는 것이 어렵다는 점입니다.

 

 다양한 데이터 타입

 

Key로 참조되는 Value 타입을 다양하게 지정하여 저장할 수 있습니다. List, String, Set, Sorted set 등 여러 데이터를 저정하여 손쉽고 편리하게 데이터를 저장할 수 있습니다.

 

  Persistence

 

Redis는 데이터를 disk에 저장할 수 있습니다. 따라서 Redis는 서버가 shutdown된 후에 restart 하더라도 disk에 저장해놓은 데이터를 다시 읽어서 데이터가 유실되지 않습니다. redis의 데이터를 disk에 저장하는 방식은 snapshot, AOF 방식이 있습니다.

 

Snapshot : 스냅샷은 RDB에서도 사용하고 있는 어떤 특정 시점의 데이터를 DISK에 옮겨담는 방식을 뜻합니다. Blocking 방식의 SAVE와 Non-blocking 방식의 BGSAVE 방식이 있습니다.

 

AOF : Redis의 모든 write/update 연산 자체를 모두 log 파일에 기록하는 형태입니다. 서버가 재시작할 시 write/update를 순차적으로 재실행, 데이터를 복구합니다.

 

레디스 공식문서에서의 권장사항은 RDBMS의 rollback 시스템같이 두 방식을 혼용해서 사용하는 것입니다. 주기적으로 snapshot으로 벡업하고 다음 snapshot까지의 저장을 AOF 방식으로 수행하는 것이죠.

 

 ANSI C로 작성

 

C언어로 작성되어 Java와 같이 가상머신 위에서 동작하는 언어에서 발생하는 성능 문제에 대해 자유롭습니다. 곧바로 기계어로 동작하지 않고 어떤 가상의 머신 위에서 인터프리터된 언어로 가동하는 경우에는 가비지컬렉션(Garbage Collection) 동작에 따른 성능 문제가 발생할 수 밖에 없습니다. 하지만 C언어로 작성된 Redis는 이런 이슈에 대해 자유롭습니다. 

 

 서버 측 복제 및 샤딩을 지원

 

읽기 성능 증대를 위한 서버 측 복제를 지원합니다와 쓰기 성능 증대를 위한 클라이언트 측 샤딩을 지원합니다.

 

| Redis 아키텍처

 

  Redis Topology

 

레디스는 아래 그림과 같이 Master-slave 형태로 데이터를 복제해서 운영할 수 있습니다. 이 master-slave 간의 복제는 non-blocking 상태로 이루어집니다.

 

 Redis Sharding

 

레디스에서 데이터를 샤딩하여 레디스의 read성능을 높일 수 있습니다. 예로들어 #1~#999, #1000~#1999 ID 형태로 데이터를 나누어서 데이터의 용량을 확장하고 각 서버에 있는 Redis의 부하를 나누어 줄일 수 있습니다. 

 

 Redis Cluster

 

레디스는 이전에는 Clustering을 지원하지 않았지만 Clustering을 지원하면서 대부분의 회사가 Redis를 클러스터로 묶어서 가용성 및 안정성있는 캐시 매니져로서 사용하고 있습니다. Single Instance로서 레디스를 사용할 때는 Sharding이나 Topology로서 커버해야했던 부분을 Clustering을 이용함으로서 어플리케이션을 설계하는 데 좀 더 수월해졌다고 볼 수 있습니다.

 

 

 

| 사용시 주의할 점

 

  장애가 났을 경우 그에 대비한 운영 플랜이 세워줘야 함

 

Redis는 인메모리 데이터 저장소로서 서버에 장애가 났을 경우 데이터 유실이 발생합니다. 따라서 위의 Snapshot과 AOF 기능을 통한 복구 시나리오가 제대로 세워져 있어야 데이터 유실에 대비한 사고에 대처할 수 있습니다.

 

  캐시 솔루션으로 사용할 시 잘못된 데이터가 캐시되는 것을 방지, 예방해야 함

 

회사에서 Redis를 운영 중 전에 개발자의 실수로 작성된 로직으로 캐시 데이터가 잘못 캐싱되어 올바르지 않은 데이터가 FETCH되어 한동안 데이터가 꼬이는 일이 있었습니다. 레디스와 캐싱하고자 하는 데이터 저장소의 데이터가 서로 일치하는 지 주기적인 모니터링과 이를 방지하기 위한 사내 솔루션을 개발하는 것이 좋습니다



출처: https://engkimbs.tistory.com/869 [새로비]

문제 설명

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.

마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

제한사항

마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.

completion의 길이는 participant의 길이보다 1 작습니다.

참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.

참가자 중에는 동명이인이 있을 수 있습니다.

입출력 예

participant

completion

return

[leo, kiki, eden]

[eden, kiki]

leo

[marina, josipa, nikola, vinko, filipa]

[josipa, filipa, marina, nikola]

vinko

[mislav, stanko, mislav, ana]

[stanko, ana, mislav]

mislav

입출력 예 설명

예제 #1

leo는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

예제 #2

vinko는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

예제 #3

mislav는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.

public static void main(String[] args) { String participant[] = {"marina", "josipa", "nikola", "vinko", "filipa"}; String completion[] = {"josipa", "filipa", "marina", "nikola"}; System.out.println("Main Start"); System.out.println("Answer : "+marathonSolution(participant,completion)); System.out.println("Main END"); } /** * 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. * completion의 길이는 participant의 길이보다 1 작습니다. * 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. * 참가자 중에는 동명이인이 있을 수 있습니다. * ---------------------- TODO : 예제 Start ----------------------- * vinko는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다. * ---------------------- TODO : 예제 End ----------------------- * @param p_participant * @param p_completion * @return */ public static String marathonSolution(String p_participant[], String p_completion[]) { String answer = ""; int answerFl = 0; for(int index = 0; index< p_participant.length; index++) { answerFl = Arrays.binarySearch(p_completion, p_participant[index].toString()); if(answerFl < 0) { answer = p_participant[index].toString(); } else { System.out.println("answer : "+ p_participant[index].toString()); } } return answer; }

Main Start Answer : vinko Main END

개발자 개발환경 구성 가이드

URL : https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:dev3.8:install_guide

개요

전자정부 개발자 개발환경은 기본적으로 Windows 32 Bit 기반으로 제공되나 이 이외의 환경에서도 사용 가능하다.
Windows 32 Bit 이외의 환경에서 개발환경을 사용할 필요가 있을 경우 본 가이드를 참고하도록 한다.

설명

개발환경을 개별적으로 구성해야 할 필요가 있을 경우 환경에 맞는 eclipse를 다운로드 받아 다음의 순서에 맞게 설치하도록 한다.
설치 소프트웨어 간 dependency 정보가 있으므로 반드시 아래의 순서를 따르도록 한다.

* 주의 전자정부 개발자 개발환경은 Oracle Java상에서 기능이 정상적으로 동작합니다. 다른 java (Open JDK)에서는 일부 기능이 정상적으로 동작하지 않을 수 있습니다.
* 주의 설치가이드 플러그인 [자동설치/업데이트주소]는 최신버전을 다운로드 받을 수 있는 주소 입니다. 개발환경에 설치된 버전과의 차이가 있을 수 있습니다.
* 주의 설치가이드 플러그인 [자동설치/업데이트주소]는 해당 플러그인을 공식적으로 받을 수 있는 저작자의 배포 주소 입니다. 주소가 변경되거나 상황에 따라서 다운로드가 안될 수 있습니다.

설치가이드

  • Eclipse Oxygen(4.7) Packages 이용 시 설치가이드

소프트웨어버전자동설치/업데이트주소필수여부

Eclipse 4.7.3 https://www.eclipse.org/downloads/packages/release/oxygen/3a/eclipse-jee-oxygen-3a → Eclipse IDE for Java EE Developers 다운로드 필수
Spring IDE Core 3.9.5 http://download.springsource.com/release/TOOLS/update/e4.7/ → Core / Spring IDE → Spring IDE Core 필수
UML2 Extension 5.3.0 http://download.eclipse.org/releases/oxygen/ → Modeling → UML2 Extender SDK 필수
Subversive SVN Team Provider 4.0.5 http://download.eclipse.org/releases/oxygen/ → Collaboration → Subversive SVN Team Provider 설치 필수
Subversive SVN Connectors 6.0.4 http://community.polarion.com/projects/subversive/download/eclipse/6.0/update-site/ → Subversive SVN Connectors → Subversive SVN Connectors 설치, SVNKit 1.8.14 Implementation 설치 필수
eGovFrame 3.8.0 http://maven.egovframe.kr:8080/update_3.8/ 에서 필요 기능 설치 필수
JUnit 4.12 Eclipse에 JUnit이 내장되어 있으므로 별도 설치 필요 없음 필수
MyBatipse 1.2.1 http://dl.bintray.com/harawata/eclipse/ → MyBatipse → MyBatipse 선택
PMD 4.0.17 https://dl.bintray.com/pmd/pmd-eclipse-plugin/updates → PMD for Eclipse → PMD Plug-in 선택
FindBugs 3.0.1 http://findbugs.cs.umd.edu/eclipse → FindBugs → FindBugs Feature 선택
Properties Editor 6.0.5 http://propedit.sourceforge.jp/eclipse/updates/ → PropertiesEditor → Properties Editor , PropertiesEditor_Asian_NLS 설치 선택
EclEmma 3.1.1 http://update.eclemma.org/ → EcliEmma → EclEmma Java Code Coverage 선택
Gradle 2.2.2 http://download.eclipse.org/buildship/updates/e47/releases → Buildship: Eclipse Plug-ins for Gradle → Buildship: Eclipse Plug-ins for Gradle 선택
Android Developer Tools 23.0.7 http://rgladwell.github.com/m2e-android/updates/ → Developper Tools 모두설치 안드로이드 개발 필수
Android Connector for M2E 1.4.0 http://rgladwell.github.com/m2e-android/updates/ → Android for Maven Eclipse → Android for Maven Eclipse 안드로이드 개발 필수
  • Eclipse Neon(4.6) Packages 이용 시 설치가이드

소프트웨어버전자동설치/업데이트주소필수여부

Eclipse 4.6.3 http://www.eclipse.org/downloads/packages/eclipse-ide-java-ee-developers/neon3 → Eclipse IDE for Java EE Developers 다운로드 필수
Spring IDE Core 3.8.4 http://dist.springsource.com/release/TOOLS/update/e4.5 → Core / Spring IDE → Spring IDE Core 필수
UML2 Extension 5.2.3 http://download.eclipse.org/releases/neon → Modeling → UML2 Extender SDK 필수
Subversive SVN Connector 6.0.4 http://download.eclipse.org/technology/subversive/4.0/update-site/ → Subversion SVN Team Provider Plugin → Subversive SVN Team Provider(4.0.5) 설치
http://community.polarion.com/projects/subversive/download/eclipse/6.0/neon-site/ → Subversive SVN Connectors → Subversive SVN Connectors(6.0.4) 설치, SVNKit 1.8.14 Implementation(6.0.4) 설치
필수
eGovFrame 3.7.0 http://maven.egovframe.kr:8080/update_3.7/에서 필요 기능 설치 필수
JUnit 4.12 Eclipse에 JUnit이 내장되어 있으므로 별도 설치 필요 없음 필수
MyBatipse 1.1.0 http://dl.bintray.com/harawata/eclipse → MyBatipse → MyBatipse(1.1.0) 선택
PMD 4.0.15 https://dl.bintray.com/pmd/pmd-eclipse-plugin/updates/ → PMD for Eclipse 4 → PMD Plug-in 선택
FindBugs 3.0.1 http://findbugs.cs.umd.edu/eclipse 선택
Properties Editor 6.0.5 http://propedit.sourceforge.jp/eclipse/updates/ → PropertiesEditor 설치 선택
EclEmma 3.0.1 http://update.eclemma.org/ → EcliEmma → EclEmma Java Code Coverage 선택
Gradle 1.0.21 http://download.eclipse.org/buildship/updates/e45/releases/1.0 → Buildship: Eclipse Plug-ins for Gradle → Buildship: Eclipse Plug-ins for Gradle 선택
Android Developer Tools 23.0.7 http://rgladwell.github.com/m2e-android/updates/ → Developper Tools → 모두설치 안드로이드 개발 필수
Android Connector for M2E 1.4.0 http://rgladwell.github.com/m2e-android/updates/ → Android for Maven Eclipse → Android for Maven Eclipse 안드로이드 개발 필수
  • Eclipse Mars(4.5) Packages 이용 시 설치가이드

소프트웨어버전자동설치/업데이트주소필수여부

Eclipse 4.5 http://www.eclipse.org/downloads/packages/release/Mars/2 → Eclipse IDE for Java EE Developers 다운로드 필수
Spring IDE Core 3.7.3 http://dist.springsource.com/release/TOOLS/update/e4.4/ → Core / Spring IDE → Spring IDE Core 필수
UML2 Extension 5.1.2 http://download.eclipse.org/releases/mars/ → Modeling → UML2 Extender SDK 필수
Subversive SVN Connector 6.0.1 http://download.eclipse.org/releases/mars/ → Collaboration → Subbersive SVN Team Provider(3.0.4) 설치
http://community.polarion.com/projects/subversive/download/eclipse/5.0/mars-site/ → Subversive SVN Connectors → Subversive SVN Connectors(5.0.3) 설치, SVNKit 1.8.12 Implementation(5.0.3) 설치
필수
eGovFrame 3.6.0 http://maven.egovframe.kr:8080/update_3.6/에서 필요 기능 설치 필수
JUnit 4.12 Eclipse에 JUnit이 내장되어 있으므로 별도 설치 필요 없음 필수
MyBatipse 1.0.23 http://dl.bintray.com/harawata/eclipse → MyBatipse → MyBatipse 선택
PMD 4.0.11 https://sourceforge.net/projects/pmd/files/pmd-eclipse/update-site/ → PMD for Eclipse 4 → PMD Plug-in 설치 선택
FindBugs 3.0.1 http://findbugs.cs.umd.edu/eclipse 선택
Properties Editor 6.0.4 http://propedit.sourceforge.jp/eclipse/updates/ → PropertiesEditor 설치 선택
EclEmma 2.3.3 http://update.eclemma.org/ → EcliEmma → EclEmma Java Code Coverage 선택
Gradle 1.0.21 http://download.eclipse.org/buildship/updates/e45/releases/1.0 → Buildship: Eclipse Plug-ins for Gradle → Buildship: Eclipse Plug-ins for Gradle 선택
Android Developer Tools 23.0.7 http://rgladwell.github.com/m2e-android/updates/ → Developper Tools → 모두설치 안드로이드 개발 필수
Android Connector for M2E 1.4.0 http://rgladwell.github.com/m2e-android/updates/ → Android for Maven Eclipse → Android for Maven Eclipse 안드로이드 개발 필수
  • Eclipse Luna(4.4) Packages 이용 시 설치가이드

소프트웨어버전자동설치/업데이트주소필수여부

Eclipse 4.4 http://www.eclipse.org/downloads/packages/release/luna/sr2 → Eclipse IDE for Java EE Developers 다운로드 필수
Spring IDE Core 3.7.0 http://dist.springsource.com/release/TOOLS/update/e4.4/ → Core / Spring IDE → Spring IDE Core 필수
UML2 Extension 5.0.2 http://download.eclipse.org/releases/luna/ → Modeling → UML2 Extender SDK 필수
Subversive SVN Connector 2.0.4 http://download.eclipse.org/releases/luna/ → Collaboration → Subbersive SVN Team Provider 설치
http://community.polarion.com/projects/subversive/download/eclipse/4.0/update-site/ → Subversive SVN Connectors → Subversive SVN Connectors 설치, SVNKit 1.8.7 Implementation 설치
필수
eGovFrame 3.5.1 http://maven.egovframe.kr:8080/update/에서 필요 기능 설치 필수
JUnit 4.11 Eclipse에 JUnit이 내장되어 있으므로 별도 설치 필요 없음 필수
MyBatipse 1.0.13 http://dl.bintray.com/harawata/eclipse → MyBatipse → MyBatipse 선택
PMD 4.0.7 https://sourceforge.net/projects/pmd/files/pmd-eclipse/update-site/ → PMD for Eclipse 4 → PMD Plug-in 설치 선택
FindBugs 3.0.1 http://findbugs.cs.umd.edu/eclipse 선택
Properties Editor 6.0.4 http://propedit.sourceforge.jp/eclipse/updates/ → PropertiesEditor 설치 선택
EclEmma 2.3.2 http://update.eclemma.org/ → EcliEmma → EclEmma Java Code Coverage 선택
Android Developer Tools 23.0.7 http://rgladwell.github.com/m2e-android/updates/ → Developper Tools → 모두설치 안드로이드 개발 필수
Android Connector for M2E 1.4.0 http://rgladwell.github.com/m2e-android/updates → Android for Maven Eclipse → Android for Maven Eclipse 안드로이드 개발 필수
  • Eclipse Kepler(4.3) Packages 이용 시 설치가이드

소프트웨어버전자동설치/업데이트주소필수여부

Eclipse 4.3 http://www.eclipse.org/downloads/packages/release/kepler/sr2 → Eclipse IDE for Java EE Developers 다운로드 필수
Spring IDE Core 3.6.2 http://dist.springframework.org/release/IDE → Core / Spring IDE → Spring IDE Core 필수
UML2 Extension 4.1.2 http://download.eclipse.org/releases/kepler/ → Modeling → UML2 Extender SDK 필수
Subversive SVN Connector 2.0.1 http://download.eclipse.org/releases/luna/ → Collaboration → Subbersive SVN Team Provider 설치
http://community.polarion.com/projects/subversive/download/eclipse/4.0/update-site/ → Subversive SVN Connectors → Subversive SVN Connectors 설치, SVNKit 1.8.6 Implementation 설치
필수
eGovFrame 3.1.0 표준프레임워크포탈 > 다운로드 > 개발환경 다운로드 URL에서 구현도구(Implementation Tool) 다운로드 후 설치
Help > Install New Software > Add클릭 > Archive선택하여 구현도구 파일 등록
필수
JUnit 4.11 Eclipse에 JUnit이 내장되어 있으므로 별도 설치 필요 없음 필수
MyBatipse 1.0.8 http://dl.bintray.com/harawata/eclipse → MyBatipse → MyBatipse 선택
PMD 4.0.4 https://sourceforge.net/projects/pmd/files/pmd-eclipse/update-site/ → PMD for Eclipse 4 → PMD Plug-in 설치 선택
FindBugs 2.0.2 http://findbugs.cs.umd.edu/eclipse 선택
Properties Editor 6.0.0 http://propedit.sourceforge.jp/eclipse/updates/ → PropertiesEditor 설치 선택
EclEmma 2.3.2 http://update.eclemma.org/ → EcliEmma → EclEmma Java Code Coverage 선택
Android Developer Tools 23.0 http://rgladwell.github.com/m2e-android/updates/ → Developper Tools → 모두설치 안드로이드 개발 필수
Android Connector for M2E 1.1.0 http://rgladwell.github.com/m2e-android/updates → Android for Maven Eclipse → Android for Maven Eclipse 안드로이드 개발 필수
  • Eclipse Juno(4.2) Packages 이용 시 설치가이드

소프트웨어버전자동설치/업데이트주소필수여부

Eclipse 4.2 http://www.eclipse.org/downloads/packages/release/juno/sr1 → Eclipse IDE for Java EE Developers 다운로드 필수
Maven(m2eclipse) 1.3.1
0.17.0
http://download.eclipse.org/m2e-wtp/releases/ → Maven Integration for Eclipse → m2e - Maven Integration for Eclipse / Maven Integration for WTP (Incubation) → m2e-wtp - Maven Integration for WTP (Incubation) 설치 필수
Spring IDE Core 3.1.0 http://dist.springframework.org/release/IDE → Core / Spring IDE → Spring IDE Core 필수
UML2 Extension 4.0.2 http://download.eclipse.org/releases/juno/ → Modeling → UML2 Extender SDK 필수
Subversive SVN Connector 1.0.0 http://download.eclipse.org/releases/juno → Collaboration → Subversive SVN Team provider(Incubation) 설치
http://community.polarion.com/projects/subversive/download/eclipse/2.0/juno-site/ → Subversive SVN Connectors → Subversive SVN Connectors 설치
필수
eGovFrame 2.5.0 표준프레임워크포탈 > 다운로드 > 개발환경 다운로드 URL에서 구현도구(Implementation Tool) 다운로드 후 설치
Help > Install New Software > Add클릭 > Archive선택하여 구현도구 파일 등록
필수
JUnit 4.8.1 Eclipse에 JUnit이 내장되어 있으므로 별도 설치 필요 없음 필수
PMD 3.2.6 https://pmd.sourceforge.net/eclipse → PMD for Eclipse 3 설치 선택
FindBugs 2.0.2 http://findbugs.cs.umd.edu/eclipse 선택
Properties Editor 6.0.0 http://propedit.sourceforge.jp/eclipse/updates/ → PropertiesEditor 설치 선택
Android Developer Tools 22.3 https://dl-ssl.google.com/android/eclipse/ → Developper Tools 안드로이드 개발 필수
Android Connector for M2E 0.4.3 http://rgladwell.github.com/m2e-android/updates → Android Connector for M2E 안드로이드 개발 필수
  • Eclipse Indigo(3.7) Packages 이용 시 설치가이드

소프트웨어버전자동설치/업데이트주소필수여부

Eclipse 3.7 http://www.eclipse.org/downloads/packages/release/indigo/sr2 → Eclipse IDE for Java EE Developers 다운로드 필수
Maven(m2eclipse) 1.3.1
0.17.0
http://download.eclipse.org/m2e-wtp/releases/ → Maven Integration for Eclipse → m2e - Maven Integration for Eclipse / Maven Integration for WTP (Incubation) → m2e-wtp - Maven Integration for WTP (Incubation) 설치 필수
Spring IDE Core 3.1.0 http://dist.springframework.org/release/IDE → Core / Spring IDE → Spring IDE Core 필수
UML2 Extension 4.0.2 http://download.eclipse.org/releases/indigo → Modeling → UML2 Extender SDK 필수
Subversive SVN Connector 1.0.0 http://download.eclipse.org/releases/indigo → Collaboration → Subversive SVN Team provider(Incubation) 설치
http://community.polarion.com/projects/subversive/download/eclipse/2.0/indigo-site/ → Subversive SVN Connectors → Subversive SVN Connectors 설치
필수
eGovFrame 2.5.0 표준프레임워크포탈 > 다운로드 > 개발환경 다운로드 URL에서 구현도구(Implementation Tool) 다운로드 후 설치
Help > Install New Software > Add클릭 > Archive선택하여 구현도구 파일 등록
필수
JUnit 4.8.1 Eclipse에 JUnit이 내장되어 있으므로 별도 설치 필요 없음 필수
PMD 3.2.6 https://pmd.sourceforge.net/eclipse → PMD for Eclipse 3 설치 선택
FindBugs 2.0.2 http://findbugs.cs.umd.edu/eclipse 선택
Properties Editor 6.0.0 http://propedit.sourceforge.jp/eclipse/updates/ → PropertiesEditor 설치 선택
  • Eclipse Helios(3.6) Packages 이용 시 설치가이드

소프트웨어버전자동설치/업데이트주소필수여부

Eclipse 3.6 http://www.eclipse.org/downloads/packages/release/helios/sr2 → Eclipse IDE for Java EE Developers 다운로드 필수
Maven(m2eclipse) 1.3.1
0.17.0
http://download.eclipse.org/m2e-wtp/releases/ → Maven Integration for Eclipse → m2e - Maven Integration for Eclipse / Maven Integration for WTP (Incubation) → m2e-wtp - Maven Integration for WTP (Incubation) 설치 필수
Spring IDE Core 3.1.0 http://dist.springframework.org/release/IDE → Core / Spring IDE → Spring IDE Core 필수
UML2 Extension 4.0.2 http://download.eclipse.org/releases/helios → Modeling → UML2 Extender SDK 필수
Subversive SVN Connector 1.0.0 http://download.eclipse.org/releases/helios → Collaboration → Subversive SVN Team provider(Incubation) 설치
http://community.polarion.com/projects/subversive/download/eclipse/2.0/helios-site/ → Subversive SVN Connectors → Subversive SVN Connectors 설치
필수
eGovFrame 2.5.0 표준프레임워크포탈 > 다운로드 > 개발환경 다운로드 URL에서 구현도구(Implementation Tool) 다운로드 후 설치
Help > Install New Software > Add클릭 > Archive선택하여 구현도구 파일 등록
필수
JUnit 4.8.1 Eclipse에 JUnit이 내장되어 있으므로 별도 설치 필요 없음 필수
PMD 3.2.6 https://pmd.sourceforge.net/eclipse → PMD for Eclipse 3 설치 선택
FindBugs 2.0.2 http://findbugs.cs.umd.edu/eclipse 선택
Properties Editor 6.0.0 http://propedit.sourceforge.jp/eclipse/updates/ → PropertiesEditor 설치 선택

egovframework/dev3.8/install_guide.txt · 마지막 수정: 2019/01/02 18:00 (외부 편집기)

  패턴 검색 [grep] 

grep 명령은 파일 내에서 지정한 패턴이나 문자열을 찾은 후에, 그 패턴을 포함하고 있는 모든 행을 표준 출력해 준다. 물론, 한 디렉토리 내에서 지정한 패턴을 포함하는 파일을 출력할 수도 있다. grep 명령은 하나 이상의 파일로부터 프로그램 수정 등을 위해 변수, 또는 함수명을 찾을때 많이 사용된다. 

 

 

  grep 명령의 기본 문법 

grep [-옵션] 패턴 파일명 

 

   옵션

-c : 패턴이 일치하는 행의 수를 출력 

-i : 비교시 대소문자를 구별 안함 

-v : 지정한 패턴과 일치하지 않는 행만 출력 

-n : 행의 번호를 함께 출력 

-l : 패턴이 포함된 파일의 이름을 출력 

-w : 패턴이 전체 단어와 일치하는 행만 출력 

 

   사용 예 

$ grep -n '삼성' token_dic

= token_dic 이라는 파일내에서 '삼성' 이라는 패턴이 들어간 문자열과 행번호를 출력 

 

$grep -l '삼성' * 

= 현재 디렉토리의 모든 파일에서 '삼성' 이라는 패턴이 들어간 파일의 이름을 출력 

 

$grep -v '삼성' * 

= 현재 디렉토리의 모든 파일에서 '삼성' 이라는 패턴이 들어가지 않은 행을 출력

 

$grep -r '삼성' * 

= 현재 디렉토리 및 서브디렉토리의 모든 파일에서 '삼성' 이라는 패턴이 들어간 문자열 출력

 

 

  패턴의 정규 표현식(Regular Expression) 

패턴 지정에서 사용되는 정규 표현식은 작은 따옴표 (' ')로 묶어서 표현한다. 

$ grep '^a' 파일명 

= ^는 파일의 시작을 나타냄. 파일에서 a로 시작하는 행을 찾는다. 

$ grep 'apple$' 파일명

= $는 파일의 끝을 나타냄. 파일에서 e로 끝나는 행을 찾는다. 

$ grep 'app*' 파일명 

= 파일에서 app로 시작하는 모든 단어를 찾는다. 

$ grep 'a.....e' 파일명 

= 파일에서 a로 시작하고 e로 끝나는 7자리 단어를 찾는다. 

$ grep [a-d] 파일명 

= 파일에서 a,b,c,d 로 시작하는 단어를 모두 찾는다. 

$ grep [aA]pple 파일명 

= 파일에서 apple 또는 Apple로 시작하는 단어를 모두 찾는다.

$ grep 'apple' d*

= d로 시작하는 모든 파일에서 apple 를 포함하는 모든 행을 찾는다. 

$ grep 'apple' 파일명1 파일명2 

= 지정된 두개의 파일에서 apple 를 포함하는 모든 행을 찾는다. 

$ grep '^[ab]' 파일명 

= 파일에서 a나 b로 시작되는 모든 행을 찾는다. 



출처: https://ra2kstar.tistory.com/100 [초보개발자 이야기.]

'리눅스' 카테고리의 다른 글

[ LINUX ] tar 압축  (0) 2010.07.27
리눅스 설치 URL  (0) 2010.06.25
리눅스의 전반적인 개념(?)개요...  (0) 2010.06.25
리눅스 명령어 모음2  (0) 2010.06.25
리눅스 명령어 모음  (0) 2010.06.25

오라클 rownum 을 mysql 에서 사용하는 법은 아래와 같이 한다. 


select *

from  (select @rownum:=0)  as rownum

;

-- result = 0



select *

       , @rownum:= @rownum+1

from someTable , (select @rownum:=0)  as rownum

;

-- result = 1,2,3,4,.....

   

'DataBase' 카테고리의 다른 글

ANSI SQL 이란?  (0) 2019.12.24
REDIS ?  (0) 2019.12.23
Mysql : 비어있는 자릿수 특정문자로 채우기  (0) 2018.10.19
[MYSQL] DATEDIFF, TIMEDIFF 를 이용한 날짜 및 시간 계산  (0) 2018.10.10
DDL, DML, DCL  (0) 2018.10.08

특정 값의 앞자리나 뒷자리에 문자를 채울 때 사용


* LPAD ( 왼쪽편에 설정한 문자 추가 )




* RPAD ( 오른쪽편에 설정한 문자 추가 )




* 사용 쿼리
select LPAD(사용할 컬럼명, 대상 값의 크기를 포함한 갯수 , 삽입할 문자) from 테이블명;



'DataBase' 카테고리의 다른 글

REDIS ?  (0) 2019.12.23
MYSQL Rownum 행번호 매기기  (0) 2018.10.19
[MYSQL] DATEDIFF, TIMEDIFF 를 이용한 날짜 및 시간 계산  (0) 2018.10.10
DDL, DML, DCL  (0) 2018.10.08
Mysql 암호화, 복호화  (0) 2018.10.08

[MYSQL] DATEDIFF, TIMEDIFF 를 이용한 날짜 및 시간 계산


1. 날짜차이 계산: DATEDIFF(expr1, expr2)
SELECT DATEDIFF('2016-04-20','2016-04-01') AS DiffDate

  결과값: 19


2. 시간차이 계산: TIMESTAMPDIFF(시간표현단위, 시작체크시간, 종료체크시간)

SELECT TIMESTAMPDIFF(minute, '2016-04-20 01:01''2016-12-31 23:59') AS time_diff;

  결과값: 368578(분)
  시간표현단위: second, minute, hour, day, week, month, quarter, year


그런데 위와 같이 하면 문자열을 바로 계산하는 것으로.. 최대 1분까지 차이가 날 수 있다.
따라서 아래와 같이 DATE 포멧으로 변경 후에 적용하면 더욱 더 정확합니다.


3. 문자열에서 날짜형으로 데이터 전환: date_format
SELECT TIMESTAMPDIFF(minute, date_format('2016-04-20 01:01', '%Y-%m-%d %H:%i'), date_format('2016-12-31 23:59', '%Y-%m-%d %H:%i')) AS time_diff;



'DataBase' 카테고리의 다른 글

MYSQL Rownum 행번호 매기기  (0) 2018.10.19
Mysql : 비어있는 자릿수 특정문자로 채우기  (0) 2018.10.19
DDL, DML, DCL  (0) 2018.10.08
Mysql 암호화, 복호화  (0) 2018.10.08
[DB] MySQL - DDL TRUNCATE과 DELETE  (0) 2018.10.08

SQL

SQL (Structured Query Language) 은 구조적인 질의 언어라는 것이다.

이 SQL 이라는 질의 언어를 통해서 데이터베이스를 제어, 관리한다.


SQL 은 다음 언어로 나눌 수 있다.


⒜ DDL : 데이터 정의 언어 

⒝ DML : 데이터 조작 언어

⒞ DCL : 데이터 제어 언어


DDL

DDL (Data Definition Language) 는 데이터 베이스 스키마를 정의 하거나 조작하기 위해 사용한다.

SCHEMA, DOMAIN, TABLE, VIEW, INDEX 를 다음 명령어로 정의, 변경, 삭제한다.


⒜ CREATE : 정의 

⒝ ALTER: 수정

⒞ DROP : 삭제

⒟ TRUNCATE : DROP 후 CREATE


* Oracle 11g 이전 버전과 MySQL은 DDL에 대해서 트랜잭션을 지원하지 않는다.

(Rollback 할 수 없고 Commit할 필요도 없다.)


DML

DML (Data Manipulation Language) 는 데이터를 조작 (조회, 추가, 변경, 삭제) 하기 위해 사용한다.

사용자가 응용 프로그램과 데이터 베이스 사이에 실질적인 데이터 처리를 위해서 주로 사용한다.


⒜ SELECT : 조회

⒝ INSERT : 추가

⒞ DELETE : 삭제

⒟ UPDATE : 변경


기본적인 위의 명령어 외에 LOCK, EXPLAIN, CALL 등도 DML에 포함 된다.


DQL

일부에서는 DML에서 SELECT 만을 따로 분리해서 DQL (Data Query Language) 나 

간단히 QUERY 로 표현하기도 한다.


DCL

DCL (Data Control Language) 는 데이터를 제어하는 언어이다.

데이터의 보안, 무결성, 회복, 병행 수행제어 등을 정의하는데 사용한다.


⒜ COMMIT : 트랜잭션의 작업 결과를 반영 

⒝ ROLLBACK : 트랜잭션의 작업을 취소 및 원래대로 복구

⒞ GRANT : 사용자에게 권한 부여

⒟ REVOKE : 사용자 권한 취소


TCL

일부에서는 DCL 에서 트랜잭션을 제어하는 명령인 COMMIT 과 ROLLBACK 만을 따로 분리해서 TCL (Transaction Control Language) 라고 표현하기도 한다.



출처: http://parkbosung.tistory.com/11 [IT 지식 쌓기]

+ Recent posts