본문 바로가기

FastCampus - 한번에 끝내는 Java|Spring 웹 개발/04 JPA

JPA Ch 1 인트로 - 패스트캠퍼스 챌린지 17일차

La lekcio de hodiau estas pri la JPA, kiu estas necese por programado per la spring programframo.
(파파고에 돌리지 마세요. 파파고는 지 이름이 에스페란토이면서도 에스페란토는 번역 못 해요.)
이전에 보던 Spring 실습 섹션은 아무래도 뒤에 나올 내용이 뻔해보여서 스킵했습니다. 실질적으로 돌아가는 앱을 만드려면 데이터베이스는 필수이니까, 차라리 강의를 마저 보기 위해 시간을 보내는 것보다는 JPA를 하루라도 빨리 (마음 너무 급해...) 배우는 게 낫겠다고 생각했거든요.

인트로만 진행하는 것도 꽤나 시간이 들어가서 이번에는 앞으로 강의를 진행하면서 사용할 샘플 프로젝트만 만들어볼 예정입니다. 실제로 강의에서도 그것만 진행했구요.

강의에 대해

(아래에는 주저리가 숨어있음)

더보기

이번 섹션의 강사님은 16년 경력이셨나요? 포스가 느껴지는 강현호 프로그래머님 (martin님) 이십니다 (검색하면 나올거같아... 안 해볼래...). 자기소개도 확실히 해주시고, 알아야 하는 핵심 용어들에 대한 설명도 빠지지 않고, 마음이 급한 저 같은 중생들이 있을거라는 걸 벌써부터 아시고는 굳이 곁다리를 왜 넣는지에 대한 이유까지 설명해주시고... 심지어 개념의 요약까지 한 번 더 나옵니다. 예술이야...

이게 앞 강의는 좀 모호한 면이 있었거든요. 그도 그럴 게 강의 능력이랑 프로그래밍 능력은 별개잖아요? 강의를 잘 하면 협업에 있어서도 도움이 되겠지만 일단 필수 능력까지는 아닌지라... 시간에도 한계가 있었을거구요. 근데 이번엔 그냥 완벽해.

강의 내용은 대체로 알고있는 내용들인 경우가 많았지만 이건 전부 들을 가치가 있었습니다.

개념

Jakarta 가 JPA의 바뀐 이름 (2019년부터~) 이라는 것만 몰랐습니다. 나머지는 이미 알고있거나 앞 강의에서 궁금해서 찾아봤었거든요.

  • ORM: "개념" 입니다. Object-Relation Mapper
  • JPA: "API 스펙" 입니다. jakarta 로 개명되어 패키지명이 그걸로 바뀜 (선후관계가 맞는지? 몰?루 관심없음)
  • Hibernate: "구현체" 입니다. 다른 구현체로 Eclipse Link 도 있다고 하네요.
  • Spring Data JPA: "래핑" 입니다. 퍼사드란 말이죠. hibernate의 래핑인지 JPA의 래핑인지는 관심이 없었는데 강의를 다시보니 강의에 준비해주신 구조도 상으로는 Hibernate의 래핑입니다. 어... 패캠 챌린지 규약에 스샷 넣으면 안 된다는 게 있었던 거 같은데... 암튼 이게 뭐의 래핑인지는 중요하진 않겠죠?

실습(용 프로젝트)

의존성만 체크하고 넘어가겠습니다. 강의에서는 Java 8 을 쓰는데 (이유는 이해하지만서도) 저는 var 없이 못 사니 Java 11입니다. 타입 추론은 10에 추가되었대요 (인터넷 검색).

  • lombok
  • web
  • JPA
    • 강의에서 디펜던시쪽으로 들어가서 아예 소스를 열어서 보여주셨습니다. Jar 에 소스도 동봉할 수 있는데, 요새 오픈소스들은 다 소스도 같이 준다네요. 모 교수님이 하시던 "소스 읽어보라"를 강사님도... ㅋㅋㅋ
    • 특이점은, 구체 클래스가 단 하나뿐이고 나머지는 전부 인터페이스랑 어노테이션 뿐이라는데에 있습니다. 그래서 API인거겠죠.
    • jakarta로 이름 "바뀐" 거도 조명하구요. (바뀐거야...?)
      • -> 읽어보기: https://www.samsungsds.com/kr/insights/java_jakarta.html
      • ^^^ 위 글에 따르면 ^^^ 오라클이 Java EE를 냅다 던지고 그걸 주운 Eclipse 재단이 오라클의 상표권때문에 이름을 Java EE에서 Jakarta EE 로 바꾼거라네요. 실제로 패키지명도 바뀌었다고... 위의 글을 꼭 읽어보세요. 호환성 등의 중요한 내용들이 있습니다.
  • H2 - 인메모리도 되고 파일로도 저장할 수 있는 경량 DB입니다. JPA 학습 목적이나 테스트용 등에 적합하겠죠. 테스트용으로도 많이 쓴대요. 하긴 Java 세계에는 JPA가 있으니까 이런 것도 순식간에 교체가 가능하겠죠. 다른 언어였다면 개발자가 추상 레이어를 짜놨어야 할 일인데 여긴 공용의 인터페이스가 있으니까...

Lombok

앞서 스리슬쩍 배웠던 lombok 입니다.

  • 아마 lombok 플러그인인 거 같은데, 리팩터 -> delombok 같은 메뉴로 lombok 이 만들어낼 코드로 대체하거나 getter / setter 등의 내용을 lombok 어노테이션으로 교체할 수 있습니다. 이렇게 직접 바꿔보는게 lombok 의 어노테이션들이 무슨 일을 하는지 훨씬 더 이해하기 좋을 것 같네요.
    • 기본으로 있네요! 번들 플러그인입니다. 한국어 언어팩도 적용되네요.
  • [IJ] Cmd + Shift + T 로 테스트를 IDE에서 바로 생성할 수 있습니다. 하나하나 손수 클래스를 만들던 제가 바보같네요.

단계별로 어노테이션에 대해서 설명을 해주시면서, 최종적으로 @Data 와 @Builder 를 보여주십니다.

  • @Getter / @Setter / @ToString
  • 생성자 추가 3종 : @[ NoArgs | AllArgs | RequiredArgs ] Construstor
    • JPA 필수: @NoArgsConstructor
  • (new!) @EqualsAndHashCode - equals 와 hashcode 를 만들어줍니다.
    이게 언어적인 측면에서는 굉장이 중요하다는 건 저도 인지하고 있고 Java 에서의 권고사항이라는데 중요한 게 아니라서 설명은 스킵한다고까지 말씀해주시고는 찾아보려면 Java쪽을 봐라라고까지 알려주시는 친절함...
  • => 이 모든 걸 @Data 한 방에! (JavaDoc 에 리스트가 있습니다.) (단, @AllArgsConstructor 빼구요.)

lombok 이 사실 Java 라서 필요한거지 kotlin이나 C#이었으면 굳이...

H2 세팅하기 (웹콘솔 / IJ 연결)

application.properties 를 지우고 application.yml 을 넣으시더니, spring.h2.console.enabled=true 를 설정하십니다.
(8080 포트가 쓰고있어서 server.port 를 바꾸신 건 덤이시구요...)

H2에는 웹콘솔 기능이 있어서 웹페이지에서 바로 확인 가능한데, 이걸 소개해주신 이유는 IntelliJ 를 안 쓰는 사람들을 위해서라고 하네요.

IntelliJ 의 데이터베이스 탭에서도 추가할 수 있다는 걸 보여주셨는데 (`show databases`), 직접 해보니 연결 타입을 놓치지 않고 in-memory 바꿔야 합니다. 별도의 포트로 떠있는게 아니니까요.

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스: https://bit.ly/37BpXiC

#패스트캠퍼스 #패캠챌린지 #직장인인강 #직장인자기계발 #패스트캠퍼스후기 #한번에끝내는JavaSpring웹개발마스터초격차패키지Online

오늘은 말만 많았네요!