전체 글

전체 글

    Nginx와 Docker Compose로 무중단 배포하기

    Nginx와 Docker Compose로 무중단 배포하기

    안녕하세요, codedbyjst입니다. 이번에는 무중단 배포에 대해 이야기해보려 합니다. 다들 무중단 배포를 들어보신 적은 있으리라 생각이 되지만, 이게 왜 필요한 걸까요? 이를 저희 팀이 겪은 상황을 통해 알려드리려 합니다. 뭐가 문제였나요? 저희 팀은 Github Action을 통해 CI/CD를 적용해놓은 상태입니다. 따라서 PR이 승낙되면, 자동으로 빌드, 테스트 및 배포가 진행되도록 구성되어 있습니다. 따라서 배포를 할 때에는 늘 Github Action을 보면서 마음의 평온을 얻고 있었습니다. 직접 손으로 옮길 필요도 없고, 볼 때마다 뿌듯해지는 게 이 맛에 CI/CD 파이프라인 구축하는구나 싶습니다. 그런데 분명 문제없이 배포는 매번 성공하는데, 프론트엔드측에서 가끔 문의가 들려옵니다. 바로 ..

    Certbot HTTPS용 SSL 인증서 발급 / Nginx로 적용하기

    Certbot HTTPS용 SSL 인증서 발급 / Nginx로 적용하기

    안녕하세요, codedbyjst입니다. 이번엔 HTTPS 배포를 위한 첫 단계로써, API 서버에 HTTPS를 적용하는 방법을 알려드리도록 하겠습니다. SSL 인증서는 어디에 있는가? 우선 시작하기에 앞서, SSL 인증서가 어디에 존재하면 되는지 생각해보겠습니다. 예를 들어, 저희가 ohmycarset.com 이라는 도메인을 구매했다고 생각해보겠습니다.(정확히는, '빌린' 것이지만, 그냥 구매했다고 하겠습니다.) 도메인을 구매할 수 있는 곳은 다양하기에, 꼭 AWS Route 53이 아니더라도 가비아, 클라우드플레어 등의 업체에서 구매하셨을 것입니다. 이 때, SSL 인증서는 어디에 있으면 될까요? 해당 구매한 업체의 설정창에서 등록하면 되는 걸까요? 일종의 A, CNAME 등의 레코드처럼 그냥 등록하면..

    스프링 부트 CORS 설정법 정리

    스프링 부트 CORS 설정법 정리

    안녕하세요, codedbyjst입니다. 이번에는 스프링 부트에서 어떻게 하면 CORS를 설정할 수 있는지, 그리고 문제가 발생한다면 그 이유가 무엇인지 말씀드리려 합니다. 본 글은 스프링 부트에서의 트러블 슈팅에 집중하고 있으므로, CORS 자체의 이해를 위해선 아래의 글을 참조해주세요. https://developer.mozilla.org/ko/docs/Web/HTTP/CORS 교차 출처 리소스 공유 (CORS) - HTTP | MDN 교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라 developer.mozilla.org ..

    Spring Boot + Redis Cache 사용법 정리

    Spring Boot + Redis Cache 사용법 정리

    정합성이 크리티컬하지 않고, 로직 처리에 시간이 오래 소요되는 경우 캐싱을 이용해 처리시간 문제를 해결할 수 있습니다 (물론 SQL/DB레벨 최적화가 최우선입니다!) 그런데 다른 블로그 글들을 따라하니 Cannot construct instance of... 오류가 많이 발생해서, 동료 개발자들에게 도움이 되도록 해결한 내용을 정리했습니다. 기본 참조 자료 : https://kim-oriental.tistory.com/28 1단계 : 의존성 추가 build.gradle : implementation 'org.springframework.boot:spring-boot-starter-data-redis' 2단계 : Redis 서버 Host, Port 정보 입력 application.properties : s..

    [naver-sens 활용 가이드]

    [naver-sens 활용 가이드]

    github 주소 : https://github.com/jst0951/naver-sens GitHub - jst0951/naver-sens: Naver Cloud Platform SENS(Simple & Easy Notification Service) python wrapper Naver Cloud Platform SENS(Simple & Easy Notification Service) python wrapper - GitHub - jst0951/naver-sens: Naver Cloud Platform SENS(Simple & Easy Notification Service) python wrapper github.com 안녕하세요. naver-sens의 개발자, codedbyjst입니다. 본 가이드에서..

    [Fastapi]파라미터 올바르게 다루기

    [Fastapi]파라미터 올바르게 다루기

    지난 글을 통해 fastapi에서도 pymysql을 이용해서 DB와 통신이 가능하다는걸 확인했습니다. 이어서 CRUD를 구현해야 하는데요, fastapi에서 파라미터를 다루는 것에 대해 정리된 곳이 많지 않아 한 번 정리가 필요할 것 같습니다. 기존에 다루던 방법 Fastapi는 구현 철학에 따라, 대충 만들어도 '그냥 작동되는' 구조를 띄고 있습니다. 하지만 더욱 안정적으로 구성하고, 추후 문서화 작업에서 이해하기 쉽도록 하기 위해선 더 좋은 방법이 있습니다. 1. path(type) from fastapi import FastAPI app = FastAPI() @app.get("/items/{item_id}") def read_item(item_id): return {"item_id": item_id..

    [Fastapi]sqlalchemy말고, pymysql로 데이터베이스(Mysql)와 통신하기

    [Fastapi]sqlalchemy말고, pymysql로 데이터베이스(Mysql)와 통신하기

    API 서버를 개발하다보면, 반드시 DB와 통신이 필요한 순간이 찾아오게 됩니다. 애초에 대부분의 API 서버는 DB와 연동하여 작업하기 위해 만들게 되니까요. 하지만 DB와 통신하기 위해 직접 규약서를 읽고 순수 TCP 통신으로 구현하는 것은 그닥 좋지 않은 생각입니다. 그럴거면 파이썬을 쓰기보단 전부 C로 다 짜는게 낫지 않겠어요? 이와 같은 생각은 저희만 하는 건 아니기에, DB와 통신하는 일은 보통 2가지 방법 중 한가지를 택하게 됩니다. DB와 통신하는 두 가지 방법 1. pymysql과 같은 DB 통신 보조 라이브러리 활용 https://github.com/PyMySQL/PyMySQL GitHub - PyMySQL/PyMySQL: Pure Python MySQL Client Pure Pytho..

    [4080 에러] VPN, 직접 만들고 말지!

    [4080 에러] VPN, 직접 만들고 말지!

    Introduction 안녕하세요, codedbyjst입니다! 이번에는 개발과정 중 수많은 매크로들을 좌절에 이끈... 4080 에러의 해결책에 대해 이야기해보려 합니다. 4080 에러가 뭐죠? 우선 4080 에러가 어떤 것인지부터 알아야겠죠! 4080에러는 최근 카카오게임즈측에 의해 추가된 에러로서, 발동 조건과 영향은 아래와 같습니다. 발동 조건 : 단시간 내에 약 100회(8/7 현재는 약 10회)의 계정 생성이 이루어진 경우 발동 후 영향 : 일정 시간(약 12시간~24시간)의 IP밴 즉, 리세마라를 하다 보면 자연스럽게 밴을 당하고... 더이상 계정 생성을 못 하도록 막는 에러 코드입니다. 밴을 당하는 시간이 상당히 길기 때문에, 매크로가 빨라져도 아무런 장점이 되지 못하도록 막는다고 볼 수도 ..

    [스크린샷] 더, 더 빠르게!

    [스크린샷] 더, 더 빠르게!

    Introduction 안녕하세요, codedbyjst입니다! 프로그램 작동 영상을 확인해보신 분이라면 아마 이 생각이 가장 먼저 드셨을 겁니다. ✈️'빠르다!'✈️ 예 맞습니다, 정말 빠릅니다! 원하는 목표가 도출되지 않았을 시 전체 루프 1회 실행 시간은 약 2분 정도로, 기타 다른 매크로와 비교해도 거의 최고 수준의 속도를 보입니다. 그런데 대체 어떤 방식을 이용했길래 이렇게 빠른 걸까요? 사실 루프 세분화, greedy한 동작 등 여러 부분에서 실행시간을 단축시키기 위해 노력한 부분들이 있지만, 가장 시간 단축에 영향을 크게 준 것은 바로 '스크린샷' 기능의 구현 방식입니다. 이번에는 개발 과정 중에 가장 연구에 시간이 많이 투자된 '스크린샷' 기능에 대해 이야기해보려 합니다. [첫번째 접근] 아..

    [Main]우마무스메 리세마라 codedby.jst

    [Main]우마무스메 리세마라 codedby.jst

    Introduction 안녕하세요, codedbyjst입니다! 지난 돈복사닷컴 이후로 정말 오랜만에 뵙는 것 같습니다. 아무래도 학교를 다니다보니 개발할 시간적 여유가 부족해서 소홀해진 것 같습니다...ㅠㅠ 기존의 돈복사닷컴도 작동이 제대로 되지 않았던 것을 확인하고, 미작동하던 부분은 고쳐놓았습니다! 괜찮으시다면 한 번 확인해주세요! 이번에 개발한 것은 최근 가장 인기 게임인 우마무스메의 리세마라 매크로입니다. 마침 방학을 한 시점에 우마무스메가 한국에 정발하게 되어 플레이해보았는데, 정말 재밌더라고요. 그런데 몇 주 뒤에 사기 서포트카드인 '블랙 키타산'이라는 캐릭터가 출시하니 리세마라를 준비하라고 하더군요. 그래서 다른 분들이 만들어주신 매크로로 한 번 테스트해봤는데, 각자 약간씩 단점이 있어 마음..