채용공고 올리기

강병국님을 응원해보세요!

지금 만족하고 있어요
책임감
협업 지향
분석적
꼼꼼함
문제 해결사

미리보기

기본 정보

이름
강병국
직업
모바일 앱 개발자(Android)
간단 소개

안녕하세요. 안드로이드 개발자 강병국입니다. - WebSocket을 이용한 오픈 채팅 앱을 만든 경험이 있습니다. - Kotlin을 이용해 약 7만 줄의 프로젝트 코드를 설계하고 작성한 경험이 있습니다. - 레거시 코드를 Clean Architecture와 Multi-Module 구조로 리팩토링한 경험이 있습니다. - 이슈 발생 시, 사용된 라이브러리의 소스코드까지 분석하여 문제를 해결한 경험이 있습니다. - 테스트 코드를 통한 테스트 자동화를 구현한 경험이 있습니다. - Jetpack Compose와 테스트 자동화를 프로젝트에 적용한 경험이 있습니다. - Figma를 이용한 디자인 경험으로 디자이너 분과 협업 시, 보다 원활한 의사소통이 가능합니다. - 코드를 작성하고, 작성 된 코드에 관해 다른 사람들과 생각을 나누는 것을 좋아합니다. - 기능을 구현함에 있어서 팀원과 소통하고, 더 좋은 구조를 찾는 것을 좋아합니다. - 현재 서비스되고 있는 앱들의 아키텍처 구조를 추측하고 테스팅해보는 습관이 있습니다. 사용자에게 안정적인 서비스를 제공하기 위해 항상 고민하며 성장하고 있습니다.

기술 스택

기술 스택

Android, Kotlin, Java, SQLite, websocket, Android Compose, JUnit, MVVM, Git, GitHub, Figma, Firebase

프로젝트

프로젝트명

BookChat(북챗)

소속/기관명

팀 3인(Android , BackEnd, Designer 각 1명)

프로젝트 기간

2022.09. ~ 진행 중

프로젝트 내용

책을 같이 스터디할 수 있는 환경이 필요한 사용자,
책에 대한 자신의 생각을 다른 사람들과 나누고 싶은 사용자들이 모여
책에 대해 토론 혹은 질문을 채팅으로 나눌 수 있는 어플리케이션입니다.

  • 소개 : 도서 오픈 채팅 플랫폼

  • 언어 : Kotlin

  • 관련 기술

    • Kotlin, MVVM, Retrofit2, Coroutine, Flow,

    • Clean-Architecture, Multi-Module,

    • Room, DataStore, View-Binding, ListAdapter,

    • Dagger-Hilt, Kotlinx-Serialization, Glide, ViewPager2,

    • Stomp, WebSocket, FCM,

    • Gradle Version Catalog, Precompiled-Script-Plugin, KeyStore, RemoteConfig

  • Repository : Kova700/BookChat_Android

  • Google Play Store : 출시 준비 중

프로젝트명

AmazonBookStorePractice

소속/기관명

개인

프로젝트 기간

2023.12. ~ 2024.01.

프로젝트 내용

Jetpack Compose와
Google Recommened Acrchitecture,
TestCode 작성에 관한 학습을 위해 진행한 프로젝트 입니다.

해당 프로젝트를 진행하며 Data, Domain, UI 각 레이어에 대한 구분을 학습하였습니다.
Compose의 State Hoisting, UDF(단방향 데이터 흐름)에 관한 내용을 학습하였습니다.
Junit과 Mockito를 이용해 테스트 코드 작성하는 방법에 관해 학습하였습니다.

  • 소개 : 카카오 도서 검색 API를 이용한 도서 검색 앱

  • 언어 : Kotlin

  • 관련 기술

    • Kotlin, MVVM, Ktor, Coroutine, Flow,

    • Clean-Architecture, Multi-Module,

    • Jetpack-Compose, Dagger-Hilt, Coil, Kotlinx-Serialization, DataStore,

    • JUnit4, Kotlin-Mockito, Gradle Version Catalog, Precompiled-Script-Plugin

  • Repository : Kova700/AmazonBookStorePractice

프로젝트명

ZeroToMVVM

소속/기관명

개인

프로젝트 기간

2023.10. ~ 2023.12.

프로젝트 내용

PokeAPI를 이용해 포켓몬에 관한 데이터를 가져오는 간단한 프로젝트입니다.
해당 프로젝트에 아무런 아키텍처를 적용하지 않은 노베이스 아키텍처부터
MVP -> MVP + Repository -> MVVM 순서대로 아키텍처를 적용, 변화시켜가며
View기반 아키텍처에 대한 학습 과정을 담은 프로젝트입니다.

  • 소개 : 포켓몬 정보를 보여주는 앱

  • 언어 : Kotlin

  • 관련 기술

    • Kotlin, MVC, MVP, MVVM, Retrofit2, Coroutine, Flow,

    • Clean-Architecture, View-Binding, Dagger-Hilt, Jetpack-Navigation, Room,

    • ListAdapter, Glide, Kotlinx-Serialization

  • Repository : f-lab-edu/ZeroToMVVM

포트폴리오

URL

link

이력서

URL 링크
link

깃허브

깃허브
link

블로그

티스토리

교육

소속/기관명

F-Lab

종류 | 전공

사설 교육 | F-Lab Android 개발자 멘토링

재학 기간 | 재학 상태

2023.10. ~ 2024.03. | 졸업

소속/기관명

울산 과학대학교

종류 | 전공

대학교(전문학사) | IT응용기술학부/소프트웨어 개발전공

재학 기간 | 재학 상태

2018.03. ~ 2022.02. | 졸업

자기소개

자기소개

# 끝까지 파고들어 문제를 해결합니다.

프로젝트 진행 중, Stomp 프로토콜의 Receipt 프레임이 서버로부터 수신되지 않는 문제를 해결하여 메시지 전송 안정성을 향상시킨 경험이 있습니다. Stomp 프로토콜의 Receipt 프레임은 메시지를 성공적으로 수신했음을 확인하는 중요한 요소로, 이 문제가 해결되지 않으면 서버측의 메시지 수신 여부를 확인할 수 없어 안정적인 메시지 전송이 어려운 상황이었습니다.

 

백엔드 개발자분과 함께 각자의 웹소켓 설정을 여러차례 점검했지만, 각자의 웹소켓 설정 부분에는 별다른 이상 이 발견되지 않아 클라이언트와 서버 간 문제의 원인을 파악하지 못하는 상황이 이어졌습니다. 이에 저는 안드로이드 스튜디오 디버그 모드를 활용해  웹소켓 라이브러리의 데이터 패킷을 송수신 과정을 상세히 분석하여 클라이언트에서 진짜 문제가 없는지 판단해보고자 했습니다. 

그 결과, 클라이언트에서는 Receipt요청을 헤더에 실어서 보내고 있었으나, 서버의 Spring 프레임워크의 Stomp 라이브러리에서 Receipt 프레임이 응답되지 않고 유실되는 문제가 확인되었습니다. 

문제의 원인이 Spring Stomp 라이브러리에 있음을 확인한 후, Stomp의 Receipt 기능 대신 각 메시지에 UUID 기반의 커스텀 Receipt ID를 추가하여 클라이언트가 보낸 메시지와 동일한 Receipt ID를 가진 메시지가 서버로부터 수신되면, 클라이언트는 해당 메시지가 정상적으로 서버에서 수신했다고 판단하는 구조를 취함으로써 문제를 해결했습니다.

# 꼼꼼한 예외처리로 서비스의 안정성을 높입니다.

코드 작성 시 엣지 케이스와 예외 상황을 꼼꼼히 고려하여, 예측 가능한 문제를 사전에 방지하는 것을 중요하게 생각합니다.  예외 처리는 단순히 오류를 처리하는 것이 아니라, 사용자에게 원활하고 안정적인 경험을 제공하는 데 핵심적인 역할을 한다고 믿습니다.

함수를 작성할 때는 “이 함수에서 어떤 예외가 발생할 수 있을까?”라는 질문을 항상 염두에 두고 코드를 작성하는 편입니다. 특히, 네트워크 문제로 API 호출이 실패하는 경우나 사용자의 잘못된 입력으로 인한 실패 상황을 처리할 때는, 그 상황에 맞는 적절한 예외처리를 통해 서비스를 안정적으로 유지하려고 노력했습니다. 

예를 들어, 네트워크 문제로 API 호출이 실패하면 재시도 UI를 제공하여 사용자가 문제를 쉽게 해결할 수 있도록 하거나, 서비스 상태를 안내해 혼란을 줄이려 노력했습니다.  또한, 잘못된 입력이나 사용자 상태와 관련된 API 호출 실패 상황에서는 HTTP 응답 코드를 이용해 상황을 명확히 구분하고 그에 맞는 처리를 하여 안정성을 높였습니다.

특히, 채팅방 입장과 관련된 예외처리는 여러 가지 케이스를 고려하여 작성했습니다. 이미 입장한 경우, 채팅방 정원 초과, 삭제된 채팅방, 강퇴된 유저 등 다양한 예외 상황에 맞는 응답 코드를 구분하여 꼼꼼하게 예외를 처리했습니다. 

이러한 예외처리들을 통해 서버 상태가 불안정한 상황에서도 앱 크래시나 다운 현상을 방지하고, 사용자에게 보다 안정적인 경험을 제공할 수 있었습니다.

# 소통을 통해 더 나은 구조를 찾아갑니다. 

채팅 기능의 실시간성과 신뢰성을 높이기 위해 구조 설계에 많은 고민을 했었습니다. 기존에 서비스 중인 채팅 앱들을 분석하고, 다양한 상황을 시뮬레이션하여 구조를 추측하면서 효율적인 구조를 찾으려 노력했습니다. 이 과정에서 백엔드 개발자분과 지속적으로 소통하며, 데이터 흐름의 효율성을 높이고 서버 부하를 최소화하는 방법을 함께 고민했습니다. 

채팅방에 참여 중인 유저 정보를 언제 불러오는 것이 적절한지, 소켓 연결이 끊긴 동안 누락된 데이터를 어떻게 동기화할지와 같은 문제들을 소통을 통해 서로의 아이디어를 공유하고 조율하며, 더 나은 방향으로 구조를 발전시킬 수 있었습니다.

특히, 제한된 서버 리소스를 고려하여 단일 기기 로그인 정책을 채택한 상황에서, 기존 로그인된 기기를 강제 로그아웃하는 기능이 필요했습니다. 당시 서버에서 클라이언트 기기에 로그아웃 명령을 전달할 적절한 방법이 없었지만, 회의를 통해 FCM을 활용한 로그아웃 방식이라는 아이디어를 도출했습니다. 이를 바탕으로 백엔드 개발자 분과 함께 API 스펙을 조율하며 강제 로그아웃 기능을 구현할 수 있었습니다.

이처럼 소통을 통해 문제를 해결하고 더 나은 구조를 만들어가는 과정을 즐깁니다. 다양한 관점과 아이디어를 공유하며 발전하는 경험은 저를 더 나은 개발자로 성장하게 만들었고, 앞으로도 창의적인 해결책을 찾아가는 데 기여하고 싶습니다.

댓글