본문 바로가기
모바일앱/Objective - C

개발 / 운영서버를 반영하는 변수 만들기

by GeekCode 2022. 4. 27.
반응형

 

용도

여러개의 서버를 구분하기 위해서 만들었어요

서버가 PRD, DEV 두개라면 Bool 로 설정해도되지만 가끔 QA가 존재 할 수도 있어요 

 

저의 경우는 한 앱에서 DEV 서버와 운영서버를 변경하면서 필요할 때 변경 가능하도록 하기 위해 만들었어요. 

 

➖ 기본세팅 : 현재서버를 가져오는 방법

준비물 :

1. 서버별 도메인정보

2. 내 앱에서 도메인을 호출하는 방법

 

먼저 현재 서버에 대한 정보를 가져와야해요. 아마 통신을 하는 앱이라면 도메인을 가져오는 부분이 있을거에요. 그래서 현재 도메인을 가져오세요. 요건 사람마다 다르니 알아서 가져오셔야겠네요 ㅎㅎ 제가 하나 예시로 준비해봤습니당

 

 

예시 )

  • 개발서버 : https:// dev.m.geekcode.com
  • 운영서버 : https:// m.geekcode.com
  1. componentsSeparateBy 함수를 사용해 URL 스키마를 구분하는 // 를 기준으로 어레이를 생성합니다. 이제 새로생성한 어레이는 배열의 요소가 2개가 생기겠죠? 첫번째 요소는 ["http:"] 이런거 일테고 마지막 요소는  URL스키마를 제외한 부분이 되는 거에요. 우리가 필요한건 이 뒷부분입니다. 
  2. 1번어레이.lastObjectcomponentsSeparateBy 함수를 사용해 . 을 기준으로 어레이를 생성합니다 . 지금 새로 생성한 어레이의 첫번째 요소를 가지고 구분을 할거에요. 
  3. 2번어레이.firstObject 로 구분

 

다시 정리해보면 아래 색칠한 부분을 가지고 구별을 해본겁니다. 구별만 하면되는거니까요. 더좋은 방법도 많을거에요.ㅎ 하지만 개발은 속도도 중요하니까.. 이 코드 두줄이면 그래도 괜찮다고 생각합니다. 

  • 개발서버 : https:// dev.m.geekcode.com
  • 운영서버 : https:// m.geekcode.com

코드로 다시 살펴봅시당.

    // 앱내 현재 서버의 urlstring 호출
    NSString *urlString = [NSString stringWithFormat:@"%@",[[url class] urlStringValue]];
    NSArray *exceptHttp = [urlString componentsSeparatedByString:@"//"];
    NSArray *serverFlag = [exceptHttp.lastObject componentsSeparatedByString:@"."];

 

 

➖ “dev” “prd”를 반환하는 함수를 사용하는 방법

나중에 보수가 가능하도록 함수로 만들었어요.

위에서 가져온 현재 서버를 가지고 currentServer라는 변수에 3항 연산으로 "prd"인지 "dev"인지 담아서 String값을 리턴하도록 만들었어요.

- (NSString *) currentServerCheck {

	// 앱내 현재 서버의 urlstring 호출
    NSString *urlString = [NSString stringWithFormat:@"%@",[[url class] urlStringValue]];
    NSArray *exceptHttp = [urlString componentsSeparatedByString:@"//"];
    NSArray *serverFlag = [exceptHttp.lastObject componentsSeparatedByString:@"."];

    NSString *currentServer = ([serverFlag.firstObject isEqualToString:@"m"]) ? @"prd" : @"dev";
    NSLog(@"서버변경이벤트: 현재서버는: %@", currentServer);

    return currentServer;
    }

이 함수를 다른 함수내에서 아래처럼 담아서 사용할 수있어요. 이러면 currentServer 변수를 구분자로 사용할 수 가 있어요.

이 값이 "prd" "dev"인지 구별해서 사용하면 되는거죠.

NSString *currentServer = [self currentServerCheck];

 

➖ enum타입을 이용해 서버를 구분하는 방법

서버가 두개가 아니라 여러개가 되는 경우에는 좀 귀찮아지겠다 싶었어요. 

그래서 enum타입을 따로 만들었고요. struct를 만들어도 될것같아요. 이렇게 하면 서버가 많아도 되겠어요.

맞아요. 제가 한번만들고 나중에 또 써먹으려고 이러는 거에요... 

 

저는 현재서버를 가져오고, 내가 변경하려고 선택한 서버정보, 저장완료한 서버정보 이 세가지를 따로 변수를 생성했어요.

 

생성한 enum

- PRD

- DEV

 

새로 생성한 변수

- currentServerInfo

- willSaveServerInfo
- didSaveServerInfo

 

작업을 하면서 잘 데이터가 넘어가는지 체크하려고 할때 주의해야할 점은 아래와 같아요.

  • enum타입을 콘솔에 찍어보는 경우 int값을 자동으로 가지게 되있다.

swift에서는 구조체는 그 자체로도 값으로 취급되어지니까 그냥 프린트해도됐는데, 이놈의 옵젝씨는여 뭐 하나 콘솔창에 찍으려고 봐도 스트레스에요. 조만간 NSLOG에 대한 글도 올릴게요.

 

그래서 암튼 enum으로 선택한이유는 이걸 프린트로 할때 자동으로 순서대로 0,1,2 이렇게 integer값을 가지게 되니까 그거 보고 확인하려고 선택했어요.  이걸 currentServerInfo에 서버를 선택해서 담게되면 이렇게 확인 할 수 있어요.

혹은 string으로 바꿔주고 3항연산을 사용해서 보여줄 수도 있어요

NSLog(@" 현재서버는 %i", currentServerInfo); // 0  이 나오면 PRD 서버

// 다른 방법
NSLog(@"현재서버는 %@", (_currentServerInfo == PRD) ? @"PRD" : @"DEV");

 

전체 코드를 볼게요. 

이제 enum타입과 변수 3개( current  - , willSave - , didSave - ) 가 생겼으니까 맘놓고 구분자로 사용할 수 있겠어요.

이제 서버가 많은 회사로 취직만 하면 되겠네요. @_@ 전 지금 직장을 정말 사랑합니다. 

// .h 파일에 enum 선언

#import <UIKit/UIKit.h>
typedef enum {
    PRD,
    DEV
} SERVER_TYPE;

@interface MainViewController : UIVIewController 

@property (assign, nonatomic) SERVER_TYPE currentServerInfo;
@property (assign, nonatomic) SERVER_TYPE willSaveServerInfo;
@property (assign, nonatomic) SERVER_TYPE didSaveServerInfo;

@end

//.m 파일

-(void) currentServerCheck {

	// 앱내 현재 서버의 urlstring 호출
    NSString *urlString = [NSString stringWithFormat:@"%@",[[NBKoreaConfigure sharedConfiguration] base_url]];
    NSArray *exceptHttp = [urlString componentsSeparatedByString:@"//"];
    NSArray *serverFlag = [exceptHttp.lastObject componentsSeparatedByString:@"."];

    ([serverFlag.firstObject isEqualToString:@"m"]) ? (_currentServerInfo = PRD ): (_currentServerInfo = DEV);

    NSLog(@"현재서버를 알아보자 %i", _currentServerInfo);
}

 

반응형

'모바일앱 > Objective - C' 카테고리의 다른 글

Objective C 울렁증 극복하기  (0) 2022.04.21