스프링 공부 52

1-3. 좋은 객체 지향 프로그래밍이란?

객체 지향 프로그래밍은 자바 기초를 공부할 때 무조건 배우는 내용이다. 이번 회차에서는 그 내용을 다시 짚어보는데, 배웠던 지식을 단순히 기억해내는 데서 그치지 않고 객체 지향이 왜 좋은지를 이해해볼 수 있는 시간이었다. 객체 지향과 관련된 매우 기본적인 개념, 비유를 들어 객체지향의 장점을 설명해주셨다. 정말 좋은 설명이었지만 굳이 여기에 모든 내용을 정리할 필요는 없을 것 같다. 인상 깊었던 부분만 적어둔다. 인상 깊었던 부분 객체 지향 프로그래밍의 정의 컴퓨터 프로그램을 명령문의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위 즉 객체의 모임으로 파악하고자 하는 것. 객체 지향 프로그래밍을 한 문장으로 잘 설명하는 말인 것 같아서 적어둬야겠다. 위키에서 가져오셨다고 한다. 그리고 객체 지향 프..

1-2. 스프링이란?

스프링에 대한 매우 간단한 설명 회차이다. 내용은 외울 필요 없을 것 같고, 인상 깊었던 내용만 적겠다. 1. EJB를 쓰던 때에는 자바의 객체 지향적인 특성을 제대로 활용하지 못한 채 EJB에 종속되어 개발을 해야 했다. 2. 스프링은 객체 지향적 코딩을 하기에 매우 좋은 도구이다. 3. 스프링이라는 단어의 정의를 내리는 것은 어렵다. 모호한 단어이다. 스프링 프레임워크만을 가리킬 수도 있고, 크고 복잡한 스프링 생태계 전체를 가리킬 수도 있다. 다음 회차에서는 좋은 객체 지향 프로그래밍이 무엇인지를 배운다.

1-1. 이야기 - 자바 진영의 추운 겨울과 스프링의 탄생

스프링이 나타나기까지 어떤 우여곡절이 있었는지 알려주신 회차이다. 간단한 내용정리 옛날 옛적 2000년대 초반의 자바 진영에서는 EJB(Enterprise Java Beans)가 유일무이한 정파 기술의 자리에 있었다고 한다. 이게 아닌 다른 오픈소스 기술을 가져다 쓴다는 것은 매우 불안하고 이상한 일로 여겨졌다고 한다. EJB가 그렇게 형편 없는 기술은 아니었다. 이론적으로 굉장히 좋은 기술이었고 할 수 있는 것도 많았다. 그러나 첫째로 가격이 매우 비쌌고 둘째로 개발자의 입장에서 코딩하기가 너무나 어렵고 불편했다. 강사님께선 이 점을 설명하시며 불지옥에 타고 있는 사람들의 이미지를 보여주셨다... 저 사람들이 바로 그 시절의 개발자들이라면서... 이런 상황을 더이상 참지 못하고 내가 만들어도 더 잘 만..

0. 강의 소개

스프링 입문 강의에 이어, 김영한 강사님의 다른 강의를 듣기 시작했다. 스프링 완전 정복 로드맵을 따라 수강하는 중이다. 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 첫 회차는 강의에 어떤 내용이 들어있으며 무엇을 목표로 들으면 되는지 설명해주시는 회차였다. 강의의 목적 스프링을 단순히 쓸 줄만 아는 데서 끝나지 않고 객체 지향 설계에 대한 이해를 기반으로 스프링의 의의와 작동 방식을 제대로 아는 것. 그 후에 스프링의 각종 실제 기능들을 배우는 것. 강의를 듣고 나면 이룰 수 있는 것: 스프링 기본 기능 학습 + 스프링의 본질을..

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

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 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문..