함께 알아가는 IT 224

새로운 팀 주제 선정

이제 학원 기간도 끝났고, 학원에서 마음 맞는 사람끼리 팀프로젝트를 진행해보기로 했다.그래서 이제 주제 선정할거임.주제 선정.다들 미리 생각해오기로 했었음.일단 내 의견하나는 음악을 들려주면 코드를 분석해서 알아내는 것.-> 내가 음악 전공자라 내가 작곡을 하면서 불편했던 것을 서비스로 녹여본 것.--> 여기서 확장프로그램으로 뻗자면 사용자가 웹 페이지 내에서 음악을 들으면 코드 분석을 해준다. 많이 이용하려면 웹사이트로 접속해서 구독을 해라 이런 느낌.그리고 다른 하나는 웹페이지에서 음악을 듣고 검색해주는 것, (이거 이미 있음.)윤정이 의견은 유튜브에서 외국 댓글을 필터링해서 한국 댓글만 볼 수 있게 하는 서비스.-> 이것도 타겟층이 확실하게 있을 것 같다.근데 있음... 은서는 만화를 이미지로 검색..

내 소개 사이트 제작중 생긴 문제 해결.nginx 도메인 설정, https 적용 후 재배포

아 지금 한참 만들고 있는데 이왕하는거 내가 만든 API 연결해서 뭐 하면 좋겠다 싶어서 달의 위상 요청 후에 반환하고 그 정보를 띄우기로 했음.그래서 로컬 환경에서는 잘 되는데,이게 배포 환경애서는 안되길래 어? 왜지? 싶어서 보니까.https랑 http랑 통신이 금지되어있어서 안되는거임 ㅋㅋ아 개..여튼 그래서 걍 지금 바로 서버 열어서 nginx 띄우고 설정 빠르게 해볼까 싶어서 블로그도 쓰는중.바로 접속해서 docker 확인하고,여기서 docker-compse에서 nginx 설정 해주고,Let's Encrypt에서 SSL인증서 발급 받아서 넣어줄거임.아 이거 하다가 막혔는데 도메인 구입해야되네?그럼 IP로 발급받을 수 있는 방법을 찾아야지.Self-Signed SSL이라는 방법이 있으니까 이렇게 ..

Coding History 2024.12.20

DB 효율 테스트 (JMeter)

이게 배포한 API가 MariaDB를 사용중인데 조금 더 효율적인 DB가 없을까 생각을 하게 됨.그래서 대규모 데이터셋에서의 읽기/쓰기 성능이 뛰어나다는 PostgreSQL을 적용해보고 테스트, 그리고 그래프로 표시를 해볼까? 싶어서 한번 해보기로 했음.MariaDB도 처음부터 쓴게 아니고 MySql을 사용했었는데 대규모 데이터셋은 MariaDB의 InnoDB가 트렌젝션을 안전하게 처리하고, 동시성 제어가 뛰어나다는 정보를 들어서 채용해서 사용중이였음.그래서 이미 DB를 한번 바꿔본 전적이 있는데 내가 이걸 서술을 했었는지 안했었는지 기억이 안남..여튼 지금은 MariaDB과 PostgreSQL의 비교를 해보고 유의미한 차이가 있다면 PostgreSQL로 갈아탈 수도? 있는 글을 작성할거임.일단은 내 프..

Coding History 2024.12.15

팀플) 자동배포(무중단) 이후 구글 로그인 정상화

결론부터 말하자면 고쳤다.문제의 원인그래서 원인이 뭐였냐?백엔드가 https를 못알아먹는다. -> 이에 대한 설정을 추가함.그래도 안된다. -> 강제로 설정할 수 있게끔함.간단하게 말하면 이렇게 고쳤음.제일 처음엔 구글콘솔에 등록 하지 않은 줄 알았다. 그래서 가보니까 되어있네?그럼 뭐가 문제일까 싶어서 로그인 창을 보니까 개발자가 볼 수 있게 문제가 뭔지 보여주는 곳에서400 에러를 명시해주고 로그인 버튼을 눌렀을 때 나온 url을 보여주는데 여기서 http:///google/login/url뭐 이런식으로 되어있었음. 그러니까 난 nginx 초기 설정을 할 때 https 에 대한 설정을 끝냈는데 이상하게 로그인 버튼을 클릭하면 그게 해체가 된거.그래서 원인은 url이 이상하다. 였다.그래서 우째 고침?..

팀플) 자동배포, 무중단 배포 구현

사실 컨테이너로 해보고 싶어서 어제 하루종일 붙들고 있다가 포기하고 서버 컴퓨터 다시 생성해서 다시 처음부터 했다.괜히 일 벌려서 일 다시 하게 생겼네.우선 컨테이너로 왜 하려고 했냐면 나는 모든게 다 한 네트워크 안에서 돌아가게 하는게 지금의 배포 구성보다 더 효율적이지 않을까? 라고 생각했고 관리도 용이할 거라는 생각때문에 기존에 있던 자동배포 로직 자체를 싸그리 다 고쳐봤는데 이게 자동으로 업로드까지는 되는데 nginx에 코드로 도메인이랑 설정들 넣는데에서 계속 문제가 발생했다.(여기 릴리즈 보면 총 54번 시도해본거다. 지금도 서버 키면서 중간중간 비는 시간에 이거 작성중)지금 이걸 막 작성하고 있는 시간이 일요일 오후 7시 쯤인데 어제 한 오후 3시? 부터 시작해서 아침 8시까지 붙잡고 있다가 ..

팀플) 배포 준비. 도메인 -> 자동배포 구현

가비아에서 도메인 구입, 이번엔 안까먹고 타사 네임서버 작성함. (dnszi.com 네임서버 작성)오케이 구매 완료함.그니까 도메인 관리는 dnszi에서 할거임.여튼 구매 했으니까 다음으로는 배포 테스트에 대한 전략이 필요함.내가 배운대로 보자면 main이나 master브랜치 밖에 없었어서 push 할 시에 자동 배포 빌드가 이루어진건데 지금은 굳이 따지자면 협업중이고 그런식으로 접근하면 위험하다는 생각이 듦.그래서 이걸 develop 브랜치에서 파생하는 브랜치를 하나 더 생성하고 여기서 배포에 대한 테스트를 진행하면 좋겠다가 결론임.그래서 staging이라는 브랜치를 생성해서 develop을 pull 해왔음.이제 여기서 내 맘대로 좀 주물러보면 됨. 우선은 도커파일이 준비가 되어야하니까..우선은 도커파..

팀플) JWT 엑세스 토큰 쿠키로 관리.

리프레시 토큰은 Redis에서 중앙화 해서 관리하고, 엑세스 토큰은 지금 브라우저 스토리지로 관리중임.허나, 스토리지는 XSS공격에 굉장히 취약함. 사실 소셜 로그인이고 빼갈 정보가 이메일정도 밖에 없어서 대충이렇게 하려고 했는데 그래도 이왕하는거 완벽하게 하고 싶다는 생각이 들어서 쿠키를 도입하기로 함.그래서 백엔드에서 헤더에 json을 태워보내던 방식을 쿠키로 고쳤음.백엔드 수정사항 ->CustomOAuth2SuccessHandler 클래스에서 onAuthenticationSuccess에 기존 헤더에 JWT 태워서 리턴하던 로직을 쿠키로 보내주는 것으로 변경 (setHttpOnly 설정으로 XSS 공격에 대한 방어 설정함)AuthController클래스 생성해서 인증로직과 member 로직 완전 분리..

팀플) 디테일 수정 사항

프론트useUserLoction 함수 수정날씨 데이터 새로고침 문제 해결유저 위치 저장, 수정 로직 이슈 해결백엔드위치 삭제시 만약 즐겨찾기라면 초기화 로직 구현자잘한 문제가 발견될 때 마다 재깍재깍 수정중.아 그리고 첫 로그인 사용자에 대한 처리가 있으면 좋겠다는 생각이 들어서 어떻게 구현할지 고민을 좀 해봤는데 첫 로그인이라면 JWT에 뭐 new customer 같은 값을 태워 보내주면 되지 않을까라는 생각을 함.하는김에 이상하게 userId 태워보내던거 제대로 JWT 토큰에 추가함.첫 로그인 사용자에 대한 처리 함.이렇게 하고 기존 사용자에 대한 알람도 처리함.어떻게 했냐면 JWT에 isNewUser라는 참 거짓 하나 추가해서 첫 로그인인지 아닌지 판별하게끔 했음.여기 보면 이게 트루라서 작동한거...

팀플) 오늘 한 것.. (JWT 완전 도입 완료, 세세한 수정, 상세 페이지 CRUD)

일단 develop으로 머지 시키고 개꿀잠을 자버림. (학원 못감, 사실 너무 늦게 잔 것도 있고 무조건 해결하고 자야겠다 싶어서 감기기운도 좀 있고 머리도 아픈데 끝까지 붙들고 JWT 모든 문제 해결 이후, 기존 로직들이 유지되게끔 수정하고 잠.)근데 이제 팀원들이 머지하고 난 이후 서버가 돌아가지 않는다고 연락이 옴.디스코드로 한 4시간 붙들고 얘기를 했는데, 나는 아무문제 없이 잘 작동하는데 팀원들만 안되는 기이한 상황이였음.여기 보면 당시 어지러운 상황이 좀 남아있긴한데,,결론은 윈도우랑 맥의 차이기도 했고,,여튼 JWT인증을 위해서 나는 뭐 영어로 우리팀 개짱짱맨이고 아무도 막을 수 없으셈 이런걸 영어로 작성해서 Base64인코딩한 값을 넣었었음. 이 과정에서 맨 마지막에 =이라는 문구가 하나 ..

Swagger와 비슷한~ Flask-restx 파이썬 프로젝트에 적용하기

최근 스웨거를 배웠음. 그래서 내 파이썬 프로젝트에 적용해서 경로 명세서를 제공하면 아주 좋겠다는 생각이들었음,그래서 보니까 파이썬에는 Flask-restx라는게 있더라고?적용하러 가보자.pip install flask-restx && pip freeze > requirements.txt설치부터 진행했음.설치 이후에는 routes.py에서 블루프린트에 대한 설정을 추가해줌.# Blueprint 생성main = Blueprint('main', __name__)기존엔 이거밖에 없었는데 from flask_restx import Api, Resource, reqparse# Flask-RestX API 객체 생성api = Api(main, version='1.0', title='Astronomical Event..