TIL 43

9/15

👣 개요 오늘은 주특기 프로젝트를 시작하는 날이었다. 팀원들과 만나 프로젝트 주제를 정하고 API 명세서를 작성하고 WireFrame, ERD 설계도도 작성했다. 아래는 그 결과들이다. 미니프로젝트 S.A 0. 항해99 미니프로젝트 2조 lavender-ski-896.notion.site 우선 프로젝트를 진행함에 있어서 기본 스탠스는 최소한의 Scope로 진행을 하고 완성이 된다면 그 위에 추가 기능들을 얹는 형식으로 진행하고자 했다. 이전 프로젝트 당시 욕심을 부려 너무 많은 양의 기능을 구현하려다가 끝내 완성하지 못한 경험이 있어서 이런 팀원들의 합의는 매우 마음에 들었다. 하지만 팀원들은 WAS와 Web Server의 차이를 잘 이해하지 못해 API 명세서가 완벽하지 못한 채로 작성이 끝나버렸다. ..

TIL 2023.09.15

9/14

👣 개요 오늘은 주특기 3주차 과정을 마무리 짓는 시험을 치뤘다. 사실 구현 자체는 그다지 어렵지 않았지만 배포를 하는 것이 문제였다. 강의에서 지시한 배포 과정은 MySQL을 AWS RDS로 렌트하고 EC2 서버에 내가 구현한 API 서버를 배포해서 연계하는 방식을 사용하고 있었다. 하지만 RDS로 MySQL을 연결하는 과정 중에 문제가 크게 발생했고 이 때문에 시험이 끝나기 15분 전까지도 배포가 되지 않았다. 결국 그냥 EC2 서버에 직접 MySQL을 구성하고 알맞게 환경을 구성해서 문제를 해결했다. EC2가 저장을 위한 공간은 아니었기에 다소 찝찝한 감이 없지 않아 있었지만 결국 시험 요구 조건은 만족했기에 그 상태로 제출했다. 그 이후 내일 협업 프로젝트에 대비해서 협업 관련 Tool들을 찾아보..

TIL 2023.09.14

9/13

👣 개요 오늘은 "Real MySQL 8.0"라는 책의 '옵티마이저와 힌트' 챕터를 읽고 게시글을 작성했다. 옵티마이저는 MySQL로 요청이 들어온 SQL을 어떤 방식으로 실행해서 결과를 계산할지에 대한 계획하는 실행 계획을 짜는 주체다. 옵티마이저의 성능에 따라 연산 속도가 결정되기 때문에 함부로 옵티마이저의 설정을 건드리지면 안된다. 하지만 경우에 따라 직접 만든 웹 App에 적합하지 않은 방식으로 연산을 수행하는 경우도 있기에 이것을 막기 위한 방법으로 '힌트'라는 것을 제공하고 있다. 힌트라는 것은 개발자가 직접 MySQL의 옵티마이저에게 특정 방식에 대해 가산점을 더 줘서 개발자가 판단하기에 더 효율적인 방법으로 SQL을 처리하도록 유도하는 방법이다. 이미 많은 경험을 통해 튜닝된 옵티마이저의 ..

TIL 2023.09.13

9/12

👣 개요 오늘은 Lv 5 관련 과제를 끝마치고 문서화 진행해서 제출을 했다. 그리고 그 이후에 페어 팀과 같이 리뷰를 해 드디어 주특기 숙련주차의 모든 과제를 마치게 되었다. 해당 일들이 끝나고 '자바 ORM 표준 JPA 프로그래밍'의 마지막 장인 16장을 모두 읽고 게시글을 작성했다. 해당 책을 2주 이상이나 붙잡고 있었어서 한편으로는 너무 지루하다는 생각도 들었지만 결국 JPA에 대한 깊을 이해를 할 수 있어서 정말 좋았다. 이번 Lv 5 과제도 위 책을 읽고 깨달은 Listener를 이용한 좋아요 갯수 계산을 구현했었다. 원래 나의 방식대로 라면 JPQL의 groupby를 이용해서 좋아요 갯수를 계산하겠지만 이미 작성된 코드들이 있었고 해당 코드들을 모조리 살펴서 리펙토링하는 것이 큰 부담이었다. ..

TIL 2023.09.12

9/11

👣 개요 오늘은 10시 부터 Lv 5 과제를 진행했다. 내가 맡은 부분은 좋아요 기능과 예외 처리, 회원 탈퇴 기능이었다. 예외 처리는 단순히 ControllerAdvice를 사용하면 됬고 회원 탈퇴는 단순한 CRUD 중 하나였어서 크게 어렵지는 않았다. 하지만 좋아요 기능은 생각보다 복잡했다. 우선 좋아요를 눌렀던 게시물에 다시 좋아요 API를 호출하면 좋아요 기록이 사라지는 토글 방식이어야 했고 게시글을 조회할 때, 좋아요 총합을 가져와야 했다. 위와 같은 이유로 좋아요 갯수 칼럼을 만드는 것이 아니라 따로 좋아요 테이블을 새로 만들고 좋아요 갯수는 해당 게시글에 해당하는 좋아요들의 갯수를 계산했다. 문제는 해당 좋아요 갯수를 계산하고 어떤 방식으로 조달받을지에 관한 것이었다. 예를 들어, 기존 게시..

TIL 2023.09.11

WIL - 9/4 ~ 9/10

👣 개요 이번 주는 주특기 2주차로서 JPA에 대한 심화 공부를 하는 한 주였다. 나의 경우, '자바 ORM 표준 JPA 프로그래밍'을 읽으며 더 깊은 JPA에 대한 이해를 하고자 했다. 결국, 해당 책을 모두 읽고 블로그에 정리했다. 이번 책은 단순히 읽기에서 그치지 않고 직접 코드로 구현해보려는 노력을 했다는 점에서 다른 책들과는 다른 전략으로 접근했다. 확실히 직접 코드로 구현하며 공부를 하니 기억에 더 남을 수 있었고 구버전의 JPA에 대한 책 내용을 바로 잡으며 공부할 수 있었다. 앞으로 특정 기술에 대한 공부를 할 때는 버전이 달라 잘못된 지식을 얻을 수 있으니 '자바 ORM 표준 JPA 프로그래밍' 책을 읽을 때와 같이 직접 코드로 구현하면서 잘못된 점이 있는지 확인하면서 공부해야 겠다고 결..

TIL 2023.09.10

9/9

👣 개요 오늘은 '자바 ORM 표준 JPA 프로그래밍' 15장을 읽고 그에 대한 게시물을 작성했다. 15장 고급 주제와 성능 최적화 👣 개요 해당 게시글은 JPA에서의 예외 처리, 엔티티 비교 시 주의사항, 성능 최적화에 대한 주제로 작성되었다. 👣 예외 처리 순수 JPA 단계에서의 예외 1. 트랜잭션 롤백을 발생시키는 예외 해 ikadnorth.tistory.com 그 다음 Lv 5 과제를 위해 항해 99의 Spring 심화 주차의 강의를 들었다. 강의 내용은 대략 다음과 같았다. OAuth2를 이용한 소셜 로그인 JUnit5, Mockito Spring AOP 예외 처리 모두 대략적으로 알고 있던 내용이지만 특히나 예외 처리 부분의 MessageSource를 이용한 에러 메시지 분리는 처음 접해보는 ..

TIL 2023.09.09

9/8

👣 개요 오늘은 '자바 ORM 표준 JPA 프로그래밍' 책의 14장과 15장을 공부했다. 오늘 공부는 상당히 유의미 했던 것이 그동안 JPQL로만 연관 관계의 쿼리를 fetch join을 하기만 했지 JPA로만 연관 관계의 fetch join을 한 적은 없었다. 하지만 14장의 엔티티 그래프를 읽고 해당 기술을 이용하면 재활용성 높게 연관된 엔티티를 fetch join할 수 있음을 깨달았다. 추가로 리스너에 대해서도 깨달은 바가 컸는데 그동안 JpaAuditing을 사용할 줄만 알았지 어찌 작동하는 지는 모르고 살았는데 리스너를 사용하는 방법을 알아낸 뒤 AuditingEntityListener 코드를 읽고 해석하는 능력을 갖추게 되어 매우 인상적이었다. 현 시점에서는 15장을 공부만 하고 게시글을 작성..

TIL 2023.09.08

9/7

👣 개요 오늘은 주특기 2주차 시험을 봤다. 시험은 JPA 운용 능력에 대한 내용이 대부분이었다. 다대일 연관관계에 대해서도 물어보고 영속성 컨텍스트의 의미에 대해서도 물어봤다. 대충 이런 내용의 시험을 보고 그 이후에는 Lv 4 과제를 진행했다. Lv 4 과제는 기존의 Spring Security를 적용하지 않은 상태의 인증, 인가 기능을 Spring Security를 이용해서 인증 인가를 구현하는 과제였다. Lv 3까지의 과제 위에 인증, 인가를 구현한 필터를 단순히 올려놓으면 되는 구조였기 때문에 큰 어려움은 없었던 것 같다. 그 이후 '자바 ORM 표준 JPA 프로그래밍' 책의 13장을 읽으며 OSIV에 대해 공부했다. 여태 동안 Controller에서 요구하는 데이터가 변경될 때마다 담아주는 D..

TIL 2023.09.07

9/6

👣 개요 오늘은 '자바 ORM 표준 프로그래밍' 책 내용 중 Spring Data JPA에 관한 것을 공부했다. 해당 기술은 JPA를 Spring framework에 맞춰 더 쉽게 사용할 수 있겠끔 만들어 놓은 라이브러리다. 사실 기존에 웹 App을 개발할 때, 거의 Spring Data JPA만 사용했기 때문에 그다지 어려운 개념은 아니었다. 하지만 해당 기술이 왜 그렇게 형성되어야 하고 복잡한 쿼리를 구현하기 위해 Spring Data JPA가 아닌 순수 JPA를 이용하는 방법에 대해 알아야 했지만 이런 것을 설명을 찾지 못해 겉햩기 수준으로만 알고 있었다. 이번 챕터를 통해 JpaRepository의 구현체에 대해서도 공부하고 NamedQuery를 적용하는 방법도 배우고 QueryDSL과 Sprin..

TIL 2023.09.06