스프링 공부/인프런 김영한 스프링 입문 노트정리 28

인프런 김영한 스프링 입문 강의 후기

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 이 강의의 마지막 회차인 "다음으로" 회차를 방금 모두 보았다. 한 달간의 대장정이 끝났다. 의도하지 않았는데도 이 강의의 첫 노트정리 게시글이 정확히 오늘로부터 한 달 전(7월 19일)이어서 기분이 좋다. "다음으로" 회차는 그냥 이 강의의 전체 내용을 싹 훑어주고, 앞으로 할 공부의 방향을 알려주는 내용이었기 때문에 "다음으로" 회차 노트정리 대신에 강의 후기나 써보려고 한다. 강의 내용, 추천하는 대상 스프링이 무엇이고 어떻게 굴러가는지 ..

7-2. AOP 적용

AOP가 무엇인지 알아보고, AOP를 적용하는 모습을 코드로 직접 확인하는 회차이다. AOP(Aspect Oriented Programming)란? AOP를 간단하게 설명하자면 다음과 같다. 프로그램의 각 기능을 실행하는 데 시간이 얼마나 걸리는지 측정해야 하는 상황에서, AOP 식으로 개발하지 않으면 아래 그림처럼 해야 한다. 하지만 AOP를 한다면 다음과 같은 상황이 된다. 객체지향적 프로그래밍과 DI를 통하여 각 구성요소를 알맞은 단위로 잘 나누어놓았기 때문에 가능한 일이다. AOP 클래스 속에 코드를 적어주고, 그것을 어디에 적용할지 지정하면 된다. AOP 코드 짜보기 AOP 코드를 위한 패키지를 만들어주고 그 안에 클래스를 만든다. 실행시간 측정용이므로 TimeTraceAop라고 이름을 지었다...

7-1. AOP가 필요한 상황

AOP를 배우기 전에, AOP가 왜 필요한지를 상황극 비슷한 설명을 통해 알려주신 회차이다. 가정 다음과 같은 상황을 가정해보자. 나는 신입 개발자인데, 상사가 갑자기 각 기능이 수행되는 데 걸리는 시간(ms 단위)을 기능별로 싹 다 알고 싶다고 요청한다. 내가 알고 있는 기초적인 실행시간 측정 방법은 시간측정을 하고 싶은 부분의 시작지점에서 현재시간을 ms 단위로 한 번 재고, 부분이 끝나는 지점에서 현재시간을 ms 단위로 한 번 더 재서 그 둘의 차를 구하는 것이다. 지금 우리 팀이 개발 중인 프로그램의 핵심 기능은 총 100가지이다. 나는 밤을 새서 100가지 부분의 시작지점과 끝 지점에 일일이 시간측정 코드를 추가해야 한다... 얼마나 답답한 상황인가? 프로그램의 실제 핵심 기능들의 코드와 시간을..

6-6. 스프링 데이터 JPA

JPA를 더 편리하게 만들어주는 라이브러리인 스프링 데이터 JPA를 간단하게 배우는 회차이다. JPA를 배우는 것만으로도 백엔드 코딩이 매우 편리해지는데, 스프링 데이터 JPA를 배우면 "이렇게까지 편해진다고?" 싶은 수준으로 좋다고 한다. 그러나 JPA를 제대로 배우지 않은 상태에서 스프링 JPA를 배우는 것은 금물이다! 요즘 JPA가 정말 중요하고, 필수로 배워야 한다고 해도 무방할 정도로 능률을 많이 올려주는 기술이므로 JPA를 먼저 제대로 배운 다음 스프링 JPA까지 배우면 좋을 것! 더보기 공부할 것이 굉장히 많다. 자바 공부도 틈틈이 더 해야 할 것 같고 (책을 사야 하나?) 일단은 스프링을 탄탄히 공부해야 하고 (시간이 없다면 자바는 스프링을 하면서 부족하다 느껴지는 부분만 취사선택하여 공부..

6-5. JPA

이번 회차에서는 기본적인 sql 쿼리까지도 자동으로 처리해주는 편리한 JPA를 배운다. ORM(Object-Relational Mapping)이란? JPA는 ORM을 한다. ORM은 자바의 객체와 관계형 데이터베이스의 데이터를 서로 짝지어주는 것을 의미한다. 자바에서 다루는 것은 객체에 담긴 필드와 메소드이고 관계형 데이터베이스가 다루는 것은 테이블에 담긴 데이터다. 그러므로 개발자의 입장에서 서로 맞물려 돌아가야 하는 양쪽의 요소들 사이에 차이가 발생한다. 원래는 자바 따로, 관계형 데이터베이스 따로 직접 관리해서 잘 어울려 작동하게 해주어야 한다. 그 작업을 대신 해주는 것이 ORM이다. ORM 덕분에, 개발자는 객체만을 사용하여 관계형 데이터베이스를 간접적으로 다룰 수 있다. ORM이 만능인 것은 ..

6-4. 스프링 JdbcTemplate

순수 JDBC보다 훨씬 단순하고 편리해진 JdbcTemplate라는 것을 사용해 레포지토리를 짜보는 회차이다. 순수 JDBC는 비효율적이어서 실무에선 거의 안 쓴다고 했는데, JdbcTemplate부터는 많이 쓰인다고 한다. 디자인 패턴 중에 template method pattern이라는 것이 있는데, 이걸 사용해서 디자인하였기 때문에 이름이 JdbcTemplate이라고 한다. JDBC에서는 모든 코드를 일일이 적어야 했기 때문에 반복되는 코드가 많았다. JdbcTemplate에서는 이런 반복되는 코드들을 줄여놓았다. 우리는 귀찮은 설정을 하나하나 해줄 필요 없이, 메소드 하나를 딱 호출해서 그 인자로 원하는 sql문과 sql문의 결과를 담아올 방식을 정해주기만 하면 된다. 훨씬 편리해졌지만, sql문..

6-3. 스프링 통합 테스트

데이터베이스까지 포함된 테스트를 해보는 회차. 테스트를 돌리고 나면 그 테스트를 돌리기 이전으로 DB를 롤백해주는 @Transactional 이라는 어노테이션을 배운다. 지금까지 만들었던 테스트들은 스프링과 관련 없이 순수 자바 코드로만 만든 것이라고 한다. 테스트를 돌리면 모든 것이 JVM 내에서 이루어진다고 한다. 사실 스프링 초보인 나의 눈으로는 코드를 읽고 그런 사실을 알아채기 힘들다. 강사님이 그렇다고 하니 그렇구나 할 뿐이다. 추측을 해보자면, 이제서야 시스템 메모리가 아닌 제대로 된 DB를 사용하기 시작했고, 이 DB에 관한 정보는 내가 쓴 코드가 아니라 스프링이 들고 있다. 이것을 이제부터는 테스트에 반영할 것이라서 이런 말씀을 하셨나 보다. 그리고 '스프링 DB 접근 기술' 챕터의 나머지..

6-2. 순수 JDBC

지금은 여러 가지 편리한 기술들이 개발되어서, 실무에서 순수 JDBC로 개발하는 일은 거의 없다고 한다. 하지만 공부삼아 맛을 볼 기회를 주시겠다고 한다. 몇 십 년 전 고대의 선배님들과 십여 년 전의 강사님은 순수 JDBC로 개발을 했는데, 매우 괴로웠다고 한다... 환경설정 build.gradle로 들어가서 jdbc 및 h2와 관련된 라이브러리를 추가한다. 이렇게 붙여넣으면 된다. 붙여넣어야 하는 내용은 강의자료에 있다. 요 오른쪽 위의 코끼리 새로고침 버튼을 눌러주면 프로젝트에 적용이 된다. 그 다음에는 resources 안에 있는 application.properties로 들어간다. spring.datasource.url=에다가는 요놈을 복붙해준다. 그 밑에는 spring.datasource.dr..

6-1. H2 데이터베이스 설치

저번 시간에 회원 가입과 회원 조회 기능을 다 만들었고 테스트하는 과정에서 이렇게 세 명의 회원을 가입시켰다. 제대로 된 데이터베이스의 필요성 그런데! 우리가 지금 쓰고 있는 저장소가 어떻게 생겼는가? 이렇게 리포지토리 내부의 Map 객체에다가 저장하도록 되어있다. 그리고 리포지토리 객체는 프로그램을 새로 돌릴 때마다 매번 새로운 객체(bean)으로 만들어진다. 따라서, 서버를 껐다 켤 때마다 모든 데이터가 날아간다! 다시 돌려보면 진짜로 날아간다. 이제는 서버를 껐다 켜도 날아가지 않는 제대로 된 데이터베이스를 마련할 때가 되었다. H2 데이터베이스 설치 이번 시간에는 H2 데이터베이스를 설치한다. 되게 단순하고, 가볍고, 웹으로 콘솔을 제공하기 때문에 편하며, 교육용으로도 좋은 데이터베이스라고 한다...

5-3. 회원 웹 기능 - 조회

이번 회차에서는 오른쪽의 '회원 목록'을 눌러서 들어가는 /members 페이지를 만들 것이다. @GetMapping 메소드 만들기 list 라는 메소드를 만들고 @GetMapping("/members") 를 달아준다. 딱 보면 알 수 있듯이 여기 있는 전체 회원 조회 기능을 쓸 것이다. 이렇게 써주고 ctrl+alt+V 하면 짜잔 IntelliJ 최고 모델에다가 리스트를 통째로 담아준 뒤에 members/memberList.html 을 찾아들어가도록 리턴해준다. memberList.html 만들기 members 디렉토리 하위에 이렇게 새 html 을 만들고 내용을 복붙해준다. 이 부분의 내용을 살펴보자면, 마치 for문을 돌리듯이 아까 우리가 모델에 담아 전송해준 members라는 리스트의 모든 각각의..