본문 바로가기

CSE/Spring & Spring Boot

[스프링의 정석] Ch02 - 01. 원격 프로그램의 실행

본 포스트는 패스트캠퍼스의 스프링의 정석 : 남궁성과 끝까지 간다 강의를 수강하면서 학습한 내용을 정리할 목적으로 작성되었습니다.

https://fastcampus.co.kr/dev_academy_nks

 

스프링의 정석 : 남궁성과 끝까지 간다 | 패스트캠퍼스

국비지원 조기 마감 신화, 베스트셀러 'JAVA의 정석'의 저자 남궁성의 Spring 강의입니다! 오픈톡방과 카페에서 평생 AS를 제공하며 완강과 취업까지 도와드립니다. 지금 할인가로 확인하세요!

fastcampus.co.kr

 

 

public class Main {
	public static void main(String[] args) {
    	System.out.println("Hello");
    }
}

위의 코드에서 자바 인터프리터가 객체 생성 없이도 main() 호출 가능한 이유?

main()이 static 메서드이기 때문이다. static으로 선언하면 객체를 생성할 필요가 없다.

 

 

외부에서 브라우저로 서버에 있는 프로그램을 실행하려면?

1. 프로그램을 외부에서 호출할 수 있도록 등록해야 한다. → @Controller 를 클래스 앞에 붙여주어 등록한다.

2. URL과 프로그램을 연결해야 한다. → @RequestMapping("/hello")를 메서드 앞에 붙여준다.

 

package com.tistory.ch2;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller //1. 원격 호출 가능한 프로그램으로 등록
public class Hello {
	int iv = 10; //인스턴스 변수
	static int cv = 20; //static 변수
    
	//2. URL과 메서드를 연결
	//인스턴스 메서드 : 객체 생성후 실행
	//URL로 호출하면, Tomcat이 객체 생성해줌. 이후 메서드가 호출됨
	@RequestMapping("/hello")
	//메서드가 private여도 호출 잘 됨
	//맵핑 시킨다는 의미는 해당 메서드를 외부에서 접근 가능하게 만들겠다는 의미이므로
	private void main() { //왜 인스턴스 메서드로 할까? - iv, cv 둘다 접근 가능
		System.out.println("Hello - private");
		System.out.println(cv);
	}
	
	//static 메서드 : 객체를 생성하지 않아도 실행 됨
	public static void main2() { //static 메서드는 cv만 사용가능
		System.out.println(cv); //Ok
		//System.out.println(iv); //error
	}

}

왜 인스턴스 메서드를 사용할까?

인스턴스 메서드가 static 메서드보다 유용하기 때문이다.

static 메서드를 이용하면 static 변수만 사용이 가능하다.

하지만 인스턴스 메서드는 static 변수 뿐만 아니라 인스턴스 메서드도 사용이 가능하다.

그렇기 때문에 가능하면 인스턴스 메서드를 사용하자.

 

static 메서드와 인스턴스 메서드에 대해 더 자세히 공부하고 싶다면 다음 영상을 참고하면 좋다.

https://www.youtube.com/watch?v=Fl4TzjPKAMU 

 

main() 메서드를 private로 선언해도 외부에서 호출되는 이유는?

일반적으로 메서드를 private로 선언하면 외부에서 접근이 불가능하다.

하지만 위의 코드에서는 @RequestMapping("/hello") annotation을 통해 URL과 메서드를 mapping 하였다.

Mapping 시킨다는 것은, 해당 메서드를 외부에서 접근 가능하게 만들겠다는 의미이므로(Reflection API를 사용한다) main()을 private로 선언해도 URL을 통해 호출이 가능하다.

 

스프링 프로젝트를 원격 AWS에 올리는 법?

스프링 프로젝트를 WAR 파일로 Export 시킨 후, AWS의 apache-tomcat/webapps 폴더에 WAR 파일을 옮기면 AWS에 스프링 프로젝트를 배포할 수 있다.