728x90

분류 전체보기 331

[JWT] Illegal base64url character: ' ' 오류

Postman의 Authorization 탭에서 Type을 Bearer Token으로 설정한 뒤 Token을 입력하고 정상적으로 동작했던 API를 테스트 해보았는데 오류가 발생하였다. 인텔리제이 로그에서는 Illegal base64url character: ' ' 에러로그 메시지가 출력되었다. 에러 로그의 이유는 토큰값을 분해할 때 Base64 형식으로 decode 된 secret key를 사용하여 토큰을 분해하게 되는데, 그 과정에서 오류가 발생하는 것 같다(Base64 형식은 ' '(공백) 을 인식할 수 없다는 것이 이유). 해결 - Postman에서 API 요청할 때, Authorization 탭 대신 Headers 탭에서 Key 컬럼에 Authorization을 입력하고 Value 컬럼에 로그인에..

JWT 인증 2023.08.21

(FCM)서버-IOS 연동 시 발생한 예외 사항 대처 방법

수신자로 FCM 토큰 값을 입력해야 하는데, 연동이 되어 있지 않는 토큰을 입력한 경우 발생한다. 안드로이드의 경우, onNewToken() 함수 내에서 발생한 토큰 값을 입력하면 발송이 정상적으로 된다. iOS의 경우도 onNewToken()을 구현해서 발생한 토큰값을 서버로 넘겨주면 된다고 한다(참고 : https://stackoverflow.com/questions/51296171/fcm-onnewtoken-vs-firebaseinstanceid) 큰 형식이 유효하지 않을 때 발생하는 예외 Device 토큰이랑 FCM 토큰 중 onTokenRefresh() 함수를 통해 갱신된 FCM 토큰 을 수신인에 등록하여 발송하면 정상적으로 발송된다. 위 두가지 예외 상황은 공통적으로 수신자에 잘못된 FCM 토..

FCM 2023.08.04

(로그 관련) p6spy 설정 방법

1. p6spy란? p6spy란 쿼리 파라미터를 로그에 남겨주고 추가적인 기능을 제공하는 외부 라이브러리입니다. 사실 이 외부 라이브러리 없이도 application.yml에 다음과 같은 설정을 통해 쿼리 파라미터의 값들을 찍을 수 있습니다. # application.yml logging: level: org.hibernate.SQL: debug org.hibernate.type: trace # for native query org.springframework.jdbc.core.JdbcTemplate: DEBUG org.springframework.jdbc.core.StatementCreatorUtils: TRACE 이렇게 값을 찍게 될 경우 아래 그림과 같이 ?가 찍히고 그 아래 실제 들어간 파라미터 ..

JPA 2023.06.22

[펌] 도커란?

가상화란? 가상화란 하나의 서버 자원을 나눠 가지며 성능을 분산시키고, 분산된 서버들이 각기 다른 서비스를 수행할 수 있게 하는 것 을 의미합니다. 가상화를 통해 사용자가 많은 서비스에는 많은 자원을 할당해주고 적은 서비스에는 적게 할당할 수 있습니다. 서버 가상화 서버 가상화란 하나의 물리적 서버 호스트에서 여러 개의 서버 운영 체제를 게스트로 실행할 수 있게 해주는 소프트웨어 아키텍처입니다. 이러한 서버 가상화를 구현해주는 기술은 하이퍼바이저 입니다. 하이퍼바이저는 가상화 기술을 통해 여러 개의 운영체제를 하나의 호스트 OS에서 생성해서 사용할 수 있게 해주는 소프트웨어 입니다. 이렇게 생성된 여러 개의 운영체제는 가상머신 이라는 단위로 구별됩니다. 각 가상머신에는 각각의 운영체제가 설치되어 사용됩니..

Docker 2023.06.22

(코틀린 버전) 안드로이드 푸시알림 spring boot 서버 개발

파이어베이스는 2011년 파이어베이스사가 개발하고 2014년 구글에 인수된 모바일 및 웹 애플리케이션 개발 플랫폼 구글 드라이브와 애널리틱스를 적용해서 어떤 기기에서나 개발할 수 있는 환경을 만들어 주고, 사용자들의 이용횟수, 광고 효과, 문제 발생 빈도 등을 알려줘서 개발자들이 쉽게 활용할 수 있도록 지원 파이어 베이스의 인증 기능을 이용한 SSO(통합 인증)을 지원하는 서비스를 통해 사용자는 로그인을 활동을 쉽게 할 수 있음 파이어베이스는 NoSql 클라우드 데이터베이스에 JSON 형태로 데이터를 저장하고 클라이언트에 실시간으로 동기화 파이어베이스는 HTML , CSS, 자바스크립트 등과 같은 정적 콘텐츠를 빠르고 안전하게 호스팅해줍니다. 또한 SSL을 제공하기 때문에 안전하게 컨텐츠를 전송 컨트롤러..

(코틀린) 람다함수와 고차함수

Lambda 함수 함수의 이름이 없는 익명함수(anonymous function)이라고 합니다. {매개변수 → 실행 코드(몸체)} 위 함수의 구조와 같이 람다(익명)함수는 중괄호 내에 실행문을 입력합니다. 다음은 간단한 예로 문자열을 출력하는 함수입니다. 이 함수를 실행하기 위해서는 함수다음에 인수를 전달하기 위한 ()를 같이 나타내야 합니다. 다음은 전달하는 인수가 별도로 존재하지 않는 경우입니다. {println("Hello")}() // 결과: Hello 람다함수 역시 개체이므로 변수에 저장할 수 있습니다. 이 경우 변수명은 함수이름과 같은 역할을 합니다. 그러므로 객체를 호출할 경우 함수와 같이 적용해야 합니다. 즉, 변수명() val swim={println("swim \n")} swim() /..

(코틀린) 데이터 클래스와 컴패니언 클래스

데이터 클래스 데이터 클래스는 data 키워드로 선언하며 자주 사용하는 데이터를 객체로 묶어 준다. 또한, VO 클래스를 편리하게 이용할 수 있게 해준다. class NonDataClass(val name: String, val email: String, val age: Int) data class DataClass(val name: String, val email: String, val age: Int) fun main(){ val non1 = NonDataClass("kuka", "a@a.com", 10) val non2 = NonDataClass("kuka", "a@a.com", 10) val data1 = DataClass("kuka", "a@a.com", 10) val data2 = DataCl..

(코틀린) 상속과 오버라이딩

클래스 상속 형식 open class Super {// 상속할 수 있게 open 키워드 이용 } class Sub: Super() {// Super를 상속받아 Sub 클래스 선언 } 참고) 매개변수가 있는 상위 클래스의 생성자 호출 open class Super(name: String){ } class Sub(name: String): Super(name){ } 오버라이딩 예시 open class Super { open var someData = 10 open fun someFun(){ println("i am super class function : $someData") } } class Sub: Super(){ override var someData = 20 override fun someFun(){..

(코틀린) 주 생성자와 보조 생성자

주 생성자와 보조 생성자는 모두 클래스의 생성자이다. 따라서, 객체를 생성할 때 호출되는 건 똑같다. 그리고 클래스 안에 주 생성자만 선언하든, 보조 생성자만 선언하든 그것은 개발자 마음이다. 단지, 주 생성자와 보조 생성자를 모두 선언할 경우 보조 생성자로 객체를 생성할 때에는 반드시 주 생성자가 실행되게 만들어야 한다는 규칙이 있다. 이러한 규칙은 필수 매개변수와 실행 구문을 주 생성자에 작성하고 보조 생성자가 실행될 때 주 생성자도 함께 실행되게 하려는 의도이다. 결국 객체를 여러 가지 형태로 생성할 수 있도록 생성자의 매개변수를 다양하게 구성할 때 생성자의 공통된 코드는 주 생성자에 작성하라는 의미로 이해할 수 있다. class User(name: String){ constructor(name: ..

728x90