Spring Boot 애플리케이션을 하나의 JAR 파일로 빌드하고, 각기 다른 포트에서 'admin'과 'user' 컨트롤러를 구분하여 노출하는 방법을 알아보겠습니다. 이를 위해 '@Profile' 애너테이션을 사용하여 특정 프로파일에서만 활성화되는 컨트롤러를 정의하겠습니다.
#### 1. 프로젝트 설정
먼저 Gradle 설정 파일 'build.gradle'을 작성합니다:
'''groovy
plugins {
id 'org.springframework.boot' version '2.7.17'
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
test {
useJUnitPlatform()
}
'''
#### 2. 'application.yml' 설정
Spring Boot 애플리케이션이 여러 포트에서 동작하도록 'application.yml' 파일을 설정합니다:
'''yaml
server:
port: 8080
---
spring:
profiles: admin
server:
port: 8081
'''
#### 3. 컨트롤러 작성
'admin'과 'user' 컨트롤러를 각각 작성합니다:
**AdminController.java**
'''java
package com.example.demo.controller;
import org.springframework.context.annotation.Profile;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@Profile("admin")
@RestController
public class AdminController {
@GetMapping("/admin")
public String adminEndpoint() {
return "Admin endpoint";
}
}
'''
**UserController.java**
'''java
package com.example.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@GetMapping("/user")
public String userEndpoint() {
return "User endpoint";
}
}
'''
#### 4. Spring Boot 애플리케이션 설정
메인 애플리케이션 클래스인 'DemoApplication.java'를 작성합니다:
'''java
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
'''
#### 5. 빌드 및 실행
이제 Gradle을 사용하여 애플리케이션을 빌드하고 실행합니다. 기본적으로 'application.yml' 파일에서 지정한 포트 8080에서 'user' 컨트롤러가 동작하고, 'admin' 프로파일을 활성화하여 포트 8081에서 'admin' 컨트롤러가 동작합니다.
'''sh
./gradlew build
java -jar build/libs/demo-0.0.1-SNAPSHOT.jar --spring.profiles.active=admin
'''
#### 6. 테스트
포트 8080과 8081에서 각각의 컨트롤러가 제대로 동작하는지 확인합니다.
'''sh
# User Controller
curl http://localhost:8080/user
# Admin Controller
curl http://localhost:8081/admin
'''
위 명령어를 실행하면 각각 "User endpoint"와 "Admin endpoint"가 출력되는 것을 확인할 수 있습니다.
---
이로써 Spring Boot 애플리케이션에서 '@Profile' 애너테이션을 사용하여 여러 포트에서 서로 다른 컨트롤러를 분리하여 노출하는 방법을 살펴보았습니다. admin 으로 실행하면 8081포트로 admin과 user 컨트롤러 모두 접근 되지만, user로 실행하면 8080포트로 user 컨트롤러만 접근됩니다.
보안 적합성 여부를 지키면서 서비스 운영을 간소화 할 수 있습니다.
'학습 > Java_Spring' 카테고리의 다른 글
Mybatis일때 Controller에서의 페이징처리 (0) | 2024.06.24 |
---|---|
자주 사용한 애너테이션 정리 (0) | 2024.06.24 |
Spring Boot 애플리케이션에서 CORS(Cross-Origin Resource Sharing)를 설정 (0) | 2024.06.23 |
openjdk 설치 (0) | 2024.06.21 |
spring.io에서 java 17 이하 버전이 선택되지 않던 이유 (0) | 2023.11.27 |