본문 바로가기

1.프로그래밍/개발

[NHN Academy] NHN Academy 인증 과정

728x90
반응형

NHN Academy Java 백엔드 광주 1기

https://nhnacademy.github.io/


기간: 2022.07 ~ 2023.03


지난 약 7개월간의 과정을 마치고 인증과정 수료를 받았다.

(Advanced Java과정, Java Backend과정, 인증과정)


NHN Academy 과정 중의 Github
백엔드 과정 개인 Github: https://github.com/NHN-Academy-GwangJu-1st
프로젝트 Github: https://github.com/itbook-store


인증을 목표로 달려왔지만 마지막 테스트 시험때 문제로 인하여 시험 결과가 좋지 않아 수료를 받게 되었다.


하지만, 이에 대해 최선을 다했기에 후회는 없고 미련을 갖고 있기에는 시간낭비라고 생각하고 떨쳐내고자 글을 적기로 한다.


⚠️ 지극히 개인적인 얘기를 담고 있습니다. ⚠️


해당 글은 노션을 통해 작성하였습니다.노션 링크

Java Backend과정 무엇을 배웠을까?

정말 이 짧은 글로 적기에는 다 담을 수 없을 정도로 많은 것을 배웠다.


개인적으로 깨작깨작 공부하던 때와는 궤를 달리하였다.


NHN Dooray의 수석님들께서 체계잡힌 수업을 통해 정말 많은 것들을 배웠다.


Java의 기초부터 시작하여, 네트워크, Spring Core부터 점진적으로 Spring Security와 Spring Boot 까지.


해당 강의에 대해 100%를 가져갔다고는 말 하지 못하겠다.


정말 지금 정도의 지식을 가져간것에 대해서 감사할 따름이다.


이러한 교육의 기회와 교육해주신 NHN Academy 관계자분들께 정말 감사하다.

NHN Academy 인증 프로젝트 과정

인증과정에서는 ‘팀 프로젝트’로 진행이된다.


쇼핑몰 프로젝트를 진행하였고, 해당 요구사항을 제시해 주었다.


해당 요구사항에 맞게 ERD를 설계하고 인프라를 구축하였다.


처음 팀 프로젝트를 진행하는 거라 우여곡절이 많았다.


팀 컨벤션을 정하는 것부터, 코드리뷰 진행 방식, 팀원들과의 역할 분배 등등 다 처음 겪어보는 일이라 여러가지 시행착오도 많이 겪었다.


인프라를 처음 구성해보는 것이라, Bad GateWay 에러가 터지기도 하면서,


CI/CD 가 제대로 동작하지 않는 문제점 등이 일어나기도 하고,

처음 WBS를 작성한대로 일정이 흘러가지 않아 다시 일정을 분배하여 진행하기도 하고,

ERD 설계를 다시 변경하기도 하는 등등 일을 겪으면서 우여곡절 끝에 프로젝트를 성공적으로 마무리 하였다.


이제는 내가 개발 했던 내용 중 인상깊었던 내용에 대해서 말해보려고 한다.

Spring Security 와 JWT 를 이용한 인증 / 인가 개발

프로젝트 인프라 구조

image


항상 모놀리식 아키텍처를 통해 단일 서버에 대한 Spring Security를 이용하여 인증 / 인가를 개발 했었다.


그러나, 이번 프로젝트에서는 서버가 분리되어있고, 프론트서버와 API서버의 경우에는 이중화가 되어 있다.


이로인해, 세션인증을 유지하기가 어려워졌고, 인증 방식에 대한 문제가 생겼었다.


처음으로, 분산된 서버에서 동일한 세션을 유지하고 스티키 세션문제를 해결하기 위해 Redis를 이용하여 세션 클러스터링을 해주었다.


그리고 Spring Security의 UsernamePasswordAuthenticationFilterAuthencticationManager 등을 직접 커스터마이징하여 구현을 하였다.


JWT(Json Web Token)에 대해 공부하여, JWT 토큰을 사용하여 분산된 서버간의 인증을 구현 할 수 있었다.


또한, Gateway 서버에서 Spring Cloud Gateway를 사용하여 API Gateway를 구축하여 라우팅을 하였고,


Gateway Filter를 직접 구현하여, JWT 토큰에 대한 검증과 담겨있던 Payload 값을 Shop서버로 전달 할 수 있게 만들었다.


마지막으로, API 서버에서 인가에대한 관심사 분리를 하기위해 AOP를 구현하여 다른 팀원들이 해당 문제에 대해 관심사 분리가 가능하도록 구현하였다.


그 외에도 Naver, Kakao, Github Oauth 또한 Spring Security의 OAuth2LoginAuthenticationFilter 를 커스텀하여 구현하였다.


이로서, 분산된 서버의 인증 / 인가를 성공적으로 구현할 수 있었다.

Redis 와 MySQL 을 이용한 장바구니 구현

해당 내용은 https://myeongdev.tistory.com/91 블로그에 작성 해두었다.

마무리

위 과정을 수료함과 동시에 대학교도 졸업을 하게 되었다.


이제 정말 취준생이 되어 취업에 도전하고, 앞으로도 많은 도전을 통해 더욱 성장해 나아갈 것이다.


앞선 날들과 같이 혼자 방구석에서 공부하고 있었다면,

절대 이정도까지 배우고 습득하지 못하였을 것이고,

지금 이 좋은 인연들 또한 만나지 못했을 것이다.


이러한 값진 경험을 통해 발판 토대를 잘 구축한 것 같아 마음 한켠이 든든해졌다.


만약 이 글을보고 NHN Academy 수강을 고려하는 분이 있다면 적극 추천하겠다.


끝으로, 매우 수준높고 수강생들을 많이 아껴주신 NHN Academy 분들께 다시 한번 진심으로 감사드립니다.

728x90
반응형