본문 바로가기
  • 조금 느려도, 꾸준히
반응형

전체 글59

[개발자적 마인드] 백엔드의 관점 회사에 입사하고 1주일이 지났다. 그간 사내 핵심 비즈니스에 대해 이해하고, DB 구조 살펴보고, 코드 살펴보느라 정신없이 시간을 보냈다. 그러던 와중에 개발팀 요청사항 중 한 건을 맡아서 담당하게 되었다. 어드민 사이트 (CRM)의 데이터 일괄 변경 처리 기능을 추가하는 작은 태스크였는데, 이것을 확인했을 때 내가 할 수 있겠다 싶어 동료분께 말씀드렸고, 승인을 받았다. 처음에는 아무것도 모른 채 코드를 쭉 살펴보는데, 기존에 있는 api를 그대로 활용해도 될 것 같은 느낌이 든 것이다. 그래서 request body의 파라미터 스키마 검사하는 부분만 살짝 수정하여(새롭게 추가되는 데이터를 반영) PR을 올렸고, 로직은 변경할 필요 없이 결과가 잘 반영되는 것 같아서 내가 일을 마무리한 줄 알았다. 지.. 2021. 10. 25.
[회고] 나는 좋은 개발자를 향해 성장하고 있는가? 나는 지금껏 내 자신이 학습 속도가 빠른 편이라고 생각해왔고, 그것을 기반으로 새로운 기술을 습득하여 개발하는 데 주저함이 없었다. 개발을 시작한 2020년 3월부터 지금까지, c++, java, python, javascript(typescript), swiftui 등의 언어을 사용해 보았고, 해당 언어들을 이용하여 MFC app, Android, ML(keras, tf), React(native), Vue, ios widget, express, flask 등의 프로젝트들을 경험해 보았다. 현재 병특을 위해 입사한 회사에서는 php 기반의 slim framework 서버 개발과 Angular crm 프로젝트 개발 경험을 쌓고 있다. 물론, 언어는 도구일 뿐 중요한 것이 아니고, 프레임워크 역시 도구를 .. 2021. 10. 20.
포트폴리오 사이트 작성기 (React) # 사용 기술 - typescript - React - Redux (redux/toolkit) - Scroll Magic - email js # 소요 기간 약 5일, 초반 세팅(tsconfig, eslint, babel 설정 등)에 하루 정도 시간을 소요했고, 나머지 개발 관련 헬퍼(자주 사용하는 util 함수, 스타일 가이드라인, 개발에 필요한 커스텀 훅 등 미리 작성)구성에 약 하루 더 시간을 소요했다. # 동기 먼저 어디 가서 보여줄 나만의 포트폴리오 사이트가 필요했다. 당시 내가 원했던 포트폴리오 사이트의 최소 스펙은, 1. 우선 나에 대해 잘 표현할 수 있고 2. 내가 지금껏 해온 프로젝트들을 포괄적으로 보여줄 수 있으며 3. 포트폴리오 사이트를 통해서 내게 컨택을 할 수 있는 정도였다. 여기에.. 2021. 10. 14.
Next.js + mobile responsive [react-responsive] # Responsive web 리액트를 가지고 개발하면서 여러 기기의 디바이스 사이즈에 대응하여 반응형 웹 페이지를 만드는 방법에는 여러 가지가 있지만, css media query 말고 js 단에서 반응형 다이나믹 스타일을 구현하고 싶다면 대표적으로 react-responsive 라는 라이브러리가 있다. react-responsive 에서 대표적으로 제공하는 훅인 useMediaQuery 가 있는데, 사용 예시는 다음과 같다. const isMobile = useMediaQuery({ query: "(max-width: 767px)"}); // true or false 컴포넌트 내부에서 해당 훅을 호출하여, 위와 비슷한 방식으로 디바이스 종류를 나누어 스타일을 대응시키면 되는데, 보통의 SPA(sing.. 2021. 10. 12.
오랜만에 오랜만에 블로그에 글을 쓰는 것 같다. 그동안 나는 학교 수업과 스타트업 일을 병행하다가, 학교를 휴학 후 창업 활동에 전념하고 있다. 안정적인 직장은 나랑은 맞지 않는 것 같다. 그래도 지금은 어느 정도 경제적인 부분에서는 크게 부담이 없지만, 다시 군대도 가야 하고, 이 수익이 안정적인 것이 아니기에 끊임없이 성장을 추구해야 한다. 별개로, 오늘 여자친구와 이별을 했다. 좋게 헤어졌지만, 그동안 잘해주지 못한 부분이 가슴 한켠에 남아 늦은 밤이지만 편의점에 들러 소주 한 잔으로 못덜어낸 감정들을 홀로 덜어내고 있다. 이와중에 기술 블로그로 운영하던 여기에 들른 것도 웃기긴 한데, 어쩔 수 없는 내 성격인가 보다. 어렸을 때 부터 고민을 했다. 사람의 본질은 이성인가, 감성인가. 물론 둘 다 해당하는 .. 2021. 8. 6.
[Dlib][Cloud Run][Android] 치아 상태 점검 AI 서비스 배포 (기록용) # Environment - Docker (DockerFile 통한 패키지 의존성 및 빌드 명령 관리) - KNative (Cloud Run) - Cloud Registry (서버 컨테이너 저장 및 배포) - Cloud Run (서버리스 방식 무중단 컨테이너 업데이트 및 배포) - Flask (파이썬 서버 구축) - Tensorflow (치아 상태 점수화 모델 구축) - Dlib (얼굴 특징점 추출 및 입 영역 분리) - CV2 (이미지 데이터 전처리 및 영상 처리 기법을 통한 상태 판별) - AWS S3 (최종 결과 이미지 및 데이터 저장, 추후 데이터 분석을 위한 데이터셋 생성) - Android Studio (기능 구현을 위한 안드로이드 클라이언트 제작) : okhttp, retrofit(서버 통신.. 2020. 12. 4.
[Dlib][GCP] google cloud run 을 통한 이미지 AI 모델 배포하기 # Environments 필자의 상황 - 이미지를 분석하고 판단하는 AI 모델을 서버리스 or 그에 준하는 방법으로 배포해야 하는 상황 - Tensorflow, OpenCV, Dlib 등의 라이브러리를 사용 - 저장소는 S3 Storage, Google Cloud Storage를 사용 초기 결정 사항 - 서버리스 방법으로 Google Cloud Functions 를 쓴다. AWS Lamda 보다 편하게 배포가 가능하기 때문. (예를 들어 python package 종속성을 명시할 때 AWS는 Docker 환경에서 여러가지 작업을 해줘야 하나, GCFS 에서는 requirements.txt 파일로 명시가 가능 / 메모리의 용량 제한도 GCFS 가 더 크다.) - 사전에 구축해 놓은 딥러닝 모델은 불가피하.. 2020. 11. 30.
python csv 파일 데이터를 JSON 객체 배열로 변환 데이터를 수집하거나 공공데이터포털 등을 통해 csv 파일을 구축한 후, 이를 데이터베이스화 하는 과정에서 csv 파일을 json 객체 배열로 변환해야 하는 경우가 있다. 필자의 경우는 node js로 협업하는 백엔드 개발자에게 데이터를 넘겨주기 위해 csv 형식의 데이터를 json으로 변환하였다. 변환하는 코드는 간단하다. 다만 소소하게 한가지 문제가 생겼어서 글로 남기게 되었다. 변환 함수는 다음과 같다. def csv2json(input_file_path, output_file_path): with open(input_file_path, "r", encoding="utf-8-sig", newline="") as input_file, \ open(output_file_path, "w", encoding.. 2020. 11. 18.
시 - 바다에게 바다에게 화창했던 날 두 팔 벌려 나를 보며 달려오던 너 정작 굳어버린 내 발끝 앞에선 새하얗게 질린 채로 물러나던 너 안절부절 네 모습 조금은 재밌어서 한참동안 멍하니 지켜만 보다가 커져버린 네 마음 어느새 부담스러워 이젠 내가 한 발짝 물러나 버렸어 이리와, 안아줄게 날 향한 네 한마디 모른체 그렇게 널 바라만 보았어 풀죽어 떠나는 널 그렇게 보내고 유난히 서늘한 네 빈자리 걸어봤어 네가 마지막으로 남기고 간 미련이 내 발목을 붙잡아 헤어나올 수 없을것 같아서 너 참 질척인다며, 그대로 달아나 버렸어 그렇게 지금 눈 앞에 네가 다시 어른거리는 건 나만의 미련인가 봐. 2020. 8. 18.
[Android] Shared Preference 총정리 - 배열, 비트맵 까지 #사용 PreferenceManager.setString(Context, "your key", "data"); PreferenceManager.setStringArrayList(Context, "your key", ArrayList yourData); Bitmap loaded_image = PreferenceManager.getBitmap(Context, "your key"); PreferenceManager.clear(Context); // 다 삭제 package com.chana.footprint.data; import android.content.Context; import android.content.SharedPreferences; import android.graphics.Bitmap; imp.. 2020. 8. 7.
[Android] 뭔가 트렌디한, SlidingUpPanel Layout # Sliding up Panel Layout 요즘 나온 앱들 중 꽤나 UI 측면에 신경을 쓴 앱들은 대부분 이용하는 레이아웃이 아닐까 싶다. SlidingUpPanel Layout은 스와이프를 통해 숨겨져 있던 레이아웃을 펼치는 기능이 있다는 점에서 Drawer Layout이랑 비슷한데, AndroidX 에서 기본적으로 제공하는 Drawer Layout은 화면 좌측, 혹은 우측에서만 스와이프가 가능한 반면, SlidingUpPanel Layout을 이용하면 화면 하단이나 상단에서도 스와이프하여 숨겨진 레이아웃을 나타내는 것이 가능하다. 본 포스팅에서는 umano의 AndroidSlidingUpPanel 라이브러리를 이용하여 이를 구현하고자 한다. #Dependency umano 깃헙 으로 들어가서, 안.. 2020. 8. 7.
IPTIME 192.168.0.1 접속이 안되는 경우(1) Iptime 등과 같은 와이파이 공유기 설정을 위해서 192.168.0.1 을 주소창에 입력해서 들어가곤 하는데, 오늘 포드포워딩 설정을 위해서 들어가려고 시도하니 연결이 되지 않았다. 이런 경우 먼저 명령 프롬프트에 ipconfig를 입력해 나의 ip 정보를 확인한다. 위 사진 처럼 IPv4 주소 및 기본 게이트웨이 주소가 192.168.0.1 로 설정되어 있으면 접속에 이상이 없는데, 접속이 안되던 당시에는 앞서 말한 주소들이 사설 아이피(192.168.0.1) 이 아닌 다른 주소로 설정되어 있었다. (아마도 공인 ip 였을 것이다.) 하지만 주소창에 당시 기본 게이트웨이 주소를 입력해도 연결이 되지 않아서, ip 공유기 검색기 프로그램을 설치하지 않으면 접속이 아예 되지 않는 상황이었다. 접속을 위.. 2020. 8. 6.
반응형