inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[인프런 워밍업 스터디 클럽 1기] BE 3주차 회고록

miiro
0

세 번째 발자국


자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]를 수강하고

인프런 워밍업 클럽에 참여하여 쓰는 세 번째 회고록입니다.

 

학습 내용


배포란?

최종 사용자에게 SW를 전달하는 과정이다. = 전용 컴퓨터에 우리의 서버를 옮겨 실행시키는 것

서버용 컴퓨터는 보통 리눅스를 사용한다.

profile과 H2 DB

profile : 똑같은 서버 코드를 실행시키지만, 실행될 때 설정을 다르게 하고 싶다.(ex. Database)

[예시]

 

H2 DB

git/github

git

github

git 명령어

git init

git 프로젝트의 github 저장소 설정

코드를 git에 모든 파일을 넣는다

Git 커밋 명령어

Git 푸시 명령어

코드 github에 최초로 보내기

Git 상태 확인

.gitignore

 

EC2에 접속해서 리눅스 명령어 다뤄보기

 

EC2 접속 방법

  1. 다운로드 받은 키 페어(pem key)를 이용하는 방법

  1. AWS 콘솔을 활용해서 접속하는 방법

 

기본적인 리눅스 명령어

  1. mkdir : 폴더를 만드는 명령어

    1. ex) mkdir folder1

  2. ls : 현재 위치에서 폴더나 파일을 확인하는 명령어

    1. ls -l : 조금 더 자세한 정보를 확인할 수 있다.

 

 

  1. cd(change directory) : 폴더 안으로 들어가는 명령어

    1. ex) cd folder2

  2. pwd(print working directory) : 현재 위치 확인하는 명령어

    1. /home/ec2-user/folder1

  3. cd .. : 상위 폴더로 올라가는 명령어

  4. rmdir : 특정 폴더(디렉토리) 제거하는 명령어

 

배포를 위한 프로그램 설치하기

 

  1. 코드를 가져오기 위한 Git

    1. sudo yum install git : yum을 이용한 프로그램 다운로드 진행한다.

  2. 서버를 구동할 Java

    1. sudo yum install java-11-amazon-corretto -y

    2. java -version : 자바 버전 확인

  3. 데이터베이스 MySQL

    1. sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm

    2. sudo dnf install mysql-community-server

    3. sudo systemctl status mysqld

    4. sudo systemctl restart mysqld

    5. sudo cat /var/log/mysqld.log | grep "A temporary password"

      1. mysql8의 임시 비밀번호를 확인하는 명령어

    6. alter user 'root'@'localhost' identified with mysql_native_password by 'Abdc1234!';

      1. 비밀번호는 대/소문자, 특수문자 포함 8자 이상

         

 

빌드와 실행, 그리고 접속

 

  1. git 코드 로딩 :

    git clone [github 저장소 주소]

  2. swap 설정

    1. 기존에는 RAM을 사용해야하지만 RAM의 용량이 부족한 경우, 일부 Disk를 사용하게 해준다.

#swap 메모리를 할당한다. (128M 16 = 2GB)
sudo dd if=/dev/zero of=/swapfile bs=128M count=16

#스왑 파일에 대한 권한 업데이트
sudo chmod 600 /swapfile

#swap 영역 설정
sudo mkswap /swapfile

#swap 파일을 사용할 수 있도록 만든다.
sudo swapon /swapfile

#swap 성공 확인
sudo swapon -s

 

 

foreground vs background

 

foreground

 

background

 

리눅스에서 background로 동작하게 만드는 명령어

 

background 서버 다운

  1. 작업관리자 명령어

    1. ps aux : 현재 실행중인 프로그램 목록을 확인할 수 있다.

    2. ps aux | grep java : java가 들어가는 프로그램을 확인한다.

    3. kill -9 프로그램번호 : 해당 프로그램을 종료시킨다.

파일의 내용물을 확인하는 방법

  1. 파일에 직접 들어가 내용물 확인

    1. vi : 리눅스 편집기인 vim을 사용하여 파일을 접속한다. (ex. vi nohup.out)

  2. 파일에 들어가지 않고 현재 접속중인 터미널을 활용하는 방법

    1. cat : 파일에 있는 내용물을 모두 출력하는 명령어(ex. cat nohup.out)

      1. 파일 내용물의 양이 많지 않고, 실시간 업데이트가 잘 되지 않는 파일을 확인할 때 사용한다.

    2. tail : 현재 파일의 끝 부분을 출력하는 명령어

    3. tail -f : 현재 파일의 끝부분을 실시간으로 출력해준다.

 

 

과제 내용


Day 6

Controller, Service, Repository의 3단 분리 구조를 채택하여 백엔드 설계를 진행했습니다.

Repository 클래스에서는 jdbcTemplate를 활용해 SQL문을 직접 작성하고 데이터베이스와 직접적으로 연결하는 방식을 택했습니다. 이 과정에서 @Repository 어노테이션을 활용한 생성자를 통한 의존성 주입이 이루어지는 것을 확인할 수 있었습니다.

특히, 다양한 저장소 구현체(FruitMySqlRepository, FruitMemoryRepository)를 만들면서, @Primary 어노테이션을 활용하여 서비스 로직이 실행될 때 어떤 레포지토리 레이어를 우선적으로 사용할지 결정하는 방식을 경험했습니다. 이러한 구조적 접근은 유연하고 확장 가능한 백엔드 시스템을 구축하는 데 큰 도움이 되었습니다.


📋 6일차 미션: 레이어 3단 분리

 

Day 7

JDBCTemplate을 사용해 시스템을 구축한 DB를 성능 개선과 유지보수의 편의성을 위해 JPA로 전환하였습니다.

엔티티 클래스인 Fruit에서는 과일의 이름, 입고 날짜, 가격, 판매 여부를 관리했습니다. JPA의 강력함은 FruitRepository 인터페이스를 통해 드러났다. 여기서 단순 조회부터 복잡한 조건의 데이터 처리까지 어노테이션 몇 개로 해결할 수 있었습니다. FruitServiceV2에서는 과일의 저장, 판매 상태 업데이트, 통계 조회 등 핵심 비즈니스 로직을 구현하여, 코드의 간결함과 효율성을 극대화했습니다.

특히, 과일의 개수를 세거나, 특정 가격 이상 또는 이하의 과일을 조회하는 기능을 추가하며, JPA의 유연성과 편리함에 다시 한번 감탄했습니다. 이 모든 과정을 통해, 나는 JPA의 놀라운 잠재력을 경험하며, 보다 나은 소프트웨어 개발자로 성장할 수 있는 계기를 마련한 것 같습니다.


📋 7일차 미션: JPA 구현

회고


SW 배포는 최종 사용자에게 소프트웨어를 전달하는 과정으로, 리눅스 기반 서버 컴퓨터에서 주로 이루어집니다. 개발 단계에서는 경량화된 H2 DB를 활용하여 데이터의 휘발성을 감안한 개발 환경을 구축합니다. Git과 GitHub을 통한 버전 관리 및 코드 저장소 활용은 코드 소실 방지와 효율적인 배포 과정을 지원합니다. EC2와 리눅스 명령어를 통한 서버 접속 및 관리, 그리고 리눅스 환경에서의 스프링 배포는 필수적인 프로세스라는 것을 알게 되었습니다.

또한, Controller, Service, Repository의 3단 분리 구조를 채택하여 백엔드 설계를 진행하고, JDBCTemplate에서 JPA로 전환하여 성능 개선과 유지보수의 편의성을 높였습니다. 이 모든 과정은 유연하고 확장 가능한 백엔드 시스템 구축과 개발자로서의 성장에 밑거름이 된 거 같습니다.

백엔드 인프런워밍업스터디클럽 3주차 회고록

답변 0