Java 플랫폼을 로컬에서 개발하고 운영 환경으로 배포하기 위한 전반적인 구조와 관련 개념
페이지 정보
본문
Java 플랫폼을 로컬에서 개발하고 운영 환경으로 배포하기 위한 전반적인 구조와 관련 개념들을 체계적으로 설명해드리겠습니다.
Java 플랫폼 제작 및 테스트를 위한 로컬 환경 구축
A. 필수 구성 요소
1. JDK (Java Development Kit)
버전 예: JDK 17 (LTS)
다운로드: [https://jdk.java.net](https://jdk.java.net) 또는 OpenJDK
2. Apache Tomcat (애플리케이션 서버)
버전 예: Tomcat 9~10
WAR 파일을 배포하여 웹 애플리케이션 구동
다운로드: [https://tomcat.apache.org](https://tomcat.apache.org)
3. 빌드 도구
`Maven` 또는 `Gradle`
의존성 관리 및 빌드 자동화
4. Nginx (선택 사항)
정적 파일 서비스 및 리버스 프록시
Tomcat 앞단에 배치하여 트래픽 제어
5. IDE (통합 개발 환경)
IntelliJ IDEA, Eclipse 추천
B. 로컬 개발 환경 구축 흐름
1. JDK 설치 및 환경 변수 설정 (`JAVA_HOME`)
2. Maven 또는 Gradle 설치
3. Tomcat 설치 및 포트 설정 (예: 8080)
4. Nginx 설치 및 설정 (80 → 8080 프록시)
5. 프로젝트 구조 생성 및 샘플 애플리케이션 작성
6. Maven/Gradle로 빌드 후 Tomcat에 배포
자바 플랫폼의 구조
Java 기반 웹 애플리케이션은 보통 다음과 같은 계층 구조로 구성됩니다.
Presentation Layer (JSP, Thymeleaf, React 등)
↓
Controller (Spring MVC Controller 등)
↓
Service Layer (비즈니스 로직)
↓
Repository/DAO (DB 접근)
↓
Database (MySQL, PostgreSQL 등)
이 구조는 다음과 같은 프레임워크로 구성됩니다.
Spring Boot: 빠르고 구조화된 프로젝트 시작 가능
JPA/Hibernate: 객체와 관계형 DB 매핑
Spring MVC: 웹 요청 처리
Spring Security: 인증/인가 처리
로컬에서 제작 후 라이브로 배포하는 빌드 및 배포 방법
A. 빌드 (Maven 예)
bash
mvn clean package
`/target/app-name.war` 또는 `.jar` 생성됨
B. 배포
Tomcat에 WAR 파일 복사: `webapps` 폴더에 복사
또는 Spring Boot 내장 Tomcat 사용 시
bash
java -jar target/app-name.jar
C. 운영 서버 구성
CentOS/Rocky 등 Linux 서버
`JDK + Tomcat + Nginx + DB` 구성
GitHub Actions, Jenkins 등 CI/CD 사용 가능
Java vs PHP, JS, Python - 차이점 및 장단점
| 항목 | Java | PHP | JavaScript | Python |
| 실행 방식 | 컴파일 후 JVM에서 실행 | 인터프리터 | 인터프리터 (브라우저/Node.js) | 인터프리터 |
| 속도 | 빠름 (JIT 컴파일) | 비교적 느림 | 빠름 (비동기 처리 가능) | 느림 (단일 스레드 I/O 제한) |
| 웹 사용성 | Spring, JSP 등으로 가능 | Laravel 등으로 활발함 | 프론트엔드 전용 (React, Vue 등) | Django, Flask 등으로 가능 |
| 유지보수 | 강력한 OOP, 타입 안정성 | 유연하지만 구조화 어려움 | 코드 복잡도 증가 가능성 있음 | 가독성 좋으나 대형 프로젝트는 어려움 |
| 러닝커브 | 높음 | 낮음 | 중간 | 낮음 |
| 용도 | 기업용 시스템, 모바일 서버 등 | 중소형 웹사이트, CMS 등 | 웹 프론트엔드, SPA | AI, 데이터 분석, 간단한 웹 백엔드 |
Java와 React의 관계
A. 관계 구조
Java(Spring Boot): 백엔드 API 제공 (RESTful API, GraphQL 등)
React: 프론트엔드 UI 구현 (SPA)
둘은 프론트-백 분리 아키텍처로 협력
B. 통신 방식
React → Java API 서버 호출 (Axios, Fetch 등 사용)
Java는 JSON 형식으로 데이터 응답
C. 배포 방식
React는 `npm run build` → 정적 파일 생성
Nginx가 정적 파일과 API 프록시 둘 다 처리 가능
Nginx
├── /api → Tomcat(Spring API)
└── / → React static (index.html, JS, CSS 등)
React와 Java 연동
React와 Java(Spring Boot)를 연동하는 방법은 프론트엔드(React)와 백엔드(Java)를 분리된 프로젝트로 구성한 후, HTTP 통신을 통해 서로 데이터를 주고받는 구조입니다. 이를 통해 SPA(싱글 페이지 애플리케이션)에서 서버와 API 연동을 할 수 있습니다.
기본 개념 요약
| 요소 | 설명 |
| --------------- | ------------------------------------------------------- |
| **React** | 프론트엔드 사용자 인터페이스 구현 |
| **Spring Boot** | 백엔드 API 서버 구현 (REST API) |
| **연동 방식** | React가 Spring Boot의 REST API를 호출 (Axios/Fetch로 JSON 요청) |
프로젝트 구조 예시
```
project-root/
├── backend/ (Spring Boot)
│ └── src/
├── frontend/ (React)
│ └── src/
```
Spring Boot API 만들기
`backend/src/main/java/com/example/demo/controller/HelloController.java`
```java
@RestController
@RequestMapping("/api")
public class HelloController {
@GetMapping("/hello")
public Map<String, String> sayHello() {
return Map.of("message", "Hello from Java Backend!");
}
}
```
`application.properties`
```properties
CORS 허용 (React가 다른 포트에서 호출하므로)
spring.mvc.cors.allowed-origins=http://localhost:3000
spring.mvc.cors.allowed-methods=GET,POST
```
또는 컨트롤러에 직접 CORS 설정
```java
@CrossOrigin(origins = "http://localhost:3000")
```
React에서 API 호출
`frontend/src/App.jsx`
```jsx
import React, { useEffect, useState } from "react";
import axios from "axios";
function App() {
const [message, setMessage] = useState("");
useEffect(() => {
axios.get("http://localhost:8080/api/hello")
.then((res) => setMessage(res.data.message))
.catch((err) => console.error(err));
}, []);
return (
<div>
<h1>{message || "Loading..."}</h1>
</div>
);
}
export default App;
```
실행 방법
1. Spring Boot
```bash
cd backend
./mvnw spring-boot:run
```
→ 서버: http://localhost:8080
2. React
```bash
cd frontend
npm install
npm start
```
→ 웹 앱: http://localhost:3000
통신 흐름 요약
```
브라우저 (React) → GET http://localhost:8080/api/hello → Java(Spring Boot) 응답 → React 화면에 출력
```
배포 시 구성 예시
React `npm run build` → 정적 파일 생성
Spring Boot `/static` 폴더에 React 결과물 복사하거나
또는 Nginx로 다음과 같이 라우팅
```nginx
server {
listen 80;
location /api/ {
proxy_pass http://localhost:8080/;
}
location / {
root /var/www/my-react-app/build;
index index.html;
try_files $uri /index.html;
}
}
```
참고 사항
Spring Boot는 보통 REST API 서버 역할만 담당하고, React는 완전히 독립된 프론트엔드로 개발합니다.
개발 중엔 `localhost:3000` (React) → `localhost:8080` (Java) API 호출
실제 운영 배포 시 React 정적 파일과 API를 함께 배포
관련링크
-
https://kmong.com/gig/668512
164회 연결
댓글목록
등록된 댓글이 없습니다.