2022 Masters Course/Project Course

2022 마스터즈 코스(백엔드) 81일차 회고(2022. 5. 9.) - "방학 끝 그리고 심기일전"

ikjo 2022. 5. 9. 20:37

해당 글은 코드스쿼드 2022 마스터즈 코스 "Java 웹 백엔드" 과정을 수강하면서 학습한 내용 등에 대한 회고 글입니다. :)

 

수강 회고

황금 ✨ 같았던 지난 1주일(5월 2일~6일)간의 방학이 지나고 오늘부터 다시 마스터즈 코스 과정이 시작되었다. 지지난 방학(1월 31일 ~ 2월 4일) 이후로 굉장히 분주하게 하루하루를 보내왔었기에 이번 방학에는 재충전을 위해 다소 여유(?)를 가지고 운동, 영화 등 취미 생활을 하는데 많은 시간을 보냈다. 그리하여 나름 방학은 잘 보내긴 했는데, 문제는 나태해진(?) 내 자신을 발견할 수 있었다는 점이었다. 😂 그래서 다소 무기력하게 오늘 하루를 시작하게 됐지만 앞으로 남은 마스터즈 코스 과정이 40일밖에 남지 않은 만큼 심기일전하여 차근차근 학습을 해나가고자 한다.

 

이번 주와 다음 주는 다행히(?) 개인 학습 시간으로 이루어져 지난 번 미션 과제들을 수행했을 때 만큼의 조급함은 느껴지지 않는다. 하지만 오늘 하루를 다소 무기력하게 시작했었던 만큼 자칫 잘못하면 허송세월 시간을 보낼 우려도 있기 때문에 시간 관리를 철저히 해야 할 필요성을 느끼고 있다. 아울러 추후에 있을 프로젝트를 위해 그리고 더 나은 웹 앱을 개발하기 위해 그동안 듣지 못했었던 스프링 관련 인터넷 강의(인프런)를 수강하여 나의 부족했었던 부분들을 채우고자 한다. 

 

 

학습 회고

오늘은 그동안 매번 "해야지 해야지"했었지만 (미션 과제 수행 등으로 인해) 미루어 왔었던 JPA를 마침내 학습해볼 수 있었다.(인프런 영한님 강의 참고) 이번에 처음 JPA를 학습해보았는데 JPA를 통해 내가 직접 쿼리를 작성하지 않고서도 데이터 베이스로부터 조회, 생성, 수정 등의 작업이 가능하다는 점이 매우 놀라웠다. JPA가 이러한 기능을 제공하는 이유로는 객체 지향 프로그래밍과 관계형 데이터베이스간의 패러다입 불일치로 생기는 문제들(SQL에 의존적인 개발 등)을 해결하기 위함이라고 한다. 이러한 JPA를 사용하게 되면 객체를 자바 컬렉션에 저장 하듯이 DB에 저장할 수 있게 된다.

 

설정

우선 스프링을 이용하지 않고 단순히 자바만을 통해 JPA를 사용했다. 빌드 도구로서는 gradle을 이용했고 다음과 같이 h2 데이터베이스와 하이버네이트 라이브러리 의존성을 주입받았다. (하이버네이트는 JPA 인터페이스를 구현한 여러 구현체들 중 하나이다.) h2 데이터베이스의 경우 내 PC에 설치된 버전과 동일하게 맞추어 주었고, 하이버네이트의 경우 현재 스프링 부트 최신 버전(2.6.7)과 호환되는 버전으로 설정해주었다. 호환 버전을 찾기 위해서는 다음 스프링 부트 공식 문서를 확인해 볼 수 있다.

 

 

Dependency Versions

The following table provides details of all of the dependency versions that are provided by Spring Boot in its CLI (Command Line Interface), Maven dependency management, and Gradle plugin. When you declare a dependency on one of these artifacts without dec

docs.spring.io

 

dependencies {
    implementation 'com.h2database:h2:1.4.200'
    implementation 'org.hibernate:hibernate-entitymanager:5.6.8.Final'
}

 

또한 /META-INF/ 경로에 다음과 같이 persistence.xml이라는 JPA 설정 파일을 만들어주어야 한다. 해당 파일에서 데이터 베이스의 드라이버, 사용자 정보, 접속 url 등을 설정해야하고 이외에도 하이버 네이트가 DB에 날리는 쿼리를 보여주는 속성 등을 설정해줄 수 있다.

 

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
  xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
  <persistence-unit name="hello">
    <class>hellojpa.Member</class>
    <properties>
      <!-- 필수 속성 -->
      <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
      <property name="javax.persistence.jdbc.user" value="sa"/>
      <property name="javax.persistence.jdbc.password" value=""/>
      <property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/jpa"/>
      <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>

      <!-- 옵션 -->
      <property name="hibernate.show_sql" value="true"/>
      <property name="hibernate.format_sql" value="true"/>
      <property name="hibernate.use_sql_comments" value="true"/>
      <!--<property name="hibernate.hbm2ddl.auto" value="create" />-->
    </properties>
  </persistence-unit>
</persistence>

 

참고로 properties 속성 위에 class 태그가 있는데, 이는 빌드 환경에 따라 Entity 클래스 인식이 자동으로 안되는 경우도 있는데, gradle로 빌드한 경우 위와 같이 class 태그로 별도로 지정해주어야 한다. 추후에 스프링과 함께 JPA를 사용하게 되면 자동으로 Entity를 스캔하는 기능이 내장되어 있어 이러한 추가 설정 없이도 잘 동작하게 된다.

 

 

학습 참고자료

  • 인프런 "자바 ORM 표준 JPA 프로그래밍 - 기본편" 

 

 

좋았던 점

  • 주말까지 포함해서 지난 9일간의 방학 덕에 그동안의 피로가 풀린 기분입니다. ✨ (다만, 방학이라는 시간 동안 나태해졌었던 것에서 이번주부터 다시 심기일전하고자 합니다!)

 

 

아쉬웠던 점

  • 오늘 호눅스의 마스터 클래스 강의를 들으면서 그동안 CS 공부에 너무 소홀히 해왔었다는 점이 아쉬웠습니다. 😥

 

 

이전 보다 개선되었던 점

  • 지난 4월 팀 프로젝트를 하면서 운동을 극도로 안했었는데 지난 방학이라는 시간을 이용해서 약간의 운동을 시작했고 오늘부터는 조금이라도 운동을 꾸준히 하고자 합니다! 💪