태그 목록
전체보기 (106)Capstone(34)db(20)algorithm(18)CS(18)Backend(17)CodingTest(14)project(13)Vingterview(12)boj(10)sql(8)computer architecture(8)greedy(8)Lecture note(8)deploy(7)django(7)Posting(6)Java(6)JVM(5)authentication(5)authorization(4)OS(4)data structure(4)Spring(4)kakao(4)Implementation(4)API(3)CI/CD(3)stack(3)refactoring(3)Query Processing(3)heap(2)Query Optimization(2)BFS(2)protocol(2)runtime data area(2)spring security(2)drf(2)Index(2)logging(2)linked list(2)network(2)websocket(2)Restful(2)Deque(2)Execution Engine(2)transaction(2)View(1)brute force(1)PK(1)Multiprocessor(1)pipelining(1)Native Method Libraries(1)Hashing(1)OAuth2.0(1)ec2(1)Nginx(1)JWT(1)@api_view(1)Computer System(1)docker(1)Services(1)question(1)Processor(1)coding test(1)tree(1)union(1)PC Register(1)circular queue(1)GC(1)exception handling(1)classLoader(1)Physical Storage(1)memory(1)scheduling(1)Multiple key index(1)Class Loader(1)Recovery system(1)array(1)ISA(1)user(1)Native Method Interface(1)Method Area(1)Data Storage Structure(1)aws(1)Web Server(1)JIT Compiler(1)Virtual Avatar(1)Generics(1)unique(1)DFS(1)Binary Search Tree(1)CRUD(1)Sub Query(1)algotithm(1)dynamic programming(1)exception(1)Concurency Control(1)ViewSet(1)unittest(1)Comment(1)Native Method Stack(1)tag(1)mixin(1)Divide and conquer(1)cors(1)stomp(1)ModelSerializer(1)unit test(1)BaseSerializer(1)kako(1)dynamicprogramming(1)interpreter(1)Graph(1)restful api(1)rds(1)Thread(1)queue(1)garbage collector(1)process(1)ALU(1)REST(1)무중단 배포(1)priority queue(1)apps.py(1)signal(1)FK(1)Performance(1)datatype(1)garbage collection(1)live-streaming(1)csrf(1)MIPS(1)Spanning Tree(1)binary tree(1)JOIN(1)serializer(1)B+TREE(1)
post-thumbnail

[빙터뷰] Question create 쿼리 성능 최적화 시도

시간측정 코드 기존 코드 : 태그마다 select -> insert, 총 쿼리 6번 수정 코드 : in쿼리로 한번에 select -> insert 3번, 총 쿼리 4번 키 생성 전략이 identity라 batch insert 불가능 결과 기존 코드 총 30ms대 조회는 거의 0~1ms, 저장이 1~2ms 수정 코드 총 50~80ms대 in 쿼리가 병목(3개 찾는데 20~30ms) 저장은 3번 합쳐서 2ms 결론 : 기존 코드 유지

2023년 7월 12일
·
0개의 댓글
·
post-thumbnail

[빙터뷰]실시간 모의면접 클라이언트 개발

실시간 모의면접 기능은 발표자의 영상을 얼굴만 바꿔 같은 방에 있는 다른 사용자들에게 보여줘야 하기 때문에, 초기 서비스 기획시점에는 웹소켓을 통해 비디오스트림을 서버로 보내면 서버에서 영상처리를 한 뒤 다른 사용자들에게 변형된 비디오스트림을 보내주면 될 것이라고 생각했다. 하지만 라이브 스트리밍 서비스를 구축하는 것이 생각보다 간단한 작업이 아니었고, 프로젝트 마감기한이 얼마 남지 않아 여러 시행착오 끝에 agora라는 서드파티의 sdk를 사용하여 라이브 스트리밍 및 버추얼 아바타 기능을 구현하였다. 라이브 스트리밍 서비스 라이브 스트리밍 서비스를 개발하는 과정에서 웹소켓만을 사용하려다 보니 생각하는 대로 개발이 이루어지지 않았다. 처음에는 단순하게 실시간으로 영상을 보내면 될 거라고 생각해서 전면카메라를 매 프레임마다 캡쳐해서 서버로 보내려고 했다. 하지만 클라이언트에서 원하는 대로 동작하지 않았고, 오디오를 보낼 방법이 마땅치 않아 다른 방법을 찾아보았다. 두번째

2023년 6월 28일
·
0개의 댓글
·
post-thumbnail

[빙터뷰] 웹소켓 클라이언트 개발

개발서버를 배포한 이후 웹소켓을 사용해서 실시간 모의면접 기능을 개발했는데, 프론트엔드쪽 작업량이 많아 급하게 플러터를 배우고 웹소켓 통신의 클라이언트측 코드를 개발하기 시작했다. 실시간 모의면접 기능은 같은 태그를 선택한 사람들을 매칭하고 서버에서 무작위로 해당 태그에 속한 질문을 뽑아주면 실시간으로 질문에 답변하는 영상을 공유하는 기능이다. 이를 구현하기 위해서는 실시간으로 서버와 클라이언트가 통신할 수 있어야 하기 때문에 웹소켓을 사용하기로 결정했다. 웹소켓 웹소켓이란 요청을 보내야만 서버로부터 응답을 받을 수 있는 HTTP의 한계를 해결하기 위해 등장한 프로토콜로, TCP채널을 통해 실시간 양방향 통신을 가능하게 해주는 Stateful한 프로토콜이다. 웹소켓에 대한 자세한 내용은 링크에 정리하였다. 설계 설계 초기에는 STOMP프로토콜을 이용하여 메세지와 비디오 스트림을 주고받으려 했지만 STOMP를 이용하여 바이너리 데이터를 주고받는것이 생각만큼 제대로

2023년 6월 28일
·
0개의 댓글
·
post-thumbnail

[빙터뷰] CI/CD 파이프라인 구축

프론트엔드 개발을 맡은 팀원의 요청으로 개발 중반부에 api서버를 미리 배포하게 되었다. 지금까지 프론트엔드는 api문서를 보고 개발했기 때문에 임시 데이터만으로 개발을 진행하고 있었다. 그러다보니 데이터를 등록하는 부분이나 수정할 때 화면의 변화가 잘 동작하는지 확인하는데 한계가 있어서 임시로 개발서버를 올려달라는 요청을 받았다. 지난번 프로젝트에서는 서버를 배포할 때 로컬에서 깃허브에 코드를 푸쉬하면 서버에서 수동으로 코드를 받아와 실행하는 식으로 배포가 이루어졌는데, 이 과정이 꽤 번거로웠던 기억이 있어서, 이번에는 배포과정을 자동화하여 개발에 조금 더 신경쓸 수 있도록 배포 파이프라인을 구축하였다. CI/CD 파이프라인 구축을 위해 [스프링 부트와 AWS로 혼자 구현하는 웹 서비스]를 참고하였다. CI/CD 파이프라인 설계 ![](

2023년 6월 27일
·
0개의 댓글
·
post-thumbnail

[빙터뷰] 사용자 인증기능 구현

사용자의 정보를 얻어 서비스를 이용할 수 있도록 등록하고, 로그인된 사용자만 서비스에 접근할 수 있도록 인증/인가 시스템을 구축하였다. 스프링부트를 사용하여 서버를 개발중이기 때문에 스프링 시큐리티를 사용했고, OAuth와 JWT를 이용하여 인증과 인가를 각각 구현하였다. 각각의 기술을 선택한 이유는 다음과 같다. OAuth 2.0 : 짧은 시간안에 로그인 서비스를 구현하고 사용자의 개인정보를 관리하기 위해서는 직접 인증시스템을 구축하는 것 보다 OAuth를 통해 구글에 인증과 관련된 작업을 위임하는 것이 효율적이라고 판단하여 도입했다. JWT : OAuth에서 발급한 토큰에 포한된 정보와 별도로 추가정보를 토큰에 넣어 전달하기 위해 JWT를 사용했다. Spring Security ![](https://velog.velcdn.com/images/impala/post/e158c585-46ec-45ee-8e91-

2023년 6월 27일
·
0개의 댓글
·
post-thumbnail

[빙터뷰] 질문 기능 구현

Question 사용자가 태그를 선택하고 면접 예상질문을 등록하여 면접 연습영상의 태그로 달 수 있는 기능이다. 사용자가 등록하는 면접 질문은 다른 사용자에게 공개되어 그 질문에 대한 연습영상을 올릴 수 있기 때문에 question은 한번 등록하면 수정이나 삭제가 불가능하도록 설계하였다. 또한 사용자는 원하는 질문을 스크랩해서 확인할 수 있다. Domain Question 질문 엔티티는 Member엔티티와 일대다 관계와 다대다 관계를 동시에 가진다. 각 질문에는 질문을 등록한 작성자의 정보가 일대다 관계로 매핑되면서, 각 사용자들은 원하는 질문을 스크랩할 수 있기 때문에 스크랩 정보를 관리하는 중간 엔티티를 통해 회원 엔티티와 다대다 관계를 맺는다. 또한 각 질문에는 범주에 맞는 태그를 달 수 있기 때문에 질문과 태그 사이에 중간 엔티티를 두어 태그 엔티티와 다대다 관계를 맺는다. 마지막으로 등록한 질문을 삭제하는 기능은 제공하지 않지만, 논리적으로 질문이 사라지

2023년 4월 14일
·
0개의 댓글
·
post-thumbnail

[빙터뷰] 태그 기능 구현

Tag 사용자는 면접 예상질문을 등록할 수 있는데, 각 질문에는 면접 유형, 기업 및 직무의 종류등과 같은 태그가 달리고, 이 태그를 통해 질문을 필터링하여 조회할 수 있다. 또한 사용자가 관심기업이나 관심직무등을 설정할 때에도 태그가 사용된다. Domain 태그 도메인은 태그 이름과 카테고리, 그리고 부모태그로 구성된다. @NoArgsConstructor(access = AccessLevel.PROTECTED)나 _ @ManyToOne(fetch = FetchType.LAZY)_과 같은 부분은 Comment에서 설명한 이유와 같고, 여기에서 특징이 되는 부분은 category와 parent이다. 먼저 각 태그의 종류를 표현하기 위해 Enum타입으로 TagType을 정의하였다. 엔티티에 Enum타입의 필드를 선언하는 경우 반드시 @Enumerated(EnumType.STRING) 어노테이션을 통해 데이터베이스에 문자열의 형태로 저장될 수 있도록 설정해주어야 한다

2023년 4월 10일
·
0개의 댓글
·
post-thumbnail

[빙터뷰] 댓글 기능 구현

Comment 사용자가 영상 게시판에 면접 연습 영상을 올리면 다른 사용자들이 영상을 보고 피드백을 해주는 기능이다. 일반적인 게시판의 댓글 기능과 유사하다. Domain Comment 데이터베이스의 Comment테이블에 해당하는 엔티티이다. id값은 DB에서 자동으로 생성되도록 Identity전략을 사용하여 위임하였고, jpql의 n+1문제를 방지하기 위해 모든 연관관계에 지연로딩 전략을 사용하였다. 또한 댓글에 달린 좋아요를 편리하게 확인하기 위해 CommentMemberLike테이블을 참조하는 likes필드를 만들어 매핑하였다. 또한 comment가 삭제되면 해당 comment에 좋아요를 누른 기록이 모두 삭제될 수 있도록 likes필드에 CascadeType.REMOVE옵션을 걸어두었다. 무분별한 생성과 수정을 막기 위해 Setter는 닫아두었으며 생성자를 통해서 초기값을 설정하고 update메소드를 통해서만 값을 변경할 수 있도록 구현하였다. 다만 스프

2023년 4월 7일
·
1개의 댓글
·
post-thumbnail

[빙터뷰] API설계

API 설계의 중요성 지난번 캡스톤 프로젝트를 진행하면서 가장 뼈아프게 느낀 점 중 하나가 바로 API였다. 제대로된 정보 없이 내 마음대로 API를 설계한 탓에 URL은 체계적이지 않고, 요청 및 응답형식 또한 정리되어있지 않아 설계 이후 개발과정에서 큰 혼란을 겪었다. 그래서 이번 프로젝트에서는 지난번 기억을 바탕으로 본격적인 개발에 들어가기 전에 최대한 구체적으로 API를 설계하고 이 문서를 바탕으로 기능을 개발하려 한다. RESTful API RESTful API에 관련된 내용은 아래 링크에 간략하게 정리 해 두었다. [엉박사] 1.10.2 Restful API API Document ![](https

2023년 3월 31일
·
0개의 댓글
·
post-thumbnail

[빙터뷰] DB설계

고려사항 빙터뷰의 주요 기능을 정리하자면 면접 연습 영상 업로드 면접 예상질문 등록 실시간 면접 연습 정도라고 말할 수 있기 때문에 데이터베이스에는 다음과 같은 테이블이 필요하다 회원 테이블 영상 게시판을 관리하는 테이블 영상 게시판의 댓글을 관리하는 테이블 예상질문을 관리하는 테이블 태그정보를 보관하는 테이블 각각의 테이블은 연관관계를 가지고, 필요시 중간테이블을 추가하여 연관관계를 표시한다. 또한 모든 테이블을 정규화하여 DB를 설계한다. DB 스키마 DB 설명 MEMBER : 사용자 테이블 BOARD : 영상 게시판 게시글 테이블 BOARDMEMBERLIKE : 영상 게시판 좋아요 기능 전용 중간 테이블 COMMENT : 댓글 테이블

2023년 3월 31일
·
0개의 댓글
·
post-thumbnail

[빙터뷰] 서비스 기획

주제 > 취준생의 면접실력 향상을 위한 버추얼 모의면접 시뮬레이션 서비스 🧑‍💼 동기 배경 취업준비생(이하 취준생)이라고 함은 일반적으로 대학 고학년, 혹은 이미 졸업한 구직 활동을 하는 학생을 말한다. 기존에 다니던 회사를 그만두고 새롭게 직장을 구하려 하는 사람들 역시 포함하기도 한다. 2022년도 청년층의 취업실태를 보다 심층적으로 파악하여 고용정책 수립에 필요한 기초자료를 수립하기 위해 통계청에서 실시한 청년층 부가 조사에 따르면 2022년도 취준생 수는 70만 4천 명으로 집계되었다. 이 숫자는 전년 대비 16퍼센트 감소한 수치이지만 2021년 이전 5년 동안 계속해서 취준생 수는 증가하여 2021년에는 85만 9천 명에 달하였다. 또한 앞으로 많은 기업들이 금리 인상과 경기 침체 우려로 인해 취업 증가 폭은 2022년도 대비 대폭 감소할 것이라고 많은 전문가들이 전망하고 있다. ![](https://velog.velcdn.com/images/

2023년 3월 31일
·
0개의 댓글
·
post-thumbnail

[빙터뷰] 시리즈 소개

시리즈 소개 이번학기 새롭게 진행되는 캡스톤 디자인 과목의 프로젝트 진행과정에 대한 기록을 남기기 위한 시리즈로, 지난번 캡스톤 시리즈(엉박사 시리즈)와는 다르게 개발을 하면서 그때그때 깨달은 점이나 새롭게 학습한 내용들을 정리할 계획이다. 프로젝트를 시작하며 지난번 캡스톤에서는 웹, API, 배포 등에 대한 기초적인 내용을 전혀 모르고 프로젝트에 들어가서 관련된 내용들을 찾는 데에 어려움이 많았다. 또한 다룰줄 아는 프레임워크 또한 유튜브 강의로 익힌 장고가 유일했기 때문에 다른 선택지 없이 장고를 통해 개발을 진행했다. 그 결과 기능구현에만 급급하여 어찌저찌 굴러는 가는 코드가 탄생했다. 그래서 이번에는 좀 더 준비된 상태에서 프로젝트를 시작하기 위해서 겨울방학동안 인프런에서 김영한 강사님의 스프링강의 로드맵을 타면서 객체지향과 JPA, 스프링 프레임워크에 대한 이해를 높였다. 또한 이전 프로젝트의

2023년 3월 30일
·
0개의 댓글
·