1. Ubuntu 설치 환경

  • VMWare 설치
    • Ubuntu 64-bit, CPU 1 core, RAM 1GB, 20GB
  • Ubuntu Version : Desktop 14.04.3 LTS (AMD, 64bit)

2. Ubuntu 설치 소프트웨어
  • Apache + PHP + mysql + phpMyAdmin 설치
    • http://luckyyowu.tistory.com/105
  • Apache + phpMyAdmin 연동 필요
    • http://www.kalcapt.net/blog/ubuntu-phpmyadmin-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/
  • redis
    • http://idroot.net/tutorials/how-to-install-redis-on-ubuntu-14-04/
    • 내용 중 service on/off시 redis service name은 redis_6379 --> redis-server임
    • default port: 6379
    • redis 설정
      • https://www.digitalocean.com/community/tutorials/how-to-configure-a-redis-cluster-on-ubuntu-14-04
  • mongodb
    • https://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/
    • default port: 27017

3. Ubuntu troubleshooting

  • ubuntu에서 키보드 오작동 시 해결 방법
    • http://sir.co.kr/pg_tip/10025
  • 방화벽 설정/해제
    • http://webdir.tistory.com/206
  • redis, mongodb는 VMWare 내 OS에 설치되어 있어, bind ip를 주석처리하여 모든 IP에서 바인딩될 수 있도록 설정을 풀어줌


'공부 > Linux' 카테고리의 다른 글

개인 개발 서버 설치 및 설정 (Ubuntu)  (0) 2015.12.07

1. 개요


  오라클은 다른 설명이 필요없을 정도로 가장 널리 사용되는 데이터베이스 중 하나이다. 이 포스팅에서는 개인용 개발환경에 오라클을 설치하는 과정을 기록한다. 단, 설치 과정에 대해서는 많은 곳에 포스팅 되어 있으므로, 별도의 설명은 생략하고, 주로 설치 후 설정 과정을 설명한다. 

  설치 기준 오라클의 버전은 11g를 기준으로 한다. 



2. 메모리 설정


  메모리가 충분한 환경이라면 상관없겠지만, 일반적인 32bit 운영체제의 PC는 4기가의 메모리를 지원하며, 이마저도 전체를 사용할 수 없는 경우가 일반적이다. 따라서, 오라클 기본 설치시 설정된 메모리 그대로를 사용하면 다른 프로그램을 운영하기 힘든 상황이 되어 버린다. 

  Enterprise Manager를 사용하면 오라클의 각종 설정을 비교적 간편하게 수정할 수 있다. 다음과 같은 절차를 수행하여 오라클에서 사용하는 최대 메모리를 수정할 수 있다. 

  • 오라클 설치 PC에서 Enterprise Manager(https://localhost:1158/em) 접속
  • sysdba 권한으로 로그인 
  • "서버" 탭 선택후, 데이터베이스 구성 > 메모리 권고자 선택


  • 총 메모리, 최대 메모리를 알맞게 수정하고, "적용" 버튼을 누름


  • 데이터베이스 재시작 


3. 외부 접속을 위한 작업


  초기 Oracle 설치 시, 기본 설정은 외부에서 접근이 불가능하게 되어 있다. 따라서, 다른 외부 PC에서 Oracle을 접속하기 위해서는 Oracle 설치 PC의 listener.ora 파일의 설정을 변경해주어야 한다. 자세한 방법은 아래의 링크를 참조하고, 여기서는 간단히 요약하여 설명한다. 


오라클 외부 접속 설정 : http://hoyanet.pe.kr/2052


  • 리스너 중지 (lsnrctr stop)
  • listener.ora 파일을 편집하여 host가 외부 IP (또는 컴퓨터 이름)인 리스너를 추가 
  • 리스너 시작 (lsnrctr start)


'공부 > Oracle' 카테고리의 다른 글

개인용 Java 기반 프로젝트 환경 설치 - (6) Oracle  (0) 2013.05.18

Enum

  • 자바 5 이상에서 제공
  • 숫자 형식으로 정의된 상수를 정의하는 것보다 Enum으로 필요한 값을 정의하는 것이 예외 상황을 피하기 좋음


트랜잭션 (Transaction)

  • 데이터베이스에서 최소 작업 단위 (더 이상 나눌수 없음)
  • 데이터베이스 트랜잭션의 ACID 특성
    • 원자성(Atomicity)
      • 트랜잭션은 더 이상 나눌수 없는 작업 단위
      • 트랜잭션은 모두 실행되거나, 모두 실패해야 함 
    • 일관성 (Consistency)
      • 트랜잭션은 데이터 무결성 조건을 만족해야 함
      • 트랜잭션이 성공하면, 데이터베이스는 언제나 일관성 있는 상태로 유지되어야 함
    • 고립성 (Isolation)
      • 트랜잭션은 다른 트랜잭션과 독립적으로 수행되어야 함 (서로 영향을 주어서는 안됨)
    • 지속성 (Durability)
      • 성공적으로 수행된 트랜잭션에 대해 그 결과가 물리적으로 반영되어야 함
  • 대부분의 데이터베이스는 트랜잭션을 지원하며, 실패한 트랜잭션을 Rollback 하거나 성공한 트랜잭션을 Commit하는 명령을 지원


JTA (Java Transaction API)

  • 다수의 DB 또는 트랜잭션을 지원하는 서비스에 대한 통합 트랜잭션 관리 API
  • XA 프로토콜을 통해 다른 서비스를 제어하고 관리


단일 책임의 원칙 (SRP, Single Responsibility Principle)

  • 하나의 클래스는 하나의 책임을 가져야 함
  • 즉, 하나의 클래스를 변경하기 위한 이유는 하나여야 함


테스트 대역 (Test Double)

  • 테스트를 간편히 수행하기 위해 실제 오브젝트의 기능에만 맞춰 만들어진, 테스트에서 사용할 목적으로 만든 객체를 의미
  • 테스트 스텁 (Test Stub)
    • 테스트 동안에 코드가 정상적으로 수행될 수 있도록 돕는 클래스
    • e.g. DummyMailSender
  • 목 오브젝트 (Mock Object)
    • 테스트동안 테스트 대상 오브젝트와 상호작용하는 오브젝트를 테스트하기위한 테스트 대역


대표적인 잘못된 예외처리

  • 예외 블랙홀
    • try-catch 구문으로 감싼 코드 중, 예외에 대한 어떤 처리도 하지 않는 코드를 지칭
    • 모든 예외는 적절하게 복구되거나, 작업을 중단하고 운영자/개발자에게 통보되어야 함
  • 무의미하고 무책임한 throws
    • 특별한 사유 없이 throws Exception을 붙여 예외를 넘겨버리는 코드
    • 이렇게 처리한 메소드를 사용하는 메소드에서는 Exception에 대해 try-catch하거나, throws Exception으로 넘겨버릴 수 밖에 없음


예외의 종류와 특징
  • Error
    • java.lang.Error 클래스의 서브 클래스
    • VM에서 발생시키고, 애플리케이션에서 해결할 수 없는 에러이므로, 특별한 상황 외에 처리할 필요 없음
    • e.g. OutOfMemoryError, ThreadDeath
  • 체크 예외 (Checked Exception)
    • java.lang.Exception 클래스를 상속한 예외 중 RuntimeException을 제외한 예외
    • 명시적으로 try-catch로 처리하거나, throws로 던지지 않으면 컴파일 에러가 발생
    • e.g. IOException, SQLException
  • RuntimeException/언체크 예외 (Unchecked Exception)
    • java.lang.RuntimeException을 상속한 예외
    • 필요시 개발자가 직접 try-catch나 throws를 통해 처리할 수 있음
    • e.g. NullPointerException, IllegalArgumentException

예외 처리 방법
  • 예외 복구
    • 예외 상황을 파악하고, 문제를 해결하여 정상 상태로 돌려놓는 것
  • 예외 처리 회피
    • 예외 처리를 호출한 쪽으로 던지는 것 (throws/rethrow)
    • 반드시 분명한 의도를 가지고 회피를 해야 함
  • 예외 전환 (Exception Translation)
    • 예외를 다른 예외로 전환하여 throw
    • 두 가지 목적으로 사용 가능
      • 예외의 의미를 명확히 하기 위해 (e.g. SQLException --> DuplicateUserIdException)
      • 예외를 처리하기 쉽게 하기 위해 (e.g. 체크예외-->언체크예외)


스프링의 예외 처리

  • SQLException은 대부분 복구 불가능한 예외
  • 스프링의 JdbcTemplete은 런타임 예외인 DataAccessException으로 SQLException을 포장해서 던져줌
  • 또한, DataAccessException은 다양한 DB에 대한 세분화된 예외를 제공
    • e.g. InvalidResultSetAccessException, DuplicateKeyException, DataIntegrityViolationException, ... 
  • 예외 정보를 좀 더 구체화하여 데이터 로직과 다른 로직을 분리하기 용이하게 하고, 다양한 데이터 접근 기술(e.g. JPA, Hibernate, JDO 등)을 사용하기 용이
  • 단, 모든 기술에 대해 세분화된 예외가 전부 구현된 것은 아니므로, 어느정도 추상화된 공통 예외를 사용해야 함 (e.g. DuplicateKeyException은 JDBC에 대해서만 발생, 하이버네이트의 경우 DataIntegrityViolation으로 발생)


템플릿-콜백 패턴
  • 전략 패턴의 구조를 가지나, 익명 내부 클래스로 전략을 생성하여, 이를 넘겨주는 형태의 패턴
  • 템플릿
    • 전략 패턴의 컨텍스트
    • 즉, 전략을 수행하기 전/후의 작업이나 전략 수행 과정을 정의한 클래스
  • 콜백
    • Functional Object
    • 전략의 실행 과정을 기술한 오브젝트로, 다른 오브젝트의 메소드에 전달되는 오브젝트 
  • 스프링에는 다양한 자바 엔터프라이즈 기술에서 사용할 수 있도록 미리 만들어져 제공되는 수십가지 템플릿/콜백 클래스와 API가 존재

JdbcTemplete

  • 스프링에서 제공하는 템플릿-콜백 형태의 JdbcTemplete




1. pom.xml에 다음을 추가하여 maven-eclipse-plugin 플러그인을 추가 (굵은 글씨체 부분이 중요)


<build>

<pluginManagement>

<plugins>

<plugin>

<artifactId>maven-eclipse-plugin</artifactId>

<version>2.8</version>

<configuration>

<wtpversion>2.0</wtpversion>

<wtpContextName>/</wtpContextName>

<downloadSources>true</downloadSources>

<downloadJavadocs>true</downloadJavadocs>

</configuration>

</plugin>

</plugins>

</pluginManagement>

</build>


2. pom.xml 파일을 우클릭한 후, Run As > Maven Build...를 수행


3. Goal에 eclipse:eclipse를 추가한 후, 실행





출처: 자바 세상의 빌드를 이끄는 메이븐 (박재성 저)

단위 테스트 (Unit Test)

  • 주로 클래스/메소드 단위로 수행하는 작은 단위의 테스트
  • 주로 프로그래머에 의해 만들어지므로, 프로그래머 테스트라고 하기도 함


JUnit

  • 자바 단위 테스트 프레임워크
  • 사용 방법
    • @Test
      • 메소드에 @Test 어노테이션을 부여하고 JUnit을 실행하면 테스트를 수행
    • assertThat
      • 2개의 매개변수를 (조건에 의해) 비교하여, 올바르지 않을 경우 예외를 발생
    • @Test(expect=[Exception 종류].class)
      • 특정 Exception이 발생함을 검증하기 위해 사용하는 어노테이션
    • @Before, @After
      • 매 JUnit 테스트 케이스를 실행하기 전후에 수행할 메소드에 사용하는 어노테이션
      • 이 어노테이션은 매 테스트 케이스마다 실행되므로, 모든 테스트에 공통으로 사용하는 정보나 오브젝트(Fixture, 픽스쳐)의 경우 메소드 추출 등의 방식으로 처리하는 것이 나음
    • @BeforeClass, @AfterClass
      • 테스트 클래스 전체에 걸쳐 한번만 실행되는 static 메소드
    • 스프링 테스트 컨텍스트 프레임워크
      • @RunWith(SpringJUnit4ClassRunner)
      • @ContextConfituration(locations="/applicationContext.xml")

테스트 주도 개발 (TDD, Test Driven Development)

  • 테스트 코드를 먼저 만들고, 테스트를 성공하게 해주는 코드를 작성하는 방식의 개발 방법
  • 장점: 모든 개발 코드에 대해 테스트가 수행됨 
  • Test First Development

침투적(invasive) 기술 vs 비침투적(noninvasive) 기술
  • 침투적 기술
    • 특정 기술을 사용하기 위해 API나 인터페이스를 강제하는 기술
  • 비침투적 기술
    • 특정 기술을 코드에 영향을 주지 않고 적용 가능한 기술


동등 분할 (equivalence partitioning)

  • 같은 결과를 내는 값의 범위를 구분하여 각 대표 값으로 테스트하는 방법


경계값 분석 (boundary value analysis)

  • 동등 분할 범위의 경계값을 이용해 테스트 (숫자일때 0, 정수의 최대값, 최소값 등으로 테스트)


이 포스팅에서는 MySQL을 외부 PC에서 접속하기 위한 설정을 정리한다. 


1. my.ini 설정 변경


2. 3306 포트/또는 MySQL 프로세스에 대한 방화벽 해제 여부 확인

3. root 또는 액세스하기 위한 계정의 외부 접속 가능 여부 확인
  • User의 Host 항목에 %가 추가되어야 한다.


4. PHPMyAdmin 설정 변경

  

  만일 PHPMyAdmin을 사용하고 있고, 이 역시 외부에서 접근하고 싶다면, phpmyadmin.conf 파일의 아래 항목을 다음과 같이 수정한다. 

  • Allow from 127.0.0.1 -> Allow from all


'공부 > MySQL' 카테고리의 다른 글

MySQL 외부 접속을 위한 점검 사항  (0) 2013.04.21

1. 개요


  전자정부 프레임워크는 공공 사업에서의 프레임워크 일원화, 컴포넌트 표준화 등의 목적으로 정부 주도하에 개발된 프레임워크이며, 더 자세한 내용은 하기의 홈페이지에서 확인할 수 있다. 


표준프레임워크 : http://www.egovframe.go.kr/


  표준 프레임워크의 서버 환경은 아래와 같은 환경을 제공하며, 설치시 별도의 연동이나 설정을 최소화함으로써 효율적인 서버 환경을 구축할 수 있도록 해준다. 현재 설치할 서버 버전은 2.0.0이며, 표준 프레임워크 홈페이지의 "다운로드 > 개발환경"에서 "서버용 개발환경"을 다운로드 받으면 된다.



2. 설치 과정


  표준 프레임워크 서버용 개발환경은 아래와 같이 구성되어있다. 

  • Tomcat
  • Subversion
  • Maven
  • Hudson
  • Nexus
  설치는, 원하는 컴포넌트를 선택하는 과정 외에는 별다른 어려움 없이 진행 가능하다. 이전의 포스트에서 Mercurial을 설치했으므로, Subversion은 설치에서 제외하고, 나머지 구성을 설치한다. 




  설치가 완료된 후, 실행은 [설치디렉토리]/bin/startup.bat 배치파일을 실행하면 된다. 설치시 다음과 같은 포트들이 사용되므로, 이 포트들의 방화벽을 해지할 필요가 있다. 

  • 3690 : Subversion
  • 7070 : Hudson, Nexus
  방화벽 해제 후, 외부 컴퓨터에서 웹브라우져로 아래의 주소로 접속한다. 화면이 정상적으로 보인다면 설치가 정상적으로 완료된 것이다. 
  • Hudson : https://[접속주소]/hudson


  • Nexus : http://[접속주소]/nexus



  서비스 등록을 위해서 설치 디렉토리 하위의 bin 디렉토리에서 다음과 같은 명령을 콘솔창에서 입력한다. 

> service.bat install


  만약 설치 과정에서 Tomcat을 설치할 수 없는 에러 등이 발생할 경우, service.bat uninstall 명령을 통해 서비스를 해제한 후, 재설치하면 정상적으로 수행된다. 

1. 개요


  레드마인은 서브버전, 머큐리얼 등 소스 버전 관리 툴과 연동할 수 있는 기능을 제공한다. 현재 BitNami Redmine은 다음과 같은 저장소와의 연계를 기본적으로 지원한다. 

  • Subversion
  • Darcs
  • Mercurial
  • CVS
  • Bazzar
  • Git
  또한, 레드마인은 이클립스 플러그인인 MyLyn과 연동이 가능하고, 메일을 연동하여 매 변동사항을 관련자에게 메일로 전달할 수 있다.
  이번 포스팅에서는 Redmine에 아래와 같은 설정을 하는 절차를 알아본다.
  • Mercurial 저장소를 연동하여 Redmine에서 소스 관리가 가능하도록 한다. 
  • Eclipse MyLyn Plug-in 과 연동하여, Redmine의 일감을 MyLyn과 동기화한다. 
  • Redmine에 메일을 연동하여, 일감이 변경될 때마다 관련자에게 메일을 전송하게 한다. 


2. 레드마인과 머큐리얼 연동

  • 레드마인과 머큐리얼을 연동하기 위해 먼저 샘플 프로젝트를 생성한다. 


  • 생성한 프로젝트에서 설정 > 저장소로 들어간 후, 연동할 머큐리얼 저장소의 물리 위치를 설정한다. 
※ 저장소의 경로는 물리 경로를 의미한다. (C:\...)


  • 프로젝트의 "저장소" 탭으로 접속하여 이력이 정상적으로 동기화되는지 확인한다.



3. 레드마인과 이클립스 MyLyn 연동


  Bitnami redmine과  이클립스 MyLyn간의 연동에 관해 설명한 포스팅이 있어 이를 참고하였다. (출처 : 위클립스 - Redmine + Mylyn 조합 사용하기) 여기에서는 출처의 내용 중 내가 수행한 내용을 간략히 요약만 할 예정이다. 


  1) RESTful API 설치

  1. 시작 > 프로그램 > BitNami Redmine Stack에서 "BitNami Redmine Stack 사용" 선택 (또는 bitNami Redmine 설치 디렉토리의 use_redmine.bat 파일 실행)
  2. 콘솔에서 "[레드마인 설치경로]/apps/redmin/htdocs/plugins" 로 이동
  3. 아래의 명령 실행
> git clone git://github.com/danmunn/redmine_mylyn_connector.git
> gem install libxml-ruby
> bundle install --without development test
> rake redmine:plugins:migrate RAILS_ENV=production
※ 3번째 줄은 실행하지 않아도 무방하다.

  4. redmine을 재구동한다. 
     (프로그램 > BitNami Redmine Stack에서 "redmine manager tool" 참고)
  5. 재구동 이후 "관리 > 플러그인" 메뉴에서 플러그인이 보인다면 성공



  2) Redmine MyLyn Connector 설치

  1. 이클립스에서 다음 사이트 주소를 추가하여 커넥터 설치 (http://redmin-mylyncon.sourceforge.net/update-site/N/)
※ 가끔 업데이트 사이트에 연결되지 않아 설치가 진행되지 않는 경우가 있다. 적당히 시간이 지난 후 업데이트를 수행하면 재대로 설치된다. 


3) Eclipse MyLyn에서 Redmine 연동


  이제 MyLyn에 Task Repository를 등록하는 일이 남았다. 등록을 위해 수행해야 하는 작업은 아래와 같다. 


(1) 먼저 앞에서 설치한 RESTful API를 활성화해야 한다. Redmine에서 관리자 계정으로 로그인한 후, "관리 > 설정 > 인증"으로 차례로 접근한 후, "REST 웹 서비스 활성화"를 체크하고 저장한다.




(2) 로그인 상태에서 Redmine 상단 우측의 "내 계정"을 선택하면, 우측부분에 "API 접근키" 항목이 생겼다. "보기"를 누르고 해당 API 키를 복사한다. 



(3) 이클립스의 MyLyn에서 "New Task" 선택시 표시되는 창에서 "Add Task Repository" 버튼을 클릭한다. (또는 Task Repository View를 열고, 여기서 추가 가능) 다음 창에서 Redmine 을 선택한 후, Next를 누르면, 아래와 같은 창이 나타난다. 입력할 항목은 다음과 같다. 

  • Redmine 주소 (http://[ip]:[port]/redmine)
  • Label : 작업 저장소 이름
  • API-Key의 Enable을 체크하고, (2)에서 복사한 값을 붙여넣는다. 
모두 입력했으면 Validate Settings 버튼을 클릭하고, 정상적으로 연결됨을 확인한 후, Finish를 누른다. 


(4) 이제 MyLyn에서 새로운 Task를 연결된 Redmine에 등록할 수 있게 되었다. 테스트로 하나의 작업을 등록한 후, Submit을 눌러 등록한다. 




(5) 웹에서도 입력한 내용을 볼 수 있는지 확인한다. 




4. Redmine 메일 설정


  메일 설정과 관련된 자세한 내용은 아래의 주소들을 참고하여 작성하였다. 레드마인 2.x 버전 이후로 Gmail과 관련된 TLS 관련 설정에 변경이 생긴 듯하다. 

  1. 별도의 플러그인 설치 필요 없음
  2. 설정할 파라미터가 변경 (tls: true --> enable_starttls_auto: true)
자세한 내용은 아래 참고 주소를 참고한다.
http://www.redmine.org/boards/2/topics/30670 (맨 아래쪽, 답변자가 한국인임...-_-)
  • Redmine의 "관리 > 설정 > 메일 알림"에서 메일 알림과 관련된 옵션을 알맞게 편집한다.


  • configuration.yml 파일의 이메일 부분을 아래와 같이 편집한다. configuration.yml 파일은 [BitNami Redmine 설치 경로]/apps/redmine/htdocs/config 내에 존재한다. 
※ 해당 예제는 Gmail을 송신 메일로 설정할 때의 예시이며, 기타 사설 메일이나 다른 메일을 사용할 시에는 메일 공급자에 알맞은 정보를 입력해주면 된다. 
※ 설정 파일을 입력할 때 주의사항 
  (1) 앞쪽 공란은 Tab 키 대신 공란 2개를 사용해야 한다(설정파일의 주의사항)
  (2) user_name외의 값은 ""를 사용하지 말 것 
# default configuration options for all environments
default:
  # Outgoing emails configuration (see examples above)
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      enable_starttls_auto: true
      address: smtp.gmail.com
      port: 587
      domain: smtp.gmail.com
      authentication: :plain
      user_name: "[송신 이메일 주소]"
      password: [송신 이메일 비밀번호]
  • Redmine을 재시작하고, "관리 > 설정 > 메일 알림"으로 접속하여 하단의 "테스트 메일 보내기"로 메일 테스트를 수행해본다. 






  1. 글 감사합니다. 도움이 많이 되었습니다.
    다른 글들은 고민과 실수를 많이하게되는데..
    이 글은 그저 따라가기만 하면 무안히 끝나네요.

    그리고 굳이 필요없지만 찜찜한
    sudo bundle install --without development test
    는 sudo 빼고
    bundle install --without development test
    실행하면 되네요.

+ Recent posts