보유 기술
새로운 기술에 대한 호기심이 많고 두려움이 없으며 개념부터 습득하여 활용이 빠릅니다.
문제가 발생한 원인을 파악하고 해결하는데 있어 논리적으로 사고하는 능력이 뛰어납니다
프로그래밍을 정말 좋아하며 개발하는 프로그램에 애정을 가지고 정성을 다해 만듭니다.
Programming Skills
Flutter, Dart
10
Android, iOS, Web, Windows 모두 네이티브 개발 경험과 배포 경험이 있습니다.
BLoC 또는 Provider, Riverpod를 이용해 상태를 관리합니다.
앱의 확장성과 유지보수성을 높이는 클린 아키텍처(Clean Architecture)를 적용하고 설계합니다.
상황에 따라 Dart Streams, RxDart를 적절히 이용해 비동기 형태로 개발합니다.
환경별로 Flavor(Android)/Scheme(iOS)를 설정하며 각각 환경별 앱이 별도로 설치되도록 관리합니다.
local - 서버와 앱을 동시에 개발할 경우 바로 로컬 서버로 접속하여 테스트를 위한 환경
mock - 서버가 없이도 데이터 구조가 정의되면 더미 데이터를 생성하여 업무를 진행하기 위한 환경
develop - 기본적으로 앱을 개발 및 테스트를 위해 구성되는 환경
staging - 사용자에게 배포되기 전에 운영 환경과 동일한 환경에서 내부 테스트 등을 위한 환경
production - 실제 사용자에게 배포하기 위한 환경
Android, iOS, Web, Windows로 빌드가 가능하며 아직 MacOS, Embedded는 빌드해본 경험이 없습니다.
FlutterFire의 Crashlytics, Remote Config, Cloud Firestore, Storage 등 연동 가능합니다.
다양한 스크린 크기와 해상도에 대응하는 UI를 구성하고, 커스텀 위젯을 개발해 일관성 있는 디자인 대응이 가능합니다.
Widget Customize, Component 제작 가능합니다.
flutter_test, integration_test를 이용해 단위 테스트와 통합 테스트를 진행합니다.
글로벌로 앱을 출시할 경우 다국어 처리 및 배포가 가능합니다.
Android, Kotlin
8
Java, Kotlin 모두 사용 고급 수준으로 사용합니다.
다양한 디바이스, 해상도 대응에 능숙합니다.
주로 MVVM 아키텍처로 설계하며 비동기 형태로 개발합니다.
ReactiveX(RxJava, RxKotlin) 라이브러리를 이용
Coroutine, Flow, LiveData, DataBinding을 이용
Dagger 또는 Koin으로 의존성을 주입합니다.
JUnit5, Mockito를 이용하여 유닛 테스트를 작성하고 실행합니다.
AndroidX, Retrofit2, Firebase BoM(Bill of Materials), Glide 등의 라이브러리를 사용합니다.
View Customize, Component 제작 가능합니다.
iOS, Swift
8
Swift는 중급으로 사용하며 Objective-C는 초급 수준입니다.
다양한 디바이스, 해상도 대응에 능숙합니다.
SwiftUI + Combine 사용하여 MVVM 아키텍처를 적용합니다.
Swinject를 이용해 의존성을 주입합니다.
XCTest로 필요한 부분만 간단하게 유닛 테스트(Given, When, Then)를 진행합니다.
Alamofire, Firebase, Kingfisher등의 라이브러리를 사용합니다.
View Customize, Component 제작 가능합니다.
Ionic, AngularJS
7
TypeScript, JavaScript 모두 중급 수준으로 사용합니다.
MVC 아키텍처를 적용했으며 RxJS를 이용해 비동기 형태로 개발합니다.
Media Query를 활용해 다양한 해상도를 반응형으로 대응합니다.
JavaScript, CSS 등으로 애니메이션 처리 가능합니다.
API Design
6
OpenAPI Specification을 준수하여 API를 설계합니다.
Swagger, Stoplight 등의 툴을 사용하여 형상관리 및 문서화합니다.
OpenAPI Diff 툴을 사용하여 변경 내역을 문서화합니다.
변경 사항을 원활하게 관리할 수 있는 버전 관리 전략과 확장 가능한 설계를 합니다.
NestJS, Node.js
9
TypeScript, JavaScript 모두 고급 수준으로 사용합니다.
모듈 단위로 구현하고 의존성 주입을 활용해 테스트와 유지보수가 용이한 구조를 설계합니다.
비교적 규모가 작거나 빠른 출시를 목표로하는 프로젝트에서는 도메인 주도 설계를 적극 활용합니다.
규모가 크거나 비지니스 로직이 복잡한 프로젝트는 확장성과 유지보수성을 높이는 클린 아키텍처를 적용합니다.
NestJS에서 제공하는 DI Decorator로 의존성을 주입합니다.
JWT로 Access Token, Refresh Token을 생성하여 사용자 인증 체계를 구축합니다.
상황에 따라 TypeORM, Knex를 이용해 데이터베이스 쿼리를 직접 작성하고 연동할 수 있습니다.
Object Relational Mapping을 위한 TypeORM, Prisma 사용 가능합니다.
Middleware, Guard, Pipe를 활용하여 유효성 검사, 인증, 로깅등을 처리합니다.
Middleware: 요청과 응답의 흐름을 제어하며, 공통 로직을 처리합니다.
Guard: 인증 및 권한 체크를 수행해, 요청에 대한 접근 제어를 구현합니다.
Pipe: 데이터 유효성 검사 및 변환을 담당하며, 입력 데이터의 무결성을 보장합니다.
Jest로 필요한 부분만 간단하게 유닛 테스트를 진행합니다.
Winston으로 로그를 남기고 오류 핸들러를 통하여 처리되지 않은 오류를 수집합니다.
Spring Boot, Kotlin
8
Java, Kotlin 모두 고급 수준으로 사용합니다.
Spring Boot에서 제공하는 전통적인 레이어드 아키텍처(Layered Architecture)를 활용합니다.
Spring Boot에서 제공하는 DI Annotation으로 의존성을 주입합니다.
JWT로 Access Token, Refresh Token을 생성하여 사용자 인증 체계를 구축합니다.
Object Relational Mapping을 위한 JPA 사용 가능합니다.
데이터베이스 쿼리를 직접 작성하고 연동할 수 있으며 MyBatis로 쿼리를 빌드하고 재사용성을 높입니다.
AOP를 사용하여 사용자를 검증하거나 데이터 유효성을 검사합니다.
Log4j2로 로그를 남기고 공통 오류 처리를 통해 처리되지 않은 오류를 수집합니다.
Docker
6
Dockerfile을 작성하고 이미지로 빌드할 수 있습니다.
모놀리식 아키텍처로 서버를 구성할 때 보안을 위해 데이터베이스를 격리하기 위해 사용합니다.
개발환경 구성이나 ABI(Application Binary Interface)별 다중 빌드 등을 위해 사용합니다.
CI/CD에서 컴퓨팅 환경에 종속되지 않고 빌드 환경을 구성할 때 사용합니다.
간단한 서버의 경우 docker-compose를 이용해서 서버 환경과 동일하게 구성하고 그대로 배포에 사용합니다.
AWS, Terraform
9
Infrastructure as Code
멀티 클라우드 환경에서도 활용 가능한 Terraform을 사용하여 인프라를 구축하고 관리합니다.
모듈화, 형상관리(Git), Terraform Cloud를 통해서 협업할 수 있는 환경 구축이 가능합니다.
AWS에 CloudFormation의 경우 적응기간이 필요합니다.
VPC/Networking
공용(Public) 서브넷과 사설(Private) 서브넷으로 분리하여 설계합니다.
여러 가용영역에 걸쳐 공용 서브넷과 사설 서브넷을 구성하여 고가용성을 보장하도록 설계합니다.
Site-to-Site VPN, VPC 피어링, Security Group, NACL을 활용한 네트워크 보안 및 트래픽 제어가 가능합니다.
공용(Public) 서브넷은 Internet Gateway, Bastion Host를 통해서만 접근하도록 설계합니다.
사설(Private) 서브넷에서 인터넷 접근이 필요할 경우 NAT Gateway를 통해 아웃바운드 통신하도록 설계합니다.
Route 53을 이용한 도메인 등록, 변경, 이전, 레코드 관리, 헬스 체크 및 장애 조치 구성에 능숙합니다.
CloudFront 캐싱을 활용한 빠른 컨텐츠 배포, 캐시 정책, 오리진 설정, 보안 기능 적용이 가능합니다.
Compute
EC2 기반으로 AMI 커스터마이징, 인스턴스 모니터링, 보안 그룹과 네트워크 ACL 설정이 가능합니다.
Lambda 함수를 통한 이벤트 기반 처리 및 서버리스 아키텍처 설계가 가능합니다.
Load Balancer/Auto Scaling
부하분산 및 고가용성으로 설계합니다.
헬스 체크로 서비스 불가능 상황에 대한 대비하여 설계합니다.
AWS Storage/Database
S3를 이용해 객체 스토리지 관리, 버킷 정책, 접근 제어, 버전 관리, 수명 주기 정책 설정이 가능합니다.
EBS를 적절하게 활용하여 데이터베이스(EC2 인스턴스에 배포한 경우), 스냅샷, 백업을 관리합니다.
Aurora Serverless v2(MySQL 엔진)로 관계형 데이터베이스를 구축한 경험이 있습니다.
EleastiCache(Redis 엔진)로 인증 및 캐시 데이터베이스를 구축한 경험이 있습니다.
CI/CD
CodePipeline으로 파이프라인을 구현합니다.
CodeBuild로 빌드 및 테스트를 자동화합니다.
CodeDeploy로 배포를 자동화합니다.
보안 설정
IAM을 이용해 사용자 또는 그룹별 역할, 정책 및 권한 적용이 가능합니다.
Azure
5
간단하게 모놀리식 아키텍처의 서버를 구축할 수 있습니다.
Jenkins
5
Github의 Webhook 이벤트를 감지하여 트리거를 걸 수 있습니다.
운영 환경과 동일한 환경에 구축하고 빌드를 구성한 경험이 있습니다.
배포는 Jenkins에서 ssh로 서버에 연결하여 배포했습니다.
빌드/배포 후에는 Incomming Webhook을 이용하여 슬랙과 같은 회사 메신저에 성공 여부를 공유합니다.
Github Actions
7
문서를 참조하여 워크플로우를 실행하는 다양한 이벤트 트리거를 걸 수 있습니다.
브랜치(ex:main, staging, develop 등..)별로 분기하여 처리 가능합니다.
Self-hosted runner 또는 Github Actions에서 제공하는 Virtual Host로 빌드하고 배포되도록 구축 가능합니다.
배포 후에는 Incomming WebHook을 이용하여 슬랙과 같은 회사 메신저에 Commit 내용을 공유합니다.
Git
9
브랜치 전략(주로 Git Flow)을 수립하고 코드를 관리합니다.
feature, hotfix, release 등 목적에 따라 브랜치를 생성하고, 관리하며 Pull Request를 통해 반영(Merge)합니다.
브랜치는 유일하게 구분될 수 있는 이슈 번호로 관리하며 다음과 같이 분류합니다.
master - 완료된 마일스톤 혹은 사용자에게 배포(release)된 코드가 관리되는 브랜치
hotfix - 긴급히 배포되는 패치를 위해 운영(master)에서 분기해서 바로 운영으로 병합되는 브랜치
develop - 개발된 기능(feature)을 공유하고 관리하는 브랜치
release - 배포(release)를 위해서 개발(develop)에서 분기하는 브랜치
feature - 기능 개발을 위해 개발(develop)에서 분기하는 브랜치
(Optional) staging - staging 서버의 배포 자동화를 위해 선택적으로 생성하는 브랜치
배포 후 장애가 발생할 경우 revert를 통해 작업 내역을 되돌립니다.
C/C++
7
FFmpeg Build(Static/Shared) 가능하며 Shell Script로 빌드합니다.
OpenCV Build(Static/Shared) 가능하며 Visual Studio로 빌드합니다.
Android NDK로 C/C++ 라이브러리 연동 및 개발 가능합니다.
C#
7
윈도우 API를 활용하여 어플리케이션 개발 가능합니다.
윈도우 동적(lib)/정적(dll) 라이브러리 개발 가능합니다.
Relational Database
9
모델링을 통한 데이터베이스 설계가 가능하며 ERD 및 테이블 정의서를 작성합니다.
데이터 중복을 최소화하고 무결성을 보장하기 위한 정규화, 성능 요구사항에 따른 역정규화 모두 능숙합니다.
데이터 무결성을 유지하기 위한 제약조건(기본키, 외래키, 복합키, 유니크키 등) 설정이 가능합니다.
SQL(DML, DDL, DCL, TCL) 모두 능숙하게 사용합니다.
실행 계획을 확인하고 인덱스 기반 조회, 임시 테이블 사용 제거 등 쿼리 리팩토링이 가능합니다.
실행 계획을 확인하고 쿼리가 사용하는 조건 기반으로 인덱스를 설계하고 적용 가능합니다.
수직 파티셔닝, 수평 파티셔닝 모두 적용 가능합니다.
Master-Slave Replication, Clustering 설정을 통해 데이터베이스의 가용성과 안전성 확보 가능합니다.
Express, Node.js
9
TypeScript, JavaScript 모두 중급 수준으로 사용합니다.
채팅, API 서버 개발 가능합니다.
Nuxt, Vue.js
6
간단한 홈페이지 및 반응형 웹페이지 제작 가능합니다.
다국어 처리 경험이 있습니다.
Laravel, PHP
4
간단한 홈페이지 제작 가능합니다.
API 서버 개발 가능합니다.
Flask, Python
3
간단한 홈페이지 제작 가능합니다.
API 서버 개발 가능합니다.
Rails, Ruby
3
간단한 홈페이지 제작 가능합니다.
API 서버 개발 가능합니다.
FFmpeg
5
정적 라이브러리, 동적 라이브러리 또는 실행 프로그램으로 빌드할 수 있습니다.
FFmpeg으로 decoding, demultiplexing, multiplexing, encoding 가능합니다.
FFmpeg으로 동영상 편집 및 화질 변경 등 가능합니다.
FFmpeg으로 metadata 입력 및 수정 가능합니다.
Other Skills
Linux
8
Adobe Photoshop
3