프로젝트34 부스패치 #2. 크롤링 OOP 구조 변경, Asyncio 적용 이전 포스팅에서 역할에 맞는 클래스를 설계했습니다. [사이드 프로젝트] 크롤링 마이그레이션, Pandas CSV 용량 줄이기 - Parquet 으로 1/10 용량으로 압축하최근에 사이드프로젝트 백엔드를 작업하다, 데이터 작업도 같이 맡게 되었습니다. 기존엔 프론트엔드 개발자인 형 혼자서 담당했는데, 개발 리소스를 분산하고자 배우고 있네요. ☺️ 데이터를itchipmunk.tistory.com그 중 아래 클래스를 만들었는데요~✅ Loader : 일감 가져오기✅ Scheduler : 일감 분배하기✅ Scrapper : 분배된 일감으로 수집하기❌ Storage : 데이터 저장하기❌ Uploader: 외부 스토리지로 업로드하기어젯밤 만들지 못한 Storage, Uploader 클래스를 만들어봤습니다.뿐만 아니라.. 프로젝트/장기 프로젝트 2024. 3. 28. 부스패치 #1. 크롤링 마이그레이션, Pandas CSV 용량 줄이기 - Parquet 으로 1/10 용량으로 압축하기 최근에 사이드프로젝트 백엔드를 작업하다, 데이터 작업도 같이 맡게 되었습니다.기존엔 프론트엔드 개발자인 형 혼자서 담당했는데, 개발 리소스를 분산하고자 배우고 있네요. ☺️데이터를 크롤링하고 CSV 파일로 만들고 AWS S3에 업로드하는, 기존 크롤링 코드의 언어 마이그레이션 작업을 맡았습니다. 기존엔 JavaScript async-await 코드로 크롤링이 이뤄졌는데요.매일 수집되는 CSV 용량이 100MB 가 훌쩍 넘어가다보니 비용 문제가 발생했습니다.이를 해결하기 위해 Parquet 으로 압축하려는 시도를 했으나자바스크립트의 parquetjs 패키지가 현재 환경에서 동작되지 않는 이슈가 있었습니다.4년전이 마지막 업데이트다보니 호환이 되지 않는 것 같더라고요. 데이터 전처리 코드도 Python 의 .. 프로젝트/장기 프로젝트 2024. 3. 3. Swagger OpenAPI 3.0 에서 allOf 으로 확장해서 공통 응답 적용하기 Node.js + Express + TypeScript 로 이뤄진 프로젝트에서 OpenAPI 3.0 버전의 Swagger 패키지를 쓰고 있다. Swagger OpenAPI 3.0 은 다음 용도로 사용하고 있다. 클라이언트 OpenAPI Generator 을 통한 Type 코드 생성 ( 문서를 기준으로 Typescript 타입 객체가 생긴다..! ) 클라이언트를 위한 API 문서 용도 서버 테스트용(Postman 대체) 개발적으로 1번을 위한 목적이 제일 크다. OpenAPI 문서 파일을 공유하면 프론트엔드에 타입 파일을 만들어준다. 서버 문서를 보고 클라이언트에서 대응 가능한 타입을 일일이 만들어야 한다는 건... 여간 고통스러운 일이 아니다. 특히 타입스크립트는 컴파일을 위해 억지로라도(?) 타입을 만.. 프로젝트/장기 프로젝트 2024. 2. 4. [Node.js] 도메인 접속 오류 / Typescript Declare Global 오류 / EAI_AGAIN getaddrinfo 오류 해결 방법 어제 잠깐 조수로(?) 도와주고 있는 사이드 프로젝트에서 오류가 발생했다. 분명 얼마 전 까지 잘 되었는데 갑자기 도메인이 먹통되는 등 tsconfig 설정이 말을 안듣는 등 하더니, 이번엔 RDB 연결까지 안 되더라... 그만 죄 없는 노드를 탓해버리고 말았다. 도메인 문제도 역대급이었는데... 잘 되던 서버가 갑자기 안되었다. 무료로 SSL 인증서를 발급해주는 LetsEncrypt(Certbot) 이 이상이 생겼나 싶어서 제한 걸릴 때 까지 셋팅해보고, NginX 재설치도 해보고, 별의 별 거 다 해봤는데 해결이 안되었는데... 혹시나 싶어서 구매한 도메인 문젠가 싶어서 AWS Route 53 에 들어갔더니 인증 메일 기간이 지나서 다시 메일 요청하라는 메시지가 보였다...🤣🤣 덤으로 도메인은 중지되.. 프로젝트/단기 프로젝트 2024. 1. 25. [뮤즐리 이슈 해결] LetsEncrypt(Certbot) 도메인 인증서 만료 / 갱신 / 크론탭 등록 🚨 2023년 11월 24일 오후 2시 53분 경에 뮤즐리 서버에 접속 안 된다는 제보를 받았습니다! 처음 생각난 점은 저번에 AWS 계정을 다른 프리티어 계정으로 이전했을 때 도메인 만료가 생각보다 별로 안 남았다는 점이 기억에 남았는데요. 인프라를 이전하면서 인증서 만료에 대한 스크립트가 설정이 안되어 있어서 발생했습니다. 웹 페이지에서 인증서를 조회한 결과 역시나 만료일이 지났습니다. EC2 서버에 접속하여 LetsEncrypt(Certbot) 으로 도메인을 갱신했습니다. sudo certbot renew ... The following renewals succeeded: /etc/letsencrypt/live/api.muzily.app/fullchain.pem (success) 다시 접속한 결과 .. 프로젝트/장기 프로젝트 2023. 11. 24. Hustle #11. 처음 시작하는 사람도 작업할 수 있도록, 스프링 부트 개발 컨벤션 정하기 안녕하세요, 다람쥐입니다. 지난 포스팅에선 허슬의 프로젝트 구조를 잡아봤습니다. Hustle #10. 프로젝트 구조 잡기 안녕하세요, 다람쥐입니다. 저번 포스팅에선 Aquery Tool 으로 ERD 모델링을 했습니다. 2023.09.04 - [프로젝트/장기 프로젝트] - Hustle #9. Aquery Tool 으로 ERD 모델링하기 이번 포스팅은 허슬 프로젝트 구조 itchipmunk.tistory.com 이제 본격적인 개발을 시작했습니다. 오프라인으로 허슬 팀원들과 다 같이 모였는데요. 해야 할 작업을 분배했고, 다음 오프라인 모임 때 까지 개발을 해보자고 했습니다. 하지만 큰 난관이 있었습니다..! 😅 생각치도 못한 문제가... 그 다음 모임은 오프라인으로 서버 팀끼리 모였습니다. 역 근처 카페안의.. 프로젝트/장기 프로젝트 2023. 11. 22. 온라인 방탈출 기록지 프로젝트 후기 '샘' 이란 방탈출 은어를 아시나요? 방탈출 세계에서 '샘' 이란 은어가 있습니다. 샘은 아침샘, 밤샘을 뜻합니다. 방탈출 매장을 영업 외 시간인 이른 아침과, 밤(새벽)에 대관하여 모든 테마를 하는 걸 의미합니다. 주로 한 타임에 모든 테마에 입장할 수 있게, 테마에 맞게 인원을 구성합니다. 한 매장에 6개의 테마가 있다면, 3명씩 6팀으로 주최자 포함 총 18명이 함께 합니다. 샘을 하면 좋은 점은 단체로 입금하다보니 조금 더 할인을 받을 수 있다는 장점이 있습니다. 참고로 모든 매장이 대관이 가능하지는 않아요. 매장에 먼저 문의하여 해당 일정에 대관이 가능한지 확인해야 합니다. 방탈출 기록지가 있는 이유!? 샘을 가게 되면 꼭 한 분은 아래처럼 기록지를 출력해서 옵니다. 맨 윗 칸은 테마 사진과 테.. 프로젝트/단기 프로젝트 2023. 11. 22. [MOTI] iOS 시뮬레이터에서 애플 로그인 안되는 이슈 해결 안녕하세요. SwiftUI 초기 버전 (iOS 13) 에서 소셜 로그인으로 애플 로그인을 구현했습니다. 배포 후 언젠가부터 실기기에선 정상 동작하지만, 시뮬레이터에서 애플 로그인이 안되더라고요. 당시엔 원인을 모르겠고 일시적인 오류인 줄만 알았어요. 시간이 지나도 해결이 안되길래 구글링을 열심히 했었는데요. 저 뿐만 아니라 많은 사람들도 시뮬레이터에서 애플 로그인이 되지 않는 이슈 스레드가 많았습니다. 명확한 해결책이 없어 애플에서 고쳐주질 않는구나 싶어서 실기기로 테스트를 주로 했었습니다. 어쩔 수 없이 시뮬레이터로 테스트를 할 때엔 토큰을 직접 입력하고 넘어가며 테스트를 했었습니다. 최근에 구글링을 하던 중 SwiftUI 에서 애플 로그인을 지원하는 중이더군요. 기존 코드에선 직접 버튼 뷰를 만들고,.. 프로젝트/장기 프로젝트 2023. 9. 11. Hustle #10. 프로젝트 구조 잡기 안녕하세요, 다람쥐입니다. 저번 포스팅에선 Aquery Tool 으로 ERD 모델링을 했습니다. 2023.09.04 - [프로젝트/장기 프로젝트] - Hustle #9. Aquery Tool 으로 ERD 모델링하기 이번 포스팅은 허슬 프로젝트 구조를 잡으려고 합니다. 프로젝트 구조는 무엇일까? 프로젝트 구조는 프로젝트를 구성하는 폴더와 파일을 정리하는 방식입니다. 다른 백엔드 프레임워크에서는 정해진 파일명, 정해진 폴더명을 써야 하는 경우가 많은데요. 스프링 부트에서는 어노테이션만 붙이면 스캔하여 클래스를 찾을 수 있습니다. 따라서 프로젝트 구조는 정해지지 않고 마음대로 정할 수 있는데요. 그렇다면 어떻게 프로젝트 구조를 정해야 할까요? 허슬의 프로젝트 구조 허슬의 구성 요소는 다음과 같습니다. 컨트롤러.. 프로젝트/장기 프로젝트 2023. 9. 11. Hustle #9. Aquery Tool 으로 ERD 모델링하기 안녕하세요, 다람쥐입니다. 이번 포스팅은 ERD 모델링 포스팅입니다. 저번 포스팅까지는 AWS 인프라를 셋팅하거나 간단한 프로젝트 설정을 했습니다. 이제 팀원들 끼리 만나 테이블 설계를 해 볼 차례였어요. 허슬 프로젝트의 규모가 꽤 있어 제대로 된 테이블 모델링이 필요한 상황이었는데요! 처음에 만든 것과 다르게 기획이 바뀌어서 테이블이 또 바뀌기도 하고 개발하면서도 테이블이 바뀌기도 했는데요. 이번 포스팅에선 어떻게 설계를 했고 어떻게 수정 이력을 관리했는지 담았습니다. 저희... ERD 모델링 해볼까요? 때는 바야흐로 7월달이었어요. 허슬 프로젝트의 피그마를 처음 전달 받았을 때 느꼈던 점은 규모가 꽤 크다, 정도였어요. 적어도 도메인이 네 개 이상이었어서 쉽지 않겠다, 라는 느낌이 들었는데요. ERD.. 프로젝트/장기 프로젝트 2023. 9. 4. Hustle #8. Jasypt 암호화 라이브러리 적용 안녕하세요. 저번 포스팅까지는 AWS 인프라 설정을 세 차례나 진행했습니다. AWS 인프라 설정에 꽤 긴 시간을 공들였는데요. 이번 포스팅에선 허슬 프로젝트에 Jasypt 암호화 라이브러리를 적용해보고자 합니다. 왜 Jasypt 암호화 라이브러리를 적용하나요? 지난 번에 스프링 부트에서 Jasypt 암호화 라이브러리를 적용해 본 포스팅을 올렸습니다. 2023.06.20 - [Back-End/Spring 자료실] - [스프링 부트] Jasypt 설정 암호화로 Github Repo 에 안전하게 올리기 [스프링 부트] Jasypt 설정 암호화로 Github Repo 에 안전하게 올리기 안녕하세요. 스프링 부트에서 Jasypt 라이브러리를 사용해서 설정을 암호화하는 방법을 알아봅시다. application.ym.. 프로젝트/장기 프로젝트 2023. 9. 3. Hustle #7. (3부) AWS 인프라 초기 셋팅 - HTTPS 적용, 리버스 프록싱 설정, CloudFront 배포 안녕하세요. 저번 포스팅에선 AWS 아키텍처를 설계하고 관련 리소스를 생성했습니다. 다음 인프라 셋팅으로 세 가지 작업만을 남았습니다. 도메인 인증서를 발급하고 NginX 으로 HTTPS 를 적용합니다! NginX 설정하는 김에 스프링 부트 서버 포트로 리버스 프록싱을 설정합니다. 저번에 가비아에 AWS Route53 네임 서버를 적용했는데요. 이를 기반으로 ACM 인증서를 발급하고 CloudFront 까지 배포해보도록 하겠습니다. HTTPS 프로토콜을 적용해야 하는 이유 HTTPS 프로토콜을 적용하여 주고 받는 데이터를 암호화합니다. 중간에 데이터가 탈취 되어도 내용을 해독할 수 없게 만듭니다. 토큰 정보 등 중요한 데이터를 보호하여 보안을 강화합니다. 도메인 인증서 발급 Https 를 적용하려면 인증.. 프로젝트/장기 프로젝트 2023. 9. 1. 이전 1 2 3 다음