JAVA_HOME

  • Java Development Kit (JDK)가 설치된 경로를 지정하는 환경 변수
  • 용도: 여러 Java 기반 도구와 애플리케이션에서 Java의 설치 경로를 참조하는 데 사용된다.
    예를 들어, Maven, Gradle 등과 같은 빌드 도구가 JAVA_HOME을 사용하여 JDK를 찾는다.

PATH

  • 정의: 실행 가능한 프로그램의 경로를 지정하는 환경 변수
  • 용도: 터미널에서 Java 명령어(java, javac 등)를 언제 어디서나 사용할 수 있도록 하기 위해, Java 실행 파일이 위치한 bin 디렉토리 PATH에 추가하고 이를 통해 사용자는 java -version과 같은 명령어 사용할 수 있게 된다.

 

설정 예시

# JAVA_HOME 설정
export JAVA_HOME=/app/java8

# PATH에 JAVA_HOME/bin 추가
export PATH=$PATH:$JAVA_HOME/bin

 

이렇게 설정하면, Java JDK가 설치된 경로와 실행 파일 경로를 모두 사용할 수 있다!

 


 

 

$PATH: 이건 또 뭐얏?!

$PATH는 현재 사용자의 환경 변수 중 하나로, 실행 가능한 프로그램의 경로를 포함하는 문자열이다.

이 변수는 터미널에서 명령어를 입력했을 때, 시스템이 해당 명령어를 찾기 위해 검색하는 디렉토리 목록을 정의한다.

  1. 경로 목록:
    • $PATH는 여러 디렉토리 경로를 콜론(:)으로 구분하여 나열한 문자열이다.
      /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
      
    • 이 경우, 시스템은 이 경로들에서 차례로 명령어를 찾습니다.
  2. 명령어 실행:
    • 사용자가 터미널에서 명령어를 입력하면, 시스템은 $PATH에 나열된 디렉토리에서 해당 명령어를 검색한다.
    • 만약 명령어가 $PATH에 포함된 디렉토리 중 하나에 존재하면, 그 프로그램이 실행된다.
  3. 환경 변수 설정:
    • 새로운 경로를 추가하려면, PATH 변수에 새로운 경로를 추가할 수 있다.
      export PATH=$PATH:/new/directory/path
      
    • 이 명령어는 기존의 PATH에 /new/directory/path를 추가합니다.

$PATH가 올바르게 설정되지 않으면, 시스템이 특정 명령어를 찾지 못해 "command not found" 오류가 발생할 수 있다.

 

 


 

JAVA_HOME과 PATH를 동시에 설정하는 이유

 

1. 명확한 경로 지정

  • JAVA_HOME: JDK의 설치 위치를 명확하게 지정하게 되면 이는 여러 도구와 애플리케이션에서 Java의 설치 경로를 찾는 데 사용되며, 경로를 변경할 필요가 있을 때 한 곳만 수정하면 된다.
  • PATH: Java 실행 파일(java, javac 등)이 위치한 디렉토리를 추가하여, 터미널에서 간편하게 Java 명령어를 사용할 수 있게 한다.

2. 도구와 애플리케이션 호환성

  • 많은 Java 기반 도구(예: Maven, Gradle 등)는 JAVA_HOME 환경 변수를 사용하여 JDK를 찾게 되고 이 변수 없이는 도구가 Java를 제대로 인식하지 못할 수 있다.
  • PATH가 설정되어 있지 않으면, 사용자가 터미널에서 Java 명령어를 입력할 때 "명령어를 찾을 수 없음"이라는 오류가 발생할 수 있다.

3. 편리함

  • JAVA_HOME과 PATH를 모두 설정하면, Java 개발 환경을 설정하는 데 있어 더 편리하다. 코드 작성, 빌드 및 실행 과정에서 Java 관련 명령어를 쉽게 사용할 수 있고, 도구들이 JDK를 쉽게 찾을 수 있다.

4. 유지 보수 용이성

  • JDK의 경로가 변경되거나 업그레이드할 경우, JAVA_HOME만 수정하면 되므로 유지 보수가 용이하다. PATH에 추가된 경로는 변하지 않으므로, 단일 경로만 변경하면 된다.

본인은 구글 클라우드를 사용하였다.

 

사용자 인증 정보 클라이언트를 생성 후

 

  • access_type : offline (access token 새로고침)
  • response_type : 반환할것
  • redirect_uri : OAuth 클라이언트 ID를 생성할때 입력한 승인된 리디렉션 URI를 urlencode 한 것
  • client_id : OAuth 클라이언트 ID를 생성하고 발급받은 클라이언트 ID

---

code를 복사해놓자

TalendAPI(Postman)에서 POST방식으로 https://oauth2.googleapis.com/token 해당 uri로

BODY에 code, client_id, client_secret, grant_type를 담아 다음과 같이

code=4/0AdLIrYclWNNOQQddLIrYcQduYcQdudLlWNIrYcQdudLIrYcQdulWNNOQ
&client_id=1065376047615-ca8n7aacvn2ve5jwn33ckfh1hsv99.apps.googleusercontent.com
&client_secret=GOBJKB-HOFEUMtPMsdil82ORlQLkTOgprYz
&redirect_uri=http://localhost:8080/authcode
&grant_type=authorization_code

요청을 보내면 된다.



참고 자료:

https://cloud.google.com/apigee/docs/api-platform/security/oauth/access-tokens?hl=ko#requestinganauthorizationcode

 

OAuth 2.0 토큰 가져오기  |  Apigee  |  Google Cloud

Apigee API로 OAuth 액세스 토큰 및 승인 코드를 가져오는 방법과 Apigee OAuthV2 정책을 만들고 프록시 엔드포인트를 구성하는 방법을 알아봅니다.

cloud.google.com

https://soda-dev.tistory.com/60

 

[API] 구글 OAuth로 토큰(access token) 발급받기

구글 클라우드 플랫폼을 사용하여 연동한다. OAuth토큰 사용 포스트맨 (Postman) 사용 구글 클라우드 플랫폼 https://console.cloud.google.com/ Google Cloud Platform 하나의 계정으로 모든 Google 서비스를 Google Clou

soda-dev.tistory.com

https://ahn3330.tistory.com/166

 

[OAuth] HTTP 통신으로 구글 auth token 발급 및 구글 api 사용하기

OAuth 개념이 어려운데, 구글을 예시로 간단하게 말하면1. 사용자에게 권한 요청 및 동의를 받는다. 그러면 authrization code를 획득한다.2. authorization code를 가지고 구글에게 access token을 요청한다.3.

ahn3330.tistory.com

 

 

'Java > Spring Boot' 카테고리의 다른 글

[Thymeleaf] 문법  (0) 2023.09.21
Lombok | @Builder 동작 원리  (0) 2023.09.21
[API 작성법] GET API 만드는 법 핵심 정리  (0) 2023.09.14

https://catsbi.oopy.io/81398571-33b8-471f-8191-ca7415b86326

 

2. 타임리프 - 스프링 통합과 폼

목차

catsbi.oopy.io

 

'Java > Spring Boot' 카테고리의 다른 글

구글 Oauth2 access token 발급  (0) 2024.06.18
Lombok | @Builder 동작 원리  (0) 2023.09.21
[API 작성법] GET API 만드는 법 핵심 정리  (0) 2023.09.14

 

어디서든 값을 변경 할 수 있는 setter 대신에 빌더 메서드를 사용하는 것을 지향한다.

빌더 메서드를 사용하기 위해서는 빌더 클래스를 직접 생성해도 되지만

Lombok에서 제공해주는  @Builder 어노테이션으로 간단하게 생성 할 수 있다.

 

 

 

@Builder 어노테이션은 클래스 단에 붙여도 되지만 그보다는 생성자 메서드 단에 붙이는 것이 더 좋다.

그 이유는 설명을 너무 잘 해둔 블로그가 있어 소개하겠다.


https://velog.io/@park2348190/Lombok-Builder%EC%9D%98-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC

 

Lombok @Builder의 동작 원리

보일러플레이트 메서드(getter/setter, constructor 등)를 직접 작성하지 않아도 대신 작성해주는 Lombok를 최근에 많이 활용하고 있다. 그나마 setter 메서드같은 경우는 값을 변경시키는 메서드는 그 목

velog.io

클래스 레벨에서는 가능한 모든 필드에 대하여 빌더 메서드를 생성했다면 생성자 레벨에서는 생성자의 파라미터 필드에 대해서만 빌더 메서드를 생성한다는 점이 차이가 있다.

클래스 레벨과 달리 생성자를 직접 생성해서 @Builder 를 적용하면 빌더로 설정하도록 제공하는 항목 역시 직접 고를 수 있다는 장점이 있다. 특히 JPA 엔티티 같은 경우 영속되기 전에는 식별자가 존재하지 않아 필연적으로 null 값을 가져야 한다. 이런 경우 생성자로 null 값을 전달하기보다는 아예 생성자에서 null 값을 받지 않도록 직접 구성하는 편이 좋다.

 

 

'Java > Spring Boot' 카테고리의 다른 글

구글 Oauth2 access token 발급  (0) 2024.06.18
[Thymeleaf] 문법  (0) 2023.09.21
[API 작성법] GET API 만드는 법 핵심 정리  (0) 2023.09.14

GET API란

서버에서 URL을 통해 값을 가져올 때 사용하는 API이다.

 

첫 번째. @RequestMapping으로 구현

@RequestMapping 어노테이션을 별다른 설정 없이 선언하게 되면 HTTP의 모든 요청을 다 받게 되므로

RequestMethod.GET으로 설정하여 요청 형식을 GET으로만 설정한다

언제 사용할까?

스프링 4.3 버전 이후로는 새로 나온 다음의 어노테이션을 사용한다.

특별히 @RequestMapping을 활용해야 하는 내용이 아니라면 잘 사용하지 않는다.

@RequestMapping(value="/hello", method= RequestMethod.GET)
    public String getHello(){
        return "!Hello World!";
    }

두 번째. @ GetMapping으로 구현

스프링 4.3 버전 이후부터만 사용 가능

언제 사용할까?

별도의 매개변수가 없이 url로 값을 보내는 GET API를 구현하는 경우

ex) 맵핑된 해당 링크로 접근하면 값이나 view 이름을 반환해줄 때 등

 @GetMapping(value="/name")
    public String getName(){
        return "Flature";
    }

여기까지는 실무에서 잘 쓰이지 않는 방식


세 번째. @PathVariable으로 구현

실무에서는 매개변수를 받지 않는 메서드

 


네 번째. @RequestMapping으로 구현

@RequestMapping 어노테이션을 별다른 설정 없이 선언하게 되면 HTTP의 모든 요청을 다 받게 되므로

RequestMethod.GET으로 설정하여 요청 형식을 GET으로만 설정한다


 

부족한 설명은 추후 추가 예정

 

참고 자료

[위키북스] 스프링 부트 핵심가이드

'Java > Spring Boot' 카테고리의 다른 글

구글 Oauth2 access token 발급  (0) 2024.06.18
[Thymeleaf] 문법  (0) 2023.09.21
Lombok | @Builder 동작 원리  (0) 2023.09.21

먼저 알아둬야 할 점 !

 

클래스는 변수에 대한 형과 같은 것으로, 그 자체에 값을 저장 할 수 없다!

 

그래서 필요한 게 오브젝트!   값을 저장할수 있는 변수와 같은 개념이라고 이해하면 된다.

 

클래스에서 오브젝트를 생성하는 걸 인스턴스화한다고 말한다.

 

 


[ 오브젝트를 만드는 방법 ]

new 연산자를 사용하자!

 

클래스명 오브젝트명 = new 클래스명( ) ;

 

 

예시 코드

class Student{
	int[] point = new int [3];
    	String name ;
    
	double ave(){ // 메서드(처리동작)
		int sum = 0;
		for (int i = 0; i < point.length; i++) {
			sum += point[i];
		}
		return (double) sum / point.length;
	}
} // Student END // 여기까지가 Student 클래스를 정의한 부분

class Score {
	public static void main(String[] args) {
		// Student 클래스의 오브젝트 kim을 생성
		Student Kim = new Student();
		// Student 클래스의 오브젝트 lee을 생성
		Student lee = new Student();
	}
} // Score END // Score 클래스 내에서 Student 클래스를 이용하여 오브젝트를 생성함.

 

헷갈리지 말자! 정복하자!

 

이상 코딩하는 망고씨였습니다! 

+ Recent posts