[WIL] 항해 Chapter 03 (2022.07.01~2022.07.07)

YOONG·2022년 7월 10일
0
post-thumbnail

Chapter 3 | 주특기 기본/심화

스프링 부트로 로그인 기능이 없는 나만의 항해 블로그 백엔드 서버 만들기

요구사항

  • 1) 서비스 완성, 2) AWS 배포 두 가지를 모두 완수해야 합니다.

1) 서비스 완성

  1. 전체 게시글 목록 조회 API
    • 제목, 작성자명, 작성 날짜를 조회하기
    • 작성 날짜 기준으로 내림차순 정렬하기
  2. 게시글 작성 API
    • 제목, 작성자명, 비밀번호, 작성 내용을 입력하기
  3. 게시글 조회 API
    • 제목, 작성자명, 작성 날짜, 작성 내용을 조회하기
      (검색 기능이 아닙니다. 간단한 게시글 조회만 구현해주세요.)
  4. 게시글 수정 API
    • API를 호출할 때 입력된 비밀번호를 비교하여 동일할 때만 글이 수정되게 하기
  5. 게시글 삭제 API
    • API를 호출할 때 입력된 비밀번호를 비교하여 동일할 때만 글이 삭제되게 하기

2) AWS 배포

  1. RDS 연결
    • MySQL을 이용하기
  2. EC2 배포
    • Ubuntu EC2 를 구매한 뒤, 8080 포트와 80번 포트를 연결하여 포트 번호 없이도 서비스에 접속 가능하게 하기

HangHaeLog API 설계

HangHaeLog 데이터베이스 설계

결과물 링크

프로젝트 후기

스프링을 하나도 모르는 상태에서 프로젝트를 완성해야하다보니 처음엔 너무 막막했다. 아무리 간단한 프로젝트라고 하지만 어디서부터 시작해야 할지도 모르겠고 어떻게 시작을 해야할지도 하나도 감이 오지 않았다.
먼저 스프링의 전체적인 구조부터 살펴보는 것으로 공부를 시작했다. 1주일이라는 시간이 모든 것을 이해한 후 프로젝트를 진행하기에는 짧은 시간이라 느껴졌기 때문에 만들면서 공부해야겠다는 생각이 들었고 하나씩 만들어나갔다.
처음에는 공부라기보단 그냥 단지 과제를 기한 내에 완성하여 제출하기 위해 구글링하며 프로젝트를 진행하는 느낌이 들었고 이렇게 하는 것이 맞는지에 대한 의문이 들었지만 프로젝트를 마무리한 후 돌아보니 생각보다 많은 것들이 머리에 남아 있는 것 같아 뿌듯하고 의미있는 한 주였다는 생각이 든다.


DI(Dependency Injection)

DI란

  • 객체를 직접 생성하는 것이 아니라 외부에서 생성한 후 주입 시켜주는 방식
  • 스프링에서는 스프링 컨테이너가 관리하는 Bean 객체를, 컨테이너가 자동으로 연결 및 주입해주는 것을 의미
  • 스프링에서 관리할 수 있도록 Bean 객체로 등록하면 IoC 컨테이너에 Bean 객체들이 존재하게 되며 컨테이너에서는 이 Bean 객체들을 관리하고, 의존성에 맞게 조립

DI 개념 적용 전 vs 후

DI 개념 적용 전

  • 개발자가 직접 객체를 신규로 생성

DI 개념 적용 후

  • 생성자나 setter()를 사용하여 객체 주입

DI 장점

  • 모듈 간의 결합도가 낮아짐
  • 객체 간 의존성 관계를 줄여줌
  • 코드가 변화에 유연해짐
  • 코드 재사용성이 높아짐
  • 코드 가독성이 높아짐

IoC(Inversion of Control)

IoC란

  • 메소드나 객체의 호출 작업을 개발자가 결정하는 것이 아니라 외부에서 결정되는 것
  • 스프링의 경우 스프링 프레임워크가 오브젝트의 생성, 사용 및 생명주기의 관리까지의 제어권을 담당

IoC 개념 적용 전 vs 후

IoC 개념 적용 전

  • 개발자가 직접 객체를 신규로 생성

IoC 개념 적용 후

  • 프레임워크가 객체를 생성, 관리
  • 의존성 주입을 하게 되면 역방향으로 객체를 주입

IoC 장점

  • 모듈 간의 결합도가 낮아짐
  • 코드가 변화에 유연해짐
  • 코드 가독성이 높아짐
  • 코드 중복이 줄어듦
  • 유지보수가 편해짐

IoC 컨테이너란

  • 스프링 애플리케이션에서 오브젝트의 생성과 관계 설정, 제거 등의 작업을 담당하는 컨테이너

Bean

Bean이란

  • 스프링 IoC 컨테이너가 생성 및 관리하는 객체
  • 스프링에서 사용하는 애플리케이션 객체

Bean 장점

  • 의존성 관리가 용이함
  • Bean으로 등록된 객체는 기본적으로 스코프가 싱글톤으로 정해짐
    • 객체가 하나만 만들어지기 때문에 메모리를 적약하며, 런타임 시 성능 최적화에 유리
    • 특히 데이터베이스와 관련된 객체들은 필드가 많기 때문에 만드는 비용이 많이 들어 싱글톤이 효율적
  • 라이프사이클 인터페이스를지원

03주차 회고

배운 점

스프링 부트의 전체적인 흐름을 파악할 수 있었고 각각의 계층에서 어떠한 역할을 담당하는지 알 수 있었다. 또 막막함을 이겨내고 시작하는 법을 조금은 깨달은 것 같다. 아직까지도 그 막막함이 너무나도 힘들지만 이렇게 깨부수고 나아가서 성장하는 과정을 여러번 거치다보면 나중에는 막막함도 두렵지 않을 것이라 믿는다.

느낀 점

매주 항상 느끼는 것이지만 아직까지도 많이 부족한 것 같다. 하지만 아직 주특기 학습하는 주가 2주나 더 남았으니까 그 2주 동안 이번 주와 같이 하나씩 진행하다보면 나중에 항해 과정 후반에 돌아봤을 땐 많이 성장해 있을 것이라 믿고 지금처럼만 해야겠다.

아쉬운 점

이번 한 주동안 팀장을 맡았는데 내 과제를 하는데에만 바빠 다른 팀원들을 잘 살피지 못한 것 같아 팀장으로서의 역할은 꽝이었다는 생각이 든다. 좀 더 세심하게 팀원들을 살피고 혹시 어려운 점은 없는지 먼저 물어보면서 다가갔다면 더 좋지 않았을까 하는 생각이 든다. 하지만 좋은 팀원들을 만나서 부족한 팀장이었지만 잘 마무리 할 수 있었던 것 같다.


profile
👊천천히, 하지만 꾸준히👊

0개의 댓글