목록 KimJinHwan/Project (15)
배경재밌는 일이 들어왔다. 회사의 카메라 기기를 외부 플랫폼에서 스트리밍 될 수 있도록 만들어야 했다. 회사에 DevOps가 따로 없다 보니 클라우드를 직접 만지고 비용을 관리한다. 특히나 우리 회사는 홈 카메라도 판매하기에 스트리밍을 위한 데이터 통신비가 얼마나 큰지 안다. WebRTC를 위한 모든 데이터가 서버를 거친다면, 그 속도도 문제지만 통신 비용도 클 것이다. 그래서 노드 간 직접 연결이 중요하다. 나는 여기가 재밌었다. 이 글 자체도 사실 이걸 얘기하고 싶었다.배포되지 않은 로컬 네트워크의 기기끼리 어떻게 서로를 찾아 직접 통신하는지 궁금했다. NAT 동작 과정P2P 통신의 원리를 이해하기 위해선, NAT의 동작 과정을 이해해야 한다.NAT 내부에서 외부에 요청을 보내면, NAT는 연결 정..
배경회사 레거시 서비스들의 배포, 인프라 관리가 많이 아쉬웠다. VM 여러 개에 Jar 파일을 직접 배포하는 식이었고, 로깅은 파일로 확인, 매트릭 모니터링, 배포 자동화는 전혀 안되어 있었다. 매트릭을 모니터링하기 시작했고, Loki와 CloudWatch로 로그를 수집, 검색할 수 있도록 하였다. 자잘한 개선들과 자동화를 꾸준히 만들어왔지만, 근본적인 문제들은 결국 개선되지 않고 있었다.// 기존 제약 사항1. 서비스가 다운되면 직접 확인하고, 배포해야 했다.2. 애플리케이션 리소스가 VM 타입에 제한적이었고, 서비스가 VM의 상태에 의존되었다.3. 헬스 체크와 이를 바탕으로한 라우팅 규칙 수정이 수동적이었다. 급한 프로젝트들을 어느 정도 정리하고 팀에 시간이 생겼다. 현재 운영 중인 인프라들을 개선하..
파일업로드 속도 문제'FE -> BE -> S3' 으로 사진을 업로드하고 있는데, 큰 패킷 전달이 두번이다 보니 업로드 속도가 너무 느리다. S3 업로드가 아니라 애초에 사이즈가 큰 요청이 오가는 시간 자체가 느린 것을 부하 테스트로 확인했다. 1MB 파일, 100명의 동시 요청 테스트에서 단순히 서버에서 MultipartFile 로 첨부 파일을 응답 받는 것만으로 응답 평균 시간은 200ms 가 걸렸다. 클라이언트에서 직접 S3 업로드파일 전달에 필요한 비용을 낮추고 서버의 요청 처리 속도를 개선하기 위해 클라이언트에서 직접 S3에 사진을 업로드한다. 프론트엔드에서 백엔드 서버로 이미지 파일이 전송되는 비용을 아낄 수 있다. 허용된 path에, 허용된 용량만큼만 업로드 할 수 있도록 S3 Pre-si..
Simple-auth 이번에 만든 simple-auth는 Spring 환경에서 사용자 토큰 인증, 재발급 처리를 돕는 라이브러리이다. Spring에서 제작하여 사용자 측의 간단한 빈 설정만으로 관련 빈 들이 자동 등록되어 바로 사용할 수 있도록 하고, Jitpack 으로 배포하여 gradle, maven에서 쉽게 의존성으로 추가 할 수 있도록 하였다. - 핸들러에 어노테이션을 붙이는 것으로 인증이 필요한 api 를 간단히 구분할 수 있다.- JWT 토큰을 인증하고 필요시 refresh 토큰으로 재발급한다. - 토큰의 Payload를 직접 정의하고, 핸들러에서 argument로 받을 수 있다.- Refresh 토큰을 만료시킬 수 있다. 이 글에선 왜 이 라이브러리 제작이 필요했는지, 사용 예시와 개발에서 ..
JNI-JellyBean-HBE-SM5-S4210하드웨어 드라이버를 수정하고, 안드로이드 커널에 포함/빌드하여, 보드 내 임베디드 하드웨어를 제어한다. JNI를 이용하여 시스템 콜을 호출, JVM 환경 안에서 수정된 드라이버로 하드웨어를 제어한다. BootLoaderPC에서 전원이 켜지면 ROM의 BIOS가 로드되고, BIOS는 미리 설정된 부팅 순서대로 저장 장치의 부트로더를 로드, 실행하게 된다. 부트로더는 하드웨어를 초기화하고, 커널을 메모리에 적재하는 것으로 운영체제가 구동된다. 저장 장치가 다수인 PC와 달리, ARM 임베디드 시스템에선 단일 플래시 메모리에 BootLoader, Kernel 이미지, 사용자 파일과 App Storage가 존재한다. 이런 임베디드 시스템의 경우 BIOS가 아닌 플..
Web server with socket APISocket API를 이용하여 Http 형식의 요청을 처리, 응답할 수 있는 웹 서버를 제작한다.github : https://github.com/ecsimsw/multiplexing-server Steps1. Socket API를 구현한 간단한 Socket Server를 제작한다. - Socket server를 구현하고 client 연결, 메시지를 처리한다. - Http 요청, 응답 포맷을 확인하고 Socket Server가 이를 해석, 처리, 반환할 수 있도록 한다. - Jsoup을 이용하여 html 파일을 변환, 사용자의 접근에 따른 동적인 페이지를 반환한다.2. Multi-Threading을 이용한 비동기 요청 처리를 구현한다.3. Sele..
클릭 위치가 부채꼴 안에 포함되어 있는지 알고 싶어요! 옆 회의실에서 '프롤로그'팀이 수학 문제 푸는 거를 보고 재밌어 보여 나도 참여해보았다. 라이브러리 없이 직접 확률에 따른 사잇각을 구하고 영역 클릭시 해당 내용을 확인할 수 있는 기능을 구현 중이었고, 사용자 클릭 이벤트가 주어졌을 때 그 좌표가 해당 영역에 포함되어 있는지 확인할 수 있는 로직이 필요했다. 1. 클릭 범위 확인 우선 클릭할 수 있는 범위가 맞는지를 확인했다. 아래 그림에서 빨간색으로 표시한 부분을 말한다. 간단히 작은 원보다 밖에 있고, 큰 원 안에 있는지를 확인하면 된다. 2. 각도 확인 이번에는 좌표가 A 영역 부채꼴 안에 포함되었는지를 확인할 것이다. 영역 시작 선을 a, 영역 끝 선을 b이라고 한다. x축과 a가 이루는 각..
Flyway 소개하기https://www.youtube.com/watch?v=pxDlj5jA9z4 DB MigrationDB Migration의 필요를 모를 수 있다. 솔직히 나는 몰랐다. 배포 후 데이터를 관리해본 경험이 없었고, 유지 보수 중 스키마 구조가 바뀌는 상황에 어떻게 대처하는지 생각해본 적 없었다. 사실 flyway를 검색하면 사용 방법이 아주 자세히 잘 나와있다. 그럼에도 서비스 유지 경험이 없는 학생들에게 '곧 이런 문제 사항이 생길 것이고, 이런 방법도 있더라~.'를 소개하고 싶었다. 후에 그런 이슈를 만났을 때, 'DB Migration 또는 Flyway 라는 키워드가 있었던 거 같은데~' 정도의 생각이 들면 이 글은 성공이다. 키워드 수준이라도 문제 해결의 방향을 알고 모르고의..