목록전체 글 (302)
elevne's Study Note

객체모델과 관계형 DB 모델은 지향하는 패러다임이 서로 다르다. 문제는 이 패러다임의 차이를 극복하기 위해 개발자가 너무 많은 시간과 코드를 소비하게 된다는 점이다. 더 어려운 문제는, 객체지향 애플리케이션답게 정교한 객체 모델링을 할수록 패러다임의 불일치 문제가 커진다는 점이다. 이 때문에 개발자가 소모해야하는 비용도 더 많아진다. 결국 객체 모델링은 힘을 잃고 점점 데이터 중심의 모델로 변해간다. 이러한 문제를 JPA 가 해결해줄 수 있다. JPA 는 패러다임의 불일치 문제를 해결해주고 정교한 객체 모델링을 유지하게 도와준다. JPA 는 ORM 의 일종으로, 단순히 SQL 을 개발자 대신 생성해서 데이터베이스에 전달해주는 것 뿐만 아니라 다양한 패러다임 불일치 문제를 해결해준다. 어느정도 성숙한 객체..

프로젝트에 사용되는 Redis, MySQL DB 를 도커를 활용하여 띄워서 사용하기로 하였다. 이후에 다른 프로그램들을 추가적으로 사용하게 되었을 때 그러는 편이 편리할 것으로 생각되었기 때문이다. 우선 Docker desktop 을 설치해주고, MySQL 과 Redis 이미지를 pull 받는다. docker pull redis docker pull mysql 한 번에 여러 개의 컨테이너를 실행해야 하기 때문에, 명령어를 한 번에 실행할 수 있는 도커 컴포즈 파일을 작성해야했다. (도커 컴포즈는 시스템 구축에 필요한 설정은 yml 포맷으로 기재한 정의 파일을 이용해 전체 시스템을 일괄 실행 또는 일괄 종료 및 삭제할 수 있는 도구) Docker-compose 는 docker run 명령어를 여러 개 모아..

이전 시간에 작성한 것처럼 스프링에서 제공하는 STOMP 를 통해 채팅서버를 구현할 수 있지만, 이러한 Simple Message Broker 은 스프링 서버 내부 메모리에서 작동한다. 이러한 구조에서 서바가 다운되거나 재시작하면 메시지 큐 내의 데이터가 유실될 수 있으며, 서버가 여러 대로 구성되어 있을 경우 서버간 채팅방을 공유할 수 없게된다는 문제가 발생한다. 이럴 때 외부 메시지 브로커를 활용할 수 있다. Redis 는 STOMP 를 따로 지원하지는 않지만 Redis 가 제공하는 pub/sub 기능이 있다. (STOMP 프로토콜을 지원하는 RabbitMQ 와 같은 전용 메시지 브로커를 사용하면 더 많은 기능을 사용할 수 있다고 한다) Redis 를 메시지 브로커로 추가하면 다음과 같이 동작한다. ..

pub/sub 구조에 대해 알아본다. pub/sub 는 아래 이미지와 같은 구조를 가진다. Publisher, Subsriber 로 나뉘어지며 Subscriber 들은 특정 Topic(Channel) 을 구독한다. Publisher 가 해당 Topic 으로 메시지를 발행하면 해당 Topic 을 구독하는 사용자들은 그 메시지를 받게되는 것이다. 즉, 메시지의 발행자와 이용자 사이에 1:N 관계가 형성되는 브로드캐스트 스타일의 배포 방법이라고 볼 수 있다. (e.g., 항공사에서 항공편의 착륙 시간 또는 지연 상태에 관한 업데이트를 배포할 경우, 여러 관계자가 이 정보를 활용할 수 있다. 지상 팀은 항공기 정비 및 급유를 진행하고 수화물 팀, 승무원, 조종사는 비행기의 다음 일정을 준비하며 비주얼 디스플레이..
Jwt 각종 처리를 담당하는 JwtService 코드를 정리해본다. 우선 토큰을 생성하는 메소드부터 살펴보았다. public String generateToken( Map extraClaims, UserDetails userDetails ) { return Jwts .builder() .setClaims(extraClaims) .setSubject(userDetails.getUsername()) .setIssuedAt(new Date(System.currentTimeMillis())) .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60)) .signWith(getSignInKey(), SignatureAlgorithm.HS256) .compac..

WebSocket 은 두 프로그램 간 데이터를 주고받기 위해 사용되는 통신 방법 중 하나이다. 양방향 통신 (통상적인 HTTP 는 단방향), 실시간 네트워킹을 지원한다. 웹소켓 이전에 사용된 비슷한 기술들이 있다. 첫 번째로 Polling 이라는 것이 있다. 이는 서버에 일정 주기로 요청을 송신, 응답을 받는 방법이다. 실시간 통신에서는 언제 통신이 발생할지 모르기 때문에 불필요한 Request, Connection 을 계속 생성한다. 그 다음으로는 Long Polling 이라는 것이 있다. 이는 서버에 요청을 보내고 응답을 받을 때까지 연결을 종료시키지 않는다. 응답을 받으면 끊고, 재용청한다. 어느정도 Polling 의 단점을 개선하기는 하였으나, 많은 양의 메시지가 흐를 경우 Polling 과 같은..

아이템 26. 로 타입은 사용하지 말라 클래스와 인터페이스 선언에 타입 매개변수가 사용되는 것을 제네릭 클래스 혹은 제네릭 인터페이스라고 한다. (e.g., List 인터페이스는 원소의 타입을 나타내는 타입 매개변수 E 를 받는 제네릭 인터페이스다) 제네릭 클래스, 인터페이스를 통틀어 제네릭 타입이라고 한다. 각각의 제네릭 타입은 일련의 매개변수화 타입을 정의한다. List 로 생각해보자면, List 은 원소의 타입이 String 인 리스트를 뜻하는 매개변수화 타입이다. (String 이 실제 타입 매개변수) 또, 제네릭 타입을 하나 정의하면 그에 딸린 Raw type 도 함께 정의된다. Raw type 은 제네릭 타입에서 타입 매개변수를 사용하지 않을 때를 말한다. (e.g., List) 위 로 타입을..
React Native 활용 앱 개발을 연습하기 위해 아래 링크의 E-commerce App Clone 을 진행해보았다. 링크: https://www.youtube.com/watch?v=cd4v2T-_RE0&list=LL&index=2 우선 첫 번째 시간에는 Walkthrough 스크린에 대한 작업을 진행해주었다. Walkthrough 가 여러 개의 페이지로 구성될 수 있게끔 Animated.FlatList 컴포넌트를 활용하여 작성한다. 우선 React Native Animation 복습을 진행했다. Animation 을 사용하면 오브젝트를 이동하거나, 모양이나 색상을 변경하여 실제 상호작용을 모방할 수 있다. Animated 를 사용하기 위해서는 Animated.Value 를 하나 만들어야한다. Val..