스프링 입문 강의를 듣고 (김영한님)

 

1. 들어가며

 

인프런에 있는 김영한 님의 스프링 강의를 들으면서 언젠가 정리 해야겠다는 생각은 계속 해왔었다. 하지만 수강 중에는 강의 듣느라 시간이 많이 소요되었고... 이제서야 첫 강의부터 정리하게 되었다. 첫 강의는 입문 강의인 만큼 정말 가볍게 스프링에 대해 맛볼 수 있는 내용만 담겨져 있으므로 글 하나로 간단하게 요약하고자 한다. (저작권 염려가 있어 세부 코드나 자세한 내용은 강의에서 직접 듣기를 바랍니다!)

 

2. 강의 내용

 

2. 1 단축키

 

제일 먼저 언급하고 싶었던 것은 뜬금없지만 intelliJ의 단축키이다. 김영한님이 예시 코드를 작성하면서 사용하는 단축키들이 실전적으로 유용한 게 많았고 의외로 몰랐던 것도 있었다. 무엇보다 제일 배우기 쉽고 바로 적용 가능하다! 

 

참고로 윈도우 기준으로 쓰여 있습니다.

 

1) 변수 자동 완성 (Ctrl + Alt + V)

 

보통 변수를 선언할 때 당연히 

String sushi

를 먼저 쓰고

String sushi = "맛있어요.";

로 완성하는 것이 보통이다.

 

하지만 intelliJ에서는 

"맛있어요"

만 작성한 뒤 Ctrl + Alt + V를 누르면 앞의 변수 선언부를 자동으로 완성해준다.

또한 이름도 알아서 추천해주니 골치 아픈 변수 이름 짓기에도 조금이나마 도움이 된다!

당연히 String 뿐만 아니라 다른 자료형의 변수를 선언할 때도(객체까지도) 가능하다.

 

2) 순회, 출력 자동 완성 (iter, soutv, soutm)

- iter

private List<Integer> sushi = new ArrayList<>();

로 선언된 리스트가 있다면 순회할 때 일일이 for를 치고 그 안에 변수 넣고 했던 기억이 있을 것이다.

하지만 intelliJ에서는 저런 순회 가능한 변수를 선언했다면 그 아래에

iter 만 입력해주고 enter를 누르면 자동으로 

List<Integer> sushi = new ArrayList<>();
for (Integer integer : sushi) {
    
}

로 완성해준다. 

물론 JAVA8 이후라면 forEach 함수를 사용해서 iter 하는 것이 편하고 가독성도 좋다고 생각한다.

 

- soutv soutm

이번 경우는 출력을 자동 완성해주는 것으로

soutv

의 경우엔 변수를 출력해주는 양식을 자동으로 완성해주고

soutm

의 경우엔 메소드를 출력해주는 양식을 자동으로 완성해준다.

 

3) 파일 내 자동 생성 (Alt + Insert)

Java에서 클래스를 만들면 다양한 보일러 플레이트가 필요해지는 경우가 많다. Getter, Setter 등 치는 것도 지겨운 코드들이다. 

이런 경우 intelliJ에서는 클래스에

Alt + Insert (혹은 오른쪽 마우스 클릭 + Generate 선택)

을 한다면 자동으로 

위와 같은 코드들을 생성할 수 있다.

위에서 언급한 Getter, Setter 뿐만 아니라 생성자, override method, test 파일 생성 등 다양한 것들을 할 수 있으므로 아주 아주 유용하게 쓰인다.

+ lombok을 쓰게 된다면 Getter와 Setter의 경우 더 깔끔하게 annotation으로 처리할 수 있게 된다.

 

 

 

4) Project, Commit 메뉴 넘나들기 (Alt + 1, Alt + 0)

한창 코드를 입력하다가 프로젝트 메뉴를 열어야 할 때 마우스를 끌어 자그마한 버튼을 눌러 여는 것은 상당히 귀찮은 일이다. 이럴 땐 그냥

Alt + 1 : 프로젝트 메뉴
Alt + 0 : 커밋 메뉴

를 사용해주면 간편하게 열 수 있다. 참고로 다시 누르면 닫힌다!

 

5) 메소드 추출 (Ctrl + Alt + M)

중복되거나 한 메소드 내에서 지나치게 많은 역할을 맡게 되는 경우 메소드를 분리하게 된다.

이럴 때 작성했던 코드를 Ctrl + x로 잘라내서 메소드를 선언하고 거기에 넣는 것은 아주 피곤한 일이다.

이럴 땐

Ctrl + Alt + M

을 입력해주면 자동으로 메소드 추출이 된다.

 

 

그 외에도 Ctrl + shift + Enter (현재 구문 자동 완성 -> 주로 끝에 있는 세미 콜론을 붙여야 하는데 현재 커서가 멀어서 귀찮을 때 유용)

Shift + Shift (전체 검색 -> 파일, 설정, 키워드 등 강력한 검색 기능)

등등 다양한 단축키가 있지만 여기에 모두 정리할 수는 없으므로 직접 강의를 듣거나 따로 정리하는 시간을 꼭 가지시길 바랍니다 :) 귀찮다고 안하는 것보다 한번 정리해놓는 것이 앞으로 시간을 훨씬 더 단축시킬 수 있습니다!

 

2. 2 테스트 코드와 DI, 스프링 DB 접근 기술

 

제목만 봐도 알겠지만 하나의 단락으로 정리하는 것은 거의 불가능한 내용이고 입문 강의에서도 다른 강의에서 더 자세하게 다룰 것을 약속하고 있다.

여기서도 최대한 간단하게 정리하고 추후에 글 하나의 주제로 더 자세히 정리하겠다.

 

1) 테스트 코드 작성

개발한 기능을 테스트 할 때 어플리케이션 전체를 실행해서 테스트 해야 한다면

- 테스트 하는데 시간이 많이 걸린다. (규모가 큰 경우 실행 자체도 오래 걸릴 것이고 테스트 상황을 재현하는데도 시간이 걸릴 것이다. 심지어 그걸 고치고 다시 테스트할 때마다 계속 해야한다.)

- 어느 계층에서 오류가 발생했는지 파악하기 어렵다.

라는 단점이 있다.

따라서 자바의 JUnit이라는 프레임 워크를 통해 단위 테스트를 진행하면 시간과 비용을 절감할 수 있다.

물론 장점만 있는 것은 아니다. 가짜 객체를 선언해서 테스트 한다면 실제 운영 환경과 다른 결과를 내놓을 가능성도 있다.

 

그러므로 단위 테스트를 해나가면서 개발을 하고 중간 중간 통합 테스트로 전체를 테스트 해보는 방법이 어느정도 괜찮은 타협이라고 생각한다.

 

2) Dependency Injection (의존성 주입)

 

스프링에서 핵심으로 불리는 개념 중 하나이다.

어려운 디자인 패턴은 아니고 다른 글에도 정리된 것이 많으므로 자세하게 정리하지는 않겠다.

DI란 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴으로 인터페이스를 사이에 둬서 클래스 간의 의존 관계가 고정되지 않도록 하고 런타임 시에 관계를 동적으로 주입해주는 것이다.

강의에서는 데이터 저장소의 변경에 유연하게 대응할 수 있도록 MemberRepository를 인터페이스로 두고 그 구현체인 MemoryMemberRepository, JdbcMemberRepository, JpaMemberRepository를 만들어 다른 클래스들은 데이터 저장소에 대해 런타임에 실제 구현체를 주입받게 만드는 예시를 보여주었다.

 

3) 스프링 DB 접근 기술

 

김영한님의 강의 패턴 중 장점이, 과거 기술부터 보여주고 현재까지 왜, 어떻게 발전해왔는지 보여줘서 현재 프레임워크가 이렇게 된 이유에 대해 심층적으로 알려준다는 점이다.

이번 강의에서도 입문 강의이지만 간단하게 그런 패턴으로 설명해주시는데 20년 전 기술이라는 JDBC api부터 시작해서 JPA를 통한 접근, 그리고 스프링 데이터 JPA까지 점진적으로 기술의 발전을 보여준다. 사실 처음 spring을 쓰면 마법 같아 보이는 부분이 많고 그 원리는 이해가 잘 안 가는데 강의를 들으면 원리까지 이해할 수 있게 된다 :)

 

 

3. 나가며

 

강의를 다 듣고 다른 사람들한테 추천하냐고 물으면, 스프링 공부를 한다면 무조건! 이라고 생각한다. 공부할 것이 넘쳐나는 상황에서 더 효율적인 방법이 있다면 사용하지 않을 이유가 없다!