240530
오늘의 학습
● 1. 책 리뷰
● 2. 주특기 과제 질문에 답변
1. 자바의 객체지향 및 스프링 책 리뷰
캠프에서 공부를하며 튜터님을 통해 알게된 책 한권을 리뷰를 해보겠다. ( 바로 아래의 책이다. )
1. 책을 읽게 된 계기
이책을 추천 받았을 때 들은 얘기는 책의 내용이 자바의 메모리, 객체지향 등등 쉬운 주제를 다루는게 아닌데 불과하고 어려운 주제를 쉽게 풀어서 설명을 하기에 이해하기가 쉽다는 얘기를 들었다. 평소에 관심이 많았던 JAVA의 메모리 관리와 객체지향 그리고 스프링에 대해서 이론과 원리가 궁금했었는데 마침 이 책을 알게되었고 읽게 되었다.
2. 책 소개
이 책은 2015년도 4월에 나온 책으로써 현재랑 비교하면 생각보다 오래된 책이다. 오래된 책이지만 자바의 근간이 되는 객체지향과 자바의 메모리 등등의 내용을 다루기 때문에 년도는 크게 중요하지 않았다. 오히려 내용이 더 중요했다.
이 책은 프로그래밍의 역사를 짧게 요약해서 알려주며 역사에서 태어난 자바라는 언어를 간략히 소개하는 내용으로 시작한다. 자바 구성과 동작 원리를 코드 예시로 쉽게 설명해주며, 이해하기 어려운 객체지향을 자바를 이용하여 쉽게 설명을 해주어서 이해를 하는데 어렵지 않았고 오히려 쉽게 이해할 수 있었다. 스프링에 디자인패턴과 객체지향 설계의 5원칙인 SOLID를 접할 수 있었다.
2. 책을 읽으며 느낀점
객체지향, 메모리, SOLID, 디자인패턴 등등 책의 구성을 보면 어려운 주제를 다루지만 생각보다 읽는데 어려움은 못느꼈다. 자바의 실행과 동작 원리를 이해하기 쉽게 예시 코드로 설명을 해주었고, 예시 코드 또한 복잡한 코드가 아닌 엄청 간단한 코드로 설명해주었기에 눈에 잘들어왔고 머릿속에도 잘 잡히게 되었다. 읽는 내내 이해가 잘되니 재미를 느끼게 되었다.
또한 자바의 기초를 잘 알고 있다는 생각을 했었는데 읽는 내내 "아 이래서 쓰는거구나", "아 이런거였어?" 라는 감탄사를 많이 쓰게 될 정도로 깊은 내용을 이해하기 쉽게 잘 설명을 하고 있다.
자바의 기초 문법을 다루지만 생각보다 놓치고 갔던 부분을 많이 찾게 된 책이었고, 스프링에 대해서는 사실 아직 다 안읽어 보았기에 나머지는 읽고 후기를 작성해야겠다.
( 일단은 자바의 동작원리에 대한 이해는 이 책 한권으로는 충분할 듯 싶다. )
주특기 숙련 과제에 대한 질문 답변 ( JWT, RestfulAPI, JPA 과제 )
1. 어느 단계까지 구현에 성공하셨나요?
답변 ) 7단계 까지 구현 했습니다.
2. 기술 질문 ) ERD를 먼저 설계한 후 Entity를 개발 했을 때 어떤 점이 도움이 되셨나요?
답변 ) ERD를 먼저 설계를 하니 만들고자 하는 테이블을 한 눈에 알아볼 수 있어서 좋았고 코드를 짜면서 엔티티의 컬럼이 중간에 추가되거나 삭제 될 우려가 없어 엔티티의 연관 관계를 맺는데에 있어 추후에 문제가 생기지 않는 점이 좋았다.
3. 기술 질문 ) JWT를 사용하여 인증/인가를 구현 했을 때의 장점은 무엇일까요?
답변 ) JWT를 이용하여 페이지에 접근 권한을 쉽게 부여할 수 있었고, 토큰을 이용하여 stateless한 웹 사이트에서 로그인 및 사용자의 정보를 토큰에 담아 상태를 유지 시킬 수 있는 점이 좋았습니다.
4. 기술 질문) 반대로 JWT를 사용한 인증/인가의 한계점은 무엇일까요?
답변 ) JWT를 이용하면 사용자의 정보를 넣는 payload 자체는 암호화가 안되기에 중요한 정보를 넣어서 보내지 못한다는 단점이 존재하며, 토큰에 정보를 많이 담게 되면 토큰의 길이가 길어지므로 네트워크의 부하가 생길 우려가 있습니다.
5. 기술 질문) 댓글이 여러개 달려있는 할 일을 삭제하려고 한다면 무슨 문제가 발생할까요? Database 테이블 관점에서 해결 방법이 무엇일까요?
댓글이 여러개 달려있는 할 일을 삭제하게 된다면 우선 첫 번째로 할 일만 삭제가 되고 댓글 테이블의 댓글이 삭제가 안될 우려가 있으며, 이것을 테이블의 관점에서 해결을 해본다면 외래키 제약 조건과 함께 delete cascade 옵션을 추가해주어 1:N 관계에서 1이 삭제될 시 N이 함께 삭제되게 만들어줘야 합니다.
6. 기술 질문) IoC / DI 에 대해 간략하게 설명해 주세요!
IoC는 Inversion of Control로 제어의 역전이라고 합니다. 객체 생성에 대한 제어를 외부에서 해주기 때문에 이것을 제어의 역전이라고 말 할 수 있고 하나의 설계 원칙입니다. DI는 Dependency Injection 의존성 주입 이라고 하며, 의존성이란 객체 내에서 다른 객체를 호출하는 것을 의존하다 즉, 의존성이라고 합니다. 이러한 의존성을 주입해 주는 것이 DI이며, 의존성을 주입해주는 건 외부에서 해주는 것이기 때문에 DI 라는 디자인 패턴을 이용하여 IoC 설계원칙을 준수하고 있다고 생각하시면 됩니다.
# 오늘의 회고
오늘은 과제 제출을 했고 제출을 하면서 받은 질문들에 대한 답변을 정리해 보았다. 또한 최근에 읽고있는 책에 대해 중간 리뷰를 하게 되었다. 평소에 책을 잘 안읽었지만 이 책을 읽고 느낀 점은 공부를 할 때 책을 보는게 강의를 보는 것 보다 기억에 더 잘 남는다는 것을 깨달았다. 그리고 책 읽는거에 대한 재미를 붙히게 되었고 오늘부터는 책을 꾸준히 읽으려고 한다. 물론 코딩과 관련된 책을 위주로 읽을 예정이다.
개인 과제가 끝나면서 JWT와 JPA의 실력이 향상이 되었다는 걸 스스로 체감을 하고 있다. 역시 코딩 실력은 보기만 해서는 늘지 않는 것 같다. 무조건 강의를 보더라도 꼭 꼭 한번씩은 따라쳐보는 걸 잊지 않고 할 것이다.
'내일배움캠프 Spring 5기' 카테고리의 다른 글
내일배움캠프 33일차 TIL - Git-Hub Fork (0) | 2024.06.03 |
---|---|
내일배움캠프 32일차 TIL - JDBC & JPA (0) | 2024.05.31 |
내일배움캠프 30일차 TIL - JWT(Stateless) (0) | 2024.05.29 |
내일배움캠프 29일차 TIL - ExceptionHandler (0) | 2024.05.28 |
내일배움캠프 28일차 TIL - Filter (0) | 2024.05.27 |