본문 바로가기

프로젝트35

[AnswerDev] 6. 돌아보기 8월부터 시작한 단기간 프로젝트가 다 끝났다.하루에 한 시간씩 깔짝거린 프로젝트라서 뭐 회고라고 할 것도 없는데, 그래도 프로젝트를 하면서 느낀 점은 써둬야 하지 않을까 해서 대충 적어보려고 한다.(사실 프로젝트 끝은 8월 말에 다 끝냈는데 이제서야 정리하고 회고를 하게 되었다... 좀 부지런해져야 할 필요가 있을 듯)프로젝트를 시작하기 전 느낀 점일단 나는 평소에 Studocu 사이트를 굉장히 유용하게 활용하고 있었다.답지를 따로 구매하기에는 가격이 꽤 부담되고... 그렇다고 푼 문제를 채점하지 않는 것은 문제를 푼 의미가 없어지니까. 그래서 전 세계 대학생들이 문제를 해결한 자료나 답지를 공유하는 사이트인 Studocu를 굉장히 편리하다고 생각했다. 그런데 Studocu를 사용하다 보면, 어느 시점부.. 2024. 9. 12.
[AnswerDev] 5. 동적 페이지 크롤링 using Selenium 이제 웬만한 환경 설정은 완료했고, Studocu 사이트에서 답지를 크롤링해서 내 페이지에 띄우면 된다.사실 다른 기능들은 별로 필요가 없기 때문에 이 기능만 구현되면 이 프로젝트는 그냥 끝이다...물론 다른 부가적인 기능들을 넣으려면 넣을 수는 있겠지만, 큰 필요는 없을 것 같아서 그냥 핵심 기능(크롤링 후 띄우기)만 구현하기로 했다. 우선 이 글을 쓰는 2024. 09. 11. 현재 Selenium의 최신 버전은 4.24.0버전으로, 크롬 드라이버를 사용할 경우 크롬 v128버전까지 지원한다.마침 내가 사용하는 크롬 버전이 v128으로 가장 최신 버전이었기에, 나는 Selenium 4.24.0을 바로 build.gradle에 추가해 주었다.// build.gradleimplementation grou.. 2024. 9. 11.
[AnswerDev] 4. @Async 비동기 처리와 Security Context 나는 가능한 한 모든 기능을 비동기로 구현하고 있다.어찌됐건 비동기로 처리하는 게 항상 빠르니까... 오류가 나면 처리하는 식으로 하고 있다. 그런데 여기서 문제는 @Async 비동기 처리를 사용하면, 각 작업마다 새로운 스레드를 만들어서 동작하기 때문에 하나의 스레드에서 만든 Security Context에 다른 스레드는 접근할 수 없다.그래서 현재 접속 정보인 Authentication 데이터에 접근할 수 없는 문제가 있었다. 그러면 어떻게 해줘야 할까?스레드 사이에서 Security Context를 공유할 수 있는 스레드 Executor인 DelegatingSecurityContextAsyncTaskExecutor을 사용해서 스레드 풀을 만들어주면 된다.// AsyncConfig.java@Enabl.. 2024. 8. 17.
[AnswerDev] 3. Security 필터와 permitAll() 대충 Jwt 인증 필터를 구현했다.Role은 크게 필요성을 느끼지 못 해서, 인가 필터는 따로 구현하지 않았다. 이후 내가 작성한 JwtAuthenticationFilter을 UsernamePasswordAuthenticationFilter 직전에 거치도록 해 주었다.여기서 UsernamePasswordAuthenticationFilter은 Spring Security가 기본적으로 인증된 요청인지 검사할 때 사용하는 필터라서, 커스텀 인증 필터를 구현할 땐 해당 필터 앞에 거치도록 만들어주면 된다.// SecurityConfig.java@Beanpublic SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception { ht.. 2024. 8. 17.
[AnswerDev] 2. 비동기 처리 지금까지 스프링부트로 개발했을 때에는, DB나 API 요청이 많으면 서비스가 그 요청을 완료할 때까지 잠시 멈췄었다.요청을 모두 순차적으로 처리하고, 한 번에 하나의 요청만 처리했기 때문이다.그래서 서비스의 성능을 향상시키기 위해서는 요청을 처리하는 속도를 높이거나, 동시에 여러 작업을 처리할 수 있게 해줘야 했다. 그래서 비동기 처리를 허용했다. // AnswerDevApplication.java@EnableAsync@SpringBootApplicationpublic class AnswerDevApplication { public static void main(String[] args) { SpringApplication.run(AnswerDevApplication.class, args); }}자신의.. 2024. 8. 15.
[AnswerDev] 1. 해답 크롤러 개발 준비 백엔드 파트를 독학이 아니라 본격적으로 배운 지 어언 반년 정도가 흘렀고, 현장실습을 진행한 지도 어언 한 달이 넘어갔다.그래서 내가 지금까지 만들었던 프로젝트들을 돌아봤는데... 진짜 말이 안 나올 정도로 처참했다...코드의 구조가 제대로 짜여져 있지도 않았고, 하나의 컨트롤러/서비스에 모든 함수를 다 집어넣어 놓았던 충격적인 사태가 내 눈에 보였다...분명 그 당시에는 나름 구조적으로 잘 설계했다고 생각했었는데, 진짜 마음가짐이 지금이랑 확연한 차이를 보이고 있다...심지어 스프링부트 프로젝트 하나로 프론트엔드-백엔드를 모두 만드려다 보니, 서버에서 클라이언트로 데이터를 보낼 때 JSON으로 보내는 게 아니고 이상하게 보내고 있었다... 진짜 너무 참혹한 광경이었다. 내가 이렇게 코드를 짰었다고..... 2024. 8. 10.
반응형