ToyProjects๐Ÿงธ/Dalmuriโญ

[Dalmuri] Java๋กœ Google Cloud Nature Language API ํ˜ธ์ถœํ•ด์„œ ๊ฐ์ • ๋‹ค์ด์–ด๋ฆฌ ๋งŒ๋“ค๊ธฐ

JanuDev 2025. 10. 16. 17:28

๐ŸฅตAPI ์—ฐ๊ฒฐ ํ›„๊ธฐ : ์ฝ”๋“œ ์งœ๋Š”๊ฒƒ๋ณด๋‹ค ์ดˆ๊ธฐ ์„ธํŒ…์ด ํ›จ์”ฌ ๋” ์–ด๋ ต๋‹ค..

 

์—ฌ๋Ÿฝ๋‹ค๊ธฐ๋ณด๋‹จ ๋ฐฉ๋ฒ•๋„ ๋งŽ๊ณ  ์ฝ์–ด์•ผ ํ•˜๋Š” ๊ณต์‹ ๋ฌธ์„œ๋„ ๋งŽ์•„์„œ, ์ •์ž‘ ๋‚ด๊ฐ€ ์›ํ•˜๊ฑฐ๋‚˜ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ฐพ๋Š”๋ฐ ๋” ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ ๊ฒƒ ๊ฐ™๋‹ค. 

๋‚œ ๊ทธ์ € ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ธ์ฆํ•˜๊ณ  ์‹ถ์„ ๋ฟ์ธ๋ฐ... ๊ฐ‘์ž๊ธฐ ๋ƒ…๋‹ค ํŒŒ์ด์ฌ์„ ์„ค์น˜ํ•˜๋ผ.... ์–ด์ฉŒ๊ตฌ..... ๊ทผ๋ฐ ๋ญ˜ ๋˜ ๋” ์„ค์น˜ํ•˜๊ธฐ์—” ์ปดํ“จํ„ฐ ์šฉ๋Ÿ‰์ด ๋„ˆ๋ฌด ์ œํ•œ์ ์ด๋‹ˆ๊นŒ ์„ค์น˜ํ•˜๋Š”๊ฒƒ๋„ ๊ป„๊ทธ๋Ÿฌ์šด ์‹ฌ์ •์ด๋‹ค.

๊ฒฐ๊ตญ ๊ณต์‹ ๋ฌธ์„œ ์ฐพ๋Š”๊ฑด Gemini์—๊ฒŒ ๋ฌผ์–ด๋ด์„œ ์ฐพ์•˜๋‹ค. ์ถœ์ฒ˜๊นŒ์ง€ ํ‘œ๊ธฐํ•ด์ฃผ๋‹ˆ๊นŒ ๋„ˆ๋ฌด ํŽธํ•˜๋”๋ผ. ai ์‚ฌ์šฉ ์•ˆํ•˜๊ณ ๋„ ํ˜ผ์ž์„œ ๊ณต์‹๋ฌธ์„œ ์ฐพ์„ ์ค„ ์•Œ์•„์•ผ ํ• ํ…๋ฐ... ๊ตฌ๊ธ€ ๊ณต์‹๋ฌธ์„œ๋Š” ์ฐพ์•„์„œ ์ฝ๊ณ  ์‹คํ–‰ํ•˜๋Š” ๊ณผ์ •๋ณด๋‹ค ํ•„์š”ํ•œ๊ฑธ ์ฐพ๋Š” ๊ณผ์ •์ด ์ •๊ธ€๊ฐ™์•„์„œ ๋” ํž˜๋“ค๋‹ค.

 

โ“์™œ Google Cloud Nature Language API๋ฅผ ์„ ํƒํ–ˆ๋Š”๊ฐ€?

์‚ฌ์‹ค ๊ตฌ๊ธ€๋ณด๋‹ค ํ›จ์”ฌ ๋” ์‰ฌ์›Œ๋ณด์ด๋Š” API์›น์‚ฌ์ดํŠธ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋‹ค. ๋ฐ”๋กœ ๋งก๊น€ API์˜ ๊ฐ์„ฑ๋ถ„์„ API์˜€๋‹ค.

๊ทผ๋ฐ ํฌ์ŠคํŠธ๋งจ๊ณผ ์‚ฌ์ดํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฐ๋ชจ ๊ธฐ๋Šฅ์„ ์ด์šฉํ–ˆ๋Š”๋ฐ...

??? ๋‚˜ํ•œํ…Œ ์™œ๊ทธ๋Ÿฌ์„ธ์š”ใ… ใ…œใ…œ

๋‚ด๊ฐ€ ํฌ์ŠคํŠธ๋งจ์„ ์ž˜๋ชป ์‚ฌ์šฉํ•ด์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‚˜? ์‹ถ๊ธฐ๋„ ํ–ˆ๊ณ , ์›น์‚ฌ์ดํŠธ์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋ฐ๋ชจ๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š”๊ฑด ๋งคํ•œ๊ฐ€์ง€๋ผ ๋ฌธ์˜๋ฅผ ๋“œ๋ ธ๋”๋‹ˆ

์ €ํ•œํ…Œ ์™œ๊ทธ๋Ÿฌ์„ธ์š”

์˜จ์„ธ์ƒ์ด ๋‚ด ๊ฐœ๋ฐœ๊ณต๋ถ€๋ฅผ ๋ง‰๋Š” ๋А๋‚Œ์ด์–ด์„œ ๋‹ค์†Œ ์งœ์ฆ์ด ๋‚ฌ๋‹ค

๊ทธ๋ž˜์„œ ๋‹ค๋ฅธ ๊ฐ์ •๋ถ„์„ API๋ฅผ ์ฐพ๋‹ค๊ฐ€ Google์—์„œ ์ œ๊ณตํ•˜๋Š”๊ฑธ ๋ฐœ๊ฒฌํ–ˆ๋˜ ๊ฒƒ..

๊ตฌ๊ธ€์—์„œ ์ œ๊ณตํ•˜๋Š” API ๊ณต์‹๋ฌธ์„œ ์ฝ๊ณ  ๊ตฌํ˜„ํ•˜๋Š”๊ฒƒ๋„ ๊ฐœ๋ฐœ ๊ณต๋ถ€์— ๋„์›€ ๋  ๊ฒƒ ๊ฐ™์•„์„œ ์‚ฌ์šฉํ–ˆ๋‹ค.

 

โ“์™œ Java์—์„œ ๊ตฌํ˜„ํ•˜์˜€๋Š”๊ฐ€?

๋‚ด ํ”„๋กœ์ ํŠธ์˜ ํ”„๋ก ํŠธ๋‹จ์ด Vite + React์˜€๋˜ ๊ฒƒ์ด๋‹ค

Node.js๋ฅผ ๊น”์•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋ก ํŠธ์—์„œ๋„ ์„œ๋ฒ„๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‚˜? ๊ธฐ๋Œ€๋ฅผ ํ–ˆ์—ˆ๋Š”๋ฐ, ์‹œ๋„ํ•ด๋ณด๋‹ˆ ์•ˆ๋ฌ๋‹ค.

๊ฒฐ๊ตญ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์—์„œ API ํ˜ธ์ถœ์„ ์ž‘์„ฑํ•˜๋Š”๊ฒŒ ๋” ๋ฐ”๋žŒ์งํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ๋ฐฑ๋‹จ์ธ Java + Spring ํŒจํ‚ค์ง€์—์„œ ์ž‘์„ฑํ–ˆ๋‹ค.

๋‚˜์•ผ ๋ญ Java์—์„œ ๊ตฌํ˜„ํ•˜๋Š”๊ฒŒ ๋” ํŽธํ•˜๋‹ˆ๊นŒ ์ข‹์ง€๋งŒ... ๊ธฐ์™•์ด๋ฉด ์‹œ๋„ํ•œ ์  ์—†์—ˆ๋˜ Node.js์—์„œ ๊ตฌํ˜„ํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ ์‚ด์ง ์•„์‰ฌ์› ๋‹ค

 

โ“์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋Š”๊ฐ€?

์ฐธ๊ณ  ์‚ฌ์ดํŠธ๋Š” ์—ฌ๊ธฐ

์šฐ์„  ๊ตฌ๊ธ€์—์„œ ์ œ๊ณตํ•˜๋Š” ์˜์กด์„ฑ์„ ๊น”๊ณ  ์˜ˆ์‹œ๋ฌธ์„ ๊ทธ๋Œ€๋กœ ์ž‘์„ฑํ•˜์˜€๋‹ค.

[์˜์กด์„ฑ ์ถ”๊ฐ€]

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>libraries-bom</artifactId>
      <version>26.68.0</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-language</artifactId>
  </dependency>
</dependencies>

[๋ฉ”์†Œ๋“œ ์ž‘์„ฑ]

public ResponseEntity<DiaryResponseDTO> getDiaryScore(@RequestBody DiaryRequestDTO request) {
  DiaryResponseDTO response = new DiaryResponseDTO();
  try (LanguageServiceClient language = LanguageServiceClient.create()) {
    String text = request.getText(); 
    Document doc = Document.newBuilder() // Google Cloud Natural Language API์— ๋„˜๊ฒจ์ค„ Document ๊ฐ์ฒด ์ƒ์„ฑ
		.setContent(text)  // ๋ถ„์„ํ•  ์‹ค์ œ ํ…์ŠคํŠธ ์„ค์ •
		.setType(Type.PLAIN_TEXT)  // ๋ถ„์„ ๋Œ€์ƒ์ด ์ผ๋ฐ˜ ํ…์ŠคํŠธ์ž„์„ ์ง€์ •
		.build();  // ์ตœ์ข… Document ๊ฐ์ฒด ์ƒ์„ฑ
	Sentiment sentiment = language
        .analyzeSentiment(doc)  // Google Cloud์— ๊ฐ์ • ๋ถ„์„ ์š”์ฒญ, ํ…์ŠคํŠธ์˜ ๊ฐ์ •์„ ๋ถ„์„ํ•ด์„œ ์ ์ˆ˜ ๋ฐ˜ํ™˜
		.getDocumentSentiment();  // ๋ฌธ์„œ ์ „์ฒด์— ๋Œ€ํ•œ ํ‰๊ท  ๊ฐ์ • ์ ์ˆ˜(Sentiment)๋ฅผ ๊ฐ€์ ธ์˜ด

	response.setScore(sentiment.getScore());
	response.setMagnitude(sentiment.getMagnitude());

	return ResponseEntity.ok(response);

  } catch (Exception e) {
    e.printStackTrace();
	System.err.println("Google Cloud API ํ˜ธ์ถœ ์ค‘ ์˜ˆ์™ธ ๋ฐœ์ƒ: " + e.getMessage());

	return ResponseEntity.badRequest().build();
  }
}

์ด๋Œ€๋กœ ์ž‘์„ฑํ•˜๊ณ  ๋‹ค์‹œ ์‹คํ–‰ํ•ด๋ดค๋”๋‹ˆ...

java.io.IOException: Your default credentials were not found. 
To set up Application Default Credentials for your environment, 
see https://cloud.google.com/docs/authentication/external/set-up-adc.
at cohttp://m.google.auth.oauth2.DefaultCredentialsProvider.getDefaultCredentials(DefaultCredentialsProvider.java:127)
... ์ƒ๋žต
Google Cloud API ํ˜ธ์ถœ ์ค‘ ์˜ˆ์™ธ ๋ฐœ์ƒ: 
Your default credentials were not found. 
To set up Application Default Credentials for your environment, 
see https://cloud.google.com/docs/authentication/external/set-up-adc.

๋ญ ์ด๋Ÿฐ ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค....

์ฐพ์•„๋ณด๋‹ˆ ์—ญ์‹œ๋‚˜ ์˜ˆ์ƒ๋Œ€๋กœ ADC(Application Default Credentials)๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์•„์„œ ๊ทธ๋ ‡๋‹ค.

๊ทธ๋ž˜์„œ ADC ์„ค์ • ๋ฐฉ๋ฒ• ์ฐพ์•„๋ณด๋‹ค๊ฐ€ gcloud CLI ์„ค์น˜๋ฅผ ํ•ด์•ผํ•˜๊ณ .. ๊ทธ๊ฑฐ ์„ค์น˜ํ•˜๋ ค๋ฉด ํŒŒ์ด์ฌ ๊น”์•„์„œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •ํ•ด์•ผํ•˜๊ณ ... ํฌ๊ธฐํ• ๊นŒ ์‹ถ๋˜ ์ฐฐ๋‚˜ Gemini์นœ๊ตฌ์—๊ฒŒ ๋ฌผ์–ด๋ด์„œ ๋ฐฉ๋ฒ•์„ ๊ฒจ์šฐ ์ฐพ์•˜๋‹ค.

 

๊ฐœ์ธ์ ์œผ๋กœ ๋А๋ผ๊ธฐ์—” ์—ฌํƒœ๊ป ๋ณธ ADC ์„ค์ • ๋ฐฉ๋ฒ• ์ค‘ ๊ฐ€์žฅ ๊ฐ„ํŽธํ•ด์„œ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ๋‹ค. 

์„ค์ • ๋ฌธ์„œ๋Š” ์—ฌ๊ธฐ ์ฐธ๊ณ ํ•  ๊ฒƒ 

๋Œ€์‹  ๊ตฌ๊ธ€ ๊ณ„์ •์œผ๋กœ ํ•ด์•ผํ•˜๋Š” ์ดˆ๊ธฐ ์„ธํŒ…์ด ์ข€ ๋ณต์žกํ•˜๋‹ค.

 

[์ด๊ฑด Gemini ์„ค๋ช…]

๋”๋ณด๊ธฐ

๋„ค, Google Cloud API๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋น„์Šค ๊ณ„์ • ํ‚ค ํŒŒ์ผ์„ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•„์ฃผ ์ž์„ธํ•˜๊ณ  ์„ธ๋ฐ€ํ•˜๊ฒŒ ์•ˆ๋‚ดํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ Google Cloud์—์„œ **ADC(Application Default Credentials)**๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฐ€์žฅ ํ™•์‹คํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.


๐Ÿ”‘ ์„œ๋น„์Šค ๊ณ„์ • ํ‚ค ํŒŒ์ผ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ • ์ƒ์„ธ ๊ฐ€์ด๋“œ

์ด ๊ณผ์ •์€ ํฌ๊ฒŒ โ‘  GCP์—์„œ ํ‚ค ํŒŒ์ผ ์ƒ์„ฑ, โ‘ก ํ‚ค ํŒŒ์ผ์„ ๋กœ์ปฌ์— ๋‹ค์šด๋กœ๋“œ, โ‘ข ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •์˜ ์„ธ ๋‹จ๊ณ„๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

 

๋‹จ๊ณ„ 1: GCP์—์„œ ์„œ๋น„์Šค ๊ณ„์ • ๋ฐ ํ‚ค ํŒŒ์ผ ์ƒ์„ฑ

Google Cloud Platform ์ฝ˜์†”์—์„œ API ํ˜ธ์ถœ ๊ถŒํ•œ์„ ๊ฐ€์ง„ ์ „์šฉ ๊ณ„์ •(์„œ๋น„์Šค ๊ณ„์ •)์„ ๋งŒ๋“ค๊ณ , ๊ทธ ์ธ์ฆ์„œ(ํ‚ค ํŒŒ์ผ)๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

  1. Google Cloud Console ์ ‘์†: [Google Cloud Console]์— ์ ‘์†ํ•˜์—ฌ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  2. ์„œ๋น„์Šค ๊ณ„์ • ํŽ˜์ด์ง€๋กœ ์ด๋™: ์™ผ์ชฝ ๋ฉ”๋‰ด์—์„œ IAM ๋ฐ ๊ด€๋ฆฌ์ž(IAM & Admin) > **์„œ๋น„์Šค ๊ณ„์ •(Service Accounts)**์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  3. ์ƒˆ ์„œ๋น„์Šค ๊ณ„์ • ์ƒ์„ฑ:
    • ์„œ๋น„์Šค ๊ณ„์ • ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋ฆ„(์˜ˆ: nl-api-caller)์„ ์ง€์ •ํ•˜๊ณ  ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  4. ์—ญํ•  ๋ถ€์—ฌ (๊ฐ€์žฅ ์ค‘์š”):
    • ์ด ์„œ๋น„์Šค ๊ณ„์ •์— ํ”„๋กœ์ ํŠธ ์•ก์„ธ์Šค ๊ถŒํ•œ ๋ถ€์—ฌ ๋‹จ๊ณ„์—์„œ ์—ญํ• ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฒ€์ƒ‰์ฐฝ์— "Cloud Natural Language API ์‚ฌ์šฉ์ž" ๋˜๋Š” **"Cloud Natural Language API User"**๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์„ ํƒํ•˜๊ณ  ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. (์ด ์—ญํ• ์ด API ํ˜ธ์ถœ ๊ถŒํ•œ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.)
  5. ํ‚ค ์ƒ์„ฑ ๋ฐ ๋‹ค์šด๋กœ๋“œ:
    • ์„œ๋น„์Šค ๊ณ„์ •์ด ์ƒ์„ฑ๋œ ํ›„, ํ•ด๋‹น ๊ณ„์ •์„ ํด๋ฆญํ•˜์—ฌ ์ƒ์„ธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
    • ํ‚ค(Keys) ํƒญ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
    • ํ‚ค ์ถ”๊ฐ€ > ์ƒˆ ํ‚ค ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    • ํ‚ค ์œ ํ˜•์œผ๋กœ JSON์„ ์„ ํƒํ•˜๊ณ  ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    • JSON ํŒŒ์ผ์ด ์ž๋™์œผ๋กœ ๋กœ์ปฌ ์ปดํ“จํ„ฐ์— ๋‹ค์šด๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. (์˜ˆ: my-project-xxxxxxxxxx.json)

๋‹จ๊ณ„ 2: JSON ํ‚ค ํŒŒ์ผ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๊ด€

๋‹ค์šด๋กœ๋“œํ•œ JSON ํŒŒ์ผ์€ ๊ณง ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์„ ์™ธ๋ถ€์— ๋…ธ์ถœํ•˜๊ฑฐ๋‚˜ Git ์ €์žฅ์†Œ์— ์˜ฌ๋ฆฌ๋ฉด ์ ˆ๋Œ€ ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

  1. ํŒŒ์ผ ๊ฒฝ๋กœ ํ™•์ธ: ๋‹ค์šด๋กœ๋“œํ•œ JSON ํŒŒ์ผ์„ Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์•ˆ์ „ํ•œ ์œ„์น˜๋กœ ์˜ฎ๊น๋‹ˆ๋‹ค.
    • ์˜ˆ์‹œ ๊ฒฝ๋กœ: C:\Users\YourName\gcp-keys\my-project-xxxxxxxxxx.json
    • ์˜ˆ์‹œ ๊ฒฝ๋กœ: /home/user/gcp-keys/my-project-xxxxxxxxxx.json
  2. ํŒŒ์ผ ์ด๋ฆ„ ๋ณต์‚ฌ: ํŒŒ์ผ์˜ ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ๋ณต์‚ฌํ•ด ๋‘ก๋‹ˆ๋‹ค.

๋‹จ๊ณ„ 3: ํ™˜๊ฒฝ ๋ณ€์ˆ˜ GOOGLE_APPLICATION_CREDENTIALS ์„ค์ •

์ด์ œ Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ๋•Œ, Google Cloud ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ด ํ‚ค ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ”๋กœ ๊ทธ ํ„ฐ๋ฏธ๋„ ์„ธ์…˜์—์„œ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ–ฅ๏ธ Windows (PowerShell/CMD)

  1. PowerShell ๋˜๋Š” CMD๋ฅผ ์—ฝ๋‹ˆ๋‹ค.
  2. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๊ณ , ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ๋ณธ์ธ์˜ ์‹ค์ œ ๊ฒฝ๋กœ๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. PowerShell
     
    # PowerShell์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ (๊ถŒ์žฅ)
    $env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\YourName\gcp-keys\my-project-xxxxxxxxxx.json"
    
    # CMD๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
    set GOOGLE_APPLICATION_CREDENTIALS=C:\Users\YourName\gcp-keys\my-project-xxxxxxxxxx.json
    
  4. ๊ฐ™์€ ํ„ฐ๋ฏธ๋„ ์„ธ์…˜์—์„œ Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค (์˜ˆ: mvn spring-boot:run ๋˜๋Š” IDE์—์„œ ์‹คํ–‰).

๐Ÿง Linux / macOS (Bash/Zsh)

  1. ํ„ฐ๋ฏธ๋„์„ ์—ฝ๋‹ˆ๋‹ค.
  2. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๊ณ , ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ๋ณธ์ธ์˜ ์‹ค์ œ ๊ฒฝ๋กœ๋กœ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
  3. Bash
     
    export GOOGLE_APPLICATION_CREDENTIALS="/home/user/gcp-keys/my-project-xxxxxxxxxx.json"
    
  4. ๊ฐ™์€ ํ„ฐ๋ฏธ๋„ ์„ธ์…˜์—์„œ Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

[์ด๊ฑด ๋‚ด์„ค๋ช…]

 

1. ์„œ๋น„์Šค ํŽ˜์ด์ง€ > IAM ๋ฐ ๊ด€๋ฆฌ์ž > ์„œ๋น„์Šค ๊ณ„์ • ํ™”๋ฉด์œผ๋กœ ์ด๋™

์œ„์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋ณด์—ฌ์•ผ ํ•œ๋‹ค.

 

2. ์„œ๋น„์Šค ๊ณ„์ •์„ ๋งŒ๋“ค๊ณ  ์—ญํ•  ๋ถ€์—ฌ

์ฐธ๊ณ ๋กœ ์—ญํ•  ๋ถ€์—ฌ๊ฐ€ ์ œ์ผ ์ค‘์š”ํ•œ๋ฐ, ๋‚œ ์•ˆ์ „ํ•˜๊ฒŒ ๋ชจ๋“  ๊ถŒํ•œ์ด ์žˆ๋Š” '์†Œ์œ ์ž'๋กœ ์ง€์ •ํ•˜์˜€๋‹ค.

์–ด์ฐจํ”ผ ๊ตฌ๊ธ€์—์„œ ์„ค์ •ํ•œ ํ”„๋กœ์ ํŠธ ์‚ฌ์šฉ์ž๋Š” ๋‚˜ ํ•˜๋‚˜๋ฐ–์— ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค

์ด๊ฑด ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ถŒํ•œ์„ ์ฃผ๋ฉด ์ข‹์„ ๋“ฏ ํ•œ๋ฐ, ์–ด์จŒ๋“  ํ™•์‹คํ•œ๊ฑด APIํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•œ ๊ถŒํ•œ์„ ์ค˜์•ผ ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ Cloud Natural Language API User๊ถŒํ•œ์„ ์ฐพ์•„์„œ ์„ค์ •ํ•˜๋ผ๋Š”๋ฐ, ๋„์ €ํžˆ ๋ชป์ฐพ๊ฒ ์–ด์„œ ๊ทธ๋ƒฅ '์†Œ์œ ์ž'๋กœ ์ง€์ •ํ–ˆ๋‹ค. ์–ด์ฐจํ”ผ ๋‚˜๋งŒ ์“ฐ๋Š” ํ”„๋กœ์ ํŠธ๋‹ˆ๊นŒ ์–ด๋–ค ๊ตฌ์„ฑ์›์ด๋“  ๊ถŒํ•œ์€ ์ƒ๊ด€ ์—†์œผ๋‹ˆ๊นŒ....์ด๊ฑด ์•Œ๊ฒŒ๋˜๋ฉด ๋‚˜์ค‘์— ์ •๋ฆฌํ•˜๊ฒ ๋‹ค.

์–ด์จŒ๋“  ์„œ๋น„์Šค ๊ณ„์ •์„ ๋งŒ๋“ค๋ฉด key๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์„ ์ค€๋น„๊ฐ€ ๋œ๊ฑฐ๋‹ค. 

 

3. ํ‚ค ๋ฐœ๊ธ‰

์„œ๋น„์Šค ๊ณ„์ • ์˜†์— ํ‚ค ํƒญ์ด ์žˆ๋Š”๋ฐ ๊ทธ๊ฑฐ ํด๋ฆญํ•œ๋‹ค.

๊ทธ๋Ÿผ ์œ„์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋‚˜์˜จ๋‹ค.

์—ฌ๊ธฐ์„œ 

์ƒˆ ํ‚ค ๋งŒ๋“ค๊ธฐ ์„ ํƒ ํ›„

์ €๋Ÿฐ ํ™”๋ฉด์ด ๋œจ๋Š”๋ฐ, ์ €๊ธฐ์„œ 'json'์„ ์„ ํƒํ•œ๋‹ค. 

๊ทธ๋Ÿผ ์ž๋™์œผ๋กœ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ๋˜์–ด์ง€๊ณ , ํŒŒ์ผ์„ ์—ด๋ฉด

์ €๋Ÿฐ์‹์œผ๋กœ jsonํ˜•ํƒœ์˜ ํŒŒ์ผ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ฐธ๊ณ ๋กœ ์ด ํŒŒ์ผ์€ ์žƒ์–ด๋ฒ„๋ฆฌ๋ฉด ์ ˆ๋Œ€์ ˆ๋Œ€์ ˆ๋Œ€์ ˆ๋Œ€์ ˆ๋Œ€์•ˆ๋œ๋‹ค!!!!!!!!!!!

 

3. ํŒŒ์ผ์„ ํ”„๋กœ์ ํŠธ ์™ธ๋ถ€์— ์œ„์น˜

์ฐธ๊ณ ๋กœ ๋‚œ ๊ฐœ๋ฐœ๊ณผ ๊ด€๋ จ๋œ ํŒŒ์ผ์€ C๋“œ๋ผ์ด๋ธŒ์— 'Dev'๋ผ๋Š” ํด๋”๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ณด๊ด€์ค‘์ธ๋ฐ, ๋ณด๊ด€ ๋ฐฉ์‹์€ ์‚ฌ๋žŒ๋งˆ๋‹ค ๋‹ค๋ฅด๋‹ˆ ์ž์œ ์— ๋งก๊ธฐ๋„๋ก ํ•œ๋‹ค. 

๊ทธ๋Ÿฌ๋‚˜ ํ™•์‹คํ•œ๊ฑด ์ ˆ๋Œ€ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ ์•ˆ์— ๋‘๋ฉด ์•ˆ๋œ๋‹ค. ์ฐธ๊ณ ๋กœ ๋‚œ configํŒŒ์ผ์— ๋„ฃ์–ด๋‘์—ˆ๋‹ค๊ฐ€ git pushํ•  ๋•Œ ์—๋Ÿฌ๋ฅผ ๋งŒ๋‚ฌ๋Š”๋ฐ...

remote:     Resolve the following violations before pushing again        
remote:     - Push cannot contain secrets        
remote:      (?) Learn how to resolve a blocked push        
remote:      https://docs.github.com/code-security/secret-scanning/working-with-secret-scanning-and-push-protection/working-with-push-protection-from-the-command-line#resolving-a-blocked-push            
remote:       —— Google Cloud Service Account Credentials ——————————        
remote:            path: api/src/main/resources/config/'๋ฐœ๊ธ‰๋ฐ›์€jsonํŒŒ์ผ'
! refs/heads/main:refs/heads/main [remote rejected] (push declined due to repository rule violations)
Done

์ด๋Ÿฐ์‹์˜ ๋ฌด์‹œ๋ฌด์‹œํ•œ ์—๋Ÿฌ๋ฅผ ๋งŒ๋‚˜๊ฒŒ ๋ฌ๋‹ค.

์œ„์™€ ๊ฐ™์ด google์—์„œ ๋ฐœ๊ธ‰๋ฐ›์€ jsonํ‚ค๋ฅผ ํ”„๋กœ์ ํŠธ์— ํฌํ•จ์‹œํ‚ค๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ์–‘์ด๋‹ค.

๊ฒ€์ƒ‰ํ•ด๋ณด๋‹ˆ ํ”„๋กœ์ ํŠธ ์™ธ๋ถ€์— ํŒŒ์ผ์„ ์œ„์น˜ํ•˜๊ณ  ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ๊น”์•„๋„ ๋œ๋‹ค๊ณ  ํ•œ๋‹ค. 

์ผ๋‹จ ๊ทธ๋ž˜์„œ ํ”„๋กœ์ ํŠธ ๋ฐ”๊นฅ ์ชฝ์— ์ €๋ ‡๊ฒŒ key๊ฐ€ ์žˆ๋Š” jsonํŒŒ์ผ์„ ๋‘์—ˆ๋‹ค.

 

4. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •

์ธํ…”๋ฆฌ์ œ์ด ๊ธฐ์ค€์œผ๋กœ Run > Edit Configuration ์„ ํƒ

Modify options ์„ ํƒ

Environment variables(ํ™˜๊ฒฝ ๋ณ€์ˆ˜) ์„ ํƒ

์ €๋Ÿฐ์‹์œผ๋กœ key=value๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•ด๋„ ๋˜๊ณ , ์˜†์— ์•„์ด์ฝ˜์„ ํด๋ฆญํ•ด์„œ Name๊ณผ value๋ฅผ ์ž…๋ ฅํ•ด๋„ ๋œ๋‹ค.

์ฐธ๊ณ ๋กœ name(key)์€ GOOGLE_APPLICATION_CREDENTIALS๋กœ ์„ค์ •ํ•œ๋‹ค.

์ €์ƒํƒœ๋กœ IntelliJ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฉด ๋!

 

์‹คํ–‰ํ•˜๋ฉด ์ •์ƒ์ ์œผ๋กœ score๊ณผ magnitude๊ฐ€ ๋„˜์–ด์˜ค๋Š”๊ฑธ ํ™•์ธํ–ˆ๋‹ค! 

์˜ˆ๋ฅผ ๋“ค์–ด์„œ "์˜ค๋Š˜ ๋‚ ์”จ๊ฐ€ ์ •๋ง ํ™”์ฐฝํ•œ๋ฐ ๋‚˜๊ฐ€์„œ ์น˜ํ‚จ๋จน๊ณ  ์˜ฌ๊นŒ?"๋ผ๊ณ  ์ž…๋ ฅํ•˜๋ฉด

score: 0.8, magnitude:0.8๋กœ ๋„˜์–ด์˜จ๋‹ค.

๊ธฐ๋ถ„์ด ๋งค์šฐ ์ข‹์€๊ฑธ๋กœ ์ž˜ ํŒ๋‹จํ•˜๋Š”๋“ฏ ํ•˜๋‹ค...

 

ํ›„๊ธฐ

?

๊ณ ์ƒํ•ด์„œ ๋‹ค๋งŒ๋“ค์–ด๋†จ๋”๋‹ˆ ์˜ค๋ฅ˜๊ฐ€ ๊ณ ์ณ์งใ…‹ใ…‹ใ…‹

๊ทผ๋ฐ ๋‹ต๋ณ€ ์ž‘์„ฑ ์‹œ๊ฐ„์ด ์˜คํ›„ 6์‹œ 54๋ถ„...

๋‹ด๋‹น์ž๋‹˜ ํ‡ด๊ทผ ์•ˆํ•˜์‹œ๋Š”์ง€์š”....?

 

[์ฐธ๊ณ  ์ž๋ฃŒ]

https://velog.io/@ygy0102/Spring-Boot-IntelliJ-Application-%ED%99%98%EA%B2%BD%EB%B3%80%EC%88%98-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0

 

[Spring Boot / IntelliJ] Application ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •ํ•˜๊ธฐ

ํ˜„์žฌ ์ง„ํ–‰์ค‘์ธ ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ์ƒํƒœ์˜ ์„ค์ • ํŒŒ์ผ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.์—ฌ๋Ÿฌ ๋ช…๊ณผ ํ˜‘์—…์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์„ค์ • ํŒŒ์ผ์— ์ž์‹ ์˜ ์ •๋ณด๋ฅผ ์ž…๋ ฅ ํ–ˆ๋‹ค๊ฐ€์ž์นซ ๊นŒ๋จน๊ณ  ๊นƒํ—ˆ๋ธŒ์— ์˜ฌ๋ ค๋ฒ„๋ฆด์ˆ˜ ์žˆ๊ธฐ ๋•Œ

velog.io

https://cloud.google.com/natural-language/docs/analyzing-sentiment?hl=ko

 

๊ฐ์ • ๋ถ„์„  |  Cloud Natural Language API  |  Google Cloud

์˜๊ฒฌ ๋ณด๋‚ด๊ธฐ ๊ฐ์ • ๋ถ„์„ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด ์ •๋ฆฌํ•˜๊ธฐ ๋‚ด ํ™˜๊ฒฝ์„ค์ •์„ ๊ธฐ์ค€์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜์„ธ์š”. ๊ฐ์ • ๋ถ„์„์€ ์ฃผ์–ด์ง„ ํ…์ŠคํŠธ๋ฅผ ์กฐ์‚ฌํ•˜๊ณ  ํ…์ŠคํŠธ ๋‚ด์˜ ์ฃผ๋„์ ์ธ ๊ฐ์ •์  ์˜๊ฒฌ์„ ์‹๋ณ„ํ•˜

cloud.google.com

https://cloud.google.com/natural-language/docs/reference/libraries?hl=ko#client-libraries-usage-java

 

Natural Language ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ  |  Cloud Natural Language API  |  Google Cloud

C++, C#, Go, Java, Node.js, PHP, Python, Ruby๋กœ Natural Language ์ฝ”๋“œ ์ž‘์„ฑ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

cloud.google.com

https://cloud.google.com/docs/authentication/application-default-credentials?hl=ko

 

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด ์ž‘๋™ ๋ฐฉ์‹  |  Authentication  |  Google Cloud

์˜๊ฒฌ ๋ณด๋‚ด๊ธฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด ์ž‘๋™ ๋ฐฉ์‹ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด ์ •๋ฆฌํ•˜๊ธฐ ๋‚ด ํ™˜๊ฒฝ์„ค์ •์„ ๊ธฐ์ค€์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜์„ธ์š”. ์ด ํŽ˜์ด์ง€์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์ธ

cloud.google.com

https://cloud.google.com/docs/authentication/set-up-adc-on-premises?hl=ko

 

์˜จํ”„๋ ˆ๋ฏธ์Šค ๋˜๋Š” ๋‹ค๋ฅธ ํด๋ผ์šฐ๋“œ ์ œ๊ณต์—…์ฒด์— ADC ์„ค์ •  |  Authentication  |  Google Cloud

Cloud Client Libraries, Google API Client Libraries, ๊ธฐํƒ€ ํ™˜๊ฒฝ์— ๋Œ€ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

cloud.google.com