글쓴이 글 목록: opener

[JAVA 개발환경설정] 2. 폴더의 구성 2014-10-15

> jsp & php의 웹개발을 위한 개발폴더 구성이다.

webservice_folder
- 개발환경 폴더에는 개발도구별로 폴더를 만들고 아래 버전별로 폴더를 두어 설치한다.
- 개발소스 폴더에는 프로젝트별 소스폴더를 구분하여 저장한다.
- 개발툴 폴더에는 개발툴별로 폴더를 만들고 버전별로 다른 환경을 제공하는 경우 아래 버전별 폴더를 두도록 한다.

 


 

> XAMPP를 사용하여 쉽게 최적화된 형태의 로컬 서버를 구성한다.

webservice_folder2
- xampp는 기본적으로 apache + php + mysql + tomcat + perl을 설치해 준다.
- 추가로 필요한 서버가 있다면 같은 폴더에 구성해서 사용한다.

[JAVA 개발환경설정] 1. 고려사항 2014-10-15

 개발환경은 프로젝트 진행에 있어서 상당히 중요한 부분이다. 하지만 상당수의 기업은 이를 무시하는 경향이 많다.

 사업기회를 놓치지 않기위해 촉박하게 프로젝트 일정을 잡기 때문에 급한 마음에 ‘구현되는게 우선이다’라는 생각으로 접근하기 때문이 아닐까 한다. 이러한 성급한 결정은 위험요소를 가지고 있다. 구성원간 개발한 소스의 충돌을 일으키기도 하며 심지어 소스를 지우기도 한다. 또한 개발자는 프로젝트의 로직을 생각하는것 말고도 신경써야하는 부분이 많아진다. 결국 촉박하게 진행된 프로젝트는 일정안에 끝나지 못하게 되며 난잡하게 구성된 결과물만 남게되어 리펙토링시 더욱 험난한 길을 가게된다. 결과적으로 기업의 입장에서는 마이너스인 것이다.

 프로젝트가 원활히 진행되기 위해서는 다음사항을 고려하여 구성원간 충분히 공유하고 대화하여 최대의 효율을 낼 수 있도록 진행 되어야 한다.

 무조건 이렇게 되어야 한다는 것은 아니며 필요없다고 생각하는 구성은 생략해도 된다.

 

1. 로컬개발환경

로컬에 웹서비스를 구성하고 개발자별 단위 테스트를 하는 것이 좋다. 이때 디비는 개발서버의 것을 사용해도 좋다.

 

2. SVN서버

로컬에서 개발된 소스는 팀원별로 SVN서버에 커밋하여 종합한다. 충돌이 나지 않는 것이 최선이지만 그렇게 되기는 힘들고 팀원간의 대화로 개선해 최소화 해나간다.

 

3. 개발서버

SVN서버에 종합된 소스를 개발서버로 옮겨 테스트 해야한다. 문제점이 발견된다면 팀원간의 회의로 해결할 수 있도록 한다.

 

4. 테스트서버

개발이 완료 되어 개발서버에서 문제가 없다면 별도의 테스트서버에서 QA(Quality Assurance) 를 진행해야 한다.

 

5. 폴더구성

프로젝트 구성원간에 동일하게 구성하는 것이 좋다. 폴더구성을 변수화 해서 다르게 갈수도 있지만 많은 폴더의 구조를 모두 변수화 하기에는 무리가 아닐까 생각한다.

 

6. 배포시스템

개발이 아닌 다른부분은 스크립트화 하여 신경쓰이는 일이 없도록 자동화해야 한다.

[memcached] 2. 활용로직 2014-10-12

> 웹 어플리케이션 서버는 일차로 메모리에 캐싱되어있는지 확인한다. 데이터가 있다면 디비서버에 접근하지 않고 그대로 사용하며 없다면 접근하여 데이터를 읽어와 캐시서버에 저장한 후 사용한다. 이렇게 되면 데이터의 수정이 없는 이상 디비에 부하를 주지 않아도 된다.

memcached_system


> 개발로직을 CRUD 로 구분하여 살펴보면 다음과 같다.

/**
Create
-- 별도처리가 필요없다.
*/
mysql.create(query);
/**
Read
-- 메모리캐시에 있는 데이터를 사용하되 없으면
   디비에서 읽어와 메모리캐시에 저장하고 사용한다.
*/
var data;
data = memcached.get(key);
if(data == null){
   data = mysql.select(query);
   memcached.set(data);
}
/**
Update
-- Read시 다시 생성되도록 삭제한다.
*/
mysql.update(query);
memcached.delete(key);
/**
Delete
-- 동시에 삭제한다.
*/
mysql.delete(query);
memcached.delete(key);
- memcached에는 테이블이 존재하지 않으며 key-value형태의 데이터셋만 존재한다. 그러므로 key string 구성시 prefix를 잘 구성하여야 한다.
- 데이터 모델링시 디비와 캐시를 동시에 관리할 수 있도록 많은 고려가 필요하다.