Author Archives: opendocs

[Guide | App – iOS] 앱개발시 테스트환경 구축

배포환경 구축의 중요성과 iOS환경에서 사내배포하는 방법에 대하여 정리해보자.


작성일 : 2019-08-17

앱개발이 완료되면 버그 및 개선사항을 이슈화하고 수정하기 위해 사내배포가 필요하다.

수정 -> 배포 -> 수정 -> 배포 -> 수정 -> 배포 -> 수정 -> 배포 ...

한번에 수정하고 완료된다면 이상적이겠지만 대부분의 경우 수정과 배포를 여러번 반복하게된다.

배포절차를 정리하고 자동화가 필요한 이유이다.


iOS의 경우 단순히 빌드파일(.ipa)로 사내배포가 불가하고 다음 4가지 방법으로 정리된다.

1> 디바이스를 직접 맥에 연결하여 빌드

여러기기에서 테스트를 해야하는 경우 번거롭다.


2> AdHoc 배포 (‘특별한 목적을 위해서’라는 뜻의 라틴어)

기기의 UDID를 알아내는 절차만 거치면 가장 깔끔한 방법이다.
[LINK - Device UDID 확인]

3> TestFlight 배포

테스트 기기를 위한 계정생성 및 검수 등의 불편하다.

4> Enterprise 배포

매우 편리하지만 1년에 300달러(?)가량의 비용이 발생한다.

결론을 내리자면 규모가 있고 비용부담이 없다면 4> Enterprise, 스타트업과 같이 인원이 적고 비용을 부담하고 싶지 않다면 2> AdHoc 배포가 현명한 방법이 아닐까 생각된다.

[Tip | Java – Spring] BeanCreationException

서비스 시작시 아래메시지가 발생하였다. 문제를 확인하고 해결해보자.
Error Message.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘OpdController‘: Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named ‘OpdService‘ available


작성일 : 2021-03-24

컨텍스트에 없는 빈을 주입하려 할때 발생한다.
OpdService에 @Service 어노테이션을 선언해주어야 한다.

@Controller
public class OpdController {

   @Autowired
   private OpdService opdService;
   ...

}
@Service
public class OpdServiceImpl implements OpdService {
   ...
}

다른 빈 ID를 사용하려 했을때 실수로 잘못된 이름에 주의한다.

@Controller
public class OpdController {

   @Autowired
   @Qualifier("renameService")
   private OpdService opdService;
   ...

}
<!-- XML 선언 -->
<bean id="renameService" class="com.opendocs.project.OpdServiceImpl" />
// Annotation 선언
@Service("renameService")
public class OpdServiceImpl implements OpdService {
   ...
}

[Source | MySQL or MariaDB] 데이터베이스 생성 및 접속 설정

데이터 베이스를 MySQL / MariaDB로 선택하여 프로젝트를 진행할 경우 디비생성 및 접속권한을 부여하는 방법을 설명한다.


작성일 : 2021-02-23

1> 데이터베이스 생성

create database {디비명} collate '{문자셋}';
# Ex)
create database ProjectDB collate 'utf8_general_ci';

2> 사용자 추가

create user '{사용자ID}'@'{접속IP}' identified by '{비밀번호}';
# Ex)
create user 'opendocs'@'localhost' identified by 'passOpd';

3> 권한부여 및 적용

# 권한부여
grant all privileges on {디비명}.* to '{사용자ID}'@'{접속IP}';
Ex)
grant all privileges on projectDB.* to 'opendocs'@'localhost';
# 권한적용
flush privileges;

[Concept | Architecture] 3Tier

시스템 설계시 프로젝트의 목적에 따라 물리적인 계층(Tier)을 나누고 서비스를 논리적(Layer)으로 분리하게 된다. 효과적인 분업을 위해 반드시 이해가 필요한 부분이다. 1티어 / 2티어 / 3티어의 개념과 장단점을 설명한다.


Tier (계층) : 물리적인 분리단위 (서버 분리)
Layer (층) : 논리적인 분리단위 (기능 분리)

1> 1Tier

장점 : 구현이 간편함, 비용이 적게듬
단점 : 확장이 힘듬, 이관시 재구성이 필요함, 분업이 어려움


2> 2Tier

장점 : 데이터관련 변경이 용이함
단점 : 3Tier에 비해 유연성이 떨어짐


3> 3Tier

장점 : 다른계층에 의존하지 않으므로 분업시 효율적임
단점 : 구현시 고려사항이 많아 비용이 증가함

1) Client(Presentation) Tier : HTML, Javascript, CSS, Image
  - 사용자 인터페이스를 지원함
  - Frontend or GUI 라고도 불림
  - 보안상의 이점을 위해 Frontend서버를 두기도함
    (이때 Frontend서버는 단순한 것이므로 구현이 쉽고 가벼운 것을 이용)
2) Application Tier : Java, NodeJS, Python, PHP
  - 정보를 처리하는 로직이 포함되어 있음
  - Backend 라고도 불림
3) Data Tier : Oracle DB, Maria DB, Postgresql
  - 데이터베이스 서버 자체를 말함

[Tip | Windows10] 서비스 포트 확인

윈도우 환경에서 포트를 확인하고 사용중인 프로세스를 종료하는 방법을 설명한다.
포트가 이미 사용중이라는 에러 메시지가 발생할 경우 프로세스를 종료해야만 한다.
(예, Eclipse 비정상 종료시 tomcat이 종료되지 않아 아래와 같은 메시지를 출력한다.)


테스트환경 : Windows10
작성일 : 2021-02-20

1> 사용중인 프로세스를 확인

# 명령프롬프트 실행 또는 실행(윈도우키 + R) > cmd
netstat -ano | findstr "8005 8080 8009"

2> 프로세스 종료
왼쪽(로컬주소)에서 사용중인 프로세스 PID 5288 을 taskkill명령으로 종료한다.

taskkill /f /pid 5288

명령 실행 후 프로세스 종료를 확인한다.

[Tip | CentOS] 서비스 로그 확인

프로젝트 테스트 또는 운영시 에러추적을 위해 로그를 남기게 된다.
리눅스 환경에서 로그분석을 위한 명령어 사용법을 설명한다.


테스트서버 : CentOS
작성일 : 2021-02-19

TIP.
Case 1. 실시간 로그 확인중 에러발생
에러가 발생한 시간이나 키워드로 4> 지난 로그 확인 방법을 활용
Case 2. 에러 발생 후 로그 확인
에러 추적 범위를 좁혀가며 에러를 찾는다. 
(ex. 시간조건으로 파일을 출력 > 단어조건으로 파일을 출력 > 특정단어로 확인)
특히, 로그파일의 용량이 클경우 범위를 좁혀가며 추적해야만 파일을 열고 닫을때 소모되는 시간을 줄일 수 있다.


1> 실시간 로그 확인

# 로그파일을 실시간으로 모니터링
tail -f {로그파일}

# 로그파일 중 특정단어가 포함된 라인만 모니터링
# - error가 포함된 라인 출력(대소문자 미구분)
tail -f {로그파일} | grep -wi 'error'
# - error or wran or exception 포함된 라인 출력(여러단어)
tail -f {로그파일} | grep -wi 'error\|warn\|exception'

2> 지난 로그 확인 – 특정단어포함

# error가 포함된 라인 출력(대소문자 미구분)
grep -ri 'error' {로그파일}
grep -ri 'error' {로그파일} > {출력파일}

# error or wran or exception 포함된 라인 출력(여러단어)
grep -ri 'error\|warn\|exception' {로그파일}
grep -ri 'error\|warn\|exception' {로그파일} > {출력파일}

3> 지난 로그 확인 – 특정단어불포함

# debug가 불포함된 라인 출력(대소문자 미구분)
grep -vi 'debug' {로그파일}
grep -vi 'debug' {로그파일} > {출력파일}

# debug or trace 불포함된 라인 출력(여러단어)
grep -vi 'debug\|trace' {로그파일}
grep -vi 'debug\|trace' {로그파일} > {출력파일}

4> 지난 로그 확인 – 특정시간 또는 에러시 출력되는 문구

# 에러가 발생한 시간대 위아래 2000라인
grep -C 2000 -i '2021-02-19 16:27\|2021-02-19 16:30' {로그파일}
grep -C 2000 -i '2021-02-19 16:27\|2021-02-19 16:30' {로그파일} > {출력파일}

# 에러문구 위아래 2000라인
grep -C 2000 -i 'Null Pointer Exception\|File Not Found' {로그파일}
grep -C 2000 -i 'Null Pointer Exception\|File Not Found' {로그파일} > {출렦파일}

[Tip | iOS] Device UDID 확인

프로젝트 진행시 모바일 기기(iPhone / iPad)의 고유값인 UDID를 확인해야할 필요가 있다.
(예를 들어 애드혹 배포시)
iTunes를 사용하여 확인하는 방법을 설명한다.


작성일 : 2021-02-18

1> iTunes를 다운받아 설치한다.


2> 모바일 기기가 암호로 잠겨있을 경우 경고창이 보인다. 모바일기기에서 신뢰를 선택한 후 재시도을 클릭한다.

<경고창>
<신뢰선택>

3> 연결이 완료되면 ‘환영합니다‘ 메시지의 창이 보이는데 동의를 클릭한다.


4> 연결이 정상적으로 완료되면 아래와 같이 휴대폰 모양의 아이콘이 활성화 된다.


5> 일련번호가 표시된 부분을 UDID가 보일때 까지 클릭한다.


6> UDID를 확인할 수 있다.

[Setting | WordPress] 최초 설치 후 SFTP 설정

서버에 FTP 포트(21)를 열기 부담스럽거나 보안이 걱정된다면 SFTP 플러그인을 설치하여 워드프레스의 추가 기능을 관리할 수 있다.


설치서버 : CentOS
작성일 : 2020-08-10

1> 플러그인을 검색한다.

  • 관리자 메뉴 > 플러그인 > 새로추가
  • ‘SSH SFTP’ 검색하여 상세보기 페이지로 이동

2> 플러그인을 다운로드한다.

  • 워드프레스 사이트로 이동
  • 플러그인 다운로드

3> 플러그인 파일을 압축해제 & 복사하여 설치한다.

: << COMMENT
다운로드 받은 파일을 서버로 업로드
- FTP Tool을 사용해 업로드
COMMENT

: << COMMENT
설치
COMMENT
cd {다운로드폴더}
sudo cp ssh-sftp-updater-support.0.8.2.zip /var/www/html/{워드프레스 폴더}/wp-content/plugins
cd /var/www/html/{워드프레스 폴더}/wp-content/plugins
sudo chown apache:apache ssh-sftp-updater-support.0.8.2.zip
sudo unzip ssh-sftp-updater-support.0.8.2.zip
sudo rm ssh-sftp-updater-support.0.8.2.zip

: << COMMENT
SELinux 설정
COMMENT
chcon -R -t httpd_sys_rw_content_t /var/www/html/{워드프레스 폴더}/wp-content/plugins
chcon -R -t httpd_sys_rw_content_t /var/www/html/{워드프레스 폴더}/wp-content/uploads
: << COMMENT
- SELinux 읽기만 허용 확인
COMMENT
semanage fcontext -l|grep httpd_sys_content_t
: << COMMENT
- SELinux 읽기/쓰기 허용 확인
COMMENT
semanage fcontext  -l|grep html|grep httpd_sys_rw_content_t

4> 플러그인을 활성화한다.

  • 관리자 메뉴 > 플러그인 > 설치된 플러그인
  • 목록에서 ‘SSH SFTP Updater Support’ 활성화