본문 바로가기

FastCampus - 한번에 끝내는 Java|Spring 웹 개발

(55)
50일의 끝에서 이제 논다!를 외치다 - 패스트캠퍼스 챌린지 최종 후기 감옥같으면서도 유익했던 50일이 지났습니다. 사실 50일을 채운 건 저번주? 저저번주? 좀 지났지만요... 아무튼 본가에 내려가서도 공부하고, 가족여행 가서도 공부하고, 몸이 아파올거같아도 공부하고, 위기협약(좋아하는 게임의 축제 같은 이벤트)이 다가와도 공부하고(18점 땄음), 림월드(미래로 시간여행을 보내주는 게임 중 하나)에 정신이 팔려도 공부하고 뭔 놈의 챌린지가 사람을 쉬지 않게 만들어줬습니다. 그러면서 오랜만에 바짝 끊임없이 연속으로 공부를 했고 원노트에 열심히 손필기한 노트도 인증샷을 위해서라는 명목 하에 쌓여갔습니다. 여기서 배운 걸 기반으로 뭘 만들어봐야지는 아직 이루지 못했지만요... 이거로는 모자라서 더 공부를 해야하거든요. 너무 급하게 배우기도 했고; 스프링을 전체적으로 둘러보겠다라..
Security 02-06: DB에 계정 넣기 - 패스트캠퍼스 챌린지 50일차 마지막 날입니다. 오늘의 내용은 ... 원래는 05-2 였는데 불필요한 내용 같아서 스킵했습니다. 거의 같은 내용이 나오더라구요 오늘의 내용은 데이터베이스에 사용자를 집어넣는 방법입니다 (강의 자료). 별 건 없고 클래스 두 세 개를 상속해서 넣으면 됩니다. DB에 계정 & 암호 넣기 : DaoAuthenticationProvider & UserDetails spring 공식문서 (DaoAuthenticationProvider) 강의자료 언제나처럼 강의자료가 일부 혼동을 유발하고는 있지만, 이번에는 그래도 전체적으로 어떻게 흘러가는지에 대한 내용을 파악하는 데에는 큰 도움이 됩니다. 공식 문서에는 상세 객체까지 오가는 그림은 없더라구요. 흐름은 UsernamePasswordAuthenticationFil..
Security 02-05: Basic Auth (2) - 패스트캠퍼스 챌린지 49일차 이번 강의에서는 Basic Auth 외에도 일반적인 CSRF 가 필요한 웹사이트와 함께 운용하기 위해서 별도의 Configuration 을 추가합니다. 프로젝트가 갑자기 이전 강의 거로 돌아가는게 제일 당황스럽던; @Configuration 을 별도로 추가하자 강의에서는 사전에 준비해두신 프로젝트로 진행해서 BasicAuth configuration 을 한 번 더 추가했는데요, 저는 이전 강의에서 직접 만들었던 프로젝트에서 이어서 작업하므로 거꾸로 일반 웹페이지 형식으로 받는 Configuration 을 추가해야 합니다. 기존 Basic Auth 설정을 /api/v1 로 이동 일단 기존 핸들러들을 /api 아래로 다 옮겨보겠습니다. @RestController @RequestMapping("/api/v1..
Security 02-05: Basic Auth - 패스트캠퍼스 챌린지 48일차 이상하게 강의를 보는 게 꼬여버렸습니다. CustomLoginFilter (영상 제목이 이상한데...) 에서는 바로 전 강의에서 만들었던 커스텀 로그인 필터에서 직접 StudentAuthToken 과 TeacherAuthToken 을 만들게 바꾸고, 그걸 처리하는 StudentAuthProcessor 와 TeacherAuthProcessor 에서도 해당 토큰들을 필터링 & 처리하도록 바꿉니다. 이것도 언제 실습을 좀 해봐야 하는데 다음장인 05. Basic 토큰 인증에서는 BasicAuthFilter 를 사용한 Basic 인증을 진행합니다. Basic 인증 HTTP 인증 방식에는 여러가지가 있습니다. 그 중 BasicAuthenticationFilter 는 Basic 방법(scheme)을 사용합니다. 이..
Security 02-04: Authentication 메커니즘 - 패스트캠퍼스 챌린지 47일차 오늘은 공식 문서를 보는 걸로 시작해서 강의를 한 두 개 정도 보는 걸로 마무리했습니다. 원론적인 조망 설명이 공식 문서가 엄청 잘 되어있거든요. 강의자료에는 생략되었거나 헷갈리는 부분이 좀 있죠... Authentication 아키텍처 네가 누구인지 확인하겠다, "인증" 이 어떻게 처리되는지 구조를 조망해봅시다. 문서와 강의를 둘 다 참고해서 정리하고 있습니다. https://docs.spring.io/spring-security/reference/servlet/authentication/architecture.html Authentication 의 키 플레이어: 인증처리필터, 인증제공자, 인증값 제 생각에 인증의 키 플레이어는 둘이고, 주요 데이터는 하나입니다. [데이터] Authentication:..
Security 02: 전체 구조 - 패스트캠퍼스 챌린지 46일차 "너무 많이 퍼먹이려고 한다" 스프링 시큐리티 2장입니다. 먼저 오버뷰로 어떤 구조로 되어있는지 살펴보고, 주요 모듈들에서 주의할 점 등을 살펴봅니다. [장문의 불만글은 라쿤이 맛있어보인다고 물에 헹구러 챙겨갔어요.] 하지만 이런 볼멘소리를 늘어놓아도 결국 제가 제대로 이해 못 했다는 점은 달라지지 않으니까요 0- JSP (html 에 Java 코드를 끼워넣기) => Servlet (Java 코드가 HTML을 반환) 순으로 발전했다고 알고있습니다. (이거 학부생때 국비지원교육 들으면서 배웠던 거 같은데.. 학교에서 배웠나?) 소스를 좀 살펴보니, Servlet 에는 request 와 response 가 있습니다. 이거 최근의 웹 프레임워크들에서도 많이 보는 미들웨어 같은 거 아닌가요? 그렇다면 서블릿이 ..
JPA Ch 11 - Dirty Check에 의한 batch 성능 이슈 - 패스트캠퍼스 챌린지 45일차 어쩌다가 마지막 강의가 쉬어가는 시간이 된 건지. JPA 강의의 마지막 내용은... 뒤에 더 없어요?... 자동으로 저장을 해주는 Dirty Check 기능에 의해서 성능적 이슈가 생기는 상황입니다. 한 줄로 정리하자면 다수의 내용을 읽을 때에는 @Transaction(readOnly=true) 를 설정하자는 거구요. JPA의 "자동 저장" JPA에는 dirty check 기능이 들어있어서 Persistence Context (영속 컨텍스트) 에서 관리되는 개체가 수정된 경우 세션(@Transactional) 종료 시 수정 여부를 파악해서(dirty check) 수정된 부분을 반영해줍니다. repo.save() 호출 없이도 반영되는 거죠. 예전 강의에서도 배웠던가요...? 이걸 확인하기 위해서 @Tran..
JPA Ch 11 - 캐시와 DB의 불일치 - 패스트캠퍼스 챌린지 44일차 어째 쉬어가는 시간이 되어버렸습니다. 저번에 양이 많았던 것도 있으니 쉬어가기로. 본래 강의 영상의 제목은 "Ch. 11 JPA 트러블슈팅" 챕터의 "02. 영속성 컨텍스트로 인해 발생하는 이슈" 인데, 강의 내용은 Persistence Context 나 실제 객체와 DB 간의 간극 등에 의해 차이가 생겨서 문제가 발생하는 경우에 대해 다룹니다. 뭐 비슷하죠? 결국은 캐시의 문제입니다. 3가지 정도의 사례가 나왔습니다. 이전 강의에서 봤던 문제: @Embedded 된 객체의 null 여부가 실제 DB와는 무관하게 객체가 있거나 없는 문제 -> 이전에 다뤘으니 생략합니다. 기성 데이터베이스가 있거나 해서 AutoDDL을 사용하지 않은 경우, 데이터베이스의 정의와 객체에 매핑된 타임스탬프의 정밀도가 달라서 ..
JPA Ch 11 "N+1 문제" - 패스트캠퍼스 챌린지 43일차 전날에는 환경 문제로 이 강의를 건너뛰고 스프링 시큐리티를 잠깐 봤습니다. 오늘은 원래대로 돌아와서 JPA 강의를 마저 봅니다. 실습 가능한 환경이 있는 곳으로 돌아왔건만 오늘은 별로 실습할 내용이 없습니다. 근데 강의 길이는 좀 깁니다... 한 동영상에 40분 뭐야... N+1 문제를 향해 이번 강의의 주제는 N+1 문제가 무엇인지, 그리고 어떻게 해결하는지 알아보는 것입니다. 많이 들어봤을 유명한 문제라고는 하셨는데 이게 무엇인지는 명확하게 짚어주지 않으신 채로 앞으로 나아갔습니다. 심지어 저도 찾아봤었는데 너무 오래전에 찾아봐서 뭔지 까먹었었거든요. 패캠 제발 강의 검수좀... 정리를 계속 하기 전에 이게 뭔지부터 다시 알아보고 갑시다. N+1 문제? https://stackoverflow.com/..
Security 01: 개요 및 맛보기 - 패스트캠퍼스 챌린지 42일차 다음 챕터는 Spring Data JPA 의 트러블슈팅 부분이었지만 실습 환경이 갖추어지지 않아서 차라리 다음 챕터인 Spring Security 의 개요 챕터를 보기로 했습니다. 알아야 하는 내용들 앞에서 이런저런 내용들을 이미 배우고 왔다고 가정합니다. 그 중 몇 가지 빠진 게 있는데요... SpEL (Spring Expression Language) UI 부분: thymeleaf 강의 자료는 gitlab과 github 에 올려주셨네요. https://gitlab.com/jongwons.choi/spring-boot-security-lecture https://github.com/jongwon/sp-fastcampus-spring-sec 언어가 "모던 자바" 라는 점이 좋네요. 모던 자바는 따로 시간..