본문 바로가기
관리자

Project

(22)
Google OAuth2.0 소셜 로그인 플로우 - React, Kotlin(Spring boot), Authorization code grant 방식 혼자 공부하면서 Authorization Code Grant 방식의 Google 소셜 로그인에 대해 정리하였다. 이런 방법 말고도 백엔드에서 모두 처리하는 방식 등 다양한 방식을 공부했다. 프론트에서 모두 처리하는 방식, 백에서 모두 처리하는 방식이 있으나, 여기서는 프론트와 협업하는 방식에 대해서 다룬다. 참고로 프론트에서 모두 처리하는 방식은 google에서 사용자 정보가 담긴 토큰을 프론트로 내려줄 때 URL에 담아서 보내주는 방식이라 보안상 좋지 않다고 한다. 1. Authorization Code Grant 방식 Flow 1차로 프론트에서 Google에 요청해서 1회성 Auth Code를 발급받는다. 프론트가 백에 이를 전달하면, 백에서도 Google에 요청해서 사용자 정보가 포함된 토큰을 전송..
OAuth2 구현 - websecurityconfigureradapter deprecated, NoClassDefFoundError 1. OAuth2 - websecurityconfigureradapter deprecated 참조한 블로그 https://m.blog.naver.com/PostView.naver?blogId=anytimedebug&logNo=221396422266&categoryNo=28&proxyReferer= dependencies에 oauth 관련 라이브러리르 추가해주었다. dependencies { testImplementation(kotlin("test")) implementation("org.springframework.boot:spring-boot-starter:3.1.5") implementation("org.springframework.boot:spring-boot-starter-web:3.1.5") i..
springboot, kotlin, gradle: no main manifest attribute 에러 intellij 프로젝트 문제 intellij로 생성한 spring-boot, kotlin, gradle 구성의 프로젝트가 build 후 jar 명령어로 실행 시 no main manifest attribute라는 에러와 함께 실행이 되지 않았다. 원인 및 해결 원인 빌드된 파일을 자바로 실행할 때, 자바는 MANIFEST.MF라는 파일에 있는 설정 정보를 기반으로 파일을 실행한다. 그런데 intellij에서 아무런 추가 설정이 없으면 MANIFEST.MF에 실행할 main 함수의 위치가 어딘지 적어주질 않아서 위와 같이 에러가 발생하는 것이다. intellij로 프로젝트를 생성했을 때와, Spring initializer로 생성했을 때 build.gradle.kts 파일의 속성값을 하나씩 비교해보면서 무슨 차이인지 알게되었다...
[TIL] 플러터 클래스로 변수값 받기, 다른 클래스로 변수 전달하기 문제상황 아래처럼 주별 날짜를 선택할 수 있는 스크롤바로 WeeklyDatePickerComponent 위젯을 만들고 이를 메인 스크린 클래스에 넣었다. 사용한 라이브러리: weekly_date_picker: ^1.3.0 Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( DateFormat('yyyy/MM/dd').format(_selectedDay ?? DateTime.now()), style: const TextStyle( fontSize: 16, ), ), WeeklyDatePickerComponent( onSelectedDayChanged: handleSelectedDayChanged, ) ], ), 위쪽 2023/07..
[TIL][Flutter] 플러터 localhost - ifconfig, json decode 문제상황 로컬 환경에서 server를 띄워놓고 flutter로 데이터를 가져오려고 아래처럼 코드를 짰다. 그런데 플러터에서는 request를 보낼 수 없다는 에러가 뜨고, server에서는 request를 받았다는 내용이 콘솔에 찍히지 않았다. class Network { final String myPickServerUrl = "http://localhost:8080"; Future getResponse(String url) async { var response = await http.get(Uri.parse('$myPickServerUrl/$url')); if (response.statusCode == 200) { return jsonDecode(utf8.decode(response.bodyBytes)..
[TIL] 플러터-dev_dependencies, caret(^) version, weekly_date_picker(slider) dependencies 와 dev_dependencies의 차이 dependencies는 일반적인 의존성 관리, dev_dependencies는 개발할 때만 포함되는 의존성을 정의해놓는 부분이다. 나중에 프로그램이 동작하기 위해 build되어 Artifact 파일로 변환될 때, dependencies에 정의된 패키지들은 포함되지만 dev_depdencies에 포함된 라이브러리들은 포함되지 않는다. version 앞 caret(^) 기호 ^1.2.3 = 1.x.x 버전까지 계속 업데이트가 호환됨을 의미한다. 메이저 버전의 호환성을 지켜주는 문법이다. ^은 caret으로 라틴어로 부족함을 의미한다. [lib]DatePickerDialog 아래 사진처럼 기본 디자인의 날짜 피커를 생성한다. [lib]weekl..