입문 주차가 끝나고 주특기 숙련 주차가 시작됐다. 주어진 개인 과제를 보고 정말 놀랐다. 예상을 하지 않은 건 아니지만 생각보다 굉장히 양도 많고 난이도도 매우 높게 느껴졌다.
주차가 시작된 금요일에는 이전에 쌓인 피로 때문인지 집중이 너무 되지 않고, 강의 내용도 따라가기 너무 어려웠다. 그렇게 스스로 무능력함을 많이 느끼고 힘들었었는데, 토요일이었던 어제는 몸 상태도 너무 좋지 않아서 정말 속상했다. 다 힘들고 다 어려울텐데 유독 나만 어렵게 느끼고 나만 뒤쳐지고 있다는 생각이 계속 들었던 것 같다. 이 3주가 가장 고비라고 하셨었는데 이제 무슨 말씀인지 조금 알 것도 같았다.
한참을 멘탈이 나가있었는데, 주변에서 많은 좋은 분들이 위로해주시고 격려해주셔서 정말 큰 힘이 됐다. 항해를 들어와서 이렇게 좋은 사람들을 만날 수 있을거라 생각하지 못했는데 코딩을 배우는 것도 있지만 이런 새로운 좋은 인연들을 만날 수 있던 것도 정말 운이 좋았던 것 같다. 그렇게 힘을 받고 다시 열심히 시작해서 로그인과 회원가입 페이지 구현을 마쳤다. 사실 보고 따라한 수준이지만 그래도 기능을 구현했다는 점에 큰 뿌듯함과 보람, 활기를 찾을 수 있었다.
남은 기간(약 3일?) 동안 구현해야 하는 기능은 다음과 같다.
+ 로그인 검사(회원이 아닌 경우 권한 없도록)
+ 카카오 로그인
+ 게시물마다 댓글 기능 추가
+ 댓글 값은 Not null
+ 자신의 댓글만 수정 삭제 기능 추가
+ 로그아웃하고 페이지로 돌아오면 로그인이 안돼있도록,,,
최대한 구현해보고 또 강의도 들어야 한다.. 사실 강의를 듣는 게 너무 힘이 든다. 그래도 힘내서 이왕 하는 거 열심히 더 잘 해볼 것이다.
이번 주차 키워드는 DI, IoC, Bean 이다.
DI (Dependency Injection)
의존 관계 주입이라 하고, 어떤 객체가 사용하는 의존 객체를 직접 생성하는 것이 아니라 주입받아 사용하는 방법이다. (new 연산자를 이용해서 객체를 생성하는 것이라고 생각하면 된다)
배운 내용 중에서는 타임리프를 사용하거나 validation이라는 유효성 검사를 할 때 build.gradle 파일에 추가해줌으로써 사용한 적이 있다.
@Autowired 라는 어노테이션을 통해 (자동으로 의존성 주입)
- Field, Setter, Constructor 등 다양한 곳에 사용할 수 있지만, Bean으로 등록되어있지 않으면 Error가 발생하게 됨(No qualifying bean), 또한 순환참조 방지가 불가능하다
- 필드 주입(Field Injection)
의존성 주입을 통해 얻는 장점
Dependency Reduction : 객체 상호 간 의존성 관계를 줄여줍니다.
▶ Reusable Structure : 코드의 재사용과 조합이 용이하다.
▶ Readability : 코드들이 분리되다보니 가독성이 좋아진다.
▶ Loose Coupling & Easy to change : 구조는 변화에 민감하지 않을 수 있다.
▶ 테스트가 용이하고 다양한 패턴을 적용하는 데 유연하다는 점도 큰 장점이 될 수 있다.
의존성 주입 방식
스프링 프레임워크(Spring Framework)에서 DI 방식은 다음과 같이 3가지 종류가 있다.
1. 필드 주입(Field Injection)
2. 세터 주입(Setter Injection)
3. 생성자 주입(Constructor Injection)
Spring 3.x 버전까지만 해도 Setter Injection을 권장하였으나, 최근에는 순환참조, Coupling 등의 문제로 인해서 Spring 4.3 이후 버전 부터는 Contructor Injection를 권장하고 있다.
IoC(Inversion of Control)란?
IoC는 Inversion of Control의 줄임 말로, 제어의 역전이라는 뜻이다. 프로그램의 흐름을 개발자가 제어하지 않고, 프로그램이나 프레임웤이 직접 제어를 한다는 말이다. 컴포넌트의 의존 관계 결정(Component dependency resolution), 객체의 생명 주기(life cycle)와 같은 일을 대신 수행해준다.
흔히 스프링 프레임웤을 이용해서 개발할 때 여러가지 Bean을 사용 할 것이다. 사용자의 요청이 들어오면, 요청에 알맞은 Bean을 생성해서 필요한 일을 하도록 시킨다. 해당 Bean이 할 일을 마치면 Bean을 삭제해준다. 하지만 이런 객체의 생성과 소멸이 어떻게 이루어지는지 알 필요가 없다. 프로그래머가 직접 제어 할 필요가 없이 프레임웤이 직접 제어해주기 때문이다. 이것이 IoC 제어의 역전이다.
컨테이너란?
컨테이너 혹은 IoC컨테이너라고 부른다. 컨테이너는 코드의 처리 과정을 위임 받은 독립적인 존재이다.
적절한 설정을 해주면, 프로그래머가 작성한 코드를 스스로 참조한 뒤 알아서 객체의 생성과 소멸(객체의 생애 주기)을 관리한다.
Bean 이란?
Bean은 Spring Framwork의 IoC가 관리하는 객체를 말한다. 즉, IoC에 의해서 자바 객체가 생성되면 이 객체를 Bean라 한다. 이러한 Bean은 @Bean, @Component, @Service, @Repository와 같은 어노테이션으로 생성될 수 있으며, application.xml와 같은 XML 파일에 Bean을 직접 설정해주는 것도 가능하다.
'스파르타코딩클럽 > 항해99' 카테고리의 다른 글
항해99 6기 DAY 23 TIL _ 22.03.29 (0) | 2022.03.30 |
---|---|
항해99 6기 DAY 22 TIL _ 22.03.28 (0) | 2022.03.30 |
항해99 6기 DAY 20 TIL _ 22.03.26 (0) | 2022.03.27 |
항해99 6기 DAY 19 TIL _ 22.03.25 (0) | 2022.03.26 |
항해99 6기 DAY 18 TIL _ 22.03.24 (0) | 2022.03.25 |