반응형

 

1. Google Cloud Console 접속:

2. 프로젝트 선택 또는 생성:

  • 기존 프로젝트가 있다면 선택합니다.
  • 새 프로젝트를 만들려면 상단의 프로젝트 선택 드롭다운 메뉴에서 "새 프로젝트"를 선택합니다.

 

 

3. API 및 서비스 대시보드로 이동:

  • 왼쪽 메뉴에서 "API 및 서비스"를 선택합니다.

4. OAuth 동의 화면 설정:

  • 왼쪽 메뉴에서 "OAuth 동의 화면"을 선택합니다.
  • 외부 또는 내부 사용자 유형을 선택하고 "만들기"를 클릭합니다.
  • 필요한 정보를 입력하고 저장합니다.

 

extrenal 을 사용해줍니다.

 

앱 이름 및 연락처만 등록 후 [저장 후 계속]

[저장 후 계속]

테스트 할 계정을 추가해주세요.
테스트 user 의 경우 오픈전에 설정해주어야 계정 테스트가 가능합니다. 

유저 추가후 [저장 후 계속]

 

위 과정까지 입력해주고 넘어갑니다.

여기까지 OAuth 동의 화면 완료

5. 사용자 인증 정보 생성:

  • 왼쪽 메뉴에서 "사용자 인증 정보"를 선택합니다.
  • "사용자 인증 정보 만들기" > "OAuth 클라이언트 ID"를 클릭합니다.

[상단에 사용자 인증 정보 만들기] [OAuth 클라이언트 ID] 버튼 클릭

애플리케이션 유형 선택:

  • "애플리케이션 유형"에서 "웹 애플리케이션"을 선택합니다.

애플리케이션 정보 입력:

  • 이름을 입력합니다 (예: "PopupGo Web Client").
  • "승인된 JavaScript 원본"에 개발 서버 URL을 추가합니다 (예: http://localhost:5173). -> 프론트
  • "승인된 리디렉션 URI"에도 개발 서버 URL을 추가합니다 (예: http://localhost:5173/oauth2/callback). -> 인증 후 redirect 할 주소. 해당 리다이렉트 파라미터에 access_token 을 받아올 수 있음. - 필자는 프론트 리다이렉트로 처리함.
  • 실제 배포 시에는 프로덕션 URL도 추가해야 합니다.

리다이렉션 URI 까지 입력 후 [만들기] 버튼 클릭

잘려진 화면 우측에 id 및 비밀번호가 보입니다. 

 

  • 클라이언트 ID 확인:
    • 생성된 클라이언트 ID가 표시됩니다. 이것이 YOUR_GOOGLE_CLIENT_ID 대신 사용할 값입니다.
  • 클라이언트 ID 보관:
    • 이 클라이언트 ID를 안전하게 보관하세요.
    • 언제든 "사용자 인증 정보" 페이지에서 다시 확인할 수 있습니다.

보안 주의사항:

  • 클라이언트 ID는 공개될 수 있는 정보이지만, 클라이언트 시크릿은 절대 공개되어서는 안 됩니다.
  • 프로덕션 환경에서는 클라이언트 ID를 환경 변수로 관리하는 것이 좋습니다.

이렇게 얻은 클라이언트 ID를 로그인 버튼 있는 파일의 YOUR_GOOGLE_CLIENT_ID 부분에 붙여넣으면 됩니다. 예를 들어:

 

로그인 버튼 클릭시 메소드

loginWithGoogle() {
      const clientId = '~~~~.apps.googleusercontent.com'; // Replace with your actual client ID
      const redirectUri = 'http://localhost:5173/oauth2/callback'; // The URL where you want to handle the response
      const scope = 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile';
      const responseType = 'token';

      const authUrl = `https://accounts.google.com/o/oauth2/auth?` +
                      `client_id=${clientId}&` +
                      `redirect_uri=${redirectUri}&` +
                      `response_type=${responseType}&` +
                      `scope=${scope}`;

      window.location.href = authUrl;
    }

해당 메소드를 실행하면 구글 로그인 할 수 있는 계정이 나옵니다.

 

 

계속을 누르면 링크가 이동 됩니다. 
여기서 리다이렉트를 서버 api 로 받아도 되고, 다시 프론트로 받고 백엔드로 다시 요청해서 처리해도 됩니다.
저는 리다이렉트 url 을 프론트로 했기 때문에 해당 프론트 페이지에서 토큰을 추출 후 서버로 요청했습니다. 

 

프론트 리다이렉트 url 
http://localhost:5173/oauth2/callback 
해당 경로로 프론트 페이지를 만들어 줍니다. 

 

해당 리다이렉트 페이지로 오면 토큰 추출 후 백엔드 api 를 호출해줍니다.

handleOAuth2Callback() {
    const hashParams = new URLSearchParams(window.location.hash.substring(1));
    const accessToken = hashParams.get('access_token');
    console.log(accessToken)
    if (accessToken) {
      fetch('http://localhost:8080/api/oauth2/google', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({ token: accessToken })
      })
      .then(response => response.json())
      .then(data => {
        if (data.success) {
          localStorage.setItem('jwt', data.jwt); // JWT 토큰을 로컬 스토리지에 저장
          this.$router.push('/home');
        } else {
          alert('Authentication failed');
        }
      });
    } else {
      alert('Failed to get access token from URL');
    }
  }


응답 후 처리 방식은 각자 코드에 맞게 수정해주시면 됩니다. 

그리고 프론트 리다이렉트 페이지에서 요청하는 백엔드 api 호출하면 됩니다. 
해당 백엔드 api 에서는 가져온 토큰으로 서버에서 구글 토큰에 해당하는 유저정보를 가지고 옵니다. 

 

@Slf4j
@RestController
@CrossOrigin(origins = "*")
@RequestMapping("/api/oauth2")
public class OAuth2Controller {

    @PostMapping("/google")
    public ResponseEntity<?> googleLogin(@RequestBody Map<String, String> body) {
        log.info("start google login");
        String token = body.get("token");
        log.info("Received token: {}", token);
        String url = "https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=" + token;
        RestTemplate restTemplate = new RestTemplate();
        try {
            log.info("Requesting token info from Google API");
            Map<String, Object> tokenInfo = restTemplate.getForObject(url, Map.class);
            log.info("Token info received: {}", tokenInfo);
            String email = (String) tokenInfo.get("email");
            log.info(email);
            // 사용자 정보를 통해 인증 및 세션 관리 로직 추가
            return ResponseEntity.ok(Map.of("success", true, "email", email));
        } catch (Exception e) {
            log.error("Error during Google login", e);
            return ResponseEntity.status(401).body(Map.of("success", false, "error", e.getMessage()));
        }
    }
}

 

security 가 적용되어 있다면 해당 api 허용되게 수정해주시면 됩니다. 

.requestMatchers("/api/oauth2/**").permitAll()

 

 

혹여나 안된다면 controller 에 cors 허용 되어있는지 확인해주시면 됩니다.

 

위의 코드로 작성해준다면 백엔드 api 에서 oauth 라이브러리를 import 하지 않아도 됩니다. 

반응형
반응형

사이드프로젝트를 배포하기가 자금적으로나 서버를 새로 띄우기 여간 번거롭다.

그래서 무료로 배포할 수 있는 heroku 를 사용해봤다.

 

Heroku 사이트 : https://www.heroku.com/  

 

heroku cli 다운 받기

컴퓨터에서 heroku를 사용하기 위해서는 Heroku CLI(command line interface)를 설치해야 한다. 

heroku login

설치하게 되면 command 창에서 heroku 명령어가 사용가능해 진다.

 

로그인

먼저 터미널에서 heroku login 을 하자

heroku login

 

배포 앱 준비

배포할 앱이 있어야 한다.

샘플로 헤로쿠에서 git 저장소를 만들어놨다.

git clone https://github.com/heroku/java-getting-started
cd java-getting-started

java 서비스를 배포할떄 주의할 점은 application 소스코드 안에 pom.xml 이 존재 해야한다.

그리고 굳이 github 이 아니고 bitbucket 등 타 git 레포로 해도 된다.

 

앱 배포하기

$ heroku create

create 를 하면 헤로쿠 사이트에 임의의 이름을 가진 프로젝트가 생긴걸 확인할 수 있다.

$ git push heroku main

프로젝트가 생성됐으면 위 명령어로 git 으로 헤로쿠에 푸쉬를 하면 된다.

main 명령어가 동작하지 않으면

 

$ heroku git:remote -a 생성된프로젝트명

으로 git 을 헤로쿠에 연결시켜주자.

그리고

$ git push heroku master

으로 헤로쿠에 업로드를 하면 자동으로 빌드하고 배포 까지 된다.

 

해당 내용은 Deploy 탭에 명시된 내용이다. 

 

로그보기

헤로쿠로 로그도 볼 수 있다.

 

 

가이드

devcenter.heroku.com/articles/getting-started-with-java#deploy-the-app

 

 

 

반응형

'서비스평가 및 사용' 카테고리의 다른 글

Buy me a coffee 블로그로 후원받기  (0) 2020.05.26
Github gist 사용해보기  (0) 2020.05.22
정리잘 된 개발 블로그 정리  (1) 2020.05.15
반응형

주식을 하다보면 공시를 확인해야 하는데 매번 사이트를 들어가서 공시를 보기 여간 불편하기 때문에 

dart 에서 제공하는 api 를 사용해보자

 

 

전자공시시스템(DART ; Data Analysis, Retrieval and Transfer System)은 상장법인 등이 공시서류를 인터넷으로 제출하고, 투자자 등 이용자는 제출 즉시 인터넷을 통해 조회할 수 있도록 하는 종합적 기업공시 시스템이다.

 

오픈 API 를 신청하려면 아래 주소로 접속하자

opendart.fss.or.kr/intro/main.do

여기서 [인증키 신청]을 통해 접속할 수 있는 계정을 발급받고 더블어 인증키를 받자

[오픈API 이용현황] 메뉴를 들어가면 인증키가 바로 나온다.

 

 

DART 오픈 API 개발가이드 - drive.google.com/file/d/1nI6c5-fX-6TE357BWxYp7udf6BTED1U3/view

api 를 편히 쓰라고 python 은 라이브러리가 생겼다.

DART python 라이브러리 소스코드 - github.com/josw123/dart-fss  

dart python 라이브러리 문서 - dart-fss.readthedocs.io/en/latest/

해당 라이브러리 사용 하지 않아도 api 를 사용해도 된다.

나 같은 경우는 파이썬 잘 몰라서 스프링으로 하려고 한다.

 

python 코드 에서 api 콜 하는 부분 만 보고 직접 만들어주면 된다.

 

샘플 API 사용 예시

https://opendart.fss.or.kr/api/company.json?crtfc_key={발급받은API키}&corp_code=00126380

API 키를 발급 받았으면 다음처럼 사용 가능하다.

 

기업개황 API는 대표자명, 사업자등록번호 등의 기업의 기본 정보를 제공합니다. JSON 포멧 요청 URL은 https://opendart.fss.or.kr/api/company.json이고 다음 두 파라미터를 입력해야 한다.

  • crtfc_key: 발급받은 인증키
  • corp_code: 공시대상회사 고유번호
{
    "status": "000",
    "message": "정상",
    "corp_code": "00126380",
    "corp_name": "삼성전자(주)",
    "corp_name_eng": "SAMSUNG ELECTRONICS CO,.LTD",
    "stock_name": "삼성전자",
    "stock_code": "005930",
    ~~
    ~~
    ~~
    ~~
}

 

주의사항 

  • Open DART 및 DART 홈페이지의 경우 분당 100회 이상 요청시 서비스가 제한될 수 있음
  • 개인용은 일일 사용량은 10,000건으로 제한 되어 있습니다.

 

위 캡쳐본은 

DART 오픈 API 개발가이드 - drive.google.com/file/d/1nI6c5-fX-6TE357BWxYp7udf6BTED1U3/view

에 있는 내용입니다.

API 주소까지 다 있습니다.

반응형
반응형

업무하다가 웹사이트를 빈번하게 들어가서 검색하기 어려운 것들이 조금 있어서,

메신저에서 검색하고 싶은 내용들이 많아서 봇을 만들어 보려고 한다.

 

텔레그램 봇 기능

https://core.telegram.org/bots 

에 명시된 기능 가능

 

텔레그램 bot api 문서

https://core.telegram.org/api

문서가 있지만 이거로 보고 개발하기 내용물이 많아 라이브러리를 사용하는게 낫겠다.

 

우선 이런 API 들을 사용하려면 키를 발급 받아야 한다.

 

bot 만들기 및 API 키 발급하기

텔레그램 검색창에 BotFather 검색 후 말을 건다.

BotFather 를 사칭하는 애가 ㅁ낳으니 위에서 처럼 ⌵ 로 체크된 공식 파더한테 말을 걸어라

방에 들어가면 위와 같이 help 메시지가 온다.

 

/newbot 이라고 채팅해서 봇을 만들자

        - [ /newbot ] 명령어를 입력하면, 봇의 이름을 입력하라고 함.

         - 봇의 이름이 'bot'으로 끝나지 않는 경우 생성되지 않음.

         - 정상적으로 등록되면 'HTTP API Access Token'을 발급해줌.

 

방이름과 bot 아이디는 변경 가능하다.

방이름 변경 - /mybots

봇이름 변경 - /setname

 

봇을 만들면 API 키값을 준다.

 

 

JAVA API 사용

Java

둘 중에 하나 골라서 사용하면 된다.

 

나는 https://github.com/rubenlagus/TelegramBots 이 API 를 골랐다. 이유는 딱히 없다.

 

자바 API 라이브러리

<dependency>
  <groupId>org.telegram</groupId>
  <artifactId>telegrambots</artifactId>
  <version>5.1.1</version>
</dependency>

예제코드

public static void main(String[] args) {
	SpringApplication.run(TelegramApplication.class, args);

	try {
		TelegramBotsApi api = new  TelegramBotsApi(DefaultBotSession.class);
		api.registerBot(new TestHandlers());
	} catch (TelegramApiException e) {
		e.printStackTrace();
	}

}

위 처럼 TelegramBotsApi 객체 생성 후 봇 정보를 기입한 클래스를 registerBot 에 등록만 해주면 된다.

세부로직은 등록한 클래스 TestHandlers 에서 작성한다.

 

public class TestHandlers extends TelegramLongPollingBot {

    @Override
    public String getBotUsername() {
        return "방제말고 bot 이름";
    }

    @Override
    public void onUpdateReceived(Update update) throws TelegramApiException {
        Message message = update.getMessage();
        log.info(message.toString());
        if (update.hasMessage() && update.getMessage().hasText()) {
            SendMessage sendMessage = new SendMessage();
            sendMessage.setChatId(update.getMessage().getChatId().toString());
            sendMessage.setText("자동 응답으로 보낼 메시지");
            execute(sendMessage);
        }
    }

    @Override
    public String getBotToken() {
        return "API_발급된키 넣어주세요.";
    }
}    

봇으로 등록 할 클래스 에는 TelegramLongPollingBot 을 상속 받아줘서 token 값 및 bot name 을 입력해서 

onUpdateReceived 에 로직 처리를 해주면 된다.

Update 클래스에는 유저 이름 및 id 등 여러 데이터가 넘어온다.

 

위와 같이 스프링 서버나 자바 를 run 시켜주면

telegram.me/봇이름

와 같이 웹 url 로 이동해 텔레그램 메신저로 이동해서 등록된 봇을 확인할 수 있다.

 

 

 

굳이 java api 로 하지않고 텔레그램 api 를 그대로 사용해도 된다.

반응형
반응형

블로그및 사이트에 후원 위젯을 받을 수 있는 사이트를 소개하겠습니다.

https://www.buymeacoffee.com/

 

Buy Me A Coffee | Where creators make money doing what they love

Buy Me A Coffee is the best way for creators and artists to accept one-off support and membership from their fans.

www.buymeacoffee.com

위 사이트 이동 후

구글 및 페이스북 계정으로 연동계정으로 빠르게 가입~

가입 후 화면

Settings 메뉴 > General > Payments 를 PayPal 로 연동

PayPal 계정이 없다면 계정생성 후 연동관련 메일을 받아 확인하면 됩니다.

 

여기에서 블로그를 작성하고 블로그 처럼 사용하실 수도 있지만,

해당 사이트의 좋은 기능 중 하나가 버튼 위젯을 내 블로그나 사이트에 추가 가능 하다는 점입니다.

 

Overview >

Button generator 로 html code 를 생성후 내 블로그 html 에 붙여넣어 사용하실 수도 있고,

저의 경우 Widget generator 를 제 블로그에 삽입하였습니다.

 

둘의 차이는 Widget generator 는 

코드를 삽입한 블로그 자체에서 결제까지 가능.

 

Button generator 는 링크로 내 블로그로 이동됩니다.

 

 

저의 경우 이 과정 중에서 혼선이 있었던 점은

내가 로그인한 buymeacofee, 즉 본인 후원 결제는 안되기 때문에 왜 안되는지 조금 헤맸습니다.

반응형

'서비스평가 및 사용' 카테고리의 다른 글

[heroku] 시작하기 java 배포  (0) 2021.04.29
Github gist 사용해보기  (0) 2020.05.22
정리잘 된 개발 블로그 정리  (1) 2020.05.15
반응형

블로그 플랫폼 관련된 글을 보면 종종 gist 라는 말이 나온다.

 

github 에서 만든 코드 및 글을 공통으로 사용하기 위해 만든 저장소 라고 보면 된다.

https://gist.github.com/

 

Discover gists

GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

우선 시작으로 아무 글이나 적어봤다.

오른쪽 위의 Embed 로 나타난 스크립트 소스를 내 블로그에 담으면 해당 내용을 사용할 수 있다.

여러 블로그를 운영하는 사람한테 좋은 기능일 것 같다.

 

github 를 안쓰고 개인 pc 에 gitlab 을 호스팅해서 안쓰려고 했는데, github 에는 좋은 기능들이 많다....

 

위에서 만든 test 글 스크립트를 넣었다. 

아래 글을 수정하려면 gist 를 고치면 된다.

반응형
반응형

Mkyong

자바 예제소스만 버젼별로 많이 올려주시는데, 이거로만 튜토리얼 공부해도 될 정도로 다양한 내용 예제 소스로 영문으로만 정리되어 있습니다.

https://mkyong.com/

 

Mkyong.com - Learn Java and Spring.

Focus on Core Java and Spring Frameworks, with simple examples, code snippets, and tutorials.

mkyong.com

 

javable

자바 관련 컨텐츠로 좋은 코드관련해서 헷갈릴만한 내용들이 많이 있습니다.
우아한형제들 기술블로그랑 관련 있어보이네요.

https://woowacourse.github.io/javable/

 

Home

우아한테크코스 코드리뷰 모음 공간

woowacourse.github.io

 

제이 블로그

자바 관련 컨텐츠가 많습니다. 자바 뿐만 아니라 자바를 쓰면서 사용할 수 있는 devops 관련된 기술 블로그 또한 많습니다.

https://pjh3749.tistory.com/

 

JayTech의 기술 블로그

개발, 알고리즘 등 기술 관련 블로그입니다. 추가로 저의 일상, 미국 생활이야기, 여행 관련 글도 씁니다.

pjh3749.tistory.com

velopert 블로그

https://velog.io/@velopert

 

velopert (Minjun Kim) - velog

2019.log 벌써 2019년도 끝났다. 쓸 이야기가 많고 생각을 정리할 것도 많아서 결국 2020년 1월 1일에 릴리즈하고 말았다! 역시, 회고록은 12월 초부터 작성하기 시작해야 한다. 내년엔 꼭 회고록을 부�

velog.io

 

Outsider's Dev Story

이 분도 여러가지 주제로 꾸준히 블로그 하시는 분이네요.
IT 뉴스도 유익한 정보가 많습니다.

https://blog.outsider.ne.kr/

 

기술 뉴스 #149 : 20-05-01 :: Outsider's Dev Story

# 웹개발 관련 * **[await의 함정, 숨은 병목을 찾자](https://jaeheon.kr/161)** : `async`, `await`를 사용하면 비동기 코드를 동기처럼 읽기 쉽게 작성할 수 있지만 동시에 실행해도 되는 코드도 `await`로 인...

blog.outsider.ne.kr

 

유명하신분들 블로그 천천히 업로드 예정입니다.

반응형

'서비스평가 및 사용' 카테고리의 다른 글

[heroku] 시작하기 java 배포  (0) 2021.04.29
Buy me a coffee 블로그로 후원받기  (0) 2020.05.26
Github gist 사용해보기  (0) 2020.05.22

+ Recent posts