되돌아보며

코드잇 스프린트를 완주하였다.

프론트엔드를 공부해보면서 느낀건 결국 나는 백엔드가 좋다는 것이었다.

하지만 이 6개월 동안 배운 점 또한 굉장히 값지기에 기억이 흐릿해지기 전에 정리해볼까 한다.

1. 웹 전반적인 과정 이해

코드잇 스프린트에서 프론트엔드를 공부하면서 최신 트렌드의 프론트엔드 기술들을 접해보았다.

이를 통해 백엔드 뿐 아니라 프론트엔드까지 공부하면서 웹 전반적인 과정을 이해할 수 있었다.

덕분에 협업할 때 백엔드만 알던 시절에 답답했던 부분을 상당 부분 해소할 수 있었다.

특히 CORS 관련 부분에 대한 이해도가 상당히 높아졌다.

2. 새로운 기술을 접하는 법

프론트를 공부하면서 이런저런 라이브러리들과 빠르게 바뀌는 기술들을 경험해보았다.

프론트엔드/백엔드로 분화된지 얼마 안되서 그런지 프론트엔드는 굉장히 변화가 빨랐다.

그래서 레퍼런스를 찾으려고 해도 대부분 이전 버전 예시들이 많아서 최신 버전으로 적용할 때 어려움을 겪었다.

특히 Next.js는 더 심한데, 페이지 라우터와 앱라우터는 아주 많이 다른 기술이라서 이전 기술이 크게 의미가 없는 수준이었다.

그래서 레퍼런스 찾기가 정말 어려워서 공식 문서를 열심히 읽게 되기 시작했던것 같다.

이런 경험 덕에 새로운 기술을 받아들이는 방법을 알았고, 좀 더 사고의 틀을 확장할 수 있었다.

 

프론트엔드를 경험한 후에 최종 팀 프로젝트에서 백엔드를 다시 하면서 이를 더더욱 크게 느꼈다.

다시 백엔드 개발을 하면서 기존에 써봤던 기능들을 복습도 해보고, 처음 접하는 기술에도 도전해보았다.

기존에 해봤던 기능들을 다시 써볼때는 전에는 이해없이 그저 보고 따라했던 것들을 이해하면서 쓸 수 있었고,

해보지 않았던 기술들에 도전할때는 프론트엔드를 공부하면서 맨땅에 헤딩하며 배우던 경험들이 도움이 되었다.

백엔드만 할때는 베스트 프랙티스 위주로만 써서 새로운 기술에 대한 거부감이 컸는데 그런 거부감이 많이 줄었다.

3. 다른 언어를 읽는 법

자바스크립트와 타입스크립트라는 새로운 언어를 공부하면서 자바만 알던 시절보다 다른 언어를 이해하기 편해졌다.

자바스크립트라는 함수형 언어를 접해보고 나니 코틀린 코드도 술술 익히게 되었다.

특히 개발 서적을 읽을 때 큰 차이점이 생겼는데, 전에는 다른 언어로 예시 코드를 들면 이해하기 정말 어려웠지만

이제는 어떤 느낌으로 설명하는지 이해가 잘 되었다.

코드잇 스프린트 수료식

6개월 간의 코드잇 스프린트 3기 과정이 끝이 났다.

사실 도중에 취직해서 중도 수료가 목표였지만 결국 끝까지 수료하게 되었다.

오늘은 서울에 있는 코드잇 본사에서 수료식에 참석하였다.

33명 중 30명이 참석하고, 멘토링을 진행해주시던 각 파트 멘토님들도 꽤 참석해주셨다.

그래서 그간 안면이 있는 동기들, 멘토님들과 이야기도 하면서 회포를 푸는 시간을 가졌다.

뒤돌아보면 팀으로 활동하면서 이 사람들에게 동기 부여도 받으면서 열심히 공부했던것 같다.

개중에는 한번도 같은 팀원이 된 적도, 위워크에서 만난적도 없어서 어색한 사람도 있긴 했지만

그래도 대부분은 아는 사람들이어서 제법 재밌게 놀고 왔던것 같다.

 

부트캠프 수료가 크게 의미가 있지는 않겠지만 그래도 이것도 나름의 인연이다.

내가 이 사람들에게 완벽한 사람이 될 순 없었겠지만 좋은 기억으로 남았으면 좋겠다.

개발자의 길을 계속 걷는다면 언젠가 또 이 사람들과 연이 닿아서 만날 수 있겠지.

이제 다시 취직까지 열심히 달려봐야지.

 

 

25주차에 한것

이번 주도 기능 구현으로 바빴다.

프리사인 URL로 이미지를 저장할 수 있도록 하였고, 소셜 로그인을 구현하였다.

또한 자잘한 CORS 문제를 해결하였고, STOMP로 1:1 실시간 채팅을 구현하였다.

그리고 그동안 미뤄두었던 리팩토링을 진행하였다.

 

이번 주에 한 일

  • 프리사인 URL로 이미지 저장 기능 구현
  • 소셜 로그인 구현
  • STOMP로 1:1 실시간 채팅 구현
  • CORS 문제 해결
  • 도메인 리팩토링

결과

일반 회원가입과 소셜 로그인을 통한 회원가입의 두가지 방식을 병용해서 이메일, 닉네임에서 애먹었다.

이메일도 중복될 수 없고, 닉네임도 중복될 수 없다는 정책이 있었다.

어쩔 수 없이 소셜 로그인으로 회원가입 시 닉네임은 랜덤 번호가 붙은 임시 닉네임을 부여하는 방식으로 진행했고,

이메일도 소셜 로그인으로 회원가입 시 이메일 뒤에 소셜로그인 Provider를 표기하는 식으로 처리하였다.

더 좋은 방식이 있다면 수정할것 같지만 지금은 이게 최선이었다.

 

STOMP로 1:1 실시간 채팅을 구현하였는데 사실 채팅 기능 구현하는건 이전에 해봤던거라 그리 오래 걸리지 않았다.

하지만 나와 연관된 채팅방을 불러오는 조회 쿼리를 만드는게 더 힘들었던것 같다.

당장은 JPA의 기능 없이 한방 쿼리를 작성해서 만들었는데, 이러다보니 연관관계를 굳이 맺을 필요가 있을까 싶었다.

이 부분은 좀 더 공부해봐야겠다.

각각의 채팅방의 마지막 메시지도 조회해야 하는데 한방 쿼리로 어떻게 하고 싶었으나 아직 못했다.

 

이번 주에 아쉬웠던 부분은 아래와 같다.

  • 소셜 로그인/일반 회원가입 병행 시 더 좋은 방법이 없었을까?
  • 각 채팅방의 마지막 메시지 조회 기능을 구현하지 못 함

24주차에 한것

이번 주에는 nginx와 certbot을 이용하여 HTTPS를 적용해보았다.

또한 HTTPS 적용 시 스웨거 관련 CORS 오류를 해결하였다.

 

이번 주에 한 일

  • 유저 정보 조회/수정 기능 구현
  • 게시글 작성 기능 구현
  • 배포 서버에 HTTPS 적용
  • HTTPS 적용 시 스웨거에서 발생하는 CORS 오류 해결

결과

저번 팀 프로젝트에서는 Route53로 인증서를 발급하고 AWS ELB로 HTTPS로 리다이렉트 시켰었는데

nginx와 certbot으로 다른 AWS 서비스 없이 EC2만으로 HTTPS를 적용할 수 있었다.

그동안 nginx로 인증서를 발급받고 적용할 수 있다고 듣기만 했었는데 괜히 쫄아서 못했었다.

이번 기회에 nginx로 HTTPS를 적용해보면서 nginx에 대해 어느정도 감을 잡을 수 있어서 좋았다.

저번에 프리티어 끝나고 ELB를 제거해두지 않아서 요금이 꽤 나왔었는데 무료로 할 수 있다는 점도 좋았다.

 

또한 프론트와 협업하면서 API 명세서로 스웨거를 사용하고 있었는데, HTTPS 적용 전에는 잘 되던게

HTTPS를 적용하면서 스웨거에서 갑자기 CORS 오류가 발생하여 이를 수정하였다.

스웨거를 이번에 처음 써보는거라 스웨거 관련 설정에서 어려움을 겪었던것 같다.

 

이번 주에 아쉬웠던 부분은 아래와 같다.

  • 이번 주는 프로젝트에 집중을 잘 하지 못했음.
  • 이미지 저장 기능까지 끝내고 싶었으나 하지 못함.

23주차에 한것

이번 주에는 그간 괜히 쫄려서 못만져보던 Redis를 만져보았다.

어느정도 머리가 컸는지 레디스도 그렇게 어렵지는 않았다.

또한 yml 파일의 양이 점점 커져서 공통된 부분과 로컬/배포 환경에서 다른 설정을 분리하였다.

그리고 이번 주도 스프링 시큐리티가 적용된 상태에서 컨트롤러 테스트를 하기 위해 시큐리티와 한동안 씨름했다.

언제쯤 익숙해질런지...

 

이번 주에 한 일

  • 레디스에 발급한 인증 번호를 저장하는 로직 구현
  • 회원가입 시 JWT를 발급하는 로직 추가
  • 스프링 시큐리티 내에서 컨트롤러 테스트 환경을 구성하기 위한 설정
  • 로컬, 배포 환경으로 yml 파일 분리

결과

이번 주도 대부분의 시간을 스프링 시큐리티 내에서 컨트롤러 테스트를 하는 방법을 궁리하는데 대부분의 시간을 보냈다.

아무래도 아직 Mocking에 안익숙하기도 하고, JWT 인증 필터가 생각대로 동작하지 않아서 애를 먹었다.

@MockBean 을 써서 어떻게 해보려 했지만 실패했다.

결국 테스트용 SecurityConfig 를 만들어서 테스트에선 JWT 인증 필터를 사용하지 않도록 하였다.

그리고 커스텀 @WithMockUser를 만들어서 인증 필터를 거치지 않고 SecurityContext의 Principal을 쓸 수 있도록 했다.

 

그래도 이번 주엔 레디스도 만져보고, yml 파일 분리하는 법도 익히고, 스프링 시큐리티 내에서 컨트롤러 테스트를 하는 방법도 익힐 수 있어서 제법 알찼다.

문제는 작업량이 적어서 다음 주는 더 열심히 해야한다는 점...

 

이번 주에 아쉬웠던 부분은 아래와 같다.

  • 이번주도 스프링 시큐리티에 시간을 너무 많이 빼앗겨서 작업량이 적었음
  • 아직 Mocking을 하는게 미숙해서 아쉬움

22주차에 한것

이번 주에는 스프링 시큐리티와 이메일 인증을 구현하느라 대부분의 시간을 보냈다.

특히 스프링 시큐리티 때문에 너무 많은 시간을 날려먹었다.

개인적으론 스프링 시큐리티를 안쓰고 ArgumentResolver를 사용해서 인증을 구현하고 싶었다.

그래도 뭐 언제까지고 안쓸 수는 없기에 팀원이 쓰자고 해서 공부를 해보았다.

하지만 스프링 시큐리티는 너무 어렵다... 는게 이번 주에 배운 결과다.

사실 간단한 인증 같은건 굳이 스프링 시큐리티를 써야할까 싶어서 의욕이 안나는것도 큰듯.

뭔가 스프링 시큐리티에 묶여서 개발을 하는 느낌이 별로 마음에 안든다.

아무래도 제대로 이해하고 쓰려면 시간이 좀 걸릴것 같다.

아마 이번 프로젝트 내에서는 완전히 이해하고 쓰진 못할것 같고 꾸준히 쓰면서 익혀야 할듯.

 

이번 주에 한 일

  • 스프링 시큐리티
  • 이메일 인증용 메일 발송
  • Mock Test

결과

스프링 시큐리티로 JWT를 발급하고 인증까지는 할 수 있게 되었다.

그런데 여전히 뭔가 불편한 느낌... 스프링 시큐리티의 컨텍스트 안에서 노는게 아니라 겉도는 느낌이다.

이메일 인증도 해봐야지 해봐야지 하다가 안했던 거였는데 이번 기회에 하게 되었다.

요즘 목표가 기존에 쫄려서 못해본 기술들 다 해보기였는데 만족스럽게 목표를 채우고 있다.

 

메일 발송 같이 사이드 이펙트가 생기는 테스트는 껄끄러워서 테스트 코드를 작성하기 쉽지 않았는데

특히 테스트 할 때마다 메일이 발송되고 그걸 지우는게 귀찮았다.

그래서 자연스럽게 Mocking에 눈이 갔고, 우선은 JavaMailSender를 Mocking해서 동작 여부 상태만 확인하는 식으로 테스트를 진행하였다.

Mocking 라이브러리인 Mockito에 대해 아직 제대로 이해는 못했지만 써보면서 차차 알아가는걸로 하자.

이번 프로젝트에서는 테스트 코드를 원없이 쓰게 돼서 참 마음에 든다.

하지만 이것 때문에 작업량이 줄어드는건 주의해야겠다...

 

이번 주에 아쉬웠던 부분은 아래와 같다.

  • 스프링 시큐리티에 시간을 너무 많이 빼앗김
  • Mockito를 제대로 이해하지 못하고 겉핥기로 사용함
  • 테스트 코드를 작성하는데 시간을 많이 써서 작업량 조절 실패

21주차에 한것

이번 주부터 최종 프로젝트 일정이 시작 되어 슬슬 피그마 시안이나 기획안이 만들어지기 시작한다.

백엔드를 나 혼자서 하는줄 알았는데 어쩌다보니 다른 한 명과 함께 하게 되었다.

혼자 하면 마음은 편하긴 할텐데 혼자 하기엔 양이 좀 많을것 같아서 걱정이 좀 됐는데 다행이다.

어떤 사람일지는 잘 모르겠지만 배울게 많은 사람이었으면 좋겠다.

 

이번 주에 한 일

  • 프로젝트 초기 설정
  • gradle-kotlin 방식 연습
  • 웹소켓 연습
  • 백엔드 재활 치료

결과

백엔드는 Java 17, SpringBoot 3.x 버전에 하는 김에 gradle-kotlin 방식을 쓰기로 했다.

gradle-groovy 방식과 크게 차이는 없지만 아무래도 새로운 방식이다 보니 익숙해지는데 시간이 걸렸다.

QueryDSL 의존성 추가 방식이 좀 달라져서 애먹기도 했지만 결국 헤치웠다.

또한 저번 주에 못 다한 웹소켓을 추가로 연습했다.

그 과정에서 프론트 분에게 정보 공유도 하면서 웹소켓에 대한 이해도가 더 높아졌다.

시 알려주면서 정리하는게 제일 공부가 잘 되는듯 하다.

 

이번 주에 아쉬웠던 부분은 아래와 같다.

  • 이건 익숙해지기 전까진 방법이 없다고 생각하긴 하지만 설정을 만지느라 시간을 많이 뺏겼다.
  • 아직 웹소켓 연결 방식에서 SockJS 말고 STOMP만으로도 할 수 있을것 같은데 못했다.

20주차에 한것

팀원들과 이야기 해본 결과 최종 프로젝트에서 백엔드를 맡아서 하기로 했다.

코드잇 처음 할 때 최종 프로젝트에 내가 백엔드를 할까? 하고 생각만 했었는데 결국 이렇게 되는구나.

이번 주는 팀원들과 가볍게 프로젝트에 어떤 프로젝트를 하고싶고, 어떤 기술을 쓰고 싶은지 이야기 해보았다.

프론트를 얕본 죄로 공부하느라 바빴던 나날이라 백엔드를 안한지 너무 오래돼서 까먹은 부분이 많기 때문에

이야기 나온 기술들을 선행학습 해보면서 백엔드 재활하며 감을 찾느라 바쁜 한 주가 되었다.

 

이번 주에 한 일

  • 최종 프로젝트 구상
  • 포트원 API, SSE, 웹소켓 공부
  • 백엔드 재활 치료

결과

이번 팀은 커머스 쪽을 하기로 해서 결제 부분을 어떻게 처리할까 고민하던 중 포트원 API를 발견했다.

실제로 결제하는건 아니지만 테스트 계정에서 돈 나가고 기록은 나한테 남는 식으로 사용이 가능해서 써먹기 좋을것 같았다.

또한 전에 항해할땐 쫄려서 못 건드렸던 SSE와 웹소켓도 공부하였다.

그래도 전보단 성장한건지 SSE는 쉽게 했고, 웹소켓도 시간은 꽤 들었지만 어느정도 채팅 자체는 구현하였다.

그동안 프론트만 하다가 간만에 백엔드를 하니까 코드만 쳐도 즐거웠다.

 

이번 주에 아쉬웠던 부분은 아래와 같다.

  • 이번 주에 배포까지 다시 건드려 보고 싶었지만 하지 못했음

+ Recent posts