스프링 부트와 AWS로 혼자 구현하는 웹서비스 후기 (1/2)

김설영·2022년 8월 3일
5
post-thumbnail

알라딘 E-book으로 7장까지 읽은 후기입니다.

해당 책을 사기 전, 가장 고민이 많이 되었던 부분은 아무래도 2019년도에 나온 책이라는 점이었다.

아직 자바와 스프링부트를 공부한지 4개월이 채 안됐지만,
프로젝트를 빌드할 때마다 스프링 부트의 버전이 무서운 속도로 증가하는 것을 보면서, 개발자에게 3년이란 시간은 버전의 갭이 매우 큰 시간이라고 느껴졌기 때문이다.

어쩌면, 자신감이 없어서 더 고민했을지도 모른다.

내가 버전이 다른 부분을 감안하고 이 책을 읽고 구현을 해 봤을 때, 성공적으로 공부를 해낼 수 있을까? 에 대한 막연한 두려움이 컸던 것 같다.

그럼에도 불구하고 이 책을 선택했던 이유는 다음과 같다.

  1. AWS를 스프링 부트에 접목시켜서 예제와 함께 설명해준 책이 없다.
  2. 내가 조만간 공부해야지 했던 스프링 시큐리티를 사용했다. (심지어, 구글/네이버 로그인을 사용했다)
  3. Rest API를 사용했다.
  4. 나는 개발바닥 애청자다.

위 네 가지 이유로 짧았던 고민을 마치고 "에러가 나면 그걸 해결해서 내꺼로 만들어보자"라고 생각하며 바로 알라딘에서 E-book을 구매했고, 그 날 바로 학습을 시작했다.


2,3장 변경 사항

2, 3장 에서는 테스트 코드 작성법에 차이가 있다는 것 빼고는 별다른 차이점을 발견하지 못했습니다. 간단한 차이점을 정리드리며, 글이 길어질 것 같아 여기에 정리하는 대신, JUnit4와 JUnit5 간의 차이점에 대해 잘 정리해주신 블로그 링크를 첨부드립니다.

테스트 코드 작성법

  • 책 :JUnit4

  • 현재 : JUnit5

책과 똑같이 JUnit4를 사용했다면 작성법에 변경 사항이 없습니다.
해당 내용은 JUnit5를 사용하는 분들만 변경 내용을 적용하시면 될 것 같습니다.

  • @RunWith(SpringRunner.class)를 사용하지 않습니다.
    • 더 많은 차이점은 이 블로그에 정리가 잘 되어 있습니다.

인텔리제이 빨간불.. -> IDE 문제..! 2022.1.1 버전 문제입니다.

  • 인텔리제이 버전에 따라 mockMvc, objectMapper 등이 autowire가 되지않는다고 경고등이 뜰 수 있습니다. 하지만, 실행은 정상적으로 가능합니다.(실행이 제대로 안되는 경우 문제 확인 필요) 이는 설정 방법을 바꾸면 안뜨게 할 수 있다는데, 아직까지 제대로 찾지를 못해서 찾는 대로 업로드 해보겠습니다 🥲

  • 댓글의 chanwooo 님께서 IDE 버전 문제라고 알려주셨습니다. 덕분에 저도 고쳤습니다..! 무한 감사를.. 🙇‍♂️ 또한 해당 버전은 console 창에 개행문자 입력 버그라는 치명적인 버그가 있다고 합니다. 꼭 업데이트 하셔서 사용하세요!!


프로젝트 상의 버전 차이가 있었는가?

3장 까지는 인프런 강의에서도 많이 봐왔던 내용이었기 때문에, 복습 겸 빠르게 넘어갔다. 그리고, 코드는 기존에 학습해왔던 방식으로 내가 스스로 구현해본 후, 나중에 진행에 문제가 없도록 하기 위해 세부적인 엔티티 필드 구성 정도는 책과 똑같이 맞춰주었다.

버전의 차이로 인한 문제는 4장에서 약소하게(?) 마주하는 것으로 시작되었고, 이로 인해 발생할 미래의 문제들을 README.md 파일에 기록하기로 했다.

기록한 README 파일 - 버전 차이 및 개인 문제 해결

머스테치 화면 출력 시, 한글이 깨지는 현상

4장에서는 머스테치 화면 출력 시, 책과 똑같이 설정했음에도 불구하고 한글이 깨지는 현상이 발생했다. 이는 스프링 부트가 버전업이 되면서 발생한 문제라고 한다. 이는 아래의 설정 정보를 추가하여 해결했다.

# yaml
server:
	servlet:
    	encoding:
        	force-response: true

# properties
server.servlet.encoding.force-response=true

그 후에는 문제 없이 CRUD를 구현했고, 자바스크립트의 이벤트 핸들러도 배울 수 있었다.

22.08.21 build.gradle이 다른 부분

  • 책에서 build.gradle을 작성하던 방식과, 현재의 작성 방식에 큰 차이가 있다.

👇👇 책에서의 작성 방식 👇👇

👇👇 현재 작성 방식 👇👇

JavaScript 문법 관련

  • 변수를 선언하는 varlet으로 작성하는 것이 권장됩니다.

22.08.16 추가적인 차이 발견 - 예약어

MySQL 예약어 - 공홈

  • User -> 예약어... 이로 인해 삽질을 4시간 가까이 하였음.
  • 왠만하면 예약어는 공홈을 찾아보자. 최근에 추가되는 경우가 있다.
  • 저와 같은 문제가 발생하면, 굳이 User Entity의 이름을 수정하지 마시고, User class에 @Table(name = "Users") 애너테이션을 추가하세요.

Spring Security

구글 클라우드 서비스 등록, 네이버 API 등록, application.yaml, application-oauth.properties는 큰 차이가 없었다.

다만, 차이점은 스프링 시큐리티 코드를 작성할 때 발견되었다.

스프링 시큐리티를 사용하기 위해 SecurityConfig 파일을 작성해야 했는데,
책의 작성 내용과, 현재 사용되는 설정 방식의 차이는 다음과 같다.

  • 책에서의 설정 방법

    • WebSecurityConfigurerAdapter를 상속받음

    • 위의 어댑터를 상속받아 설정을 오버라이딩 하여 사용함


  • 최근 스프링 시큐리티의 설정 방법

    • WebSecurityConfigurerAdapter는 deprecated 되어, 상속을 받지 않고 모두 Bean으로 등록하여 사용하는 방식으로 변경 됨.

SecurityFilterChain 설정 방법 관련 추가 수정 내용 (22.08.20)

  • 작성 방식이 람다 형식으로 변경되었음.(권장)
  • 람다 형식으로 변경되면서, and()로 각 처리 계층에 대한 구분을 해주지 않아도 됨
  • 처리 계층에 대한 구성 로직을 한눈에 보기 좀 더 쉬워짐.

설정 정보 등록 방식과 return값의 유무 차이만 바뀌었을 뿐,
url permit, 특정 url에 Role 설정하기 등의 http 체인 구성은 달라진게 없다. 다만, 작성 방식은 변경되었다.


AWS 설정에 크게 차이가 있었는가?

화면 구성이 조금 다르다는 것과, 책에서 추천하는 리눅스 1 버전이 없어진 것 빼곤 큰 차이가 없었다.

  • 리눅스 2 버전을 사용하면 됩니다.
  • API, AWS 등 설정 방법이 어려울 경우, 잘 정리된 블로그가 많으니 최근에 작성된 글을 참고하시면 좋습니다.

결론 - 이 책, 사길 너무 잘했다!

프로젝트 구성 부분 (이론 포함)

스프링 부트를 이제 막 뗀 초보가 들어도 이해가 될 만큼, 반드시 알아야 될 부분들을 세세하게 설명을 너무 잘 해주셨다.

개인적으로 특히나 좋았던 부분은 다음과 같다.

  • 패키지 구성은 왜 이렇게 했는지
  • 코드 구성을 왜 이렇게 했는지, 왜 이런 방식을 선택했는지
  • 머스테치는 왜 선택했는지
  • Maria DB를 왜 선택했는지, 등

개발자가 어떻게 생각해야 하는지, 어떤 마음가짐을 가져야 하는지에 대한 철학이 담겨있는 것 같았다. 비단 개발 지식 뿐만 아니라, 이런 것도 배운다는 점이 너무 감사했다. 어디서 배울 수 없는 것을 배운 기분이었다.(책 값이 너무 싼거아닌지...)

AWS 설정 부분

이 부분도 잘 모르는 사람이 들어도 할 수 있을 만큼, 사진과 예시를 들어주면서 설명을 잘 해놓으셨다.
특히, 주의해야 할 부분들을 전부 강조해서 설명해주신 게 인상깊었다. 이제 막 AWS를 공부하는 초보자들이 자칫 잘못하여 놓치고 큰 손해를 볼 수 있는 부분들을 철저히 짚어주셨다. (사실 코인이 채굴되는 걸 볼 수 있다는 말은 조금 무서웠다.)


책을 구매하기 전에는, 막연히 차이가 클 것이라고 고정관념부터 박혀있었다. 하지만, 생각보다 내용의 차이는 많이 없었고, 있어도 해결이 금방 가능한 부분들이었다.
미리 겁부터 먹는것, 반성해야 할 부분인 것 같다..ㅠ

아직 7장까지밖에 읽지 않았지만,
누군가 AWS 입문 서적을 추천해달라 한다면 주저없이 이 책을 추천할 것 같다.

이제, 다음 후기를 남기기 위해 나머지 챕터를 읽으러 가야겠다!

profile
블로그 이동하였습니당! -> https://kimsy8979.tistory.com/

4개의 댓글

comment-user-thumbnail
2022년 8월 16일

감사합니다. 이제 3장좀 지났는데, gradle build 설정부분 등 안되는게 많아서... 동욱님 깃헙 issues에도 없는건 인터넷에서 많이 찾아보고 있는데, 이렇게 공유해주셔서 감사합니닷

1개의 답글
comment-user-thumbnail
2022년 8월 31일

안녕하세요~ 저도 sb2.7에서 해보고있는데 문제가 좀 생겨서 여기저기 돌아다니다가 좋은글을 발견하게되었네요. 감사합니다~
저는 test코드에서 autowired에서 빨간불 그어주는문제 ide 업데이트를 하니 싹 사라졌습니다 ..

1개의 답글