Thumbnail
지식공유자의 깜짝 할인 중
BEST
개발 · 프로그래밍 백엔드

스프링 핵심 원리 - 기본편 대시보드

(5)
3,480개의 수강평 ∙  32,568명의 수강생

30%

61,600원

88,000원
지식공유자: 김영한
총 65개 수업 (12시간 5분)
수강기한: 
무제한
수료증: 발급
난이도: 
입문
-
초급
-
중급이상
지식공유자 답변이 제공되는 강의입니다
폴더에 추가 공유
김영한 프로필
자바 중급 1편 오픈 공지
김영한 21시간 전 (21시간 전 수정됨)

안녕하세요. 여러분^^! 자바 중급 1편 강의를 드디어 오픈했습니다.

오픈 기념으로 저의 모든 강의를 30% 할인합니다^^!

강의 링크: https://inf.run/mkzcm

김영한의 실전 자바 - 중급 1편

* 강의 시간: 19시간 20분
* 강의 수: 약 100강
* 강의 PDF 자료: 350장

[자바 중급 1편 강의 내용]

* Object 클래스
* 불변 객체
* String 클래스
* 열거형 - ENUM
* 날짜와 시간
* 중첩 클래스, 내부 클래스
* 예외 처리

제 목표는 단순히 자바 문법 교육에 그치지 않고, 실무에서 필요한 탄탄한 자바 기본기를 갖춘 유능한 개발자를 양성하는 것입니다. 이를 위해 자바에 대해 깊이 있고 체계적인 자바 로드맵을 진행합니다. 기대해주세요.

 

김영한 프로필
[공지] 자바 중급 1편 오픈 일정 확정
김영한 16일 전 (16일 전 수정됨)

안녕하세요. 여러분
자바 중급 1편 오픈 일정이 3월 28일(목)으로 확정 되었습니다.
중급 편이니 만큼 강의 시간과 분량이 많이 늘었습니다.

김영한의 실전 자바 - 중급 1편

  • 강의 시간: 19시간 20분

  • 강의 수: 약 100강

  • 강의 PDF 자료: 350장

[자바 중급 1편 강의 내용]

Object 클래스

Object 클래스는 모든 클래스의 최상위 부모 입니다. 이 강의에서는 Object 클래스가 필요한 이유와 Object 클래스가 제공하는 기능들을 알아봅니다. 또한 equals()를 통해 자바의 동일성과 동등성 개념도 함께 학습합니다.

불변 객체

한번 생성하면 그 이후로 변하지 않는 객체를 불변 객체라 합니다. 이후에 설명할 String, 래퍼, 날짜와 시간을 포함해서 자바가 제공하는 많은 객체들은 불변 객체로 제공됩니다. 여기서는 불변 객체가 왜 필요한지, 그리고 어떻게 불변 객체를 만드는지 알아봅니다.

String 클래스

String 클래스는 자바에서 문자열을 다룰 때 사용되는 클래스입니다. 여기서는 String 객체의 기본 기능 뿐만 아니라, StringBuilder와 String의 기능과 성능 차이도 알아봅니다. 또한 자바가 String 클래스를 어떻게 최적화하는지 깊이있게 알아봅니다.

래퍼, Class 클래스

자바 기본형의 한계를 알아보고 그 한계를 극복하기 위한 래퍼 클래스를 학습합니다. 래퍼 클래스의 오토 박싱, 주요 메서드도 학습합니다.

추가로 클래스의 정보를 나타내는 Class 클래스, 시스템의 정보를 제공하는 System 클래스, 자주 사용하는 Math, Random 같은 클래스도 함께 알아봅니다.

열거형 - ENUM

열거형은 높은 타입 안전성을 제공하는 훌륭한 기능입니다. 여기서는 단순히 열거형의 문법을 배우는 것이 아니라 본질적으로 열거형이 왜 필요한지 이야기합니다. 그리고 열거형이 없던 시절 직접 구현했던 타입 안전 열거형 패턴도 구현해봅니다. 또한 다양한 예제 코드를 통해 열거형을 실무에서 어떻게 잘 활용할 수 있는지 알아봅니다.

날짜와 시간

날짜와 시간을 계산하는 것은 겉으로는 단순해보이지만 매우 어렵습니다. 그래서 자바가 제공하는 라이브러리를 사용해야 합니다.

여기서는 자바 날짜와 시간 라이브러리의 역사부터 시작해서 어떤 상황에 어떤 날짜와 시간 클래스를 사용해야 하는지 다양한 예제를 통해 정리해드립니다.

중첩 클래스, 내부 클래스

클래스 내부에 클래스를 두는 것을 중첩 클래스 또는 내부 클래스라 합니다. 여기서는 모든 중첩 클래스를 완전히 마스터하는 것을 목표로 합니다.

정적 중첩 클래스, 내부 클래스, 지역 클래스, 익명 클래스까지 모든 중첩 클래스를 설명합니다. 단순히 문법 위주로 설명하는 것이 아니라 어떻게 활용되는지 코드와 예제로 설명합니다. 특히 어려운 개념인 지역 변수 캡처에 대해서도 그림으로 쉽게 풀어서 설명합니다.

예외 처리

자바에서 예외 처리는 문법은 단순하지만 예외 처리가 왜 필요하고 또, 실무에서 어떻게 활용해야 할지 제대로 이해하는 것은 어렵습니다. 여기서는 먼저 예외 처리가 없던 시절로 갑니다. 그리고 예제 코드를 점진적으로 개선해가면서 본질적으로 예외 처리가 왜 필요한지, 그 이유를 하나씩 찾아갑니다.

마지막으로 실무에서 어떤 방식으로 예외를 처리하는게 좋은지 실무 베스트 프렉티스도 알려드립니다.

김영한의 실전 자바 - 중급 2편
- 오픈 예정 일정: 5월 초

자바 중급 2편 내용

중급 2편은 제네릭과 컬렉션을 깊이있게 다룹니다.
특히 컬렉션의 경우 실무에서 주로 사용하는 자료 구조를 직접 구현하면서 원리를 이해합니다. 그래서 각각의 자료구조가 어떤 경우에 성능이 좋고 어떤 경우에는 성능이 나쁜지 근본적인 이유들을 이해하고 활용할 수 있게 됩니다.

감사합니다.

김영한 프로필
[공지] 자바 중급편 오픈 예상 일정 공유
김영한 24일 전 (24일 전 수정됨)

[공지] 자바 중급 오픈 일정

안녕하세요. 여러분
최근에 다음 강의 소식을 궁금해하시는 분들이 많으셔서 준비중인 강의 근황을 전달드립니다.

저는 자바 중급편을 오픈하기 위해 막바지 작업을 열심히 하고 있습니다.
자바 중급편은 각각의 주제에 대해서 깊이있게 들어가다 보니 예상보다 준비할 분량이 많았습니다.
대략 계산해보니 자바 입문편과 기본편을 합한 것 보다 더 많네요.
분량이 많기도 하고, 또 이대로 가면 오픈이 계속 지연될 것 같아 강의를 2편으로 나누어 출시하기로 결정했습니다.

김영한의 실전 자바 - 중급 1편
- 오픈 예정 일정: 3월 말(대략 3월 20일 ~ 3월 28일 사이에 출시)

자바 중급 1편 내용

1. Object 클래스
2. 불변 객체
3. String 클래스
4. 래퍼, Class 클래스
5. 열거형 - ENUM
6. 날짜와 시간
7. 중첩 클래스, 내부 클래스1
8. 중첩 클래스, 내부 클래스2
9. 예외 처리1 - 이론
10. 예외 처리2 - 실습


김영한의 실전 자바 - 중급 2편
- 오픈 예정 일정: 4월 말(예정)

자바 중급 2편 내용

중급 2편은 제네릭과 컬렉션을 깊이있게 다룹니다.
특히 컬렉션의 경우 컬렉션을 직접 구현하면서 원리를 이해합니다. 그래서 각각의 자료구조가 어떤 경우에 성능이 좋고 어떤 경우에는 성능이 나쁜지 근본적인 이유들을 이해하고 활용할 수 있게 됩니다.

추가로 자바 고급편에 대한 자세한 내용은 중급편을 완료한 이후에 다시 공유 드리겠습니다.
그리고 중급 1편의 오픈 일정이 확정되면 다시 공지하겠습니다.

감사합니다.

김영한 프로필
30만 수강생 기념 온라인 밋업 Live 영상 공개
김영한 1달 전 (1달 전 수정됨)

안녕하세요. 여러분

인프런에서 진행한 30만 수강생 기념 밋업 Live 영상이 공개되었습니다.

영상 링크: https://inf.run/81ogv

이날 오프라인 참석 신청해주신 분이 1200명 정도 되셨는데요. 그 중에 30명을 모시고 오프라인 밋업을 진행했습니다. 기대보다 많은 분들이 신청해주셔서 감사하고, 또 많은 분들을 초대하지 못해서 저도 아쉬움이 남습니다. 다음에 기회가 된다면 더 많은 분을 모시도록 노력하겠습니다.

이번 세션에 1200개 정도의 질문을 적어주셨는데요. 최대한 많은 질문에 답할 수 있도록 비슷한 카테고리의 질문을 묶어서 답변을 드렸습니다.

개발자로 성장하는 과정에서 고민이 있는 여러분께 조금이나마 도움이 되었으면 좋겠습니다.

모두 가족과 행복한 설날 되세요.

김영한 프로필
자바 강의 오픈 소식
김영한 4달 전 (4달 전 수정됨)

안녕하세요. 여러분^^! 자바 강의를 드디어 오픈했습니다.

처음 프로그래밍에 입문하는 분들이 부담없이 배울 수 있도록 자바 입문 강의를 무료로 제공하기로 결정했습니다.

또한 오픈 기념으로 저의 모든 강의를 30% 할인합니다^^!

실전 자바 로드맵

* 김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음 (11/28 오픈)

* 김영한의 실전 자바 - 기본편 (11/28 오픈)

* 김영한의 실전 자바 - 중급편 (2024년 1분기 예정)

* 김영한의 실전 자바 - 고급편 (2024년 1분기 예정)

제 목표는 단순히 자바 문법 교육에 그치지 않고, 실무에서 필요한 탄탄한 자바 기본기를 갖춘 유능한 개발자를 양성하는 것입니다. 이를 위해 자바에 대해 깊이 있고 체계적인 로드맵을 시작합니다. 기대해주세요.

강의 오픈 링크: https://www.inflearn.com/pages/kyh202311

다른 댓글 보기(1)
김영한 프로필
자바 강의 오픈 예정 소식
김영한 4달 전 (4달 전 수정됨)

안녕하세요. 여러분

드디어 자바 강의가 오픈 준비에 들어갔습니다. 오랜기간 기다려주시고 응원해주셔서 감사합니다.

제 목표는 단순히 자바 문법 교육에 그치지 않고, 실무에서 필요한 탄탄한 자바 기본기를 갖춘 유능한 개발자를 양성하는 것입니다. 이를 위해 자바에 대해 깊이 있고 체계적인 로드맵을 시작합니다. 기대해주세요^^

출시일은 11월 28(화)입니다.

실전 자바 로드맵

  • 김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음 (11/28 오픈)

  • 김영한의 실전 자바 - 기본편 (11/28 오픈)

  • 김영한의 실전 자바 - 중급편 (이후 예정)

  • 김영한의 실전 자바 - 고급편 (이후 예정)

 

강의 대상
실전 자바 로드맵은 자바에 처음 입문하는 분 부터, 취업 준비와 실무를 위해 자바의 기본기를 다지고 싶은 분이 대상입니다.

입문편 - 소개
대상: 자바 프로그래밍 첫 입문자
변수, 연산자, 조건문, 반복문, 배열, 함수와 같은 프로그래밍 언어의 기본기를 학습합니다.
예제 코드를 통해 자연스럽게 자바의 기본기를 이해할 수 있습니다.

  • 수업: 80개 수업

  • 시간: 12시간 51분

  • PDF: 213장

기본편 - 소개
대상: 자바 입문편의 내용을 이해하신 분
자바 객체 지향 프로그래밍을 학습합니다.
객체, 클래스, 캡슐화, 상속, 다형성, 추상화 학습
예제 코드를 통해 자연스럽게 객체 지향 프로그래밍을 이해할 수 있습니다.

  • 수업: 96개 수업

  • 시간: 16시간 51분

  • PDF: 302장

자바 로드맵 특징

실전 - 목표점

  • 실전 자바는 목표점이 명합니다. 실무에 필요한 자바를 배우는 것입니다.

  • 실무에서 많이 자주 사용하는 기본기는 확실히 다지고, 실무에서 사용하지 않는 기능은 과감하게 제외합니다.

  • 코드로 따라하면 자연스럽게 이해합니다.

  • 이론을 설명하더라도, 그 이론을 이해할 수 있는 예제 코드가 제공됩니다. 코드로 따라하면 자연스럽게 이해 되도록 수 많은 예제가 함께 제공됩니다.

     

문제와 풀이

  • 학습에서는 체득이 중요합니다. 제대로 학습하려면 내가 공부한 내용을 스스로 문제를 풀어볼 수 있어야 합니다. 이것이 체득이고, 진짜 내 것이 되는 것입니다. 그리고 제가 직접 함께 문제를 풀어드립니다. 저처럼 오랜기간 실무를 했던 개발자가 직접 풀어보는 과정을 보면서 배울 수 있습니다.

 

강의 목표
단순히 자바 문법을 안다? 이정도로는 안된다고 생각합니다. 진짜 실무에 필요한 기본기가 탄탄한 실력있는 개발자를 만드는 것이 저의 목표입니다. 여러분이 좋은 개발자가 될 수 있도록 도와드리겠습니다.

 

다른 댓글 보기(7)
김영한 프로필
EO 유투브 채널 인터뷰 공유
김영한 5달 전 (5달 전 수정됨)

안녕하세요. 여러분
제가 EO(이오)라는 유투브 채널에서 인터뷰를 했습니다.
저의 성장 과정을 최대한 솔직하게 담으려고 노력했는데요.
어떤 분들에게는 조금이나마 힘이 될 것이라 생각해서 공유 드립니다.

아래 링크를 참고해주세요.

https://www.youtube.com/watch?v=_HTj5b59Em0

모두 응원합니다!

다른 댓글 보기(1)
김영한 프로필
여러분 공유할 소식이 있습니다. - 새로운 도전
김영한 11달 전 (11달 전 수정됨)

안녕하세요. 여러분 김영한입니다.

지난 7년동안 즐겁게 다니던 우아한형제들을 떠나서 개발자의 성장과 교육을 위해 새로운 도전을 하기로 결정했습니다.

먼저 제가 왜 이런 선택을 했는지 말씀드릴게요.

제가 인프런에서 개발자를 위한 자바, 스프링, JPA 같은 기술들을 온라인으로 강의한지 이제 4년 정도 되어가는데요. 그동안 다음과 같은 수강평과 메일을 많이 받았습니다.

"저는 비전공자여서 어떻게 개발 공부를 해야할지 몰랐는데, 영한님 강의를 듣고 네카라쿠배에 합격했어요"

"SI에서 일하면서 어떻게 성장해야 할지 길이 보이지 않아서 개발자를 그만둘까 생각도 했는데, 영한님 강의를 듣고 길이 보였어요. 그래서 열심히 로드맵을 듣고 준비해서 가고 싶던 중견기업에 갈 수 있었어요."

"저는 작은 회사여서 사수가 없는데, 영한님 강의를 통해서 어떻게 공부하고 성장해야 할지 길을 찾았어요"

 

또 주변에 지인들을 통해서 다음과 같은 이야기도 많이 들었습니다.

“요즘 회사에 지원하는 개발자들을 보면 스프링이나 JPA 같은 기술들에 대한 기본기가 잘 다져져 있는데, 대부분 영한님 강의를 듣더라”

“우리팀 주니어 개발자를 보면 대부분 영한님 강의를 듣고 공부하더라”

“주니어 개발자 교육이 걱정이었는데, 영한님 강의를 추천해준다. 덕분에 교육에 대한 걱정을 덜었다.”

저는 고졸 출신으로 어렵게 개발자로 취업했고, 주니어 시절에 좋지 않은 환경에서 일하며 삶의 앞길에 짙은 안개가 가린 것 같은 막막함을 느낀 적이 있습니다. 이때 누군가 개발의 방향을 잡아주면 참 좋겠다는 생각을 했습니다. 그래서인지 제가 준비한 강의 덕분에 누군가의 삶이 변화하고, 또 좋은 개발자로 성장하는 모습들을 보면서 매우 큰 보람을 느낍니다. 특히 작년에 방금 이야기한 좋은 이야기들을 많이 들었는데요. 아마도 그동안 열심히 공부한 개발자들이 이제는 그 열매를 맺고 있는 것이라 생각합니다.

제 강의를 듣고 많은 개발자들이 성장하고 또 삶이 변화하는 모습들을 보면서, 지난 1년간 깊이 고민 했습니다. 이렇게 오래 고민한 이유는 우아한형제들에서 기술이사로 일하며 구성원들과 함께 배달의민족 서비스를 개발하는 것이 저에게는 너무도 즐겁고 신나는 일이기 때문이었습니다. 그리고 참 운이 좋게도 빠르게 성장하는 좋은 서비스를 주도해서 개선하는 경험을 하고, 그 중심에서 결제, 정산, 주문, 전시, 공통 플랫폼 같은 다양한 도메인을 설계하고 개발하며 또 구성원들과 함께 전체 서비스를 마이크로서비스 아키텍처로 개선하는 경험도 할 수 있었습니다.

사람들마다 어떤 삶을 살아내는 것이 더 가치있는지는 서로 다르겠지만, 지금 시점에 제가 어떤 일을 하는 것이 더 가치있고 의미 있는지 깊이 생각해보았습니다. 내가 일을 통해 성장하고 나를 채우는 것도 의미가 있지만, 제가 오랜시간 고민하고 경함한 수 많은 실무 개발 노하우를 누구나 쉽게 학습할 수 있도록 하는 것이 지금 시점에는 더 큰 의미가 있다 생각했습니다. 이를 통해 다음 세대의 개발자들이 빠르게 성장해서, 지금 세대의 개발자를 넘어 더 나은 개발자로 성장하면 좋겠습니다. 그래서 앞으로 개발자의 취업과 성장을 돕는 다음과 같은 일을 할 예정입니다.

1. 개발자 취업: 개발자가 되고 싶은 분들을 위해 온라인(인프런)으로 필요한 모든 것을 학습할 수 있는 강의 커리큘럼을 완성할 계획입니다. 자바, 데이터베이스 설계와 같은 기본 강의부터 시작할 예정입니다.

2. 개발자 성장: 실무 개발자들이 더 크게 성장할 수 있도록 수준 높은 실무 강의들을 만들 계획입니다. 테스트, 개발 아키텍처, MSA, 설계 등등 제가 지금까지 얻은 실전 경험과 지혜를 실무 개발자들이 쉽게 배우고 적용할 수 있도록 돕고 싶습니다. 그래서 개발 시장 전반의 기술 역량을 끌어 올리고 싶습니다.

지난 7년간 함께한 우아한형제들 구성원분들께는 고맙고 또 미안한 마음이 남아있습니다. 그래도 이런 결정을 했을 때 다들 지지해주고 응원해주셔서 진심으로 고마웠습니다.

인프런에서 제 강의를 듣고 응원해주신 수 많은 개발자분들께 진심으로 감사합니다. 여러분의 응원 하나하나가 쌓여서 저에게 또 다른 삶의 가치와 의미를 부여해주신 것이라 생각합니다.

감사합니다.

다른 댓글 보기(19)
김영한 프로필
스프링 부트 - 핵심 원리와 활용 강의 오픈 소식
김영한 2023.02.28

안녕하세요. 여러분^^!

스프링 부트 강의를 드디어 오픈했습니다. 그리고 스프링 부트 강의를 마지막으로 3년에 걸친 스프링 완전 정복 로드맵을 완성했습니다. 오랜기간 기다려주신 모든분께 진심으로 감사합니다.
이번 스프링 부트 강의는 스프링 로드맵의 마지막이니 만큼 최선을 다해서 준비했습니다.
실무에 필요한 스프링 부트는 이 강의 하나로 모두 정리해드립니다.

스프링 로드맵 완성 기념 전체 강의 30% 할인합니다^^!

스프링 부트 강의 링크: https://inf.run/EGxa
* 제목: 스프링 부트 - 핵심 원리와 활용
* 강의 수: 104강
* 강의 자료: PDF 362장
* 강의 시간: 15시간 45분

스프링 로드맵 3년의 완성 이벤트

3년간 저를 믿고 함께 달려오신 모든 분께 진심으로 감사합니다. 감사의 의미로 인프런과 함께 작은 선물을 준비했습니다. 다음 링크를 참고해주세요^^

스프링 로드맵 이벤트 링크: https://www.inflearn.com/pages/kyh-roadmap-230216

감사합니다.

 

 

김영한 프로필
스프링 부트 강의 오픈일 변경, 2/28 화요일 오픈
김영한 2023.02.25

안녕하세요. 여러분

스프링 부트 강의 오픈 일정이 2/27(월) -> 2/28(화)로 변경됩니다.

이번 스프링 부트 강의를 마지막으로 3년간 준비한 스프링 로드맵이 드디어 완성됩니다.

저를 믿고 스프링 로드맵을 함께 해주신 분들께 감사의 의미로 인프런과 함께 작은 선물을 준비하느라 오픈 일정이 하루 늦어지게 되었습니다. 너그러운 이해를 부탁드립니다.

그리고 로드맵 완성을 기념해서 제가 준비한 로드맵 전체 소개 영상을 준비했습니다.

김영한의 백엔드 자바 스프링 JPA - 전체 로드맵과 최적화된 로드맵 진행 순서를 공유해드립니다. 다음 링크를 참고해주세요.

https://youtu.be/ZgtvcyH58ys

그럼 2/28일 화요일에 뵙겠습니다^^!

김영한 프로필
스프링 부트 강의 오픈 예정 소식!
김영한 2023.02.16

안녕하세요. 여러분^^!
드디어 스프링 부트 강의가 오픈 준비에 돌입했습니다. 오랜기간 기다려주시고 응원해주셔서 진심으로 감사합니다.

출시일은 2월 27일(월)입니다.

* 제목: 스프링 부트 - 핵심 원리와 활용

* 출시일: 2월 27일(월)

* 강의 수: 104강

* 강의 자료: PDF 362장

* 강의 시간: 15시간 45분

스프링 완전 정복 로드맵 3년의 완성

이번 스프링 부트 강의를 마지막으로 스프링 완전 정복 로드맵이 완성됩니다. 돌이켜보니 이 로드맵을 완성하는데, 2020년 1월부터 준비해서 무려 3년이라는 긴 시간이 흘렀습니다.

3년이라는 오랜 시간 동안 정말 많은 개발자분들이 마음을 담은 수강평을 남겨주셨습니다. 이 로드맵으로 열심히 공부해서 취업에 성공하신 분들, 본인이 가고 싶은 회사에 이직하신 분들, 또 백엔드 개발의 즐거움을 알게 되고 개발자로 더 성장하신 분들 등등, 많은 분들이 진심을 담아 남겨주신 수강평 덕분에 저도 포기하지 않고 스프링 로드맵을 완성할 수 있었습니다. 마음을 나누어 주신 모든 개발자 분들께 진심으로 고마움을 전합니다.

이번 스프링 부트 강의는 로드맵의 마지막이니 만큼 최선을 다해서 준비했습니다.

실무에 필요한 스프링 부트는 이 강의 하나로 모두 정리해드리겠습니다.

스프링 로드맵: https://www.inflearn.com/roadmaps/373

 

강의 소개

스프링 프레임워크의 성장

스프링 프레임워크는 지난 20년 동안 발전해온 매우 거대한 기술입니다.
실무에서 발생하는 대부분의 기술 문제를 해결하고 높은 안정성과 유연성을 제공합니다. 그래서 자바를 사용하는 대부분의 메이저 회사는 스프링을 사용합니다. 스프링은 자바 진영에서 사용되는 사실상 표준 기술입니다.

거대하고 불편한 스프링 프레임워크

그런데 스프링 프레임워크는 기능도 너무 많고 광범위해서 어디서부터 어떻게 시작해야 할지 막막합니다.
또 너무 많은 유연성을 제공해서, 어떤 기술들을 함께 사용해야 할지 선택하기 어렵습니다. 기능이 점점 증가하면서 더 많은 설정들이 필요해지기 시작했습니다. 그래서 많은 개발자들이 스프링은 무겁고 불편하다고 느끼기 시작했습니다.

스프링 부트 - 스프링 기술의 완성

이런 문제를 해결하기 위해 스프링 부트가 등장했습니다.
스프링 부트는 이름 그대로 부트에서 시작합니다. 스프링 부트는 스프링을 매우 쉽고 편리하게 시작할 수 있도록 도와주는 기술입니다. 그리고 개발자들에게 수 많은 편의 기능을 제공해줍니다. 스프링 부트의 등장으로 거대하고 불편하게만 느껴졌던 스프링을 매우 쉽고 편리하게 시작할 수 있게 되었습니다. 이제 스프링으로 진행하는 대부분의 프로젝트는 스프링 부트를 필수로 사용합니다. 스프링 기술은 스프링 부트의 등장으로 비로소 완성되었습니다. 

스프링 부트가 제공하는 5가지 핵심 기능

스프링 부트는 다음 5가지 핵심 기능을 제공해서 스프링 프레임워크를 편리하게 사용하도록 도와줍니다. 강의에서도 이 5가지 핵심 기능에 집중합니다.

내장 서버: 별도의 서버 설치 없이 손쉽게 웹 애플리케이션을 개발하고 배포
자동 라이브러리 관리: 베스트 프랙티스를 기반으로 수 많은 라이브러리를 자동으로 선택하고 관리, 덕분에 프로젝트를 쉽고 빠르게 시작
* 자동 구성: 복잡한 스프링 설정을 자동화해서 개발자들이 쉽고 빠르게 애플리케이션을 개발할 수 있음
* 외부 설정: 애플리케이션을 개발 환경, 운영 환경처럼 서로 다른 환경에서 사용할 때 필요한 외부 설정값을 편리하게 조회
* 모니터링과 관리 기능: 애플리케이션의 수 많은 지표들을 자동으로 수집하고 모니터링하고 관리할 수 있도록 기능 제공

강의 목표

실무에 필요한 스프링 부트는 이 강의 하나로 모두 정리해드립니다.
스프링 부트는 매우 편리하지만 너무 다양한 기능을 제공합니다. 그래서 무작정 넓게 배워도 안되고, 또 너무 깊이있게 들어가도 실무에 크게 도움이 되지 않습니다. 그래서 실무에서 중요하게 생각하는 핵심 원리와 자주 사용하는 기능을 예제 코드를 통해서 자연스럽게 이해할 수 있도록 강의를 준비했습니다. 크게 중요하지 않거나 실무에서 자주 사용하지 않는 기능은 과감하게 제외했습니다. 그리고 많은 분들이 궁금해하시는 스프링 부트를 활용한 효과적인 모니터링 방법도 함께 포함했습니다.

예제 코드를 통한 자연스러운 이해
여러분은 예제 코드를 통해서 자연스럽게 스프링 부트의 마법 같은 원리를 이해할 수 있습니다. 이 강의는 부트가 없던 시절부터 시작합니다. 그리고 점진적으로 부트를 도입하면서 부트의 핵심 개념과 강점을 코드를 통해서 자연스럽게 이해할 수 있습니다.
실무에서 필요한 스프링 부트를 복잡한 이론이 아니라, 예제 코드를 통해서 자연스럽게 이해하며, 실무 베스트 프랙티스를 전수해드립니다.

주의!

스프링 부트는 스프링 프레임워크를 편리하게 사용하도록 도와주는 기술입니다. 따라서 스프링 프레임워크를 먼저 학습하는 것이 더 중요합니다. 이 강의에서는 스프링으로 애플리케이션을 만드는 내용 보다는 스프링 부트 자체의 기능들에 초점을 맞춥니다. 그리고 여러분이 스프링을 학습해본 경험이 있다고 가정합니다. 아직 스프링에 익숙하지 않거나 스프링을 처음부터 학습하고 싶다면 -> 김영한의 스프링 완전 정복 로드맵을 참고해주세요.

다루는 내용

스프링 부트 소개
스프링 프레임워크 vs 스프링 부트
스프링 부트가 등장한 이유와 스프링 부트 전반에 대해서 소개합니다.

스프링 부트와 웹 서버
오랜 과거로 돌아가서 톰캣 같은 웹 서버를 직접 설치하고 웹 애플리케이션을 WAR 파일로 빌드해서 배포하는 방법부터, 지금처럼 스프링 부트와 내장 톰캣을 사용해서 JAR 파일 하나로 편리하게 웹 서버를 사용하는 방법을 단계별로 설명합니다. 어떤 이유로 이렇게 발전해왔는지 이해하고, 그 과정속에서 자연스럽게 스프링 부트가 포함하고 있는 내장 서버가 어떻게 동작하는지 원리를 이해하게 됩니다.

스프링 부트 스타터와 라이브러리 관리
다양한 라이브러리들을 직접 선택하고 관리하는 방법의 어려움을 알아보고, 스프링 부트가 이런 문제점을 어떻게 해결하는지 알아봅니다. 그리고 스프링 부트 스타터 라이브러리에 대해서도 알아봅니다.

자동 구성(Auto Configuration)
스프링 부트는 수 많은 기능을 자동화합니다. 그 중에서 가장 대표적인 기능이 바로 자동 구성(Auto Configuration) 입니다.
이 기능 덕분에 개발자는 수 많은 스프링 빈들을 직접 등록하지 않아도 됩니다. 하지만 어떤 원리로 자동 구성이 되는지 이해하지 못하면, 스프링 부트를 사용하다 문제가 발생했을 때, 근본적인 문제를 해결하기 어렵습니다.
강의에서는 스프링 부트의 핵심 기능이라 할 수 있는 자동 구성의 원리를 예제를 통해서 손쉽게 이해할 수 있습니다. 그리고 이러한 자동 구성을 직접 만들어서 제공하는 방법도 알아봅니다.

외부 설정과 프로필
스프링 부트 없이 직접 외부 설정을 사용하는 방법부터 시작합니다. 예를 들어서 OS 환경변수, 자바 시스템 속성, 커맨드 라인 인수를 직접 사용하는 방법을 알아봅니다. 그리고 이렇게 직접 외부 설정을 사용할 때 발생하는 문제점들을 알아보고, 스프링 부트가 이런 문제점들을 어떻게 해결하는지 단계별로 하나하나 학습합니다. 더 나아가서 Environment, @Value, @ConfigurationProperties의 등장 이유와 활용법도 예제를 통해 학습합니다.

스프링 부트 액츄에이터
실제 운영 환경에서 서비스를 운영하려면 단순히 기능 요구사항을 넘어서, 애플리케이션을 모니터링하는 부분이 매우 중요합니다. 스프링 부트 액츄에이터가 제공하는 다양한 기능과 또 모니터링 기능을 학습합니다.

마이크로미터, 프로메테우스, 그라파나를 활용한 모니터링

"전투에서 실패한 지휘관은 용서할 수 있지만 경계에서 실패하는 지휘관은 용서할 수 없다"라는 말이 있습니다. 이것을 서비스를 운영하는 개발자에게 비추어 보면 장애는 언제든지 발생할 수 있지만, 그만큼 모니터링을 잘 해야 한다는 뜻입니다.
최근 실무에서 주로 많이 사용하는 모니터링 툴인 프로메테우스와 그라파나를 활용해서 어떻게 모니터링 환경을 구축하는지 설명합니다. 이렇게 구축한 모니터링 환경에서 실제 CPU, 메모리, DB 커넥션 사용을 늘려가면서 모니터링 툴을 통해 문제를 파악하는 방법도 알아봅니다.

모니터링 활용
모니터링에 필요한 지표를 애플리케이션에 직접 심고 모니터링 대시보드를 통해서 확인하는 방법을 설명합니다. 마이크로미터라는 편리한 툴을 통해서 애노테이션 하나로 추적하고 싶은 비즈니스 로직의 호출 수, 평균 실행 시간, 최대 실행 시간을 측정하는 방법도 알아봅니다. 그리고 실무에서 올바르게 모니터링 하는 방법도 알려드립니다.

 

다른 댓글 보기(3)
김영한 프로필
수강생 20만 기념 감사 이벤트
김영한 2023.01.26 (2023.02.06 수정됨)

안녕하세요. 여러분

인프런에서 처음으로 20만 수강생을 달성했습니다.

강의를 준비하는 것이 에너지가 많이 들고 힘든 일인데, 제 강의를 좋아해주시고 또 응원해주신 분들 덕분에 여기까지 올 수 있었습니다.

감사의 의미로 이벤트와 개발자 여러분과 고민을 나누는 시간을 준비했습니다.

링크에 고민을 남겨주시면 유투브 라이브를 통해서 여러분의 고민을 해결해 드리겠습니다.

인프런과 함께 선물도 많이 준비했습니다^^

자세한 내용은 다음 링크를 참고해주세요.

https://www.inflearn.com/pages/kyh-thanks20

항상 응원해주셔서 감사합니다.

 

김영한 프로필
스프링 부트 강의 진행 상황을 공유드립니다.
김영한 2023.01.12

안녕하세요 여러분 김영한입니다. 새해 복 많이 받으세요.

스프링 부트 강의 관련해서 최근 많은 분들이 문의해주셔서 현재 진행상황을 말씀드리겠습니다.

현재 90% 정도 강의 자료가 준비되었고, 검수, 촬영, 편집등을 고려하면 앞으로 1달 ~ 2달 안으로는 출시할 수 있을 것으로 예상됩니다.

작년 중순부터 시작했으니, 스프링 부트 강의를 준비한지 벌써 7개월이 되었네요. 열심히 준비하고 있으니 기대해주세요. 실무에 필요한 스프링 부트는 이 강의 하나로 정리해드리겠습니다.

강의명: 스프링 부트
오픈 예정일: 2월 말 ~ 3월 중
강의 수: 100강
강의 자료 PDF: 250장

강의 내용

스프링 부트는 매우 편리하지만 너무 다양한 기능을 제공합니다. 그래서 무작정 넓게 배워도 안되고, 또 너무 깊이있게 들어가도 실무에 크게 도움이 되지 않습니다. 그래서 실무에서 중요하게 생각하는 핵심 원리와 자주 사용하는 기능 위주로 강의를 준비했습니다. 크게 중요하지 않거나 실무에서 자주 사용하지 않는 기능은 과감하게 제외했습니다. 그리고 많은 분들이 궁금해하시는 스프링 부트를 활용한 효과적인 모니터링 방법도 함께 포함했습니다.

스프링 부트 강의 전체 목차

1. 스프링 부트 소개
2. 스프링 부트와 웹 서버
3. 스프링 부트 스타터와 라이브러리 관리
4. 자동 설정(Auto Configuration)
5. 외부 설정과 프로필
6. 스프링 부트 액츄에이터
7. 마이크로미터, 프로메테우스, 그라파나를 활용한 모니터링
8. 모니터링 활용

스프링 부트 강의 소개

스프링 부트와 웹 서버

오랜 과거로 돌아가서 톰캣 같은 웹 서버를 직접 설치하고 웹 애플리케이션을 WAR 파일로 빌드해서 배포하는 방법부터, 지금처럼 스프링 부트와 내장 톰캣을 사용해서 JAR 파일 하나로 편리하게 웹 서버를 사용하는 방법을 단계별로 설명합니다. 어떤 이유로 이렇게 발전해왔는지 이해하고, 그 과정속에서 자연스럽게 스프링 부트가 포함하고 있는 내장 서버가 어떻게 동작하는지 원리를 이해하게 됩니다.

스프링 부트 스타터와 라이브러리 관리

다양한 라이브러리들을 직접 선택하고 관리하는 방법의 어려움을 알아보고, 스프링 부트가 이런 문제점을 어떻게 해결하는지 알아봅니다. 그리고 스프링 부트 스타터 라이브러리에 대해서도 알아봅니다.

자동 설정(Auto Configuration)

스프링 부트는 수 많은 기능을 자동화합니다. 그 중에서 가장 대표적인 기능이 바로 자동 설정(Auto Configuration) 입니다.

이 기능 덕분에 개발자는 수 많은 스프링 빈들을 직접 등록하지 않아도 됩니다. 하지만 어떤 원리로 자동 설정이 되는지 이해하지 못하면, 스프링 부트를 사용하다 문제가 발생했을 때, 근본적인 문제를 해결하기 어렵습니다.

강의에서는 스프링 부트의 핵심 기능이라 할 수 있는 자동 설정의 원리를 예제를 통해서 손쉽게 이해할 수 있습니다. 그리고 이러한 자동 설정을 직접 구성하는 방법도 알아봅니다.

외부 설정과 프로필

스프링 부트 없이 직접 외부 설정을 사용하는 방법부터 시작합니다. 예를 들어서 OS 환경변수, 자바 시스템 속성, 커맨드 라인 인수를 직접 사용하는 방법을 알아봅니다. 그리고 이렇게 직접 외부 설정을 사용할 때 발생하는 문제점들을 알아보고, 스프링 부트가 이런 문제점들을 어떻게 해결하는지 단계별로 하나하나 학습합니다. 더 나아가서 Environment, @Value, @ConfigurationProperties의 등장 이유와 활용법도 예제를 통해 학습합니다.

스프링 부트 액츄에이터

실제 운영 환경에서 서비스를 운영하려면 단순히 기능 요구사항을 넘어서, 애플리케이션을 모니터링하는 부분이 매우 중요합니다. 스프링 부트 액츄에이터가 제공하는 다양한 기능과 또 모니터링 기능을 학습합니다.

마이크로미터, 프로메테우스, 그라파나를 활용한 모니터링

"전투에서 실패한 지휘관은 용서할 수 있지만 경계에서 실패하는 지휘관은 용서할 수 없다"라는 말이 있습니다. 이것을 서비스를 운영하는 개발자에게 비추어 보면 장애는 언제든지 발생할 수 있지만, 그만큼 모니터링을 잘 해야 한다는 뜻입니다.

최근 실무에서 주로 많이 사용하는 모니터링 툴인 프로메테우스와 그라파나를 활용해서 어떻게 모니터링 환경을 구축하는지 설명합니다. 이렇게 구축한 모니터링 환경에서 실제 CPU, 메모리, DB 커넥션 사용을 늘려가면서 모니터링 툴을 통해 문제를 파악하는 방법도 알아봅니다.

모니터링 활용

모니터링에 필요한 지표를 애플리케이션에 직접 심고 모니터링 대시보드를 통해서 확인하는 방법을 설명합니다. 마이크로미터라는 편리한 툴을 통해서 애노테이션 하나로 추적하고 싶은 비즈니스 로직의 호출 수, 평균 실행 시간, 최대 실행 시간을 측정하는 방법도 알아봅니다.

감사합니다.

다른 댓글 보기(4)
김영한 프로필
스프링 DB 2편 - 데이터 접근 활용 기술 오픈 소식
김영한 2022.05.30

안녕하세요. 여러분
스프링 DB 2편 - 데이터 접근 활용 기술 강의를 드디어 오픈했습니다.
오랜기간 기다려주신 모든분께 진심으로 감사합니다.

 - 강의명: 스프링 DB 2편 - 데이터 접근 활용 기술
 - 강의 수: 85강
 - 강의 자료 PDF:  250장
 - 강의 자료 PPT: 173장

스프링 DB 2편 - 데이터 접근 활용 기술

스프링 DB 1편에서는 JDBC, 커넥션, 커넥션 풀, 데이터소스, 트랜잭션, 예외 처리 같은 기반 기술의 핵심 개념을 학습했습니다. 이번 스프링 DB 2편에서는 JdbcTemplate, MyBatis, JPA, SpringDataJPA, Querydsl 같이 실무에서 주로 사용하는 다양한 데이터 접근 기술들을 학습합니다. 그리고 데이터 접근 기술을 어떻게 테스트 하는지 알아보고, 마지막으로 실무에 필요한 스프링 트랜잭션 기술을 매우 깊이있게 학습합니다. 이번 강의를 통해 스프링 DB 접근 기술을 완성하는 것이 목표입니다.

자세한 내용은 링크의 다음 강의 소개를 참고해주세요.
강의 링크: https://www.inflearn.com/course/스프링-db-2?inst=260d2a39

감사합니다.

김영한 프로필
스프링 DB 2편 - 데이터 접근 활용 기술 오픈 예정 소식!
김영한 2022.05.23

안녕하세요. 여러분^^!
드디어 스프링 DB 2편 강의가 오픈 준비에 돌입했습니다. 오랜기간 기다려주시고 응원해주셔서 감사합니다.

출시 예정일은 다음주 5월 30일(월) ~ 6월 3(금) 사이에 DB 2편이 출시될 예정입니다^^!

 - 강의명: 스프링 DB 2편 - 데이터 접근 활용 기술
 - 강의 수: 85강
 - 강의 자료 PDF:  250장
 - 강의 자료 PPT: 173장

자세한 강의 소개는 다음 내용을 참고해주세요.

강의 소개

백엔드 DB 데이터 접근 기술의 완성

백엔드 웹 애플리케이션을 제대로 개발하려면 HTTP를 기반으로한 MVC와 DB를 기반으로한 데이터 접근 기술이라는 2가지 큰 축을 완성해야 합니다. 우리는 앞선 강의를 통해 HTTP와 스프링 MVC를 완성했고, 이제 남은 하나의 축인 스프링 DB 데이터 접근 기술을 완성해야 합니다.
스프링 DB1편 강의를 통해 DB 접근 기술의 핵심 원리와 구조를 이해했습니다. 이번 스프링 DB 2편에서는 1편의 기반 위에 실무에 꼭 필요한 다양한 활용 기술들을 학습합니다. 2편은 크게 3부분으로 나뉘어 있습니다.

다양한 데이터 접근 기술 이해
JdbcTemplate, MyBatis, JPA, Spring Data JPA, Querydsl 같은 실무에서 주로 사용하는 다양한 데이터 접근 기술들을 실전 예제를 통해 점진적으로 발전시키면서 학습합니다. 이 과정을 통해 각각의 기술들이 왜 필요한지, 그리고 각 기술들의 장단점을 코드로 개발하면서 자연스럽게 이해할 수 있습니다.

데이터 접근 기술과 테스트
데이터 접근 기술은 결국 데이터베이스에 데이터를 관리하는 목적으로 사용됩니다. 따라서 데이터 접근 기술이 실제 데이터베이스에 데이터를 잘 저장하고 조회할 수 있는지 확인해야 합니다. 강의에서는 데이터베이스를 연동하는 상황에서 테스트를 어떻게 하는 것이 좋은지 단계적으로 설명합니다.

스프링 트랜잭션의 깊은 이해
스프링 DB1편에서는 스프링이 제공하는 트랜잭션 기능이 왜 필요하고, 어떻게 동작하는지 내부 원리를 알아보았습니다.
이번 시간에는 스프링 트랜잭션을 매우 깊이있게 학습하고, 실무 활용 방안을 알아봅니다.

* 트랜잭션 AOP 사용시 실무 주의사항
* 스프링 트랜잭션의 다양한 옵션
* 예외 처리와 스프링 트랜잭션이 커밋되고 롤백되는 내부 원리
* 트랜잭션 전파 옵션과 내부 동작 방식

강의 목표

 - 목표: 실무 백엔드 애플리케이션을 개발할 때 필요한 방대한 DB 데이터 접근 기술을 완성하는 것이 이 강의의 목표입니다
 - 기초부터 실무까지: 실무 개발을 위한 내용이 많지만, 웹 애플리케이션 개발 경험이 없는 개발자도 적응할 수 있게 단계적으로 구성하였습니다. 참고로 스프링 DB 1편을 먼저 듣고 스프링 DB 2편을 학습해야 합니다.
 - 개념부터 활용까지: 단순히 기술의 사용법을 설명하는 것이 아니라, 이 기술이 왜 필요하고, 어떻게 나왔는지 핵심 원리와 활용 방안을 함께 설명합니다.
 - 실무 예제 중심: 실무에서 스프링으로 애플리케이션을 개발할 때 필요한 데이터 접근 기술을 예제를 통해 자연스럽게 학습하며, 실무 베스트 프랙티스를 전수해드립니다.
 - 간결함: 실무에서 사용하지 않는 오래된 기능은 과감하게 제외했습니다. 최신 실무에 주로 사용하는 내용 중심으로 설명합니다.

다루는 내용

데이터 접근 기술 - JdbcTemplate
SQL을 직접 사용할 때 스프링이 제공하는 JdbcTemplate은 좋은 선택입니다. 이 기술은 JDBC를 매우 편리하게 사용할 수 있게 도와줍니다. 그리고 JDBC를 직접 사용할 때 발생하는 대부분의 반복 작업을 대신 처리해줍니다.
* 개발자는 SQL을 작성하고, 전달할 파리미터를 정의하고, 응답 값을 매핑하기만 하면 됩니다.
* 우리가 생각할 수 있는 대부분의 반복 작업을 대신 처리해줍니다.
강의에서는 실제 동작하는 웹 애플리케이션에 JdbcTemplate을 직접 코드로 적용하면서 해당 기술의 장단점을 이해할 수 있습니다.

데이터 접근 기술 - MyBatis
MyBatis는 앞서 설명한 JdbcTemplate보다 더 많은 기능을 제공합니다.
JdbcTemplate과 비교해서 MyBatis의 가장 매력적인 점은 SQL을 XML에 편리하게 작성할 수 있고 또 동적 쿼리를 매우 편리하게 작성할 수 있다는 점입니다.
강의에서는 실제 동작하는 웹 애플리케이션에 MyBatis를 직접 코드로 적용하면서 해당 기술의 장단점을 이해할 수 있습니다.

데이터 접근 기술 - JPA
스프링과 JPA는 자바 엔터프라이즈(기업) 시장의 주력 기술입니다.
스프링이 DI 컨테이너를 포함한 애플리케이션 전반의 다양한 기능을 제공한다면, JPA는 ORM 데이터 접근 기술을 제공합니다.
JPA는 스프링 만큼이나 방대하고, 학습해야할 분량도 많습니다. 하지만 한번 배워두면 데이터 접근 기술에서 매우 큰 생산성을 향상을 얻을 수 있습니다. 대표적으로 JdbcTemplate이나 MyBatis 같은 SQL 매퍼 기술은 SQL을 개발자가 직접 작성해야 하지만, JPA를 사용하면 SQL도 많은 부분 JPA가 대신 작성하고 처리해줍니다.
실무에서는 JPA를 더욱 편리하게 사용하기 위해 스프링 데이터 JPA와 Querydsl이라는 기술을 함께 사용합니다.
JPA, 스프링 데이터 JPA, Querydsl은 각각 별도의 강의로 다룰 정도로 매우 방대합니다. 여기서는 해당 기술들의 기본 기능과, 해당 기술을 왜 사용해야 하는지 각각의 장단점과 전체 큰 그림을 알아봅니다.

데이터 접근 기술 - 스프링 데이터 JPA
스프링 데이터 JPA는 JPA를 더욱 편리하게 사용하도록 도와주는 기술입니다.
쉽게 이야기해서 기본적인 CRUD 기능들을 모두 제공하기 때문에 개발자가 작성해야 하는 개발 코드를 혁신적으로 줄일 수 있습니다.
강의에서는 실제 동작하는 웹 애플리케이션에 스프링 데이터 JPA를 직접 코드로 적용하면서 해당 기술의 장단점을 이해할 수 있습니다.

데이터 접근 기술 - Querydsl
JPA는 복잡한 쿼리나, 동적 쿼리를 처리하기 어렵습니다. Querydsl을 사용하면 이런 문제를 매우 편리하게 해결할 수 있습니다. 실무에서 JPA를 사용한다면 꼭 사용해야 하는 추천 기술입니다.
강의에서는 실제 동작하는 웹 애플리케이션에 Querydsl를 직접 코드로 적용하면서 해당 기술의 장단점을 이해할 수 있습니다.

데이터 접근 기술 - 테스트
데이터 접근 기술은 결국 데이터베이스에 데이터를 관리하는 목적으로 사용됩니다. 따라서 데이터 접근 기술이 실제 데이터베이스에 데이터를 잘 저장하고 조회할 수 있는지 확인해야 합니다.
강의에서는 데이터베이스를 연동하는 상황에서 테스트를 어떻게 하는 것이 좋은지 단계적으로 설명합니다. 예를 들어서 데이터베이스에 연동하는 테스트를 어떻게 구성하는지 설명하고, 테스트에서 사용되는 @Transactional, 임베디드 모드 DB가 어떻게 동작하는지 코드로 알아봅니다.

스프링 트랜잭션 이해
DB1편에서는 스프링이 제공하는 트랜잭션 기능이 왜 필요하고, 어떻게 동작하는지 내부 원리를 알아보았습니다. 이번 시간에는 스프링 트랜잭션 AOP 사용시 실무 주의사항, 스프링 트랜잭션의 다양한 옵션, 예외가 발생했을 때 스프링 트랜잭션이 커밋되고 롤백되는 내부 원리와 같이 스프링 트랜잭션이 제공하는 다양한 기능들을 깊이있게 자세히 알아봅니다.

스프링 트랜잭션 전파
스프링의 트랜잭션 전파를 매우 깊이있게 다룹니다. 트랜잭션 전파가 왜 필요한지 이해하고, 다양한 트랜잭션 전파 옵션, 전파 옵션에 따른 예외 처리, 실무에서 트랜잭션 전파 옵션을 사용할 때의 주의점을 다룹니다.