목록java (78)
코딩마을방범대

웹 소켓을 이용한 메시지 전송 (이전포스트) 코드에서 아래와 같이 SimpMessageHeaderAccessor을 이용하는 메시지 전송 코드를 보았다. 얼추 봤을 때 WebSocket을 사용하는 것이라고 어림짐작만 했지 본격적으로 알아보기는 이번이 처음이다. Map msgMap = new HashMap(){{ put("키값", "값"); }}; SimpMessageHeaderAccessor headerAccessor = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE); headerAccessor.setSessionId(user); headerAccessor.setLeaveMutable(true); simpMessagingTemplate.convert..

이전 포스트에서 Firbase SDK를 세팅할 때 DatabaseURL을 설정했었다. Firebase Console에서 Realtime Database 를 생성하면 아래처럼 링크가 설정된다! 해당 링크를 setDatabaseUrl 메소드에 넣어주면된다. 세팅 후 사용방법은 아래를 참고하면 된다. 데이터 저장하기 아래의 코드처럼 데이터를 저장했다고 가정하면, @PostMapping("/fcm/data") public void data(@RequestBody UserDTO user){ final FirebaseDatabase database = FirebaseDatabase.getInstance(); DatabaseReference ref = database.getReference("test/" + user..

메시지를 보내는 방법에도 2가지가 있다! 첫 번째, FCM 공식 링크를 통해 보내는 방법이며, 이 방법은 컨트롤러를 따로 구성할 필요없이 정해진 변수명에 알맞은 값들을 넣어서 호출하기만 하면 되므로, 테스트용에 적합하다. 두 번째, 직접 컨트롤러를 구성하는 방식인데, 이 방법은 본인만의 API 주소를 구성하여 작업할 수 있어서 테스트용이 아닌 정식 서버에서 사용하기 적합하다. FCM 메시지 매개변수 1. FCM 공식 링크를 이용해 메시지 보내기 아래 사진을 보면 Cloud Messaging API(기존) 사용 중지됨 이 표시되어 있다. 따라서 현재는 V1을 이용하고 있는 것이며, 이용 방법에 따라 메시지 전송 방법이 다르다. 현재는 V1 방식만을 지원하므로 명심하자! ( 둘 다 Post 메소드! ) AP..

FCM - (1) FCM이란? (이전 포스트)FCM - 푸시 메시지를 보내는 방법 2가지 FCM 프로젝트 생성 및 준비 단계 1. 프로젝트 생성 (1) Firebase 프로젝트 생성 (2) 웹 앱 생성 (js에 붙여넣기) 2. 서버 비공개키 생성 (1) 위대로 프로젝트 생성 후 화면대로 '프로젝트 설정' 클릭 (2) '서비스 계정' 탭 선택 후 '새 비공개 키 생성' 클릭 (3) json 파일을 resource 폴더에 붙여넣기 3. 클라이언트 FCM 등록 토큰 획득 (1) 위대로 프로젝트 생성 후 화면대로 '프로젝트 설정' 클릭 (2) '클라우드 메시징' 탭 선택 후 'Generate key pair' 클릭 (3) 생성된 키 복사(1) messagingSenderId ..

Redis를 이용해 String을 저장하는 방법은 매우 간단하다. 그러나 객체를 저장하기 위해선 Json을 이용해 저장 후 convert가 필요하다. ※ conf 파일에 아래와 같이 Json 타입으로 설정 시 자동으로 Json String으로 저장된다. redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer(Object.class)); set 방식으로 저장해서 valueOperations.members(키값) 명령어를 통해 가져왔을 때 안의 따옴표들이 전부 사라졌다. 이 때문에 Json to Java Object 로 변환이 불가능했고, 이리저리 테스트해보다가 해결 방법을 발견했다. 아래와 같이 Set에 담아서 가져온 뒤 Mapper를 통해 co..
JDK 1.3에 추가되었던 java.util.Timer 클래스와 java.util.TimerTask 클래스를 이용하면 백그라운드에서 특정한 시간 또는 일정 시간을 주기로 반복적으로 특정 작업을 실행할 수 있도록 해준다. java.util.Timer Timer 클래스는 아래와 같이 3가지 메소드를 제공한다. Timer timer = new Timer(); // true를 주게 되면 데몬 스레드를 사용하게 된다고 한다. Timer timer = new Timer(true); schedule 메소드 설명 schedule(TimerTask task, Date time) 설정한 time 시간에, 설정한 task 작업을 수행 schedule(TimerTask task, Date firstTime, long peri..
Spring에서 Bean을 사용할 경우 Autowired를 이용해 의존성을 주입받는다. 만약 동일한 타입을 가진 Bean이 두 개 이상일 경우에는 사용할 Bean에 대한 선택이 필요하다. 동일한 타입을 가진 여러 Bean이 있을 때 그냥 호출할 경우? 스프링이 어떤 빈을 주입해야 할 지 알 수 없어서 스프링 컨테이너를 초기화하는 과정에서 Exception을 발생시킨다. 단, @Autowired가 적용된 필드나 설정 메서드의 property 이름과 같은 이름을 가진 빈 객체가 존재할 경우에는 이름이 같은 빈 객체를 주입받는다. 위와 같은 오류를 방지하기 위해 동일한 타입의 Bean 사용 시 사용할 Bean을 명시해줘야 한다. @Qualifier 사용할 의존 객체를 선택할 수 있도록 해준다. 사용 방법 1...
Repository를 이용해 Redis를 활용하는 예제 코드에 JpaRepository가 아닌 CrudRepository를 활용해서 도대체 CrudRepository는 뭔가.. 싶어서 찾아보았다! CrudRepository 애플리케이션에 필요한 모든 기본 쿼리 추상화를 제공하는 저장소 인터페이스 메소드 설명 save(…) 엔터티 의 Iterable 을 저장 ( 여러 개체를 전달하여 일괄적으로 저장할 수 있음 ) findOne(…) 전달된 기본 키 값을 기반으로 단일 엔터티 가져오기 findAll() 데이터베이스에서 사용 가능한 모든 엔터티 의 Iterable 가져오기 count() 테이블의 총 엔터티 수를 반환 delete(…) 전달된 개체를 기반으로 엔터티를 삭제 exists(…) 전달된 기본 키 값을..