민스씨의 일취일장

YdMinS' 일취월장 | 구름톤 풀스택 부트캠프 WEB IDE 프로젝트 회고 [17주차 - 22주차] - 스프링 DEEP DIVE 본문

Personal Development

YdMinS' 일취월장 | 구름톤 풀스택 부트캠프 WEB IDE 프로젝트 회고 [17주차 - 22주차] - 스프링 DEEP DIVE

읻민스 2023. 10. 17. 23:25
반응형

구름톤 풀스택 부트캠프 WEB IDE 개발 프로젝트 회고입니다.

민스씨의 일취월장 썸네일 이미지이다.
민스씨의 일취월장

WEB IDE 개발 프로젝트

구름톤 풀스택 부트캠프 전체 코스 중 가장 기대했었던 WEB IDE 개발 프로젝트를 수행했다. 어디서도 보지 못했고 실제로 과제를 보고 "어떻게 구현할 수 있을까?" 하는 물음을 던져보면 답이 궁금해지는 프로젝트였다.

SPRING DEEP DIVE

담당했던 부분은 로그인 파트였고 Spring Security와 JWT를 이용해 사용자를 인증하기로 했다. 스프링부트2에서 스프링 시큐리티를 사용해본 적은 있었지만 스프링부트3에서는 처음 사용해 보았다. 스프링부트3과 스프링 시큐리티6으로 오면서 여러 변화가 있어서 적용하는 것이 쉽지 않았다.

  • LAMBDA DSL

첫 번째 어려움은 더이상 사용하지 않는(deprecated) 메서드들이었다. 메서드들이 완전히 새로워 진 것은 아니고 함수를 아주 미묘하고 다르게 사용하는 Lambda DSL이 그것이었다. 람다는 함수를 간단하게 표현하는 방법으로 "-"와 ">"를 화살표로 만들어 사용한다. 보통은 익명함수를 간결하게 표현해 가독성을 높일 수 있는 장점이 있다.

// 기존
int plus(int a, int b){
	return a+b;
}

// 람다적용
(a, b) -> (a+b);

나머지 DSL은 Domain-Specific Language으로 특정 도메인에서 사용과 이해를 쉽게 하기 위해 설계되었다. 스프링 시큐리티에서 DSL을 사용하는 이유는 역시 보안 설정들을 쉽게 작성하고 명확히 명시하기 위함이다. DSL으로 선언적으로 보안 요소들을 구성하고 메서드 체이닝을 사용한다.

http.authorizeHttpRequests(request ->
            request
                    .requestMatchers("/api/v1/auth/**")
                    .permitAll()
                    .anyRequest().authenticated()
);

 

회고 : 일단 알면 어렵지 않다. 이번 표현식이 바뀐것을 배우면서 앞으로 프레임워크 사용법에 변화가 있을 때 어떻게 대응해야 하는지 방법을 알게됐다.

  • Spring Filter

이번 JWT 적용하면서 가장 큰 난관은 JWT를 도입하는 것이었는데, 내면을 자세히 살펴보면 JWT 토큰을 생성하는 로직 자체보다는 로직을 생성하는 곳의 개념, 즉 스프링을 깊게 이해했어야만 했던 어려움이 가장 컸다. 그렇게 해서 알게 된 두 가지새로운 개념은 Filter(필터)와 Interceptor(인터셉터)이다. 알게 된 건 두 가지이지만 중점적으로 다룬 것은 필터이다. 필터는 자바 서블릿의 기능으로 디스패처서블릿 앞단에 위치해 있다. 따라서 클라이언트의 요청이 디스패처서블릿에 도달하기 전에 모든 요청은 필터를 거치고 서버에서 응답을 보낼 때 디스패처서블릿 다음에 다시 한 번 필터를 거치게 된다.

JWT 토큰과 같이 인증 및 인가를 수행하는 작업을 할 때 필터를 사용하면 요청이 Controller까지 가지 않아도 되기 때문에 효율적이다. 또한 인증 또는 인가되지 않은 요청이 Controller까지 접근하는 것을 막을 수 있기 때문에 보안적으로도 좋다. 또한 모든 요청에 대해 처리해야 하는 로직에 경우 필터를 추가하므로써 모든 요청에 대응할 수 있다는 점도 효율적이다.

회고 : 필터는 스프링의 기능은 아니지만 스프링과 자바가 얼마나 유기적으로 연결되고 잘 연동되는지 확인하는 계기였다. 이를 통해서 더욱더 자바와 스프링을 깊이 이해하고 싶은 마음과 목표를 갖게 되었다.

발표

이번 프로젝트에서 민스씨는 발표도 맡았다. 발표하는 것이 자연스러웠던 때가 있었는데, 유학 기간을 거치면서 발표와 멀어지게 됐다. 유학생활에선 발표를 해야할 기회가 많지도 않았고 다소 피했던 것도 사실이다. 그렇게 발표와 멀어지며 지내다, 이번 부트캠프에서 조금씩 앞에 서 말할 수 있는 기회를 얻게됐고 나름의 작은 성취도 얻었다. 기억하기 위해 적어보자면(자랑아님) 기획안 발표에서는 20점 만점에서 19점(2등/ 11팀)을 받았고 결과 발표에서는 20점 만점에서 18점(3등 / 11팀)을 받았다.

프로젝트 전체 회고

위에서 어려웠던 내용에 대한 이야기를 했지만 실제적으로 어려움을 겪게 된 원인은 짧은 프로젝트 기간이었다. 팀빌딩, 기획 등의 시간을 제하면 실질적으로 구현하는데 주어진 시간은 3주였다. 하지만 접해본적 없는 기술을 짧은 시간동안 학습하고 적용하는 것이 쉽지 않았다. 거기에 혼자서 하는 도전이 아닌 팀프로젝트였기에, 혹여 내 작업이 늦어져 팀에 큰 누를 끼치지는 않을지에 대한 걱정과 불안감으로 프로젝트의 대부분을 보냈다. 그래도 기간 내에 구현해야 했던 기능은 구현해서 다행이었고 돌아 생각해 보면 시간 압박이라는 큰 스트레스가 있었지만 대학 졸업이후 갖기 어려웠던 압축 성장의 시간이었다.

https://github.com/OurRealRoad/web-ide-backend/tree/main/src/main/java/com/jinro/webide/login

 

728x90
반응형