ref: https://zero-base.co.kr/event/media_insight_contents_BE_language
아무리 python 이 트렌드 언어라고 하지만 현재 2023년까지도 대한민국 대부분 기업에서는 java 를 다룰 줄 아는 개발자를 선호하고 있다. 특히 백엔드 개발자 경우 java 를 이용한 spring boot 웹 프레임워크를 사용하는 것을 주로 살펴볼 수 있었는데, 나 같은 경우 python, ruby, typescript 를 주로 사용해보고 java 는 지금까지 다뤄보진 않았다 (과거 C# 을 사용했었기에 문법이 낯설진 않았다)
최근 알고리즘 문제 풀이도 자바로 작성하며 어느정도 익숙해지길 기대하고 있고, 이젠 spring boot 프레임워크를 다뤄보며 다재다능한 백엔드 개발자로서 성장해보고자 한다.
엔터프라이즈용 Java 애플리케이션 개발을 편하게 할 수 있게 해주는 오픈소스 경량급 애플리케이션 프레임워크이다. 기존에는 개발자가 비즈니스 로직 + 기술 등 모두 고려하며 개발하였는데 spring 같은 프레임워크가 나오며 기본적인 설정을 통해 세팅을 한 다음 개발자는 오로지 비즈니스 로직에만 집중할 수 있도록 한다.
spring 을 사용하여 서버를 구축한다고 해도 초기 설정이 만만치 않다. 그러나 spring boot 을 사용하면 spinrg 으로 애플리케이션을 만들 때에 필요한 설정을 간편하게 처리해줄 수 있다.
링크에 들어가면 spring 초기 세팅을 위해 입력받는 폼이 나타난다.
필드를 모두 입력하고 아래 generate 를 누르면 zip 파일이 다운로드된다. 이를 unzip 하면 내가 세팅한 프로젝트 폴더가 생성된다 (이전에 explore 버튼을 눌러서 프로젝트가 어떻게 세팅이 되는지 확인할 수도 있다)
이전에 학습했던 도커 기술을 적용하여 spring server 를 띄울 것이다.
FROM openjdk:17-slim-buster AS base
ENV JAR_FILE_NAME=AlgoSolved-0.0.1-SNAPSHOT.jar
################################################################################
# for build
FROM base as builder
RUN apt-get -qq update > /dev/null && \
DEBIAN_FRONTEND=noninteractive apt-get -yq --no-install-recommends install build-essential unzip > /dev/null
RUN useradd --uid 1000 --gid users --shell /bin/bash --create-home deploy
USER deploy
RUN mkdir /home/deploy/app
WORKDIR /home/deploy/app
COPY --chown=deploy:users . .
RUN ./gradlew build
################################################################################
# production
FROM base AS production
RUN useradd --uid 1000 --gid users --shell /bin/bash --create-home deploy
USER deploy
RUN mkdir /home/deploy/app
WORKDIR /home/deploy/app
COPY --chown=deploy:users --from=builder /home/deploy/app/build/libs/${JAR_FILE_NAME} /home/deploy/app/build/libs/${JAR_FILE_NAME}
EXPOSE 3000
ENTRYPOINT ["java", "-jar", "/home/deploy/app/build/libs/AlgoSolved-0.0.1-SNAPSHOT.jar"]
version: '3.9'
services:
db:
container_name: postgresql
image: postgres:15-alpine
volumes:
- /var/lib/postgresql/data
restart: always
environment:
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "postgres"
POSTGRES_HOST_AUTH_METHOD: trust
POSTGRES_INITDB_ARGS: --encoding=UTF-8
ports:
- '5432:5432'
healthcheck:
test: pg_isready -U postgres -h 127.0.0.1
interval: 5s
timeout: 120s
server:
build:
context: .
dockerfile: Dockerfile
target: production
container_name: algosolved-server
depends_on:
- db
ports:
- 3000:3000
spring boot 문서에 있는 튜토리얼을 따라해보기로 하였다
spring 조금 더 공부하자...