01 SpringBoot 구성

data_hamster·2023년 5월 21일
0

학습주제
배포부터 서비스구성까지
SpringBoot 구성

학습내용

종합실습 해본다
만일 이해가 안된다면 이 부분부터 여러번 실습해보면 좋을 것 같다.

내부적으로
퍼블릭, 프라이빗으로 서비스함
우리가 만든 서비스는 프라이빗 영역에 인스턴스를 하나 띄울 예정
DBMS도 프라이빗에다 설치를 하려고 한다
퍼블릭을 통해 baston host를 통해 접속할 수 있게 함.

"Bastion host"는 공용 네트워크와 사설 네트워크 간의 보안 터널을 제공하는 컴퓨터나 서버를 가리킵니다.
바스티온 호스트는 일반적으로 보안이 강화된 시스템으로, 외부에서 내부 네트워크로의 접근을 제어하는 역할을 합니다. 예를 들어, 회사의 내부 네트워크에 접근해야 하는 원격 근무자는 먼저 바스티온 호스트에 접속하고, 그 다음 바스티온 호스트를 통해 내부 네트워크에 접근합니다.

퍼블릭에는 인터넷 게이트웨이가 연결 외부랑 통신 가능
서비스명도 정해 인터넷을 통해서 도메인을 만들어서
도메인은 SSL 인증서를 적용 CloudFront를 적용해서
S3의 정적 웹 호스팅 기능을 이용 간단한 리엑트 소스를 올려놓고 배포되는 정도만
S3에 들어감

로컬에 만든 소스코드를 깃에 등록했을 때 코드파이프라인으로 연결해 자동적으로 배포까지 될수 있도록 실습

백엔드 모듈 구성 간단한 자바 프로젝트
빈스톡을 통해 AWS에 생성을 해서 배포할 수 있는 서버를 생성
S3를 구성
간단한 껍데기 리액트 구성
RDS 구성
VPC 구성
가상의 도메인을 구성해 연결
SSL 구성
자동적으로 CI/CD 구성

백엔드 모듈 구성

백엔드 프로젝트를 만들어본다
Gradle 프로젝트로 스프링부트 생성할 수 있는 거 하나 만들어 본다
https://tychejin.tistory.com/386
그래들을 설치해본다

자바 설치 안됨
JDK를 설치한다

잘 뜬다

GUI 환경에서 자바를 다루기 위해선 IntelliJ IDEA를 설치해야한다.
설치해본다

왼쪽 패널에 그래들이 없어서 변수를 설정해줬다

강사님이 쓰는 툴과 다소 다른거 같아
gradle을 빌드시스템으로 하여 생성해본다

gradle이 현재 JDK 20 버전을 인식하지 못하는 것 같다
17버전으로 내린 후 재시도 해본다
환경 변수도 다시 설정해준다

gradle은 JDK 20을 인식하지 못하는거 같음
17로 내려주니 정상적으로 동작함
새 프로젝트 만들 때 JDK 17로 설정해야함

DSL은 "Domain Specific Language"의 약자입니다. 이는 특정 도메인이나 문제 영역에 특화된 프로그래밍 언어를 의미합니다. DSL은 특정한 도메인의 요구 사항을 더 쉽게 표현하고 해결하기 위해 설계된 언어입니다.


강의와 다르게 뭔가 많이 생성이 되었다.
상세 문법, 스프링은 다른 수업으로 들었다고 가정한다(나는 안배웠는데..)

일단 따라가보도록 한다. 자바 폴더에서 new class를 만든다

build.gradle.kts에서 의존성을 스프링부트로 할 수 있도록 추가할 예정

뭔가 계속 달라서 검색을 해봤는데
20.3월 버전으로 인텔리제이를 재설치 하니

드디어 좌측 패널에 그래들이 뜬다

https://my-codinglog.tistory.com/m/entry/Spring-boot-Intellij-Spring-boot-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1-%EB%B0%8F-gradle-%EC%84%A4%EC%A0%95
그리고 build.gradle에 의존성으로 스프링부트를 넣는게 잘 안되어 위의 사이트를 참고하였다.

저렇게 하고 그래들 새로고침을 하니 라이브러리를 받기 시작한다. 성공한 것 같다.
psvm 단축키로 하나 만들어준다

이렇게 만드는데 뭔지 모르겠다

이렇게만 하고 서버가 뜨는지 확인한다
녹색 화살표를 누르니까 이상없이 하단에 스프링부트가 실행되는 것을 확인할 수 있다.

스웨거 임포트 할 수있는걸 의존성 하나 추가한다

    implementation 'io.springfox:springfox-swagger2:2.9.2'
    implementation 'io.springfox:springfox-swagger-ui:2.9.2'

새로고침을 하니
뭔가 라이브러리를 열심히 설치한다

갑자기 화면이 저 컨트롤러 단이 생성되어있었다. 내가 직접 적었다.
컨트롤러 단을 만드는 과정이다
스웨거를 쓸 수 있는 config를 하나 만든다

스웨거(Swagger)는 API를 설계, 빌드, 문서화, 소비하는 작업을 도와주는 프레임워크입니다. Swagger는 간단하고 강력한 API 인터페이스를 제공하며, 모든 기능이 완벽하게 작동하는지 확인하기 위한 자동화된 테스트 도구를 제공합니다.

package com.citron.cit.config;

import io.swagger.annotations.Api;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.RequestHandler;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("arthur.deliveryapi"))
                .paths(PathSelectors.any())
                .build();
    }

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Citron project")
                .version("1.0.0")
                .description("Citron Project swagger api")
                .build();
    }
}

이렇게 config 등록을 해줌

간단한 API를 읽을 수 있는걸 하나 만든다
MemberService로 가서

package com.citron.cit.controller;

import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MemberService {

    @GetMapping("/members")
    @ApiOperation("회원조회")
    public void get() {

    }

    @PostMapping("/members")
    @ApiOperation("회원등록")
    public void register() {

    }

    @DeleteMapping("/members")
    @ApiOperation("회원삭제")
    public void delete() {

    }
}

CitronServiceApplication으로 가 녹색 버튼 클릭


Docker -> Docket으로 하니 해결


어플리케이션 프로퍼티를 추가하지 않음

리소스 폴더 하위에 application.yml 추가

뭔가 계속 안돼서 새로 프로젝트를 만들기로 했다

갑자기 그래들이 안된다

일단 왜 저게 뜨는지 알았다

    implementation 'io.springfox:springfox-swagger2:2.9.2'
    implementation 'io.springfox:springfox-swagger-ui:2.9.2'

자바 17에서 11로 내려보기로 한다


됐다!!!!!!
스프링부트 관련 프레임워크는 11에 최적화 되어있다.

실행해보니 또 같은 오류이다

환경설정에 11로 내려줬다


오오오오
됐다!!!!
근데 하다보니 이게 디버깅을 할줄 모르니까 너무 어려운 점이 있다
그래도 혼자 어떻게 삽질하면서 성공하니 너무 뿌듯하다


url은 다음과 같다
http://localhost:8080/swagger-ui.html



이유가 저거인거 같음


잘 뜬다

이 소스를 git에 연결
codecommit은 잘 사용 안함. 깃허브를 사용
깃허브에 repo를 만들어서 사용할 예정

폴더에 깃을 생성
파일을 올리고
최초 커밋
git remote add origin 내 주소로 원격 저장소 연결
git push origin main으로 push

정상적으로 업로드됨을 확인

이제 원격에 배포를 할 예정.

요약

뭔가 자바, 스프링 부트.. 등등 강사님은 이미 알고 있다고 가정하고 진도를 나가니 정신을 못차리겠다. 어떻게 꾸역꾸역 따라가긴 했는데 일단 버텨보자.
새로운 걸 배우기보다 일단 GPT로 메꾼 후에 따로 실습하는게 좋아보인다

profile
반갑습니다 햄스터 좋아합니다

0개의 댓글