[WIL]20220807

god1hyuk·2022년 8월 7일
1

TIL / WIL

목록 보기
13/30

항해99 4주차 종료

이번 주차 미션은 3주차 미션이었던 Spring Boot를 이용한 CRUD 게시판 구현에서 댓글 기능, 회원가입/로그인(Spring Security, JWT) 기능 구현이었다.

지난주의 CRUD 기능은 여차저차 구현해냈으나 솔직히 제대로 된 개념을 습득하지 못했었다. 그래서 4주차의 반 이상은 Spring 심화 강의를 보는데 시간을 쏟았던 것 같다. Spring 심화 1주차 강의에서는 3주차 구현했던 CRUD에 대한 개념과 Spring Bean, MVC 패턴, DI 등 기본 지식 배경에 대한 상세한 내용들이 있었다. 3주차의 내용이었지만 굉장히 많은 배움이 있었고 궁금증이 모두는 아니지만 많이 해소된 느낌이었다.

하지만 4주차 과제는 그 다음 Spring 심화 2주차 강의 내용에 해당하는 부분이었다. 2주차 강의도 전부 보며 실습했지만 너무 어려웠다...

너무 강의를 보며 공부한 탓에 과제를 할 시간이 너무 부족했다.
맞다. 이번주는 과제를 완성 못 하고 배포도 못한 채 깃허브 링크밖에 제출 하지 못했다. 너무 분하고 자괴감이 많이 드는 한 주였다.

3주차 내가 구현한 코드 위에 과제를 진행할 수도 있었지만 나는 처음부터 CRUD부터 다시 구현했었다. 왜냐면 CRUD가 내가 이해를 아직 못했다고 생각했기 때문이다. 판단을 잘못 했던걸까? 그래도 이전 개념에 대해 조금 익숙해져서 도움이 됐다고 생각은 들었는데, 결국에는 그냥 나는 마감 기한 내에 완성을 하지 못한 사람이었다.

JWT(JSON Web Token)은 강의를 보며 개념만 공부했지만 시도조차 못해봤다. 댓글 기능도 해결 해내지 못했다.

댓글 기능의 주요 키포인트는 JPA의 활용(엔티티 매핑, 테이블 연관관계)이었다. 난 그 키포인트를 깨닫지 못해 많은 시간 삽질을 했다. 내가 3주차 사용했던 CRUD에서 사용했던 JPA의 기능은 극히 일부분이었다는 것을 깨달았다.

회원가입/로그인 (권한)의 영역도 다시 공부해서 구현해봐야겠지만 지금 나는 JPA가 더 시급하다. 구글링도 많이 해봤지만 테이블 연관관계에 대해서 바로는 이해가 되지 않았다.

결국 돈을 들여 강의를 구매했다.

자바 ORM 표준 JPA 프로그래밍 - 기본편 (김영한)

나는 조금 더 차근차근 공부하길 원한다.
물론 개인미션, 특히 팀미션은 절대 민폐주면 안된다. 미션이 최우선이되 공부를 틈틈히 할 생각이다.

이번주는 계획에 대한 판단 실패였던 것 같다. 이번 5주차는 미션을 일단 어떻게든 구현해보고 그 다음에 원리를 분석을 해보려고 한다. 아직도 난 학습법에 대해 최적의 방법을 찾지 못한 듯 하다. 그치만 한가지 분명한 것은 개발자는 만들어 내는 사람이다. 만들어 내는 것은 당연하다. 그치만 파고 들어야 한다고 생각한다. 기본 개념에 대해, 원리에 대해 완전하지는 않더라도 흐름조차 깨닫지 못했다면 파고들어야 한다고 생각한다.

그리고 이번주 또 한가지 사실을 깨달았는데, 요구사항을 보고 머릿 속에서는 어떤식으로 처리하면 좋을지 상상의 로직은 그려졌다. 하지만 상상에서 현실이 될 수는 없다. 그 이유는 무지해서 생각을 코드로 표현을 할 수가 없었기 때문이다. 그리고 내가 상상했던 로직은 실생활의 사고 방식이었던 것이다.

프로그래밍적 사고는 실생활의 사고와 다르다.
프로그래밍으로 풀어 낼 수 없었던 가장 큰 이유는 내가 무엇을 모르는지 몰랐기 때문이다. 그래서 더욱 더 흐름에 대한 개념이라도 파악을 해야 한다고 생각한다. 이 방대하고 복잡한 프레임워크를 내 머리속에 전부 내 머릿속에 담을 수는 없다. 꾸준한 공부를 통해 흐름을 알고 내가 모르는 것이 무엇인지 키워드라도 떠올릴 수 있는 경지까지는 끌어올려야 한다고 생각한다.

이번주 과제제출을 실패한 것에 조금도 합리화 시킬 생각은 없다. 난 이번주 실패자가 되었고, 충분히 반성하고 개선해서 다음주에는 실패를 하지 않을 것이라는 오기와 패기를 느낄 뿐이다.

어떤 누군가는 이렇게 개념이나 흐름을 파악하려고 나처럼 발악하지 않아도 자연스럽게 받아들이고 놀이를 하듯 즐기는 그런 천재적인 사람도 있을 것이다. 나는 천재는 아닌 듯 하다. 하지만 나는 즐기지 못하는 것이 아니다. 내가 좋아하는 일을 잘 하고 싶어 미치겠기 때문에 이렇게 배우려 하는 것이다. 나는 배우는 것이 즐겁다.

지금 내가 남들보다 뒤쳐지고 두각이 드러나지 않을지라도 상관없다. 멀리보고 파고드는 만큼 이 프로그래밍만큼은 날 배신하지 않을거라 믿는다.

회포는 여기서 잠시 접어두고

금주의 키워드에 대해 다뤄보겠다. 마침 이번 주 공부하며 개념정리 해뒀던 내용들이라 그대로 옮겨 적기만 하면 될 것 같다.


금주의 키워드

1. ORM (Object Relational Mapping)

  • 애플리케이션의 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것을 의미
    - Java의 데이터 클래스와 관계형 데이터베이스의 테이블을 매핑
  • 객체지향 프로그래밍과 관계형 데이터베이스의 차이로 발생하는 제약사항을 해결해주는 역할을 수행(패러다임의 불일치 해결)
  • 대표적으로 JPA, Hibernate 등이 있음.(Persistenet API)

1-1. ORM의 장점

  • SQL 쿼리가 아닌 직관적인 코드로 데이터를 조작할 수 있음
    - 개발자가 보다 비즈니스 로직에 집중할 수 있음
  • 재사용 및 유지보수가 편리
    - ORM은 독립적으로 작성되어 있어 재사용이 가능
    - 매핑정보를 명확하게 설계하기 때문에 따로 데이터베이스를 볼 필요가 없음
  • DBMS에 대한 종속성이 줄어듬
    - DBMS를 교체하는 작업을 비교적 적은 리스크로 수행 가능

1-2. ORM의 단점

  • 복잡성이 커질 경우 ORM만으로 구현하기 어려움
    - 직접 쿼리를 구현하지 않아 복잡한 설계가 어려움
  • 잘못 구현할 경우 속도 저하 발생
  • 대형 쿼리는 별도의 튜닝이 필요할 수 있음

1-3. JPA (Java Persistance API)

  • JPA는 ORM과 관련된 인터페이스의 모음
  • Java 진영에서 표준 ORM으로 채택되어 있음
  • ORM이 큰 개념이라면, JPA는 더 구체화 시킨 스펙을 포함하고 있음

1-4. Hibernate

  • ORM Framework 중 하나
  • JPA의 실제 구현체 중 하나이며, 현재 JPA 구현체 중 가장 많이 사용됨

1-5. Spring Data JPA

  • Spring Framework에서 JPA를 편리하게 사용할 수 있게 지원하는 라이브러리
    - CRUD 처리용 인터페이스 제공
    - Repository 개발 시, 인터페이스만 작성하면 구현 객체를 동적으로 생성해서 주입
    - 데이터 접근 계층 개발 시, 인터페이스만 작성해도 됨
  • Hibernate에서 자주 사용되는 기능을 조금 더 쉽게 사용할 수 있게 구현

2. SQL

(금주 항해톡 주제로 준비한 발표자료로 대체)
[presentation] SQL vs NoSQL


3. MVC

(포스팅한 기술 블로그로 대체)
[CS:디자인패턴]MVC

0개의 댓글