환경 설정

김태성·2024년 6월 23일

개인 프로젝트-1

목록 보기
3/53
post-thumbnail

Java

java/spring 환경 설정을 하다가 알게된 것이 있다.
spring은 일정 버전의 java만 지원해 준다는 것이다...

spring Framework 버전 지원 확인 : https://spring.io/projects/spring-framework#support

spring에서 지원하는 java 버전 확인 : https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-Versions

위 사이트에서 나오는 정보를 보자.

  • 5.2.x버전은 이미 지원이 종료가 되었고, 5.3.x ~ 6.2.x 버전이 사용이 가능하다.
  • 6.2.x 버전은 현제 사용이 불가능하며, 6.0.x ~ 5.3.x 버전에서 호환되는 java 버전을 알려주고 있다.

이를 봤을때 알 수 있는것은, spring 프레임워크는 업데이트 주기가 정말 빠르고 java 버전 호환을 꼼꼼하게 채크해야 된다는 것이다...

지원하는 JDK는 다음과 같다.

하지만 판단 기준이 좀 더 명확해야 함으로, jetbrain의 통계를 확인해 보았다.

https://www.jetbrains.com/ko-kr/lp/devecosystem-2023/java/
-> 2023년 java 통계 / jetbrain

java8 버전을 가장 많이 사용하는 것으로 나왔다.
실제로, 8,11,17 버전은 지원기간이 엄청나게 길다.(출처 : Oracle , JDK Version Check 링크는 아래)

그렇다면..SpringBoot는 어떤 버전을 지원하는지 알아보자.

SpringBoot : https://docs.spring.io/spring-boot/installing.html

SpringBoot 사이트를 뒤적이다가 고민이 없어지는 글을 봤다.
다행인지는 모르겠지만, JDK 17버전 이상을 지원한다는 것이다.(SDK Software development kit)

그래서 쓰게 된 김에 오히려좋아 의 이유를 적어보자면

  • LTS 버전중 가장 높아 버전 upgrade 할때 충돌이 적을 것이다.
  • 상위 버전의 Spring을 쓸수 있다.(8,11은 불가)

LTS 버전 지원 확인은 다음 사이트에서 가능하다.
JDK Version check : https://www.oracle.com/kr/java/technologies/java-se-support-roadmap.html

그렇다면 최종적으로는 17, 21 버전 두개가 남게되는데,
여기서 한가지 눈에 띄는게 있다.

Java Virtual Thread : https://docs.oracle.com/en/java/javase/21/core/virtual-threads.html#GUID-DC4306FC-D6C1-4BCC-AECE-48C32C1A8DAA

Virtual Thread 정리 기술블로그 : https://mangkyu.tistory.com/309

바로 자바 가상 쓰레드라는 것이다.
아직은 정확하게 파악되지 않았지만 이해한 내용을 간단하게 말하자면

  • 스레드 크기/컨텍스트 스위칭 비용이 작아진다.

그렇기에, 21버전으로 코딩을 한 후에 Virtual Thread를 사용한 최적화를 기대할 수도 있을 것이다. 지금 당장은 해야할 일이 많기에, 배포 단계에서 다시 살펴볼 예정이다.

정리를 하자면

  • JDK = 21
  • SpringBoot = 3.3.x

를 사용할 것 같다.
솔직하게 적어보자면
SpringBoot를 잘 써보지 않아서 버전마다 차이를 잘 모르겠다..

React , Typescript

Typescript는 이전 프로젝트에서 써본 4.9.5 버전을 사용할 것 같다.

React는 이전 프로젝트에서 18버전을 사용했었다.
React 19버전은 올해 4월에 release 되었으나, 아직 나온지 얼마 되지 않아 안정화될 때까지는 사용을 자제하려고 한다.(현시점 6월 23일/release 5월 25일)

PostgreSQL

최신버전인 16.3버전을 사용할 것이다.
정말 열심히 검색해보았지만 정보가 너무없다.....

그나마 나온 정보라곤 16.3 버전이 보안성이 강화되었다는것만 나오고,
버전별 선택 가이드조차 나오지 않는다.

일단은 사용하면서 배워보자.

IDE

Intellij를 사용할 것 같다.
이유는 다음과 같다.

  • 라이센스 보유중(대학생용)
  • React도 사용가능하다(다양한 개발환경 셋팅 경험을 해보고싶음)
  • JAVA 깡패라고 한다.

요약

  • JDK = 21
  • SpringBoot = 3.3.1
  • React = 18.x
  • TypeScript = 4.9.5
  • PostgreSQL = 16.3
  • IDE = IntelliJ

환경 설정 과정

  1. IntelliJ 에서 Java21로 프로젝트 생성

  2. SpringBoot 설치


종속성은 다음에 다루도록 하겠다.

  1. github 연동

레포를 하나 판 다음 연결하였다.

  1. React 설치

Project에서 레포지토리를 따로 파지 않고 하나의 프로젝트에서 React/Spring 둘다 사용한다.(java 폴더가 spring 백엔드 파일)

  1. CORS 대비 포트번호 처리

백엔드와 프론트 사이에 proxy를 설정했다.

//setupProxy.js
const { createProxyMiddleware } = require('http-proxy-middleware');

module.exports = function(app) {
    app.use(
        '/api',
        createProxyMiddleware({
            target: 'http://localhost:8080',
            changeOrigin: true,
            logLevel: 'debug',
        })
    );
};

그리고 백/프론트 서버가 독립적으로는 잘 돌아가는게 확인이 된다.

참고 사이트 : https://velog.io/@wlsdud11457/React-Spring-%EC%97%B0%EB%8F%99-%EB%B0%A9%EB%B2%95


하지만...


백엔드에서 데이터를 호출했을때 연결이 안되는 버그가 나타났다.

거의 하루가 걸려서 해결하였다.

    @GetMapping("/hello")
    public String test() {
        return "Hello, world!";
    }

어째서인지 proxy를 통과할때 /api가 짤려서 들어오는 것이었다...

이거 때문에 stackoverflow와 온갖 기술블로그를 다돌아다니면서 환경변수 잘못인지, cors인지 다 확인했었는데 정말 기운이 빠진다..


그래도 결국은 되었다....

요약

  1. 프론트 local:3000번으로 띄움
  2. 백앤드 local:8080번으로 띄움
  3. proxy로 프론트 - 백앤드 연결
  4. postgreSQL 띄움

이제 환경설정은 끝났으니 프로젝트 구조 잡고 코딩하면 된다.
야호!

profile
닭이 되고싶은 병아리

0개의 댓글