본문 바로가기

스터디/리얼 월드 스터디 회고7

리얼 월드 스터디 회고 - 7 이번주는 댓글 구현이라, 구현 자체는 어렵지 않았다. 그래도 아주 핵심적인 이야기가 오고갔는데, 너무 스프링 시큐리티에 매몰되어 “기본을 놓치고 있지는 않은지” 에 대한 내용이었다. 해당 내용에 대해, 나의 몇 가지 반성 포인트가 있다. 반성 포인트 @SpringBootApplication 애노테이션의 원리를 설명할 수 있는가? 대답은 No다. 큰 그림과 무슨 역할을 하는지는 알지만, 얘가 어떻게 동작하는지는 설명할 수 없다는게 내 현 주소였다. Spring, SpringBoot의 기본적인 아키텍처를 알고있는가? 정말 기본적인 아키텍처만 알고있다(누구나 배우는 그런 아키텍처). CGLib, JDK 다이나믹 프록시 등 AOP 관련 내용은 잘 알지 못한다. 이 부분은 리플렉션이 관여되어 있을 것이므로, 리플.. 2023. 1. 8.
리얼 월드 스터디 회고 - 6 ) Spring Security + JWT 구현 주제 : Spring Security에 JWT 접목 해보기 JWT는 유명세 탓인지 구현되어 있는 예제들이 많기도 하고, 예전에 OAuth2.0에 JWT를 접목해서 구현해본 경험이 있어 구현 자체는 어렵지 않았다. (일단은 AccessToken만 구현하였다.) 대략적인 플로우는 아래와 같이 구성하였다. 로그인에 실패하는 경우 로그인에 실패하는 경우에는 자동적으로 재 로그인을 하도록 되어있다. SpringSecurity가 제공하는 기본 양식을 사용했다. 로그인에 성공하는 경우 로그인에 성공하게 되면 JWT를 발급하여 헤더에 넣어 결과를 내려준다. 테스트할 때 보기 편하도록 ObjectMapper를 이용해서 토큰 결과를 JSON 형식으로 화면에 내려주도록 구성했다. 토큰이 발급되면, 이후 인증은 JWT로.. 2023. 1. 5.
리얼 월드 스터디 회고 - 5 구현 주제 : Spring Security를 이용한 username password 인증 로직 구현 일주일 간의 username&password 인증 로직 구현 스프린트가 마무리되었다. 스프링 시큐리티 설정에서 상당히 많은 시간동안 삽질을 했는데, 삽질 내역은 다음과 같다. CustomProvider 구현체 등록, 해야할까 안해도될까? 이건 준영님께서 의문점을 삼고 질문을 주셨던 내용이다. 내가 해당 인증 로직을 구현하면서 아주 많은 삽질을 했는데, 그로 인해서 가려졌던(?) 문제였다. 스프링 시큐리티에서는 UserDetailsService나 PasswordEncoder를 빈으로만 등록하면 이를 자동으로 구현체로써 취급한다. 그렇기 때문에 커스텀 AuthenticationProvider를 따로 구현하지 .. 2022. 12. 30.
리얼 월드 스터디 회고 - 4 이번에는 Post - User(나는 Member를 사용했다)간 연관관계 매핑을 위한 작업을 했다. 많이 해왔던 일이지만, 그래도 할 때 마다 새로운 것 같다. 어제부터 계속 고민하던 내용이 있는데, “양방향 연관관계 매핑”이 반드시 필요할까?에 대한 내용과 “엔티티의 생명 주기는 어떻게 맞춰야 할까?”라는 내용이다. 양방향 연관관계 매핑이 반드시 필요할까? “필요에 따라 구현해야 한다”가 맞는 답일 것 같다. 아직은 트레이드 오프를 어떻게 해야 적절한지를 모르겠지만, 일단은 JPA + hibernate에 대한 개념 숙지가 우선되어야 할 것 같다. 개념이 숙지 돼야 뭘 트레이드 오프를 해야할지 알 것 같기 때문이다. 엔티티의 생명 주기는 무엇을 기준으로 맞춰야 할까? 예를 들어 아래와 같은 연관관계 매핑이.. 2022. 12. 23.
리얼 월드 스터디 회고 - 3 이번 스프린트 주제 게시글 단건 조회 게시글 여러건 조회 + 페이징 이번 스프린트에서 배운 것 DTO에 관한 토론 변경 여파에 대한 생각 (코드를 변경했을 때, 그 여파가 어디까지 미치는게 옳은가? 최소화하는 방안) @PersistenceContext EntityManager 를 빈으로 주입할 때 사용한다. EntityManagerFacotry에서 새로운 EntityManager를 생성하거나 Transaction에 의해 기존에 생성된 EntityManager를 반환함 스프링 빈은 싱글톤 기반이다. → 모든 쓰레드가 공유 하지만, 위 애노테이션으로 EntityManager 를 주입받아도 동시성 문제가 발생하지 않는데, 이유는 다음과 같다. 스프링 컨테이너 초기화 → @PersistenceContext로 주.. 2022. 12. 21.
리얼 월드 스터디 회고 - 2 깃허브 저장소 https://github.com/SeolYoungKim/real-world-study 이번 스프린트에서는 게시글의 C,U,D 기능을 구현하였다. 아주 간단한 기능의 구현이었음에도 불구하고, 사람마다 이를 받아들이고 해석하는 데는 많은 차이가 있었다. 다양한 아이디어가 있었고, 그 아이디어들이 모두 좋았지만, 그래도 스터디에서 이루고자 하는 목적을 달성하기 위해서는, 스터디원들 모두가 각자의 생각을 모을 필요가 있다고 판단하였다. 따라서, 모두의 생각을 좁혀가기 위한 토론을 수행했다. 내가 가장 먼저 문제점을 제기했었는데, “명세를 보고 그냥 구현만 하는 기분”이 든다는 문제였다. 리얼월드 자체가 이미 나와있는 명세를 그대로 구현하는 것은 맞지만, 뭔가 애플리케이션의 목적이랄게 없다보니 방.. 2022. 12. 18.