환경변수 설정 (Linux)
1. Java 실행 파일 위치 확인 (심볼릭 링크 위치)
which java
일반적으로 /usr/bin/java와 같이 나옵니다.
2. 실제 Java 설치 경로 확인
readlink -f $(which java)
이 명령은 java 실행 파일의 심볼릭 링크가 가리키는 실제 경로를 출력합니다.
예를 들어 /usr/lib/jvm/java-11-openjdk-amd64/bin/java와 같은 경로가 나옵니다.
... 작성중
컴파일
Hello.java (소스파일) -> Hello.class (클래스파일 == 바이너리(이진) 파일)
1. javac Hello.java - (컴파일러인 javac가 Hello.java 파일을 읽어서 jvm이 알아들을 수 있는 기계어로 변환)
2. java Hello - (자바 인터프리터(java)를 이용해 자바 프로그램(클래스 파일) 을 실행)
빌드
우리가 만든 소스코드들(.java)를
컴퓨터에서 이해할 수 있는 바이너리코드(.class)로 변환
기계가 바로 읽고 실행할 수 있는
압축된 파일(jar 또는 war)로 패키징
./gradlew build --console=plain
> Task :compileJava UP-TO-DATE - 컴파일
> Task :processResources UP-TO-DATE
> Task :classes UP-TO-DATE
> Task :resolveMainClassName UP-TO-DATE
> Task :bootJar UP-TO-DATE - jar파일
> Task :jar UP-TO-DATE - plain-jar파일
> Task :assemble UP-TO-DATE
> Task :compileTestJava UP-TO-DATE
> Task :processTestResources NO-SOURCE
> Task :testClasses UP-TO-DATE
> Task :test UP-TO-DATE - 테스트
> Task :check UP-TO-DATE
> Task :build UP-TO-DATE - 모든 작업의 결과물을 build디렉토리에 저장
BUILD SUCCESSFUL in 680ms
7 actionable tasks: 7 up-to-date
(plain)jar - jar
자바 프로젝트를 압축한 파일
.class 파일들과 해당 클래스에서 사용되는 리소스(이미지 등)등 포함
외부 라이브러리를 포함하지 않음
주로 다른 프로젝트에 종속성으로 사용될 때 사용
또는 로컬 환경에서 실행되는 어플리케이션으로 사용(*클래스패스 추가)
(Runnable)jar - bootJar
.class 파일들과 정적 자원(HTML, CSS, JavaScript, 이미지파일),
웹 애플리케이션이 의존하는 라이브러리나외부 모듈(프레임워크 라이브러리, DB드라이버) 등 포함
내장형 서버(톰캣)을 포함시켜 웹 프로젝트를 압축한 파일
외부 웹서버 없이 웹프로젝트를 단독으로 실행, 배포 가능
war
JAVA 웹 프로젝트를 압축한 파일
이 파일을 실행하려면, 웹 애플리케이션 서버(WAS)가 필요함 ex) Apache Tomcat
웹 애플리케이션을 통째로 패키징 하고 배포하기 위한 목적으로 사용
스프링 부트에서 가이드하는 표준 형식은 jar
:외부에 별도의 서버 설치없이 단독으로 웹 어플리케이션 실행이 가능.
하지만, 내장된 서블릿 컨테이너는 JSP를 실행할 수 없다.
(JSP 엔진을 내부적으로 가지고 있지 않기 때문에)
war 사용시기
jsp를 사용하여 화면을 구성해야한다.
외장 was를 이용할 계획이다.
빌드의 결과물
jar과 war 파일이란?
프로젝트의 내용을 압축해 담아놓은 파일
jar과 war 파일을 왜 만들까?
웹 프로젝트를 폴더 째로 전해 줄 수 없으니,
컴퓨터가 읽을 수 있는 형태의 파일을 전달하기 위해서
배포란?
완성된 실행 가능한 파일(jar, war)을
사용자가 접근할 수 있는 환경에 배치하고 실행하는 것
(이후 모니터링, 유지보수도 포함)
빌드하고 실행하기
콘솔로 이동
1. `./gradlew build`
2. `cd build/libs`
3. `nohup java -jar hello-spring-0.0.1-SNAPSHOT.jar &`
4. 실행 확인
재빌드 시 build 디렉토리 삭제 후 재 생성
./gradlew clean build
nohup 과 &
| nohup | &(백그라운드 실행) | |
| 목적 | 터미널이 종료된 후에도 프로그램이 실행해야 할 때 |
사용자가 터미널을 다른 작업에 사용해야할 때 (멀티태스킹) |
| 생명 주기 | 로그아웃 후에도 작동 | 현재 세션에서만 작동 |
**윈도우 사용자를 위한 팁**
콘솔로 이동 명령 프롬프트(cmd)로 이동
`./gradlew` `gradlew.bat` 를 실행하면 됩니다.
명령 프롬프트에서 `gradlew.bat` 를 실행하려면 `gradlew` 하고 엔터를 치면 됩니다.
`gradlew build`
폴더 목록 확인`ls` `dir`
윈도우에서 Git bash 터미널 사용하기

- 브라우저 요청: IP 주소 질의
- 사용자가 브라우저에 URL을 입력하거나 링크를 클릭합니다.
- 브라우저는 해당 URL을 분석하고 DNS 서버에 도메인 이름의 IP 주소를 요청합니다.
- DNS 서버: IP 주소 응답
- DNS 서버는 도메인 이름에 해당하는 IP 주소를 찾아 브라우저에 반환합니다.
- 브라우저는 반환된 IP 주소를 사용해 요청을 보낼 서버를 식별합니다.
- 인터넷 경로 설정: TCP 연결 시도
- 요청 데이터(HTTP 또는 HTTPS 요청)가 인터넷을 통해 여러 네트워크 장치(라우터, 스위치 등)를 거쳐 웹 서버로 전달됩니다.
- 이 과정은 TCP/IP 프로토콜 스택을 통해 이루어집니다.
- 웹 서버 처리: HTTP 요청
- 웹 서버는 클라이언트로부터 요청을 수신하고, 요청에 따라 정적 리소스(HTML, CSS, JS 파일) 또는 동적 콘텐츠(데이터베이스 조회, API 응답)를 생성합니다.
- 필요한 경우 데이터베이스 서버나 다른 백엔드 서비스와 통신하여 데이터를 처리합니다.
- 응답 전송: HTTP 응답
- 웹 서버는 요청 결과를 HTTP 응답으로 작성하여 브라우저로 반환합니다.
- 이 응답에는 HTML 문서, CSS 스타일, JavaScript 코드 및 기타 리소스가 포함됩니다.
- 브라우저 렌더링:
- 브라우저는 받은 HTML, CSS, JavaScript를 처리하여 웹 애플리케이션의 화면을 렌더링합니다.
- 추가적인 요청(AJAX 또는 API 호출)을 통해 동적인 데이터가 업데이트될 수도 있습니다.
- 사용자 상호작용: 완료 후 TCP 연결 종료
- 사용자는 웹 애플리케이션 화면에서 버튼 클릭, 입력, 탐색 등의 상호작용을 수행하며 추가 요청이 반복됩니다.
이 과정을 통해 사용자와 웹 애플리케이션이 실시간으로 데이터를 주고받고 상호작용합니다.
도메인 설정
웹 사이트의 도메인 네임을 설정하면 사용자가 웹 사이트를 더 쉽게 기억하고, 찾을 수 있기 때문에!
도메인이 웹 서버의 IP 주소를 가리키도록 DNS 서버 설정 업데이트
서버 환경 구축
어떤 서버를 사용하느냐
클라우드 vs On-premises
어떤 파일을 업로드 하느냐
1. 소스 코드로 전달
서버에서 빌드, 서버에 jdk 설치
2. jar 파일로 전달
로컬에서 빌드, 서버에 jre 설치
3. war 파일로 전달
로컬에서 빌드, 서버에 jre, WAS 설치
배포 파일 업로드 방식
리눅스 파일 전송법
FTP
LFTP
SFTP
WGET
GIT
SCP
RSYNC
DOCKER

내부망에서는 접속이 가능한데 외부망에서 접속이 안되는 경우
공유기
외부에서 특정 포트로 접속하려면, 먼저 공유기의 방화벽에서 해당 포트로 들어오는 IP 주소를 허용하는 설정을 해야 합니다. 그런 다음, 공유기는 어떤 장비로 연결해야 할지 알지 못하므로 포트 포워딩 설정이 필요합니다. 포트 포워딩을 통해 외부에서 들어오는 특정 포트를 내부 서버의 대응 포트와 연결하는 규칙을 설정하여, 외부 IP에서 요청이 들어왔을 때 해당 서버로 트래픽을 전달할 수 있게 됩니다.