전체 글 29

API 응답 속도가 얼마나 빨라야될까? (페이지 로딩시간, API TPS, latency)

안녕하세요. 팀에서 최근 들어 API 최적화에 대한 논의가 이루어지면서, API의 응답 속도에 대한 기준과 논리가 필요하여 몇 가지 찾아 정리해보았습니다. 왜 API 응답 속도가 빨라야 할까요? 사용자가 서비스를 기다리는 페이지 로드 시간이 곧 비용이기 때문입니다. 긴 페이지 로딩 시간은 서비스 트래픽과 전환율에 악영향을 줍니다. (자료가 과장됐거나 정확하지 않을 수는 있겠지만, 일관된 언급이 신뢰성을 준다고 생각합니다.) 기존에 페이지 로드 시간과 이탈율에 대한 자료가 많아서, 이를 바탕으로 정리해보았습니다. 구글: 3초 이상의 페이지 로딩시간이 걸릴 경우, 53%의 모바일 사용자가 이탈한다. https://www.thinkwithgoogle.com/consumer-insights/consumer-tr..

Infra 2023.01.05

typeORM에서 timezone 올바르게 적용하기

글로벌 서비스를 대비하여, typeORM 사용시 DB 타임존을 어떻게 적용할지 정리하였습니다. typeORM 사용시 다음 절차를 통해, 타임존을 올바르게 설정해 사용할 수 있습니다. DB 타임존 확인하기 typeORM의 타임존 설정 설정된 타임존 확인하기 DB 타임존 확인하기 DB의 타임존은 다음 쿼리로 확인할 수 있습니다. 현재 저는 AWS RDS mySQL을 사용하고 있어서, 파라미터 그룹 변경을 통해 타임존을 설정할 수 있어요. 참고자료: https://aws.amazon.com/ko/premiumsupport/knowledge-center/rds-change-time-zone/ select NOW(),@@global.time_zone, @@session.time_zone; 그럼 아래와 같이 결과가..

리팩토링 스터디: 1.1 ~ 1.4

리팩터링 2판 공부한 내용을 간단히 정리해보았습니다. 1.1 자, 시작해보자!예시 코드를 제시함극단의 공연 비용을 책정해주는 시스템 1.2 예시 프로그램을 본 소감프로그램이 새로운 기능을 추가하기 편한 구조가 아니면 → 먼저 기능을 추가하기 쉬운 형태로 리팩터링하고, 원하는 기능을 추가하기방을 먼저 치우고 새 가구배치를 하는 것과 동일수백 줄짜리 코드를 수정할 때, 먼저 프로그램의 작동 방식을 쉽게 알 수 있도록 여러 함수와 모듈로 재구성 1.3 리팩터링의 첫 단계리팩터링의 첫 단계는 코드 영역을 검사할 테스트 코드를 작성하는 것!!리팩터링에서 테스트의 역할은 중요하다리팩터링하기 전에 제대로 된 테스트부터 마련한다. 테스트는 반드시 자가진단하도록 만든다.원하는 내용을 소스코드와 테스트코드에 넣어두면 더블..

개발관련 도서 2022.09.21

4년차 초보 개발자의 성장 방법

개발자로써 밥을 먹은 지 4년차가 되었다. 일하면서 배울수록 모르는 것, 배울 것이 많이 보이고, 업무 범위와 책임이 커졌다. 특히 팀장으로써의 직무를 수행하면서 나, 개인에 대한 성장 뿐만아니라 팀의 성장, 회사의 성장을 고민하게 되었다. 동료 개발자들과 일하면서 “4년 동안 어떻게 실력을 키울 수 있었느냐”에 대한 질문을 많이 받았다. 이에 대해서 명확하게 말로 설명할 수 없었던, 정리되지 않은 것들이 있었고, 지금까지 개발하면서 성장하는데 도움이 됐던 것들을 정리할 겸 공유해보기로 했다. 나아가 개인, 팀, 회사의 성장이란 무엇인지 각자 나름대로 정의하고 공유해보는 시간을 가졌다. 그러나 성장의 방법은 너무나 다양한 것을 알기에 포스팅하기가 조심스러워 부디 참고만 해주실 것을 부탁드렸다. 자기에게 ..

생각, 회고 2022.09.07

AWS CI/CD 삼형제 (Code PipeLine, CodeBuild, CodeDeploy) 도입 리뷰

안녕하세요, 이번 포스팅에서는 AWS EC2 프리티어 환경에서의 서버 배포를 위해 AWS CodePipeLine, CodeBuild, CodeDeploy를 도입한 것에 대한 사용 배경 및 팁을 공유하고자 합니다. 개발 내용에 대한 리뷰를 목표로 작성하였으며, 실습을 통해 AWS CodeBuild, CodeDeploy를 적용하고자 하시는 분들은 다음 포스팅을 참고해보시길 추천드립니다. 이동욱 개발자님의 AWS로 배포하기 시리즈 (Java) - https://jojoldu.tistory.com/281 개발쨔 우미님의 AWS CI/CD 구축하기 (Node.js) - https://senticoding.tistory.com/91 사용 배경 - 프리티어에선 서버 빌드가 너무 무거워요.. 최근에 간단한 웹 프로젝트..

Infra/git | devOps 2021.06.14

[Node.js] Nodemon에서 tsc-watch 로 변경하여 빌드속도 개선하기

이번 포스팅에서는 nodemon을 사용 중이던 서버 환경의 트랜스파일 속도를 개선하여, 개발 생산성을 높인 경험을 공유합니다. 이슈 기존 서버 프로젝트에서 개발용으로 nodemon 을 사용하고 있었다. nodemon은, node.js 라이브러리인데, 서버 소스코드가 바뀌면 자동으로 서버를 재시작해준다. 때문에 소스코드 변경 후에 실행중인 서버를 종료하지 않아도 서버를 다시 시작하여 편리하다. 다만, nodemon은 치명적인 단점이 있는데, 다시 시작할 때마다 전체 소스코드를 트랜스파일 하기에 10초~20초 정도의 트랜스파일을 기다려야 한다. 간단한 로그 코드 한 줄을 추가해도 10초 이상 기다려야하니 답답할 노릇이었다. 해결 nodemon watch, nodemon incremental 등의 키워드로 검..

Docker로 워드프레스 설치하기 및 관련 이슈 정리

외주 작업으로 웹사이트를 개발했다. 주로 정적 컨텐츠를 제공하는 웹사이트여서 워드프레스로 구성했다. 혼자 기획, 개발, 디자인을 직접 진행하여, 2주에 걸쳐 웹사이트를 완성하였다.(와이어 프레임, 로고 디자인까지 다했다.. 디자인이 제법 빡세다;;) 본 포스트에서는 도커+워드프레스 인프라를 세팅하는 과정과, 그 과정에서 생긴 이슈들을 간단히 정리하였다. 작업 내용 백엔드 : AWS EC2에 docker+wordpress(php+apache), docker+mySQL 컨테이너 구성 프론트엔드 : wordpress 기획, 디자인 인프라 구성 절차 서버를 구성한다(저자는 aws ec2 사용) ssh -i xxx.pem ubuntu@xxx.xxx.xxx.xxx 도커를 설치한다. 다음 쉘스크립트를 한 줄씩 실행한..

Infra 2020.12.28

1년간 함께한 스타트업을 떠나며

들어가며 2020년 8월, 1년 간 함께한 회사를 떠나게 되었다. 근무했던 회사는 반려동물 등록 서비스를 웹 기반으로 제공하는 스타트업이다. 입사 후 6개월간 풀스택 개발자로, 남은 6개월을 백엔드 개발자로 일했다. 지난 1년간은 정말 쉼없이 달려왔던 거 같은데, 그 동안 일하면서 얻은 인사이트를 회고록으로 남겨놓고자 한다. 팀과 제품을 고려하여 개발해야 한다. 처음에 내가 생각했던 잘 하는 개발자란 주어진 기술적 요구사항을 빠른 시일 안에 처리해줄 수 있는 해결사라고 생각했다. 그러다보니 어떻게든 더 빠르게 필요한 기능을 구현하는 데 일하는 초점이 맞춰져 있었다. 스스로 개발자로써 생산성을 높이기 위해 많은 노력을 했다. 지금 회사에사 사용 중인 기술에 대한 서적을 공부하고, 관련 라이브러리나 모듈을 ..

생각, 회고 2020.08.31

글또 4기 모임을 마치며

2020년 약 반년 동안 진행한 개발 글쓰기 모임이 끝났다. 호기롭게 각오까지 해가며, 벌금없이 끝내리라 다짐했었지만 일과 병행하면서 개발블로그를 한다는 것이 쉽지 않았고 완벽하게 수행하지는 못한 아쉬움이 있었다. 하지만 개발 블로그를 운영하려면 우선순위를 어떻게 배분해야되는지를 배울 수 있었고, 글쓰기 습관에 시동이 걸렸으며, 많은 멋진 개발자분들과 소통할 수 있어서 좋은 시간이었다. 운영했던 개발 블로그 현재는 티스토리를 사용중이다. gatsby : https://marcosong.netlify.app/ fastpages : https://songmarco.github.io/dev/ tistory( 최종 채택 ) : https://gkqlgkql.tistory.com 작성한 글 글또를 시작하며 [da..

생각, 회고 2020.08.16

TypeORM 간단 사용법

평소 백엔드 개발할 때 자체적으로 개발한 쿼리빌더와 raw Query를 활용해 모델을 개발해왔다. 그러나, 쿼리를 직접 자주 짜야하며, 쿼리용 모듈을 코딩하는 번거로움이 있어서 ORM을 사용하면 코드치는 양을 줄임으로써 이러한 불편함을 극복할 수 있지 않을까 생각했다. 간단한 쿼리들은 ORM으로 빠르게 작업하고, ORM으로 커버되지 않는 복잡한 쿼리에 대해서만 raw Query로 대응하는 것이다. ORM 도입을 검토하고자 typescript + node.js의 대표적인 ORM인 typeORM과 Sequelize를 간단하게 사용해보며 비교해보기로 했다. 이번 포스팅에서는 그중 typeORM에 대해서 다루어보았다. TypeORM typeORM은 typescript, javascript 환경에서 사용하는 OR..