항해 99 주특기 주차를 진행하게 됐다. 2주 동안 Spring boot를 활용한 Lv1 ~ Lv5 과제를 수행했다. 약 2~3일 간격으로 과제를 제출했기에, 시간이 굉장히 부족했던 주차였다. 블로그 작성에 신경을 많이 못 썼던 것 같다. 시간이 많이 부족해서, 이론적으로 깊이 공부하지 못한 것 같아서 간단하게 정리해 보는 시간을 가져보려고 한다.
✔️ REST API 란?
Representational State Transfer(표현 상태 전이)의 약자로, 웹 서비스를 설계하고 구현하기 위한 아키텍처 스타일 중 하나. URI엔 자원을 나타내고, 자원의 대한 행위는 HTTP method를 통해 표현한다.
GET /members/show/1 (x)
GET /members/1 (o)
✔️ Spring을 왜 사용하는가?
Spring은 객체지향적인 개발을 도와주는 프레임워크라고 생각한다. IoC 컨테이너를 제공하여 객체의 생명 주기를 관리해 준다. 이로서 개발자가 객체의 생명 주기에 집중하기보다, 비즈니스 로직에 더 집중할 수 있도록 도와준다.
의존성 주입을 지원하여, 객체 간의 결합도를 낮춰 코드의 유연성을 높인다.
또한 Spring boot를 사용하면, 내장 서버로 간편하게 애플리케이션을 실행하고 배포가 가능해진다.
✔️ JWT 인증/인가의 장점과 단점
장점
- Stateless 한 서버 : 세션/쿠키 기반의 인증 및 인가는, 세션 인증 정보 서버에 저장하여, 요청을 할 때마다 서버가 확인해야 한다. 하지만 JWT는 서버에 저장할 필요가 없어 속도가 더 빠르고, 서버의 부담이 줄어든다.
단점
- 보안 취약점 : JWT내에 포함된 정보를 볼 수 있다. 민감한 정보를 토큰 정보에 담아서는 안된다. 또한, 토큰이 탈취되었을 때 해당 권한으로 인증이 통과되어 버린다.
✔️ Spring Security를 적용했을 때 장점
스프링 시큐리티를 적용하지 않으면, 주요 비즈니스 로직과 인증/인가에 대한 로직이 공존하게 된다. 이는 개발자가 인증/인가에 대한 부분을 신경 쓰면서 개발해야 하는 것을 의미한다.
스프링 시큐리티로 인증/인가를 먼저 처리하게 되면, 비즈니스 로직과 인증/인가에 대한 로직이 분리되게 된다. 이는 개발자가 인증/인가에 한 부분을 스프링 시큐리티에게 맡기고 비즈니스 로직에 집중할 수 있도록 된다.
✔️ JPA를 사용해야 하는 이유
JPA는 객체와 관계형 데이터베이스 간의 매핑을 도와준다. 때문에 개발자는 SQL 쿼리를 직접 작성하지 않고도 객체를 데이터베이스에 저장하고 검색할 수 있게 된다.
JPA는 데이터베이스 종속성을 줄여준다. JPA를 사용하게 되면 데이터베이스가 변경되어도 전체 애플리케이션 코드의 변경이 최소화되어 유지보수성이 향상된다.
✔️ 지연 로딩과 즉시 로딩
JPA는 연관관계를 로딩할 때 지연로딩과 즉시 로딩을 지원한다.
지연로딩은 연관된 엔티티가 실제로 필요한 시점에 로딩되는 방식이고, 즉시 로딩은 엔티티를 조회할 때 연관된 엔티티를 함께 조회하는 방식이다. 성능과 직결되는 부분이므로, 정확한 이해가 필요하다고 생각한다.
✍️ 좋았던 점과 부족했던 점
좋았던 점
- JPA를 사용하여 객체 지향적인 방식으로 데이터를 다루는 데 성공하였다.
- @ManyToOne 관계일 때, 지연 로딩의 메커니즘을 적용하여 성능을 최적화해 보았던 점이 좋았다.
- 양방향 연관관계 일 때, 순환 참조를 방지하기 위해 DTO 클래스로 응답하는 것을 처리하였다.
부족했던 점
- 영속성 컨텍스트의 이해 및 생명 주기에 대한 이해를 더 보충해야 할 것 같다. 영속 상태, 비영속 상태 등 관리에 대한 이해가 더 필요한 것 같다.
- N + 1 문제에 대해서 매니저님께서 언급해 주셨다. 해당하는 상황과 테스트를 진행해 보며 이 문제에 대한 이해가 필요하다. 블로그에 정리가 필요해 보인다.
+ 수정) 2024/03/23 N + 1 포스팅 추가
https://hsuzzang.tistory.com/entry/JPA-N-1-%EB%AC%B8%EC%A0%9C%EC%99%80-%ED%95%B4%EA%B2%B0%EB%B2%95
프로젝트를 진행하면서 어떠한 이슈가 있을 때, 기록하는 습관을 더 들여야겠다. 나중에 오답노트 식으로 활용하면 실력 향상에 큰 도움이 될 것 같다.
시간이 많이 부족했던 주특기 주차였다. 깊이 있는 공부는 힘들었던 시간이었지만, 전체적인 이해도를 전보다 높일 수 있는 의미 있는 시간이었던 것 같다. 동작 원리에 대해 깊이 있는 공부가 필요해 보인다.