{"id":21280329,"url":"https://github.com/harryjhin/hello-springboot","last_synced_at":"2025-03-15T14:09:38.258Z","repository":{"id":214001472,"uuid":"490142073","full_name":"HarryJhin/hello-springboot","owner":"HarryJhin","description":"간단한 Spring Boot 애플리케이션","archived":false,"fork":false,"pushed_at":"2022-05-09T05:37:53.000Z","size":68,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-22T04:11:31.951Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HarryJhin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2022-05-09T05:07:08.000Z","updated_at":"2022-05-09T05:07:39.000Z","dependencies_parsed_at":"2023-12-25T03:24:06.157Z","dependency_job_id":"8ec973e8-03c0-4f16-ace8-dd4dfc9f3a76","html_url":"https://github.com/HarryJhin/hello-springboot","commit_stats":null,"previous_names":["harryjhin/hello-springboot"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HarryJhin%2Fhello-springboot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HarryJhin%2Fhello-springboot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HarryJhin%2Fhello-springboot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HarryJhin%2Fhello-springboot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HarryJhin","download_url":"https://codeload.github.com/HarryJhin/hello-springboot/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243738985,"owners_count":20340002,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-21T10:29:19.928Z","updated_at":"2025-03-15T14:09:38.235Z","avatar_url":"https://github.com/HarryJhin.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Spring Boot Hello Example\n\n### 개요\n\nSpring Boot를 사용하여 간단한 웹 애플리케이션을 빌드하고, 몇 가지 유용한 서비스를 추가합니다.\n\n### 애플리케이션 실행\n\n애플리케이션을 실행하려면 터미널 창에서 프로젝트의 루트 디렉토리로 이동하고 다음 명령을 실행합니다.\n\n```shell\n./gradlew bootRun\n```\n\nMaven을 사용할 경우:\n\n```shell\n./mvnw spring-boot:run\n```\n\n#### 실행 결과\n\n```shell\n'Spring'에서 제공하는 'Bean'에 대해 알아보자:\napplicationAvailability\napplicationTaskExecutor\nbasicErrorController\nbeanNameHandlerMapping\nbeanNameViewResolver\ncharacterEncodingFilter\ncommandLineRunner\nconventionErrorViewResolver\ndefaultServletHandlerMapping\ndefaultViewResolver\ndispatcherServlet\ndispatcherServletRegistration\nerror\nerrorAttributes\nerrorPageCustomizer\nerrorPageRegistrarBeanPostProcessor\nflashMapManager\nforceAutoProxyCreatorToUseClassProxying\nformContentFilter\nhandlerExceptionResolver\nhandlerFunctionAdapter\nhelloApplication\nhelloController\nhttpRequestHandlerAdapter\njacksonObjectMapper\njacksonObjectMapperBuilder\njsonComponentModule\nlifecycleProcessor\nlocaleCharsetMappingsCustomizer\nlocaleResolver\nmappingJackson2HttpMessageConverter\nmessageConverters\nmultipartConfigElement\nmultipartResolver\nmvcContentNegotiationManager\nmvcConversionService\nmvcHandlerMappingIntrospector\nmvcPathMatcher\nmvcPatternParser\nmvcResourceUrlProvider\nmvcUriComponentsContributor\nmvcUrlPathHelper\nmvcValidator\nmvcViewResolver\norg.springframework.aop.config.internalAutoProxyCreator\norg.springframework.boot.autoconfigure.AutoConfigurationPackages\norg.springframework.boot.autoconfigure.aop.AopAutoConfiguration\norg.springframework.boot.autoconfigure.aop.AopAutoConfiguration$ClassProxyingConfiguration\norg.springframework.boot.autoconfigure.availability.ApplicationAvailabilityAutoConfiguration\norg.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration\norg.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration\norg.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration\norg.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration\norg.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration$StringHttpMessageConverterConfiguration\norg.springframework.boot.autoconfigure.http.JacksonHttpMessageConvertersConfiguration\norg.springframework.boot.autoconfigure.http.JacksonHttpMessageConvertersConfiguration$MappingJackson2HttpMessageConverterConfiguration\norg.springframework.boot.autoconfigure.info.ProjectInfoAutoConfiguration\norg.springframework.boot.autoconfigure.internalCachingMetadataReaderFactory\norg.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration\norg.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$Jackson2ObjectMapperBuilderCustomizerConfiguration\norg.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperBuilderConfiguration\norg.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$JacksonObjectMapperConfiguration\norg.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration$ParameterNamesModuleConfiguration\norg.springframework.boot.autoconfigure.sql.init.SqlInitializationAutoConfiguration\norg.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration\norg.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration\norg.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration\norg.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration\norg.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration$TomcatWebServerFactoryCustomizerConfiguration\norg.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration\norg.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration$DispatcherServletConfiguration\norg.springframework.boot.autoconfigure.web.servlet.DispatcherServletAutoConfiguration$DispatcherServletRegistrationConfiguration\norg.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration\norg.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration\norg.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguration\norg.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryConfiguration$EmbeddedTomcat\norg.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration\norg.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration\norg.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter\norg.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration\norg.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$DefaultErrorViewResolverConfiguration\norg.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration\norg.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration\norg.springframework.boot.autoconfigure.websocket.servlet.WebSocketServletAutoConfiguration$TomcatWebSocketConfiguration\norg.springframework.boot.context.internalConfigurationPropertiesBinder\norg.springframework.boot.context.internalConfigurationPropertiesBinderFactory\norg.springframework.boot.context.properties.BoundConfigurationProperties\norg.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor\norg.springframework.boot.context.properties.EnableConfigurationPropertiesRegistrar.methodValidationExcludeFilter\norg.springframework.boot.sql.init.dependency.DatabaseInitializationDependencyConfigurer$DependsOnDatabaseInitializationPostProcessor\norg.springframework.context.annotation.internalAutowiredAnnotationProcessor\norg.springframework.context.annotation.internalCommonAnnotationProcessor\norg.springframework.context.annotation.internalConfigurationAnnotationProcessor\norg.springframework.context.event.internalEventListenerFactory\norg.springframework.context.event.internalEventListenerProcessor\nparameterNamesModule\npreserveErrorControllerTargetClassPostProcessor\npropertySourcesPlaceholderConfigurer\nrequestContextFilter\nrequestMappingHandlerAdapter\nrequestMappingHandlerMapping\nresourceHandlerMapping\nrestTemplateBuilder\nrestTemplateBuilderConfigurer\nrouterFunctionMapping\nscheduledBeanLazyInitializationExcludeFilter\nserver-org.springframework.boot.autoconfigure.web.ServerProperties\nservletWebServerFactoryCustomizer\nsimpleControllerHandlerAdapter\nspring.info-org.springframework.boot.autoconfigure.info.ProjectInfoProperties\nspring.jackson-org.springframework.boot.autoconfigure.jackson.JacksonProperties\nspring.lifecycle-org.springframework.boot.autoconfigure.context.LifecycleProperties\nspring.mvc-org.springframework.boot.autoconfigure.web.servlet.WebMvcProperties\nspring.servlet.multipart-org.springframework.boot.autoconfigure.web.servlet.MultipartProperties\nspring.sql.init-org.springframework.boot.autoconfigure.sql.init.SqlInitializationProperties\nspring.task.execution-org.springframework.boot.autoconfigure.task.TaskExecutionProperties\nspring.task.scheduling-org.springframework.boot.autoconfigure.task.TaskSchedulingProperties\nspring.web-org.springframework.boot.autoconfigure.web.WebProperties\nstandardJacksonObjectMapperBuilderCustomizer\nstringHttpMessageConverter\ntaskExecutorBuilder\ntaskSchedulerBuilder\nthemeResolver\ntomcatServletWebServerFactory\ntomcatServletWebServerFactoryCustomizer\ntomcatWebServerFactoryCustomizer\nviewControllerHandlerMapping\nviewNameTranslator\nviewResolver\nwebServerFactoryCustomizerBeanPostProcessor\nwebsocketServletWebServerCustomizer\nwelcomePageHandlerMapping\n```\n\n다른 터미널 창을 열고 다음 명령어를 입력해 결과를 확인할 수 있습니다.\n\n```shell\ncurl localhost:8080\nHello, World!\n```\n\n### 실행 중지\n\n다른 터미널 창에서 다음 명령어를 입력하면 실행 중지됩니다.\n\n```shell\n./gradlew -stop\n```\n\n### 프로덕션급 서비스 추가\n\n비즈니스를 위한 웹 사이트를 구축하는 경우 관리 서비스를 추가해야 할 수 있습니다. Spring Boot는 [actuator 모듈](https://docs.spring.io/spring-boot/docs/2.5.0/reference/htmlsingle/#actuator)과 함께 여러 서비스(상태, 감사, 빈 등)를 제공합니다.\n\nGradle을 사용하는 경우 `build.gradle` 파일에 다음 종속성을 추가합니다.\n\n```groovy\nimplementation 'org.springframework.boot:spring-boot-starter-actuator'\n```\n\nMaven을 사용하는 경우 `pom.xml` 파일에 다음 종속성을 추가합니다.\n\n```xml\n\u003cdependency\u003e\n\t\u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n\t\u003cartifactId\u003espring-boot-starter-actuator\u003c/artifactId\u003e\n\u003c/dependency\u003e\n```\n\n다시 애플리케이션을 실행하면 새로운 RESTful 엔드포인트 세트가 추가된 것을 확인할 수 있습니다. Spring Boot에서 제공하는 관리 서비스입니다.\n\n```shell\nmanagement.endpoint.configprops-org.springframework.boot.actuate.autoconfigure.context.properties.ConfigurationPropertiesReportEndpointProperties\nmanagement.endpoint.env-org.springframework.boot.actuate.autoconfigure.env.EnvironmentEndpointProperties\nmanagement.endpoint.health-org.springframework.boot.actuate.autoconfigure.health.HealthEndpointProperties\nmanagement.endpoint.logfile-org.springframework.boot.actuate.autoconfigure.logging.LogFileWebEndpointProperties\nmanagement.endpoints.jmx-org.springframework.boot.actuate.autoconfigure.endpoint.jmx.JmxEndpointProperties\nmanagement.endpoints.web-org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties\nmanagement.endpoints.web.cors-org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties\nmanagement.health.diskspace-org.springframework.boot.actuate.autoconfigure.system.DiskSpaceHealthIndicatorProperties\nmanagement.info-org.springframework.boot.actuate.autoconfigure.info.InfoContributorProperties\nmanagement.metrics-org.springframework.boot.actuate.autoconfigure.metrics.MetricsProperties\nmanagement.metrics.export.simple-org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleProperties\nmanagement.server-org.springframework.boot.actuate.autoconfigure.web.server.ManagementServerProperties\n```\n\nacuator는 다음을 보여줍니다.\n\n- actuator/health\n- actuator\n\n다음 명령을 실행하여 애플리케이션의 상태를 확인할 수 있습니다.\n\n```shell\ncurl localhost:8080/actuator/health\n```\n\n```shell\n{\"status\":\"UP\"}\n```\n\n또한 `curl`을 통해 `shutdown`을 호출하여 `application.properties`에 필요한 줄을 추가하지 않았을 때 어떤 일이 발생하는지 확인할 수 있습니다.\n\n```shell\ncurl -X POST localhost:8080/actuator/shutdown\n```\n\n```shell\n{\"timestamp\":\"2022-05-09T05:20:46.427+00:00\",\"status\":404,\"error\":\"Not Found\",\"path\":\"/actuator/shutdown\"}\n```\n\n활성화하지 않았기 때문에 요청한 끝점을 사용할 수 없습니다(끝점이 존재하지 않기 때문에).\n\n이러한 각 REST 끝점에 대한 자세한 내용과 `application.properties` 파일(`src/main/resources`에 있음)을 사용하여 해당 설정을 조정하는 방법은 [끝점에 대한 설명서](https://docs.spring.io/spring-boot/docs/2.5.0/reference/htmlsingle/#production-ready-endpoints)를 참조하세요.\n\n### Groovy 지원\n\nSpring Boot는 Groovy를 지원하므로 단일 파일로 Spring MVC 웹 애플리케이션을 구축할 수 있습니다.\n\n`app.groovy`라는 새 파일을 만들고 여기에 다음 코드를 작성합니다. (위치는 어디든 상관 없습니다.)\n\n```groovy\n@RestController\nclass ThisWillActuallyRun {\n\n    @GetMapping(\"/\")\n    String home() {\n        return \"Hello, World!\"\n    }\n\n}\n```\n\n다음으로 [Spring Boot's CLI](https://docs.spring.io/spring-boot/docs/2.5.0/reference/htmlsingle/#getting-started-installing-the-cli)를 설치합니다.\n\n다음 명령을 실행하여 Groovy 애플리케이션을 실행합니다.\n\n```shell\nspring run app.groovy\n```\n\n다른 터미널 창에서 다음 curl 명령을 실행합니다.\n\n```shell\ncurl localhost:8080\n```\n\n```shell\nHello, World!\n```\n\n### 레퍼런스\n\n- \u003chttps://spring.io/guides/gs/spring-boot/\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharryjhin%2Fhello-springboot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fharryjhin%2Fhello-springboot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fharryjhin%2Fhello-springboot/lists"}