6주차 과제: 상속 목표 자바의 상속에 대해 학습하세요. 학습할 것 (필수) 자바 상속의 특징 super 키워드 메소드 오버라이딩 다이나믹 메소드 디스패치 (Dynamic Method Dispatch) 추상 클래스 final 키워드 Object 클래스
이 블로그의 인기 게시물
자율 프로젝트 start
프로젝트에서 적어도 안 써본 기술 하나는 써보자 라는 다짐하에 2학기 3번째 프로젝트, 자율 프로젝트가 시작되었다. 이번에는 유행했던 점프킹과 같은 장애물을 피해 올라가는 게임을 구현하려고 하는데 이걸 멀티접속이 가능하게 하려고 한다. 당연히 웹소켓이 필요하고 지금 껏 룸을 나누지 않고 단순 웹소켓만 사용해본 나로써는 새로운 도전이라고 할 수 있다. socket 과 websocket 일반적으로 socket 이라고 하면 tcp/ip socket을 의미한다. 그래서 이론적으로 가장 큰 차이점은 websocket은 http 레이어에서 작동하는 소켓으로 레이어가 다르다 라고 볼 수 있다. 기본적으로 http는 요청 후 응답을 보내는 단방향 통신인데 이걸 socket 처럼 쓰고 싶어서 만들어진 기술이라고 한다. 나같은 웹개발자는 그냥 이걸 쓰는게 맞는거 같고, 다만 브라우저 별로 못 쓰는 상황이 나와서 socket.io나 socketJS 같은 기술을 사용해서 이를 보완한다. STOMP simple text oriented messaging protocol의 약자이며, 텍스트 기반의 프로토콜이다. websocket은 연결된 socket에게 data처리를 직접 다하는 반면, stomp는 subscriber, sender, broker를 따로 두어 처리를 하게 된다. subscriber(receive socket) : 채팅방에 입장하여 해당 채팅창을 구독, 즉 참여하고 있는 채팅창에 오는 메시지를 실시간으로 받아볼 수 있으려면 먼저 구독이 되어있어야 한다. sender(send socket) : 참여하고 있는 채팅창에 글을 써서 해당하는 주소로 메시지를 전달한다. broker : 연결된 socket들의 세션 관리를 해준다. 즉 subscriber를 구독한 채널에 연결시켜주고, sender가 그 채널에 메시지를 보내면 subscriber에게 전달해주는 중간 다리 역할을 한다. ChatController 에서 @MessageMapping("") @Send...
쿼리튜닝과 인덱스
약 한달 전 조회 조건을 추가해달라는 요청이 왔고 대수롭지 않게 추가했던 적이 있다. LEFT JOIN tb_review re ON re.care_no = ca.care_no AND re.delete_yn = 'N' AND re.reg_type = '0' 이게 전체 조회량을 늘리고 늘려서 화면을 다운시킨다는 것을 알게 되었는데, 일반적으로는 join에 and조건을 걸으면 이런 현상이 일어난다고 한다. 그래서 사수님은 이걸 1차적으로 분리해서 작성했고, 시간이 12초에서 1초 내로 줄어드는 효과를 보았다. LEFT JOIN tb_review re ON re.care_no = ca.care_no WHERE 1=1 AND re.delete_yn = 'N' AND re.reg_type = '0' 아니 근데 이건 다시 확인하니까 조회 대상이 바뀌는 변화인 것. 전과 같은 결과를 위해 다시 쿼리를 돌려야 했고 EXPLAIN 명령어로 해당 쿼리를 조사해보자 review 테이블에서 care_no를 인덱싱 없이 ALL로 조회하고 있음이 나왔다. 여기에 인덱스를 추가해줘서 결국 같은 결과를 1/10 이하의 시간으로 조회가 가능케 했는데 이에 너무 신기해서 인덱스에 대해 살짝 정리해볼까 한다.
댓글
댓글 쓰기