Projects

Projects

OAuth 2.0은 무엇이고 어떻게 적용할 수 있을까?

OAuth 2.0 Open Standard for Authorization 2006년 Twitter와 Google이 정의한 개방형 Authorization 표준 요즘 웹, 모바일 서비스를 이용하다보면 ~~로 로그인하기로 불리는 소셜로그인을 자주 찾아볼 수 있다. 이게 OAuth이다. 작은 서비스에서는 사용자의 정보를 안전하게 저장하고 관리하는 것은 큰 부담이다. 이 부담을 다른 큰 플랫폼(구글, 페이스북, 네이버 등)에 위임하여 이용할 수 있다. OAuth는 이 위임 과정을 위한 규약이다. 2.0 버전은 1.0 버전에서 발생된 보안 문제를 개선한 버전으로, 1.0 버전에서는 프로토콜로 2.0으로 업그레이드 되면서 프레임워크로 정의되고 있다. 표준 문서 (RFC6749) : https://datatrack..

Projects

AsyncLocalStorage를 이용해 Transaction 관심사 분리하기 (lines 40% 감소)

진행하는 프로젝트 특성상 DB 작업이 복잡하게 일어나지 않습니다. ORM에서 제공하는 트랜잭션, 쿼리문으로 충분한 수준입니다. 하지만 만약 DB 작업이 복잡해진다면 어떻게 해야할까요? 쿼리나 트랜잭션을 직접 관리해주는 것이 좋을 것이라 생각했습니다. 그래서 이번 프로젝트에서도 트랜잭션을 적용해보기로 했습니다. 프로젝트 Github 문제점 가장 기본적으로 트랜잭션은 이렇게 구현할 수 있습니다. const qr = this.getQueryRunner(); try { await qr.connect(); await qr.startTransaction(); await qr.manager.save(user); // 실제 쓰기가 일어나는 곳 await qr.commitTransaction(); } catch (e) ..

Projects

[코드실행기능 개발기 #2] 작업이 오래걸리는 요청을 어떻게 응답할까?

[코드실행기능 개발기 #1] 작업이 오래걸리는 요청을 어떻게 응답할까? 프로젝트에서 코드 실행 요청을 보내는 기능을 구현하고 있다. 클라이언트가 코드 실행 요청을 보내면 서버에서 그 코드를 실행해 결과를 알려주는 형태이다. 실행을 요청한 코드가 실행에 오 stop-thinking-start-now.tistory.com 위 글에 이어서 팀원들의 의견과 멘토님들의 의견을 모아 소켓을 이용한 방식으로 코드 실행 요청을 처리해보기로 했습니다. 코드 실행 요청 플로우는 다음과 같습니다. 코드 실행 버튼을 클릭합니다. api 서버에 소켓이 연결됩니다. 소켓 연결이 완료되면 소켓 아이디 값을 반환 받아 http POST 요청을 보냅니다. 이때 서버는 해당 서버에 연결된 소켓 정보를 Map 형태로 저장합니다. Map ..

Projects

서버와 클라이언트 간 쿠키 주고받기

로그인 기능을 개발하던 중 포트가 다른 두 서버를 띄워 테스트를 해보려했다. 그때 서로 쿠키가 전송되지 않는 문제를 발견했다! 3000번 포트에 접속한 위치에는 쿠키가 있는데 4000번 포트로 돌고있는 서버에는 쿠키가 전송되지 않았다. console.log로 쿠키를 출력해보았을 때 object null prototype이 출력된 것을 통해 확인해보았다. 이 때 쿠키 설정은 httpOnly이외에 모두 default였다. 왜 보내지지 않았을까 1. 도메인이 달라서? sameOrigin 정책과 쿠키에 사용되는 sameSite 정책은 다르다. GPT한테 두 정책의 차이점을 물어봤다 SameSite: SameSite는 쿠키의 속성 중 하나로, 웹 브라우저가 어떤 상황에서 쿠키를 전송할 것인지를 제어하는 역할을 합..

Projects

로그인 후 요청했던 페이지로 돌아가기

보통 웹서비스를 이용하다보면 다음과 같은 상황을 자주 마주한다. 로그인하지 않고 이용하다가 특정 기능을 이용하면 로그인이 필요해서 로그인창으로 이동되고 로그인을 마치면 원래 다시 작업하던 페이지로 돌아간다. 어떻게 이 기능을 구현할 수 있을까? 두 가지를 활용해서 생각보다 쉽게 구현할 수 있었다. request Header에 referer request session Referer Header 리소스가 요청된 주소 정보를 담고 있는 헤더 이 헤더 정보를 사용하면 서버에서는 이 위치로의 요청이 어디서 발생했는지 알 수 있어서 데이터 분석, 로깅, 캐싱에 활용할 수 있다고 한다. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer Sessio..

Projects

[코드실행기능 개발기 #1] 작업이 오래걸리는 요청을 어떻게 응답할까?

프로젝트에서 코드 실행 요청을 보내는 기능을 구현하고 있다. 클라이언트가 코드 실행 요청을 보내면 서버에서 그 코드를 실행해 결과를 알려주는 형태이다. 실행을 요청한 코드가 실행에 오래걸리는 코드이거나, 사용자가 많아서 내가 보낸 요청이 처리되는데 오래걸릴 수도 있다. 생각해보기 이럴 땐 어떻게 클라이언트에 응답을 줄 수 있을까? 생각해 본 방식은 두 가지가 있다. 하염없이 기다리기일단 polling은 주기적으로 요청하여 서버의 상태와 클라이언트 상태를 동기화 하기위해 사용하기 때문에 엄밀히 말하면 polling은 아니라고 생각한다.status Code는 408을 활용할 수 있을 것이다. 하지만 요청을 보내면 응답할 내용이 생길 때까지 서버는 대기를 하다가 지정한 시간 내에 응답이 발생하면 클라이언트에게..

Projects

certbot으로 HTTPS 설정하기

Ncloud로 Ubuntu 서버를 생성했고 Let's Encrpty와 certbot을 이용해서 https 설정을 해보려한다. Let’s Encrpty 는 기관이고, 이 기관을 통해서 무료로 TLS 인증서를 발급받을 수 있다. Certbot은 Let’s Encrpty에서 인증서를 발급받고 https를 활성화하는 오픈소스 소프트웨어이다. HTTPS란? 암호화 프로토콜을 거친 암호화된 HTTP 통신 이전에는 SSL(Secure Sockets Layer)으로 불렸지만 SSL 2.0에서 발견된 취약점을 보완하기 위해 재설계된 SSL3.0을 배포하며 TLS로 이름이 변경되었다. HTTP는 80 포트를 사용하고 HTTPS는 443 포트가 사용된다. what is https - cloudeflare 그림으로 쉽게 보는..

Projects

[MLOps] wandb sweep으로 하이퍼파라미터 튜닝하기 - jupyter notbebook에서 실행하기

모델을 만들때 가장 중요한 것은 learning rate, optimizer, dropout rate 등 최적의 하이퍼파라미터를 찾아 튜닝하는 것이다! 이 과정에서 도와주는 wandb라는 툴이 있다. wandb는 머신러닝 실험 도구이다. 여러 기능을 제공하는데 그 중 sweep 기능은 하이퍼 파라미터를 튜닝하느 과정을 돕는다. wandb 없이 튜닝했을때는 다음과 같이 후보군들 조합을 만들어 놓고 for문을 이용해서 튜닝했다. Wandb 사용시에도 크게 개념이 다르지 않다고 생각한다. Sweep config로 하이퍼파라미터들의 후보군을 설정하고 sweep agent에 sweep id를 전달하여 실행시킨다 편리한 것은 시각화가 잘되어있어 각 조합별로 성능을 비교하기가 편하다는 점이다! Wandb 사용 on ..

Heaea
'Projects' 카테고리의 글 목록 (2 Page)