안녕하세요
새로운 프로젝트 투입되면서 백엔드 업무를 담당하게 되었어요 ㅎㅎ
하다보니 개발이 너무 미흡한게 많아서 서버 하나 구축해서 백엔드 연습하려고 구축했습니다!
원래 aws ec2 로 설치까지 다했는데 그새 1년이 지났는지 6천원이 결제 되더라구요 ㅎㅎ
종종 블로그 보면 aws 로 3천만원 결제 되었다는 글들을 보면 후덜덜 해서
국내 서버 cafe 24 로 서버 구매해봐야겠다고 생각했습니다!
(처음 구매는 톰캣 JSP 호스팅 구매했었는데요
제가 mariadb 에서 recursive 쿼리 짜고싶은데 버전이 좀 낮으면 안되더라고요 ..?
그래서 최상위 권한은 갖고 있는 가상서버를 구매했습니다 ㅎㅎ)
저는 리눅스 일반형 버전으로 먼저 1개월 구매했습니다!
우분투 설치 비용까지해서 27,500원 결제 했습니담
30분도 안되게 설치 완료 되었다는 문자가 오더라구요 ㅎㅎ
cafe 24 로그인 하시고 '나의 서비스 관리' 버튼 누르시면 제가 구매한 가상서버 관리 페이지가 보입니다 ㅎ
관리자 페이지로 접속하면 구매한 가상서버 일반형을 클릭하고 확인하면 해당 화면으로 접속이 가능합니다!
저는 맥을 사용해서 ssh 방식으로 서버 접근하였습니다!
접근 방법으로는
ssh root@ip주소
예를들면 ssh root@212.**.***.****
이런식으로 접근하면 비밀번호 입력하라고 나옵니다!
그러면 처음 결제할때 입력했던 비밀번호 입력하면 접근할수있습니다!!
가끔 ssh -p root@ip 주소 라고 써도 되는데요 가상서버 처음 설정할때 기본 22포트로 만들어서 저는 -p를 빼고 명령어 입력해도
접근이 가능했습니다 ! ㅎㅎ
처음 접근하면 이렇게 나옵니다
저는 이번에 시작한 프로젝트가 spring boot 3, java 17 버전이여서
환경설정 동일하게 만들어서 테스트 하려고요 ㅎㅎ
그럼 필요한 것들중에 java, tomcat, mysql 설치 해볼게요 !
1. Java 17 설치 방법
https://languagestory.tistory.com/154
위에 블로그 차근차근 따라가면 jdk 는 금방 설치 하실수있습니다!!
2. tomcat 설치 하기
https://jincchan.tistory.com/33
저는 바로 명령어 실행하진 않았고요
블로그 들어가시면 설치경로를 복사하여 wget 명령어를 사용해 설치 하는 방법으로 했습니다!!
종종 블로그에 적혀있는 주소로 접속이 안되는 경우가 있어서요
https://tomcat.apache.org/download-10.cgi
그럴 경우에는 tomcat 사이트에 접속합니다!
저는 tomcat10 버전을 설치할거고 저희가 필요한 tar.gz 경로에 오른쪽 마우스 클릭해서
링크주소 복사
버튼 클릭합니다!
wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.26/bin/apache-tomcat-10.1.26.tar.gz
설치하고
경로나 버전 제대로 설치된거 확인 하고
마지막으로 shutdown.sh 실행 후
톰캣 화면을 접속이 되는지 확인 해봅니다!!
브라우저 url 에 접근 해봅니다!
ip주소:8080
저렇게 화면이 잘 나오면 톰캣이 제대로 설치가 되었씁니다!!!
축하축하
3. mariadb 설치 하기
https://www.youtube.com/watch?v=uxWEBFOBf78&t=184s
유튜브 영상인데요 ㅎㅎ
저는 이분 참고해서 mariadb 설치 했습니다!!
grant 권한, 접속 가능 권한 제대로 열어주셔야 합니다!!
mariadb 제대로 되었는지 확인 해보려면 dbeaver 로 접근 해봅니다!
기분 좋은 connection test!!!!!
후후 서버 까지 갖추었으니 샘플 데이터 넣어볼까요 ??
오 .. 제가 봤던 블로그가 있는데 어딨는지 모르겠네요 ㅎㅎ ..
https://dev.mysql.com/doc/index-other.html
일단 mysql 사이트이긴 한데요
일단 제가 가지고 있는 파일로 올릴게요!
사실 이거 전부 복사해서 dbeaver 에 sql 복붙하고 실행하면 되는데 안된더라고요
이유는 제가 정확하게 모르겠지만 저는 그냥 스키마 하나 만들어서 create table 하나하나 실행했어요 ( 이유가 키가 연결되서 그런가 싶네요 )
다이어그램보면 연결이 되어있긴 합니당
참고로 tb_athr_grp_menu_info 는 샘플 데이터는 아니고 회사 테이블인데 뭐 테스트해보려고 가져오기 한거에요
신경 안써도 됩니다!!
이걸로 쿼리 연습 해보세염
저는 재귀 쿼리 돌려보고 우와~ 신기하다~~
ㅋㅋㅋㅋ이러면서
쿼리 진짜 잘쓰는사람 개멋지다.. 이런 생각 했습니다 히히
Spring 3 + swagger, mybatis 실행하기 !!
1. Spring 3 설치하기
spring 시작하는 방법은 굉장히 많은데욤
인텔리제이 키시면 프로젝트 실행하면서 원하는 환경 설정하면서 다 할수 있어요!
그런데 저는 스프링 사이트 들어가서 시작 했습니당 ㅎㅎ
위에 사이트 접속하셔서 자기한테 맞는 환경 설정 하시면 됩니다!
참고로 저는
project : Gradel-Groovy
< 그래들과 메이븐 뭐지 : 걍 빌드 관리 도구 /
빌드 : 인간이 프로그램 짤때는 .xml, .java 등 파일로 만드는데 이거는 컴퓨터가 못알아봄 그래서 빌드 도구들이 jvm, tomcat 들이 알아볼수있게 / 실행 가능하도록 변형 하는거
그래서 그래들과 메이븐 차이는 ?
매이븐 : java 전용 관리 도구
그래들 : 프로젝트 구성 관리 및 범용 빌드 툴 / spring, 안드로이드에서 사용중
그래들의 장점은 매이븐보다 10 ~ 100 배 빠르다
이분 블로그 참고하시길 ~ >
spring 3.2.5 로 했고요 ( 사진에 없네요 ? 음 아마 저때 3.2.7 로 했을거에요 _ 나중에 build_gradl 에서 바꾼거같아요 )
packaging : war
java : 17
2. swagger 사용하기
스웨거란 백엔드에서 api 만들면 문서화로 만들어서 다른 팀원들에게 공유 편하게 도와주는 라이브러리 라고 생각하면 됨
스웨거가 좋은 이유는 하루에 api 3개 만들면 프론트 개발자한테 톡으로 이렇게 저렇게 만들었고 파라미터 어떻게 보내야하고
기타 등등 보내야하는데
그걸 단순하게 문서로 만들어 놓으면 프론트엔드 개발자들도 테스트하기 편하고
걍 편하다
그럼 spring 에 swagger 사용하는 방법은 ?
저는 gradle 사용 하므로 그래들 위주로 설명 합니당 ㅎ.ㅎ.. 메이븐으로 환경 설정 해본적이 없어서 ... 다른 블로그 분들 참고 하시면 좋겠어염 ㅎㅎ
사진에 있는 폴더 경로에 있는 파일들을 만들어줍니다!
SwaggerConfig 파일은 스웨거 환경 설정 하는 곳입니다!
package com.example.Backend_Testing.config;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SwaggerConfig {
@Bean
public OpenAPI openAPI() {
// String jwt = "JWT";
// SecurityRequirement securityRequirement = new SecurityRequirement().addList(jwt);
// Components components = new Components().addSecuritySchemes(jwt, new SecurityScheme()
// .name(jwt)
// .type(SecurityScheme.Type.HTTP)
// .scheme("bearer")
// .bearerFormat("JWT")
// );
return new OpenAPI()
.components(new Components())
.info(apiInfo());
// .addSecurityItem(securityRequirement)
// .components(components);
}
private Info apiInfo() {
return new Info()
.title("백엔드 테스트 api") // API의 제목
.description("백엔드 테스트용 api 입니다.") // API에 대한 설명
.version("1.0.0"); // API의 버전
}
}
주석 걸어둔 곳은 굳이 안봐도 됩니당 ( 나중에 JWT 토큰 만들려고 임시로 둔거에염 )
여기서 중요한건 apiInfo 부분 ! 타이틀, 설명, 버전 지정이 가능해요 !
다음
build-gradle
plugins {
id 'java'
id 'war'
id 'org.springframework.boot' version '3.2.5'
id 'io.spring.dependency-management' version '1.1.4'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
//스웨거 라이브러리
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0'
//lombok annotation
implementation "org.projectlombok:lombok"
annotationProcessor 'org.projectlombok:lombok'
//jwt 라이브러리
implementation "io.jsonwebtoken:jjwt-api:0.11.2"
implementation "io.jsonwebtoken:jjwt-impl:0.11.2"
implementation "io.jsonwebtoken:jjwt-jackson:0.11.2"
//DB 라이브러리
//implementation "org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3"
//runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
//implementation "org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16"
//Util
implementation "com.google.code.gson:gson:2.11.0"
}
tasks.named('test') {
useJUnitPlatform()
}
위에거 복사해서 사용해도 될거에요
제가 스웨거 라이브러리라고 적혀있는
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0'
이부분을
dependencies
사이에 넣어주시면 됩니다 !
그러고 프로젝트 실행하기!!
짜잔~~
접속은
http://localhost:8899/swagger-ui/index.html#/
라고 했어요
저는 포트설정을 8899로 했어요! 아마 처음 프로젝트 실행할때는 포트가 8080 일거에요
포트 설정하는 방법은 mybatis 설정할때 알려드릴게염 ㅎㅎ
3. mybatis 설정 하기
( 저는 이거 회사 퇴근하고 3-4 시간동안 했는데 안되서 개 열받음 ㅎㅎㅎ
버전문제보다는 driver 문제였어요 ..
회사에 친한 차장님께서 도와주셔서 금방 끝났어요
진짜 도움 없었으면 ㅠㅠㅠ 며칠을 힘들어했을거에요 무튼 감사합니당 )
plugins {
id 'java'
id 'war'
id 'org.springframework.boot' version '3.2.5'
id 'io.spring.dependency-management' version '1.1.4'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
//스웨거 라이브러리
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0'
//lombok annotation
implementation "org.projectlombok:lombok"
annotationProcessor 'org.projectlombok:lombok'
//jwt 라이브러리
implementation "io.jsonwebtoken:jjwt-api:0.11.2"
implementation "io.jsonwebtoken:jjwt-impl:0.11.2"
implementation "io.jsonwebtoken:jjwt-jackson:0.11.2"
//DB 라이브러리
implementation "org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3"
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
implementation "org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16"
//Util
implementation "com.google.code.gson:gson:2.11.0"
}
tasks.named('test') {
useJUnitPlatform()
}
아까 위에있던 build-gradle 에서 DB 라이브러리 부분을 주석을 풀어줍니다!!
application.properties
조금전에 스웨거에서 포트번호 설정하는거 application.properties 파일에서 가능해요!!
사진처럼 server.port 설정이 가능합니당!
제가 처음 mybatis 헤매던 이유는
driverClassName 안쓴거, 그리고
jdbc:log4jdbc:mariadb: 로 작성한거 .. jdbc:mariadb 로 해야함
( 회사 환경 설정 그대로 가져오다보니 이런 일이 발생했습니담 ... )
이런거 다 하고
오른쪽에 상단에 빌드 해줘야합니다!
아니면
오른쪽에 그래들 코끼리 아이콘 누르고 빌드 폴더에 들어가서
저는 clean 누르고 build 버튼 눌러서 빌드 했습니당
mybatis 시행착오 격으면서 혹시 캐시 문제일수도 있어서 저는 클린 하고 빌드 했습니당
후후 ... 마지막으로 우리 잘 되는지 확인 해볼까요 ..?
조금전에 설치한 스웨거로 테스트 해볼거에요
저는 미리 controller - service - mapper 만들어서 test 할수있는 메서드를 만들어놨어욤 ㅎㅎ
/api/test api 호출하면 두구두구
제가 반환 타입을 int 로 해놔서
쿼리도 select * from offices Limit 1; 로 해놔서 반환 값은 1로 나왔습니당
만세... 드디어
이것저것 테스트 해봐야지 ㅎㅎ
굉장히 빡셌지만 ( 제 기준에... )
고생했어요 서버 만들었으니 이것저것 공부하고 기록 해봅시다~
그럼 20000
'코딩 > java (백엔드공부)' 카테고리의 다른 글
HttpURLConnection vs okhttp3, JsonObejct vs gson 장단점 및 간략하게 설명 (4) | 2024.10.27 |
---|---|
인터페이스 / 컬렉션 프레임웍 / arrayList LinkedList (0) | 2022.07.10 |
java 써블릿 웹 과 인터넷 기초 지식 용어정의 (0) | 2022.05.11 |
공부하는데 도움되는 사이트 모음 (계속 추가) (0) | 2022.05.09 |
java 복습 다형성 (0) | 2022.04.22 |