MySQL의 공간 함수 ST_Distance_Sphere
·
개발/Sql
ST_Distance_Sphere는 Mysql 에서 제공하는 거리 계산 함수로 두 좌표간에 거리를 계산하여 미터로 반환해준다.ST_Distance_Sphere( POINT(lon1, lat1), POINT(lon2, lat2)) POINT는 경도(longitude)와 위도(latitude)를 넣으면 하나의 공간 데이터로 만들어준다.두 개의 POINT를 ST_Distance_Sphere 함수에 넣어주면 두 공간 사이의 거리를 계산.ST_Distance_Sphere은 지구를 구(원형)로 가정하여 곡면 거리를 계산해준다. ST_Distance는 평면 거리를 계산해주는데 SRID 라는 단위로 반환해준다. 이건 지리 분석 시스템을 만드는 GIS 를 만들 때 주로 사용하므로 일반적으로는 ST_Distance_S..
[인턴일기] node.js 로 서버 개발 경험기와 IDE, Spring의 소중함
·
개발/개발일기
이번에 스타트업에서 인턴기회가 찾아왔는데 주기술로 공부했던 Java/Spring이 아닌 node.js를 사용하는 기업이였다.처음엔 내 기술을 좀 더 강화하고 현업에 적용해볼 수 있는 기회를 위해 인턴을 하고 싶었는데 의도가 조금 벗어나 고민하였지만 그래도 실제 현업을 꼭 경험해보고 싶었고 새로운 기술을 배우는 것 또한 좋아하고 결국 나에게 득이 될 것이라 생각되어 한달간 경험하게 되었다.일주일간 급하게 벼락치기로 공부하였고 실제로 개발하면서 느낀 점을 적어본다. node.js 의 첫 인상node.js와 express 를 통해 처음으로 맛 본 느낌은 기존의 java/spring보다 쉽고 단순하며, 자유도가 매우 높다고 느껴졌다. 다른 프로그래밍 언어들은 아직 경험해보지 못 해 단정 지을 순 없지만 결국 다..
스프링 시큐리티에서의 예외처리 방식
·
개발/Spring
Jwt + spring security 로 인증/인가를 구현하면서 인가가 되지 않았을 경우 테스트코드에선 403 에러코드를 반환하는데 포스트맨에선 401를 반환하는 차이점이 생겨 그 문제를 해결하면서 알게 된 내용을 정리한다.1. 스프링 시큐리티의 예외 처리 방식 다음은 대부분 알고 있는 스프링 시큐리티의 동작 방식으로 여기서 살펴볼 부분은 AuthenticationFilter 이며 여기서 요청을 가로채 사용자 정보를 검증하는 과정을 거친다. 그리고 그 과정에서 예외가 발생한다면 ExceptionTranslationFilter 으로 넘기며 인증에 실패한다면 AuthenticationEntryPoint 로, 인가에 실패한다면 AccessDeniedHandler 로 넘기게 된다.(그림에 보이는 AccessD..
상속, 추상화, 다형성에 대해
·
개발/Java
상속기존 클래스의 필드와 메서드를 새로운 클래스에서 재사용하게 해주는 것. 부모 클래스: 상속을 통해 자신의 필드와 메서드를 다른 클래스에 제공자식 클래스: 부모 클래스로부터 필드와 메서드를 상속받는 클래스 상속의 특징단일상속 - 자식 클래스는 하나의 부모에게만 상속받을 수 있다자식클래스로부터 인스턴스를 생성하면 메모리에선 부모 클래스도 함께 포함해서 같은 공간에 생성된다.현재 타입에서 기능을 찾지 못하면 상위 부모 타입으로 기능을 찾아서 실행한다. - 찾지 못 하면 컴파일 오류 발생메서드 오버라이딩 - 자식은 부모에게서 상속 받은 기능을 재정의할 수 있다. 다형성한 객체가 여러 타입의 객체로 취급될 수 있는 능력. 다형적 참조: 하나의 변수 타입으로 다양한 자식 인스턴스를 참조할 수 있는 기능. 부모 ..
자바의 메모리 구조
·
개발/Java
자바의 메모리 구조는 크게 3개의 영역으로 나누어진다. 메서드 영역: 프로그램을 실행하는 데 필요한 공통 데이터를 관리클래스 정보: 클래스의 필드, 메서드, 생성자static: static 변수들을 보관런타임 상수 풀: 공통 리터럴 상수를 보관스택 영역: 실제 프로그램이 실행되는 영역. 메서드를 실행할 때마다 스택 프레임이 하나씩 쌓이고 메서드가 종료되면 제거된다.힙 영역: 객체(인스턴스)와 배열이 생성되는 영역. 가비지 컬렉션(GC)이 이루어지는 영역이며, 더 이상 참조되지 않는 객체는 제거된다.✅ 스택 영역은 각 쓰레드별로 하나의 실행 스택이 생성 -> 쓰레드 수 만큼 스택 영역이 생성✅ 클래스로 인스턴스를 생성하면 힙 영역에 저장되는 데 인스턴스 내부에 메서드를 가진 경우가 있다. 같은 클래스로 여..
[최종프로젝트] 쓰레드풀 튜닝 / 캐시 전략을 활용한 채팅 메시지 성능 개선
·
개발/내일배움캠프 TIL
초기 설계초기에는 메시지를 발송하면 즉시 DB에 저장되는 방식으로 설계했었습니다. 그리고 현재 채팅 서비스를 얼마나 많은 사람이 이용할 수 있을 까 궁금했고, 단일서버기준으로 1000명정도의 사용자가 동시접속하여 안정적으로 이용하는 것을 목표로 잡고 테스트를 진행하였습니다. 문제점1000명의 유저가 동시에 사용할 수 있을까?Jmeter를 이용해 웹소켓연결 → CONNECTED → SUBSCRIBE → SEND → MESSAGE → DISCONNECTED 과정으로 시나리오를 설계하고 SEND 이후 MESSAGE 까지의 응답시간이 얼마나 나오는지를 중점으로 보았습니다. 그리고 100명부터 100씩늘려가며 1000명의 유저가 동시에 접근하는 상황을 테스트해보았습니다. (요청은 10번씩 진행)쓰레드평균 응답 시..
[최종프로젝트] 채팅 서비스 개발3 - 채팅 기록 저장
·
개발/내일배움캠프 TIL
먼저 채팅 내역을 어떻게 저장할까 고민하던 중 튜터님께 블로그를 하나 추천 받았다.https://www.daddyprogrammer.org/post/4731/spring-websocket-chatting-server-redis-pub-sub/ Spring websocket chatting server(3) - 여러대의 채팅서버간에 메시지 공유하기 by Redis pub/sub앞 장에서 실습을 통해 채팅을 구현해 보았습니다. websocket과 Stomp를 이용한 구현만으로도 채팅의 기본 기능은 충분히 구현할 수 있는 것을 확인할 수 있었습니다. 하지만 서비스에 사용하려면www.daddyprogrammer.org 해당 블로그는 다중서버에서 메시지를 주고받을 수 있게 함과 동시에 Redis 에 전달된 메시지..
[TIL #42] [최종프로젝트] 채팅 서비스 개발2 - 채팅방 설계
·
개발/내일배움캠프 TIL
앞서 웹소켓과 STOMP를 이용해 간단하게 실시간 채팅을 할 수 있는 기능을 구현해봤다.이제 유저들이 원하는 유저와 채팅을 할 수 있는 채팅방 기능을 만든 과정을 기록한다. 테이블 설계 유저와 채팅방의 관계를 그려보면 유저도 여러개의 채팅방을 가질 수 있고, 채팅방도 여러 유저를 가질 수 있는 구조이다.다대다 관계인데 ManyToMany 는 복잡성과 유지보수, 성능 등등 여러방면으로 피해야 한다는 말은 많이 들어봤을 것이며,이런 경우 대부분 중간 연결 테이블을 두어 해결한다. 이번에도 그 방식으로 진행하였다.이번 프로젝트에선 기본적으로 1:1 채팅방을 기획하였지만 추후 그룹 채팅방 기능에 대한 확장 가능성을 열어두기 위해인원수 제한은 두지 않았다. 다음과 같은 구조로 ERD를 작성하였다. 채팅방은 우선 ..
[TIL #41] [최종프로젝트] 채팅 서비스 개발1 - 실시간 채팅
·
카테고리 없음
최종프로젝트에 들어서 첫번째는 리뷰 기능, 두번째는 채팅 서비스를 맡게 되었다.두번째로 맡게 된 채팅 서비스의 개발과정을 정리한다.  실시간 통신 방법에 대해 우선 현재 웹서비스는 대부분 HTTP 프로토콜로 응답/요청이 이루어진다.이 HTTP 프로토콜은 클라이언트/서버 간의 신뢰성을 높이기 위해 기본적으로 TCP 위에서 동작하는데그때 3 way handshake 과정을 거치게된다.이러한 HTTP 프로토콜로 채팅 서비스를 만들면 어떠한 불편함이 있을까? 우선 채팅 서비스는 클라이언트 - 서버 - 클라이언트 와 같은 구조로 되어있어 양방향 통신이 필요하다.HTTP 로 만들려면 발신자쪽에서 메시지를 보내면 서버에선 메시지를 저장 후,수신자가 메시지가 있는 지 요청하고 있으면 반환하는 방식으로 개발해야한다.채팅..
RDBMS와 NoSQL의 차이점
·
개발/개발일기
데이터 저장방식NoSQL: Memory에 저장하며 key-value로 저장RDBMS: Disk에 저장하며 SQL로 저장RDBMS의 특징고정된 행과 열로 구성된 테이블 형태이며, 각 열에는 데이터 스키마(타입, 크기 등등)을 설정할 수 있고, 형식에 맞는 데이터가 저장이 된다.다른 테이블과 연관관계를 맺을 수 있다.위와 같은 이유로 데이터의 무결성이 보장된다.이러한 고정된 스키마로 나중에 변경, 확장이 어렵다. (유연성이 떨어진다)NoSQL의 특징메모리에 저장하여 데이터 조회 속도가 매우 빠르다.key-value 형태로 저장되며, value에는 다양한 데이터 구조를 넣을 수 있다.메모리에 저장되기 때문에 데이터가 날아갈 가능성이 있다.메모리를 쓰기 때문에 비교적 가격이 비싸다.언제 쓰는 게 좋을까? - R..