Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

마로의 개발일지

앱 메인 개편 회고 - 1 본문

기록

앱 메인 개편 회고 - 1

maro0201 2023. 3. 25. 12:26

 2022년이 되어 맡은 첫 프로젝트였다. 이전까지는 운영 건들을 해결하거나 간단한 작업만 했었는데 꽤 사이즈가 큰 업무가 처음으로 할당되었다. 당시 생각에는 '재밌을 거 같지만 겨우 7개월 차 신입이 하기에는 부담스러운 거 같은데?'라고 생각했었다. 개발이 아닌 개편인데 뭘 그렇게 생각하냐고 할 수도 있다. 하지만 메인페이지 호출 api를 새로 만들게 되면서 기존에 호출하던 api들도 새로운 api로 바뀌었고, 새로운 기능들이 추가되었다. 거기에 이전에 있던 로직들이 필요한 기능인지 아닌지를 판단해서 제거해야 했기 때문에 작업량이 꽤 많았다.

 

개발 내용

 작업했던 내용을 모두 적을 순 없겠지만 대략적으로 적어보자면 메인 배너 추가, 기존의 호출 api들 교체 및 스펙 변경, 불필요한 로직 제거, 이전까지 하드코딩해서 사용하던 퀵메뉴 백오피스에서 설정 기능 추가, 관심 상품 리스트를 위한 관심 카테고리 관린 기능 추가 등이 있었다. 꽤 많은 내용이라 약 2개월 정도에 걸쳐 작업했었다.

 

기존 코드 분석하기

 화면 영역이 명확하게 나뉘어져 있는 것처럼 로직도 각각 조회하는 부분이 명확하게 나눠져 있었다. 덕분에 새로운 영역을 작업하려면 어디에 추가해서 작업하면 되겠다는 걸 쉽게 알 수 있었다. 하지만 내부적으로 들어가면 앱 버전에 따른 분기들과 여러 복잡한 로직들이 있어 어떤 기능이 어떨 때 동작하는지 분석하는데 시간이 꽤 걸렸다.

 

하필 코로나가

 한창 열심히 개발을 하던중 코로나가 심해져 재택근무를 하게 되었다. 옆에 있을 땐 안 바쁘실 때 눈치껏 질문을 했지만 그럴 수가 없게 되었다. 대부분의 내 질문은 로직에 관한 것들(예를 들자면 "이건 이렇게 하는 게 좋을 거 같은데 이렇게 해도 될까요?"라던가 "얘는 필요 없는 것 같은데 빼도 되나요?" 같은 질문들)이었고 그런 질문들은 코드와 적절한 설명이 필요했기에 메시지로만 전달하는 게 힘들었다. 그래서 일단 기존의 내용대로 해놓고 나중에 다시 수정하자는 생각으로 도전적이기보단 안정적으로 작성했다. 기존의 로직들을 리팩토링이라기 보단 불필요한 로직을 제거만 하고 쓰는 느낌이 들어 기분이 썩 좋지 않았다. 할 거면 제대로 해야지라는 생각이었는데 단순히 베끼는 것 같았기 때문이었다. 그래도 재택근무가 종료된 이후 코드리뷰를 받아 리팩토링을 진행해서 꽤 만족스러운 코드를 작성할 수 있었다.

 

앱 버전 분기 관리

 새로운 api를 만들어 기존에 호출되는 api를 신경 쓸 필요가 없어 앱 버전에 따른 분기처리를 할 필요가 없을 줄 알았다. 하지만 기존에 사용되고 있던 로직들 중 어쩔 수 없이 분기처리를 해야 하는 부분이 있었다. 여러 버전이 하드코딩되어 있는 것을 보니 관리하기 힘들어 보였고, ios 버전과 aos버전이 따로 처리되고 있었다. 이를 개선하고자 기존에 앱버전을 확인하던 AppVersionUtils에 새로운 메서드를 만들었고, AppVersion Enum을 만들어 한 곳에서 공통적으로 관리할 수 있게 하였다. 물론 이것보다 더 좋은 방법이 있겠지만(환경 변수로 구성한다 던지?) 당시의 나로서는 최선의 방법이 아니었을까 생각한다.

AppVersionUtils

 

public static int compareAppVersion(String userAppVersion, String targetAppVersion) {
    if (StringUtils.isAnyEmpty(userAppVersion, targetAppVersion)) {
        return -1;
    }

    DefaultArtifactVersion appVersion = new DefaultArtifactVersion(userAppVersion);
    DefaultArtifactVersion checkVersion = new DefaultArtifactVersion(targetAppVersion);

    return appVersion.compareTo(checkVersion);
}

public static Boolean checkAppVersionAll(int osType, String appVersion, AppVersion targetAppVersion) {
    return osType == AOS && compareAppVersion(appVersion, targetAppVersion.getAosAppVersion()) >= 0
        || osType == IOS && compareAppVersion(appVersion, targetAppVersion.getIosAppVersion()) >= 0;
}

AppVersion

public enum AppVersion {
    JAVA("1.0", "2.0"), // 기능 추가
    SPRING("1.1", "2.1"), // 기능2 추가
    PYTHON("1.2", "2.2"), // 기능3 추가
    JS("1.3", "2.3") // 기능4 추가
    ;

    private final String iosAppVersion;
    private final String aosAppVersion;

    AppVersion(String aosAppVersion, String iosAppVersion) {
        this.aosAppVersion = aosAppVersion;
        this.iosAppVersion = iosAppVersion;
    }

    public String getIosAppVersion() {
        return iosAppVersion;
    }

    public String getAosAppVersion() {
        return aosAppVersion;
    }
}

'기록' 카테고리의 다른 글

앱 메인 개편 회고 - 마무리(관심 카테고리)  (0) 2023.04.02
앱 메인 개편 회고 - 2(퀵메뉴)  (0) 2023.03.26
2021년 회고  (0) 2023.03.24
Vertical-api 개발 회고  (0) 2023.03.19
정리하고 기록하기  (0) 2023.03.19
Comments