스프링 입문 강의를 끝냈다. 5시간 21분 밖에 안되는 총 강의 양이지만 미루고 미루고 좀 게으르게 하다보니깐 이렇게 밖에 못했다. 강의를 한번에 듣는게 아닌 자꾸 여러 단계로 끊다 보고 하다보니깐 점점 어떤 내용인지 모를정도로 그냥 받아쓰기 하는 것처럼 코드를 쓰게되서 많은 흥미를 잃게 된것일수도 있다. 그렇기 때문에 오늘은 강의 내용을 섹션 별로 나눠서 나만의 요약법을 간단히 쓰고 이제 핵심 내용으로 넘어가게되면 좀 더 깊이 있게 따라 해보고싶다.
프로젝트 환경 설정
기본적으로 프로젝트를 생성하는 방법이다. https://start.spring.io 에 들어가서 Gradle Project 를 선택하고 Dependencies 에서 Spring Web, Thymeleaf (HTML 만들어주는 템플릿 엔진) 를 넣어주면 된다.
Generate 버튼을 눌러 파일을 다운로드 한뒤에 압축을 풀고 IntelliJ 에서 Open or Import -> build.gradle 선택 후 오픈하면 된다.
Gradle 은 의존관계가 있는 라이브러리를 함께 다운로드 한다. (예: spring-boot-starter-web -> tomcat 등등)
스프링 웹 개발 기초
@ResponseBody 는 객채 (object) 를 JSON 방식으로 리턴할때 가장 쓰임새가 높다.
사용원리:
요약: Controller 확인 -> viewResolver 대신 HttpMessageConverter 동작 -> 문자 or 객채 따라 converter가 다르다.
회원 관리 예제 - 백엔드 개발
Dependency Injection -> 외부에서 객체를 그대로 넣어주는것
회원 서비스가 직접 메모리 회원 리포지토리를 생성했는데 이는 테스트케이스에서도 동일하게 하게된다면 서로가 다른 리포지토리 (DB) 에서 테스트를 실행하는 모습이다. 이런류의 코드는 나중에 문제가 될수 있으므로 DI를 통해 MemberService 가 직접적으로 DB 객체를 만들지 않도록 해주었다.
멤버 컨트롤러가 서비스와 리포지토리를 사용할수 있어야 하는데 이것을 의존관계 라고 한다.
컨트롤러는 기본적으로 컨테이너가 관리를 한다
컨트롤러 안에서도 new 를 써서 객채를 사용할수는 있다, 그러나 이 말은 다른 컨트롤러도 같은 객체를 사용할수있다는 뜻이고 하나만 생성해서 가지고 운영하는게 중요하다
스프링 컨테이너에 등록을 하는게 우선순위이다
그러나 단순히 이렇게 쓰면은 에러가 나오는데,
스프링 빈을 등록하는데는 2가지 방법이 있는데
컴포넌트 스캔과 자동 의존관계 설정
자바 코드로 직접 스프링 빈 등록하기
회원 관리 예제 - 웹 MVC 개발
Member 을 따로 관리하고 싶었기에 회원 폼 등록 HTML 을 createMemberForm 이라는 폴더에 따로 넣어주었다.
유심히 봐야할것중 하나는 form action = "members/new" method = "post" 인데 name = "name" 이라 적힌 부분이 서버로 넘어올때 key 가 된다.
폼을 만드는 html 을 끝내놨으니 이제 컨트롤러를 등록해야 한다. 회원가입을 누른 순간 -> /members/new 로 이동을 했고 GetMapping(/members/new) 로 인해 폼을 등록하는 HTML 이 열린것이다. 해당 HTML 폼에서 이름을 입력하면 key 와 value 가 스프링으로 넘어 가게된다.
@PostMapping(/members/new) 를 적었기때문에 value 가 이쪽으로 넘어갔고 새로운 member 을 만든 다음, 멤버에 setName 을 form.getName() 으로 이름을 가져오고 멤버 서비스에 조인을 하게 해주었다.
-@PostMapping(/members/new) 로 넘어오게 되고 create(Memberform form) 에서 멤버 폼을 설정해주면서 HTML 에서 넘어오게 한 name 이라는 변수가 그대로 스프링이랑 같이 MemberForm 으로 넣게된다. setName이 호출이 되가지고 this.name = name 과정에서 name이 설정 되었다.
스프링 DB 접근 기술
스프링 DB 같은 경우는 너무 토픽이 방대하고 JDBC, H2 같은건 나중에 더 배울수 있기때문에 JPA 관련된것만 포스팅 해본다
강의를 끝마치며
처음으로 Spring 을 이용한 코드를 여러가지 적어보고 배웠는데 웹 프레임워크 경험으로는 Python Flask, Node JS Express 를 경험해봤기 때문에 금방 배울수 있겠지 라는 마인드로 시작했다.
그런데 내가 생각했던것보다 Spring 은 더욱 복잡했고 지금 요약본이라고 적은 이 계시글에도 많이 생략된게 JPA, JDBC, 그리고 AOP 가 있다.
이번 강의만 봤을때는 좀 더 복잡하고 이해하기 힘들었기 때문에 다음 강의에서 더 깊이 있는 수업을 들으면서 이론을 더 빠삭하게 배우고 싶었다. 백엔드 부분에서 군대로 인해 학교에서 배운것도 그렇고 너무 많이 잊은것들이 많기에 스프링으로 천천히 하나하나 주입해서 배우고싶다.
아직 실무로 투입되기에는 너무 부족하다고 생각하기때문에 이력서에서도 그렇고 다음강의 까지는 다 들어야지 그나마 뭐라도 할수있을거라고 말 할거같다. 그래도 처음 강의 들었던거에 비하면 많이 이해가 됐어가지고 좀 게을러지지 않게 꾸준히 해보는게 좋을거같다.
좋은 강의를 들을수 있게 도와준 동생한테도 감사하게 생각한다.
다음 강의부터는 더 빠른 템포로 수업을 진행해야겠다.