[인프런 워밍업 스터디 클럽 0기_BE] 3주차 회고록 정리

[인프런 워밍업 스터디 클럽 0기_BE] 3주차 회고록 정리

요일 별 내용 정리

Day11

배포와 Profile 사용법

예전에 배포를 수행하며, 막연하게 AWS를 사용하여 배포를 진행했지만 보안이나 기능적인 측면에서는 고려하지 않고 진행을 했었다.

내가 작성한 코드를 작성하며, 하나의 기본 셋팅을 가지고 개발을 진행하고 있었는데, Profile이라는 개념을 알고 적용을 해보았습니다. h2 DB를 메모리에 저장하면 휘발되며, 개발단계에서 사용하는 것을 알았습니다.

예전에 테스트 코드를 작성하며 작업을 진행할 때, h2 DB를 활용하여 테스트 마다 초기화를 진행해주면 편하다 생각을 했습니다.

spring:
  config:
    activate:
      on-profile: local

//... 설정 값
  • on-profile값에 따른 하위에 작성된 설정한 값으로 적용 되도록 합니다.

  datasource:
    username: "sa"
    password: ""
    url: "jdbc:h2:mem:library:MODE=MYSQL;NON_KEYWORDS=USER"
    driver-class-name: org.h2.Driver
  • 메모리 모드로 사용하며 MySQL 방언을 사용하며 USER의 예약어를 사용하지 않는다. 라는 설정입니다.

  h2:
    console:
      enabled: true #
      path: /h2-console #
  • h2 Console을 접속을 가능하게하며 , Console에 대한 경로 값 입니다.

부트에서 실행할 때 ActiveProfiles 설정 값을 내가 작성한 프로파일명으로 실행됩니다.

JUnit을 활용할때는 @ActiveProfiles("프로파일명") 어노테이션을 활용하여 데이터베이스 환경을 변경할 수 있습니다.

 

테스트 코드를 작성하고 실행할때, 데이터베이스에 대한 정보가 부담스러워 다른 방법이 없었나 찾아봤는데 Profile이라는 기능을 활용하여 테스트에 대해 원활하게 작업을 할수 있다 생각하여 빨리 활용하고싶다는 생각이 들었습니다.

 

git과 github

깃허브는 예전에 취업하기전에 포트폴리오를 올려 사용했었고, 취준생일때 git과 github는 같은것이라 생각했는데, 강의에서 나왔듯이 아예 다른 내용인걸 듣고 아직 많이 부족하다 느꼈습니다. 또한 github를 저는 클라우드 형식으로만 사용했는데 다양한 기능을 배울 수 있어 설레는 마음으로 강의를 시작했습니다!

  • git이란? : 버전을 손쉽게 관리를 하도록하는 버전 관리 프로그램입니다.

  • github란? : git으로 관리되는 프로젝트의 코드가 저장되는 저장소

저는 이미 깃허브를 사용해서 아이디를 생성하지 않았습니다 .. !!!

강의를 진행하기전에 library-app을 이미 푸쉬 작업을 하고있었고, 그 내용을 다시 복습하는 내용으로 강의를 들었습니다.!!

하지만 sourcetree를 사용해보았고, 직접 터미널에서 깃을 사용해본적은 없었습니다.

  • git init : 로컬 코드 깃 초기화

    • 기존에 올렸던 프로젝트에서 초기화 하니까 다 빨간색으로 반영이 되지않아 매우 놀랐습니다..

    • 하지만 강의 순서대로 따라갔더니 정상적으로 되었고 안심을 했습니다.. 깃은 정말 잘 쓰고 활용해야할꺼같습니다.

  • git remote add orign "프로젝트 경로" : 깃 프로젝트 경로 연결

  • git add . : 작성한 내용에 대한 전부를 깃에 반영하겠다.

  • git commit -m : 커밋을 진행

  • git push : 깃허브에 반영이 되도록 올려주는 명령어

     

또한.. AWS도 예전에 포트폴리오를 사용하고 배포할때 사용해본 경험이 있었습니다. 진짜 기본기를 쌓는다는 마음으로 가볍게 훑고나니 정말 유익했었습니다.

 

 

Day12

리눅스 명령어 정리

  • chmod 400 :

  • ssh -i : 다른 쉘에 접근하기 위한 프로토콜을 의미

  • mkdir : 폴더를 만드는 명령어

  • ls : 현재 리스트 정보

    • ls -l : 리스트 세부 내용까지

      • drwxrwxr-x : 폴더인지 / 폴더소유자권한owner /폴더 소유그룹 권한group / 아무나 접근할때 권한other

    • ls -a : 숨김파일까지 표시

  • cd : 폴더 이동

    • cd .. : 하위폴더로 이동

  • rmdir : 비어있는 폴더 삭제

  • sudo yum update : 리눅스 관리 프로그램 최신화입니다. 저는 우분투를 사용해서 sudo apt update를 사용했습니다.

  • sudo yum install git : 깃허브 패키지 다운로드

  • sudo yum install java-11-amazon-corretto -y : 자바11버전 jdk설치

  • java -version : 자바버전확인 -> 잘 깔렸는지 확인!!

  • sudo yum install mysql-community-server -y : mysql 설치 !!

  • sudo systemctl status mysqld : mysql 상태 확인 !!

  • sudo systemctl restart mysqld : mysql 재실행 명령어

  • mysql -u root -p : 임시 비밀번호를 알아오는 명령어

     

예전에 jar파일을 실행하다 렉이 걸려서 멈춘 경험이 있었고 인스턴스 종료를 눌렀는데, 그게 삭제인줄 모르고 가상머신을 날린 기억이 있었다.. 강의를 중간에 보다보니 메모리 대신 disk의 일부를 사용할 수 있도록 하는 명령어를 보고 아 저렇게 하면 메모리를 더 쓸수 있겠구나라고 생각했습니다.

  • sudo dd if=/dev/zero of=/swapfile bs=128M count=16

  • sudo chmod 600 /swapfile

  • sudo mkswap /swapfile

  • sudo swapon /swapfile

  • sudo swapon -s

 

  • ./gradlew build : 프로젝트를 빌드

    • ./gradlew build -x test : 프로젝트를 빌드하는데, 테스트는 생략

  • ./gradlew clean : 현재 빌드된 결과물을 제거

    저는 jar로 파일을 빌드한 후 실행을 진행했는데 직접 리눅스 환경에서 빌드를 진행하고 실행까지 하는것도 있구나라는 방법이 있었고, 나중에 중단배포나 jenkins를 활용하여 작업을 하려고 선행으로 공부했는지는 찾아봐야할꺼같다 생각했습니다!!

foreground와 background의 차이를 공부하여 서버를 종료할 때 같이 종료가 되지않도록 배웠습니다.

  • nohup java -jar build/libs/"서버명".jar --spring.profiles.active=dev &
    을 활용해 백그라운드 실행을 하면됩니다.

  • kill -9 프로세스번호 : 해당 프로세스를 종료하는 명령어

  • vi nohup.out : 편집기로 로그 실행

    • 저는 less를 사용하여 작업을 많이 진행했습니다.

       

    리눅스 명령어를 활용해보면서 정말 많이 몰랐고 데이터베이스를 가상머신에 직접깔아서 사용해보았습니다. 저는 아마존 rds를 활용하여 데이터베이스 서비스를 사용했는데 직접 사용도 해보니까 좋았다 생각했습니다. 하지만 같은 가상머신에 존재하면 서버가 죽었을 경우 데이터베이스도 죽을 경우있다 생각했는데 그게 맞는지 잘 모르겠습니다. 또한 GUI 프로그램을 활용하여 개발을 진행해서 기본기가 부족하다 많이 느꼈습니다..저는 우분투로 사용했는데 아마존 리눅스를 많이 사용하는걸 코치님의 강의를 보고 처음알았습니다.. 우분투 말고 다음 토이 프로젝트를 진행할 때, 아마존 리눅스를 활용하여 개발을 진행해봐야겠다는 생각을 했습니다.!!!!

 

Day13

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.2.2'
	id 'io.spring.dependency-management' version '1.1.4'
}
  • 제가 사용하고 있는 버전입니다 java를 사용하고 springboot 3.2.2를 사용하며 패키지 의존성 매니저는 1.1.4버전을 사용하고있습니다.

group = 'com.group'
version = '0.0.1-SNAPSHOT'

java {
	sourceCompatibility = '17'
}
  • group : 프로젝트 그룹을 의미

  • version : 프로젝트 버전을 의미

  • sourceCompatibility : 프로젝트가 사용하면 JDK버전을 의미합니다.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'com.h2database:h2'
    runtimeOnly 'com.mysql:mysql-connector-j'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    implementation 'org.springframework.boot:spring-boot-starter-aop'
}
  • 라이브러리/프레임워크를 표시하는 곳

  • implementaion : 의존성을 가져와 항시 사용

     

  • runtimeOnly : 코드 실행할때만 사용!

왜 저렇게 나눴는지 찾아보니 빌드를 진행할때, 성능적인 이점을 얻을 수 있도록 구분을 합니다라고 나와있어 구분을 하려는 이유를 알았습니다.!!

 

스프링과 스프링부트 차이

  • 이건 예전부터 너무 궁금해서 많은 사람들에게 물어봤고, 어떤 차이가 있는지 명확하게 몰랐습니다. 예전에 친구랑 프로젝트를 진행하며 스프링과 스프링부트가 뭔차이냐!! 라고하며 기존 방식을 고수했던 경험이있었는데 솔직히 그때 굳이 나누는 의미가 있었냐라고 웃기도 했습니다 ㅎㅎ... 근데 강의를 듣기전에 내용을 보며 확실히 알아가자 생각했습니다.

  • SpringBoot란? Spring Framework에서 사용하는 기능을 편하게 사용하도록 자동으로 설정해주는 프레임워크입니다.

    • 간편한 설정

    • 간단한 의존성 관리

    • 강력한 확장성

    • MSA의 모니터 링

yml과 properties , lombok

YAML의 문법

spring:
 config:
  activate:
   on-profile: dev
#spring: 
  • 계층은 들여쓰기로 나눕니다. 주석은 #입니다.

회사에서는 properties를 활용하는데 관리하기가 불편하면서도 편한거같다 생각했습니다. yml구조로 설정을 하면 가독성이 좋아져 딱딱 나눠져 있어서 좋았습니다.

그리고 롬복을 예전부터 많이 사용하여 손에 많이 익었으며,내가 알고있던 내용과 부족했던 내용 새로운 내용을 공부하게 되어 너무너무 좋았습니다.

그리구.. 마이그레이션쪽은 이미 3.0을 사용하고있어 제 코드에 직접적으로 사용해보진 못했지만 이런 내용이 있고 다음에 활용할 수 있다 생각했습니다 실무에서나 스프링부트 4.0이 나온다면

 

 

강의를 들으면서 점점 스터디가 끝난다는 생각에 아쉽다 생각했습니다..ㅜ 그래도 마무리가 아름다워야 좋다 생각하여 끝까지 열심히 들을 생각입니다!!!

 

 

 

Day14

드디어 강의 마무리이며, 마무리 영상을 보면서 내용을 정리하는 시간을 가지려했는데 엄청 도움이 되는말들이 많아 좋았습니다.개발하면서 방향성이 너무 많아 어려웠는데 마무리 강의보면서 방향성을 다시 잡을 수 있었습니다.

 

OOP나 디자인패턴의 실무 스킬을 배워야 스프링의 원리를 알아갈수 있다.

스프링에 대한 모듈은 인프라나 보안 이론지식이 필요하다.

기반 실무 스킬에 대한 내용이 있었고, 필수적인 내용이라 생각하여 꾸준히 공부를 해나가야 생각했습니다!

프레임워크를 배제하고 내 기본기라 생각하면 될꺼라 생각했다.

  1. IT 기술 블로그중 신입 개발자, 파일럿 프로젝트 관련 글을 읽기.

  2. 다른 사람은 어떤방식으로 코드를 작성했고, 왜 그렇게 작성했는지

     

    시간이 된다면, 코틀린을 공부해보자.

그리고.. 인스턴스 종료에 대해 나왔는데.. 얼마전에 프로젝트를 진행하며, 종료버튼을 누르는게 삭제인지.. 모르고 삭제된경우가있었다.. 주의를 해야겠다 생각했습니다..

 

추가강의도 너무 많이 도움이 됐습니다.


미니프로젝트

미니프로젝트는... 시간만 많았다면.. 정말 설계부터 완벽하게 설계한다음 진행했어야했는데 저 맛있는 내용을 너무 소화하지못하고 마무리된거같아 아쉬웠습니다. 해당 내용은 스터디가 끝나더라도 마무리를 꼭 지어 끝내야겠다 생각했습니다.

팀원분들과 같이 코드리뷰를 진행하며, 모르는내용에 대해 많은 것을 배웠고 행복했던시간이였던거같습니다.

설계만 작성하고 그 단계별 개발 진행 사항은 작성하지 못한것이 아쉽습니다. 이또한 천천히 마무리를 진행할 예정입니다.

notion : https://silvercastle.notion.site/51409fcd18644974819dc23cdc2e902b?pvs=4

github: https://github.com/backgom1/Inflearn_BE0_Study_mini/tree/develop/backgom1/ensmini


라이브강의에서 코드리뷰를 진행해주시는 내용이 있었는데 딱딱 제가 부족한것을 찝어줘서 너무 시원했습니다 ㅋㅋㅋ!!

도메인계층에 대해 다시한번 생각을 하게 된 계기가 있었고, 강의나 책을 읽어서 공부를 본격적으로 해봐야겠다 생각을 했습니다.

 

댓글을 작성해보세요.