구글 클라우드 스터디잼 - 쿠버네티스 입문 후기를 남긴다. 쿠버네티스에 대한 개념 공부와 더불어 무료로 크레딧을 제공하여 실습을 병행할 수 있다는 점이 큰 장점이라 생각하여 참여하게 되었다. 수료 조건은 Kubernetes in Google Cloud를 완료하면 된다. 단순히 명령어만 따라하면 매우 빠르게 끝나지만 중간 중간 구글 클라우드에서는 ~ 식으로 쿠버네티스를 사용한다는 내용을 링크를 통해 제공하는데 해당 부분이 핵심이자 어려웠던 부분이라고 생각한다. 그래서 단순 명령어 수행을 따라 가는 것 보다는 쿠버네티스 개념 공부와 더불어 어떻게 클라우드 서비스 제공자들이 활용하는 지를 잘 확인하면 좋을 것 같다. 아래의 6개 섹션으로 구성되어 있으며 어떻게 공부하냐에 따라 걸리는 시간은 천차만별인 것 같다..
해커랭크는 국내 백준 온라인 저지와 유사한 글로벌 온라인 코딩 플랫폼이다. 알고리즘, 자료구조, 데이터베이스, 인공지능, REST API 등 광범위한 도메인을 제공한다. 또한 대부분의 언어를 지원하여 범용성이 좋다. 백준과 차이점이라면 온라인에서 코딩을 하고, 이를 위한 템플릿 코드? 가 제공된다. REST API 코딩 테스트를 대비하기 위해 해커랭크를 사용하게 되었다. 연습을 위한 토픽에 REST API가 없는 것 같아 바로 Certificate를 진행하였다. REST API Certificate에는 Intermediate와 Advanced가 있다. Intermediate로 진행했고 두 문제가 나왔다. 어렵다기 보다 바로 해보기에는 다소 생소할 수도 있을 것 같다. 그래도 서버 개발을 해봤다면 풀만한 ..
중간고사 + WebRTC 프로젝트 + 코테 + 자소서 + KCC 학부생논문 4월에도 다양한 일들이 있었다. 전체적으로 바쁘기 보단 중간 중간 이슈들이 있었던 느낌? 이번 달은 다양한 이슈들이 존재했지만 틈틈이 공부하고 프로젝트를 진행할 수 있었던 것 같다. 그리고 자소서도 써보고 코테도 쳐보면서 데이터를 조금씩 쌓아가는 느낌이었던 것 같다. 이번 달 여러 경험을 통해 코테랑 CS 공부가 매우 안되어 있다는 것과 코테랑 CS가 기반이 되어야 프로젝트에 대해 이야기 할 수 있다는 것을 깨닫게 되었다. 그리고 연구실에서 KCC 한국컴퓨터종합학술대회에 학부생 논문을 쓰게 되었다. 두 번째 논문이라 조금 늘은 것 같긴 한데 "진짜 진짜 다음에 쓰면 잘 쓸 수 있을 것 같은데 .." 하는 아쉬움이 있다. 4월 성취..
같은 과 학생들과 함께 프로젝트 팀을 구성하여 팀 프로젝트를 진행하게 되었다. 특정 문제를 해결하는 것보다 기술적 능력을 향상 및 다양한 기술을 경험이 목표이다. 세부 주제는 WebRTC기반 스터디 그룹 프로젝트이다. 주요 구현 목표 미디어 / 시그널링 서버를 통한 WebRTC 스터디 WebSocket을 활용한 접속 상태 On/Off 버튼을 통한 실시간 사용자 공부 시간 관리 실시간 데이터를 관리하기 위한 상태 관리 서버 그룹 채팅 아키텍처 미디어 & 시그널링 Client끼리 WebRTC를 하기위해 시그널링 서버를 통해 SDP 및 ICE Candidate 정보 전달 (COTURN을 통해 STUN 서버도 구축) 이렇게 받은 정보를 토대로 미디어 서버를 통해 WebRTC 통신 Client 들의 방 입장과 퇴..
개강 + WebRTC 프로젝트 + 자소서(삼성 SDS, 카카오 테크 캠퍼스) 3월 2일을 맞아 개강했다. 개강 한다고 연구실 활동을 하지 않는 것은 아니기 때문에 시간이 매우 빠르게 흘러갔다. 3월은 기반을 쌓는 데 집중했다. 3월 정리 개인 삼성 SDS 인턴 및 카카오 테크 캠퍼스 자소서 작성 Spring Boot 기반 학습 팀 - WebRTC 프로젝트 주제 선정 API, 스키마 설계 회의 및 개발 연구 - 블록체인 Hyperledger Fabric 의 Event 관련 조사 및 간단한 구현 Event 를 Off-chain에 저장하는 것에 대한 조사 KCC - (한국정보과학회) 학부생 논문 주제 선정 중견 연구 과제 관련 웹 크롤링 + Excel 구현 삼성 SDS 인턴으로 지원하였고 서류는 붙었다. 꼭 ..
유저 서버 유저 서버는 채팅 앱에서 친구 요청/수락/취소/삭제, 유저 검색, 프로필 수정의 기능을 수행한다. 유저 서버 주요 구현 내용 유저 쿼리 프로필 이미지 저장 - AWS S3 친구 상태 관리 유저 쿼리 유저 쿼리에서 유의미한 성능 향상과 좋은 팁들을 얻을 수 있었다. 우선 쿼리를 다시 점검하게 된 이유는 팀원의 Prometheus와 Grafana를 활용한 모니터링과 Ngrinder의 부하테스트 덕분이었다. 친구 목록 조회 쿼리가 채팅 앱의 거의 메인화면에 해당하기 때문에 가장 많이 사용되었다. 그러나 성능이 매우 뒤떨어 진다(TPS 20.8)는 결론을 얻을 수 있어서 성능 향상의 계기가 되었다. 성능 개선의 요인은 3가지가 있다. @Transactional(readOnly = true) 추가 쿼리..
1인 프로젝트에서 MSA 기반 인증 서버 만든 것을 확장하여 구현하였다. 게이트웨이 Gateway를 통해 Jwt 토큰을 검증하고 각 서버에서 필요 시 jwt토큰으로 부터 유저 정보를 확인한다. 게이트웨이를 활용하였기 때문에 각 서버에서 따로 검증하는 코드를 작성할 필요가 없게 되었다. 게이트웨이 주요 구현 내용 Jwt 검증 GlobalExceptionHandler ErrorCode Jwt 검증 게이트웨이에서 Jwt를 검증한 방법은 아래 코드를 통해 확인할 수 있다. header에 Jwt 토큰이 존재하는 지, 그리고 그 토큰이 유효한 지를 검증한다. 이 때 예외 발생 시 예외를 던진다. public class AuthorizationHeaderFilter extends AbstractGatewayFilte..
프로젝트를 경험해보면서 API, DB 등 설계의 중요성을 많이 느꼈다. 프로젝트가 복잡해질수록 소프트웨어도 복잡해지고 이에따라 탄탄한 설계가 가져오는 장점들이 존재함을 몸소 느낄 수 있었다. 우리가 만들고하자는 요구사항(윈터데브캠프의 목표)을 효과적으로 만족시킬 수 있다. 유지보수 측면에서 용이하다. 협업에서 이점을 갖는다. 따라서, API,DB명세를 상세히 하고자 했고, 이에 따라 적용한 방법을 보이고자 한다. 내가 생각하는 API 명세를 작성하는 이유는 크게 3가지가 존재한다. 어떤 것을 구현해야하는지 명확히 한다. 협업에 있어 req/res 형태를 공유한다. 정해진 규칙을 따라 API를 명세한다. 이를 만족시키기 위해 기능 명세를 작성하였다. 기능 명세를 작성한 이유는 시간에 대한 한계가 있기 때문..
스마일게이트 윈터데브캠프에서 채팅 애플리케이션을 개발하였다. 채팅 애플리케이션을 개발하기로 한 이유는 팀원들 간 회의를 통해 도출된 공통 목표에서 나오게 되었다. 공통 목표 경험해보지 못한 아키텍처와 기술들을 활용하여 문제 해결에 대한 폭을 넓힌다. 양방향 소켓 통신에 대한 경험 X 전체 서버의 아키텍처는 MSA를 기반으로 구성하였으며, 채팅 서버는 scale out 가능한 구조로 구성하고자 했다. 전체 구조는 아래 그림과 같다. 이번 프로젝트에서 서비스 레지스트리, 게이트웨이, 인증 서비스, 유저 서비스, 푸시 서비스는 내가 맡게 되었다. 추후 각 서비스 별 주요 내용을 정리할 예정이다. 실제 상호작용하는 부분이 추가된 상세화된 아키텍처는 아래와 같다. 전체 사용 스택은 Spring Boot, Spri..
WebRTC 프로젝트에서 마이크로서비스 아키텍처 중 채팅 서비스 구현 중 문제가 발생했다. Kafka에 데이터를 넣었으나 직렬화 관련 에러였다. 문제 원인 파악 먼저, 아래 에러 로그에서 직렬화 중 Deserializer에서 문제가 발생했다. 카프카에 객체 클래스를 전송했고 org.springframework.kafka.support.serializer.JsonDeserializer 를 사용하여 역직렬화함을 확인했다. java.lang.IllegalStateException: This error handler cannot process 'SerializationException's directly; please consider configuring an 'ErrorHandlingDeserializer' ..