Book Review

향로님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스

빈코 2022. 6. 3. 14:05

언제 처음 향로(이동욱)님을 알게 된 지는 잘 기억이 나질 않습니다. 아마 구글링을 하다가 '기억보단 기록을' 이라는 블로그 이름에 끌려 블로그에 들어가게 되었고, 향로님이 쓰신 포스팅을 하나하나 읽게 되었던 것 같네요. 블로그에 정성스레 쓰인 글들을 보면서  '아 나는 언제 이런 영향력 있는 사람이 될 수 있을까?'라는 고민을 했었던 기억이 납니다.

 

이밖에도 깃허브의 꽉 찬 잔디, 호돌맨님과의 유튜브 채널(개발바닥) 및 그 외 유튜브 채널에서 종종 뵈었던 것 같아요. 일 년 반이라는 시간 동안 향로님의 다양한 활동을 간접적으로 경험하고 또 따라 하면서 제 스스로를 돌아봤을 때, '후회 없이 노력했다'라고 자부할 수 있었습니다. 그만큼 향로님의 영향력이 저한테까지 다가온 것 같네요.

 

이제는 자연스레 향로님이 저의 롤모델이라고 생각합니다. 그럼 이제 저의 롤모델 향로님이 쓰신 책을 소개할게요. 책에 대한 내용만 보고 싶으신 분은 읽게 된 계기 챕터는 넘어가주시면 감사하겠습니다😄

 

책이미지
출처:http://www.yes24.com/Product/Goods/83849117

 

읽게 된 계기📖

백엔드 개발자로 취업을 하고 실무에 투입되면서 개발에 관한 갈증을 느낀적이 있습니다. 물론 주니어 개발자이면서 백엔드라는 특정 직군으로 들어왔기 때문이겠지만, 프로젝트를 기획하는 과정, 설계 그리고 배포하는 과정까지 전반적인 모든 일에 뛰어들 수는 없었습니다. 현실은 당장 내 앞에 비즈니스 로직 구현도 힘들고 리팩토링 하는 시간도 부족한데 말이죠. 

 

그렇다고 언제까지 내 눈 앞에 쌓인 과제만 쳐내는 로봇이 될 수는 없겠다는 생각이 들었습니다. 그러다 문득 국비 학원에서 홀로 진행하던 토이 프로젝트가 생각이 났습니다. 토이 프로젝트는 제가 직접 기획부터 설계, 프로젝트 완성 및 배포까지 모든 과정을 진행할 수 있습니다. 하지만 저는 기획만 거창하게 할 뿐, 어디서부터 시작해야 할지 도통 감이 오질 않았습니다.

 

스프레드시트
프로젝트 기획 스프레드 시트

 

ERD
ERD

 

스프레드 시트로 구현해야 할 기능들을 리스트화 시키고, 추후에 많이 변경되겠지만 나름대로 ERD를 구성하면서 어떤식으로 진행해야 할지 고민을 많이 했었습니다. 

 

회원이라는 개념이 필요할까? 그렇다면 회원가입은 어떤 식으로 진행하지? 소셜 로그인을 사용할까? 일반적인 회원가입이면 이메일 인증? 아니면 핸드폰 인증? 비밀번호 분실 시에도? 등등..

 

정작 코드는 한 줄도 작성하진 못한 상태로 끊임없이 고민만 하게 되었습니다. 그렇게 고민만 하던 와중에 이 책을 만나게 되었습니다. 지은이는 '이 책을 보고 나면 무엇을 만들 수 있나요?'라는 질문에서 집필을 시작하였고, 결론은 이 책을 보고 나서 독자들이 소규모 웹 서비스를 만들 수 있게 도와주었습니다.

 

단지 책 한권으로 프로젝트의 전반적인 흐름을 알 수 있고, 고퀄리티 코드를 볼 수 있는 기회이기도 했기에 저한테는 이보다도 좋은 기회가 없을 거라고 생각하고 책을 읽게 되었습니다. 

 

 

어떤 책일까?🤔

책의 목차를 살펴보면, 인텔리제이(IDE) 설치부터 TDD(테스트 코드 작성), JPA, 소셜 로그인, AWS무중단 배포 까지 실무에서 정말 많이 사용되는 기술들이 나열돼 있는 것을 알 수 있습니다. 최종적인 산출물은 간단한 게시판입니다.

 

하지만, 앞서 언급한 바와 같이

  • TDD를 통해 간단했던 게시판이 추후 유지보수에도 튼튼한 게시판이 됩니다.
  • 흔히 아는 네카라쿠배에서 자주 사용하는 JPA의 기술을 접할 수 있습니다.
  • 회원가입 절차 없이 구글과 네이버 아이디를 이용해 해당 사용자의 원하는 정보(이름, 이메일 등)만 가져오는 방법을 알 수 있습니다.
  • 젠킨스(Jenkins) 같은 CI(Continuous Integration)의 특징인 무중단 배포를 구현할 수 있습니다. 

 

TDD🚀

TDD(Test Driven Development)는 테스트 주도 개발이라는 의미로 말 그대로 '테스트를 주도로 개발하는 방식'을 일컫습니다. 개발에 앞서 실패하는 코드를 먼저 작성 후, 테스트를 통과시킬 만큼만 코드를 구현하는 방식입니다.

 

리팩토링시에 안정성을 확보할 수 있고, 추후 유지보수 면에서 시간과 비용을 절약할 수 있어서 많은 기업들이 추구하는 개발 방식입니다. 하단에는 책에서 소개된 TDD의 간단한 예시를 들어보았습니다.

 

  @Test
  public void Posts_등록된다() throws Exception {
    //given
    String title = "title";
    String content = "content";

    PostsSaveRequestDto requestDto = PostsSaveRequestDto.builder()
      .title(title)
      .content(content)
      .author("author")
      .build();

    String url = "http://localhost:" + port + "/api/v1/posts";

    //when
    ResponseEntity<Long> responseEntity = restTemplate.postForEntity(url, requestDto, Long.class);

    //then
    assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
    assertThat(responseEntity.getBody()).isGreaterThan(0L);

    List<Posts> all = postsRepository.findAll();
    assertThat(all.get(0).getTitle()).isEqualTo(title);
    assertThat(all.get(0).getContent()).isEqualTo(content);
  }

 

게시글을 작성한다고 가정하였을 때, 맨 처음 given에 비교하고 싶은 변수를 선언하고 DTO를 통해 사용자의 입력 값을 받습니다. 이후, when에서 url로 호출을 하고 then에서 assertThat을 이용하여 서로 값이 같은지를 비교하는 테스트 코드입니다. 이렇게 테스트 코드를 작성하면서 개발을 진행하는 방식입니다.

 

사실상 TDD를 처음 보신 분이라면, 해당 코드만 봐서는 전반적인 흐름을 이해하기 어렵습니다. 게시판 만드는 전체 코드는 깃허브에 올려놓았지만, 마찬가지로 전반적인 흐름은 책을 통해야만 쉽게 이해하실 수 있으실 것 같습니다(광고 아닙니다😅)

 

책을 소개하는 포스팅이기에 앞선 예제에 관한 더 많은 설명은 생략하였습니다. 만약 이 글로 이해가 어려우시거나 보다 더 깊게 TDD에 알고 싶으신 분은 하단 링크를 클릭하여 TDD의 정의와 암호 검사기 예시를 통해 이해하시면 될 것 같습니다!

 

 

TDD 정의 및 암호 검사기 예시

여러 매체를 통해서 Java, SpringBoot, JPA를 공부하다 보니, TDD(Test Driven Development)에 대해 자주 접하게 되었습니다. 또한 실무에서 프로젝트를 진행하였을 때 계속해서 같은 테스트를 진행해봐야 하

binco.tistory.com

 

 

JPA🛸

JPA(Java Persistence API)는 자바 진영에서 ORM(Object-Relational-Mapping) 기술 표준으로 사용되는 인터페이스의 모음입니다. 즉, 실제적으로 구현된 것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임 워크입니다.

 

역시 말로는 어렵습니다. 간단한 예시를 보겠습니다.

public TodoEntity searchById(Long id) {
    return this.todoRepository.findById(id)
      .orElseThrow(() -> new ResponseStatusException(HttpStatus.NOT_FOUND));
  }

id를 파라미터 값으로 받아 해당 아이디가 존재하는지에 대해 리턴해주는 메서드입니다.

 

public List<TodoEntity> searchAll() {
    return this.todoRepository.findAll();
}

모든 데이터를 찾아오는 것이기 때문에, 파라미터에는 값이 들어가 있지 않고 findAll() 메서드를 이용해 모든 정보를 찾아오는 메서드입니다.

 

public TodoEntity add(TodoRequest request) {
    TodoEntity todoEntity = new TodoEntity();
    todoEntity.setTitle(request.getTitle());
    todoEntity.setOrder(request.getOrder());
    todoEntity.setCompleted(request.getCompleted());
    return this.todoRepository.save(todoEntity);
}

request를 파라미터 값으로 받아서 todoEntity에 제목, 순번 등을 설정해주고 save() 메서드를 통해 DB에 저장하는 메서드입니다.

 

JPA를 처음 보시는 분이라면 위 설명을 보고 욕을..하실 수도 있으실 것 같아요😂 그럼 다시 처음 언급했던 두 문장을 확인해보죠!

 

JPA(Java Persistence API) 는 자바 진영에서 ORM(Object-Relational-Mapping) 기술 표준으로 사용되는 인터페이스의 모음입니다. 즉, 실제적으로 구현된 것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임 워크입니다.

 

위의 문장에서 기술 표준이란 자주 사용하는 기술들 즉 C(Create), R(Read), U(Update), D(Delete)의 메서드인 (위에서 봤던) save(), findAll() 등을 미리 사전에 정의했다는 얘기입니다. 기존에는 mybatis를 이용해서 xml파일로 쿼리문을 작성했는데요.

 

CRUD를 반복적으로 계속 작성하다 보니 상당히 번거롭고 유지보수면에서도 악영향을 끼쳐서 JPA라는 프레임워크가 탄생하였습니다. 쉽게 말해서, '개발할 때 쿼리에 집중하지 말고 비즈니스 로직 짜는데 집중해!'라고 이해하시면 편하실 것 같네요.

 

TDD와 마찬가지로 JPA를 보다 더 알고 싶으신 분은 하단 링크를 통해 JPA에 대해 이해하셨으면 합니다😃

 

JPA의 정의와 장·단점

현대의 웹 애플리케이션에서 관계형 데이터베이스(RDB)는 빠질 수 없는 요소입니다. 그러다 보니 객체를 관계형 데이터베이스에서 관리하는 것이 무엇보다 중요하게 되었습니다. 관계형 데이터

binco.tistory.com

 

배포🛬

사실 AWS를 이용하여 배포하는 과정은 따라 하지 않았습니다. 기존에 국비지원 학원을 다니면서 만들었던 토이 프로젝트를 1년간 무료로 배포하여서 따라 할 수 있는 기회가 없었습니다😂

 

하지만, 책을 끝까지 읽어봤을 때 '내가 학원에서 AWS 배포로 삽질했을 때, 이 책을 미리 알았더라면 좋았을텐데' 라는 생각은 확실히 들었습니다. 모든 블로그를 지칭하는 건 아니지만, 생각보다 개발 블로그에 거짓 정보가 많다는 걸 많이 느끼고 있습니다. 또, 이런 거짓 정보들을 복붙 해서 자신의 포스팅으로 옮겨갔을 때, 초보 개발자에게는 막심한 피해를 끼칩니다.

 

블로그 하나를 지정하고 저자가 하는 방식대로 계속 따라했는데, 중간에 설명이 누락되거나 거짓된 정보라면 많은 허탈감을 느끼기 마련입니다. 

 

짤

 

그래서 이런 확실한 정보를 가지고 있는 책과 같은 매체를 통해 따라하는 과정을 거치면서 배포하는 방법을 터득하셨으면 합니다!

 

 


👨‍👩‍👦‍👦 오픈채팅방 운영

취업을 준비하는 예비 개발자분들을 위한 질문&답변할 수 있는 공간을 만들었습니다. 취업과 이직을 하기 위해서 어떤 걸 중점적으로 준비해야 하는지부터 포트폴리오&이력서 작성법 등 다양한 질문들을 받고 답변을 드립니다. 참여하셔서 다양한 정보 얻고 가시면 좋을 것 같네요😁

 

참여코드 : 456456

https://open.kakao.com/o/gVHZP8dg

 

비전공 개발자 취업 준비방(질문&답변)

#비전공 #개발자 #취업 #멘토링 #부트캠프 #국비지원 #백엔드 #프론트엔드 #중소기업 #중견기업 #자바 #Java #sql

open.kakao.com

 


👨‍💻 전자책 출간

아울러 제가  🌟비전공자에서 2년만에 보안 전문 중견기업으로 이직 한 방법들을 정리한 전자책을 출간 하게 되었습니다. 어떤 걸 공부해야 하는지, 이직을 위해서 무엇을 준비해야 하는지, 제가 받았던 기술 면접 리스트 등 다양한 목차로 구성되어 있습니다. 또한, 구매 시 1:1 채팅을 이용하여 포트폴리오 첨삭을 도와드리고 있습니다. 🐕전자책으로 얻은 모든 수익은 유기견 센터 '팅*벨 입양센터'에 후원될 예정입니다. 관심 있으신 분들은 아래 링크를 참고해주세요😁

https://kmong.com/gig/480954

 

비전공개발자 2년만에 중견기업 들어간 방법 | 14000원부터 시작 가능한 총 평점 0점의 전자책, 취

0개 총 작업 개수 완료한 총 평점 0점인 Binco의 전자책, 취업·이직 전자책 서비스를 0개의 리뷰와 함께 확인해 보세요. 전자책, 취업·이직 전자책 제공 등 14000원부터 시작 가능한 서비스

kmong.com


 

마치며

사실상 책 리뷰는 어떻게 써야하는지 막막했습니다. 책을 통해 배웠던 것들을 모두 나열하기에는 너무나 긴 포스팅이 될 것 같아서 가장 기억에 남았던 부분들을 주축으로 삼아 쓰게 되었습니다. 이 말인즉슨, 제가 언급했던 내용 이외에도 정말 많은 기술과 정보들이 담겨 있는 책이라고 말씀드리고 싶네요 :)

 

아! 그리고 혹여 완전 신입 개발자분들에게는 이 책을 추천하지는 않습니다. 저도 비전공자 출신으로 처음 이 책을 읽었다면 '이게 무슨 소리지?' 하고 갸우뚱 하는 부분이 더 많았을 것 같아요(물론 주관적인 입장입니다) 최소 Java를 6개월 이상 접해보신 분이라면 강추👍 합니다.

 

마지막으로 좋은 책 써주신 향로님께 감사드리며 포스팅 마치겠습니다. 긴 글 읽어주셔서 감사합니다 :D

 

 

책 리뷰 포스팅

* [ 읽기 좋은 코드가 좋은 코드가 - 더스틴 보즈웰, 트레버 파우커 ]

 

관련 포스팅

* [ 레거시와 리팩토링 ]

* [ Java Enum Class ]

* [ TDD의 정의 및 예시 ]

* [ JPA의 정의 및 장단점 ]

 

출처

* 향로님 깃허브

* 향로님 블로그

반응형