BEST
개발 · 프로그래밍

/

백엔드

Java/Spring 주니어 개발자를 위한 오답노트

스프링이랑 JPA를 조금 다룰 줄 알게 된 당신, 앞으로 성장하기 위해 무엇을 어떻게 공부해야 할까요? 혹시 설계 공부를 해보겠다고 디자인 패턴을 공부하면서 패턴들을 무작정 암기하고 계시진 않으신가요? 제가 도와드릴게요!

(4.9) 수강평 65개

수강생 1,068명

Thumbnail

초급자를 위해 준비한
[백엔드, 개발 · 프로그래밍] 강의입니다.

이런 걸
배워요!

  • 주니어 개발자가 많이 하는 실수 교정

  • 주니어 개발자가 스프링을 쓰면서 많이 하는 실수 교정

  • 의존성 / Entity 등에 대한 잘못된 오해 교정

  • 실무에 필요한 개념 정리 (MSA, ACL 등)

  • 백엔드 개발자에게 필요한 인프라 / 네트워크 개념 정리

  • 스프링 환경에서 객체 지향적인 코드를 짜는 법 (TDA 등)

성장하는 방법을 찾는 주니어 개발자라면? 
효과적인 레벨 업을 위한 쏙쏙 오답노트! 

개발 ‘잘’ 하고 싶은 주니어 개발자는 
어떤 걸 공부해야 할까요?

혹시 이런 고민하고 계셨나요?

‘이제 뭘 공부해야 하지? 무슨 스택을 배우면 도움이 될까?’
‘인프라 쪽을 파고들면 좋을까? 스프링 시큐리티를 배워볼까?’

무작정 기술 스택을 배운다고 ‘개발 실력’이 늘지 않습니다!

여러분이 아무 기술이나 특정 개념을 무작정 책을 사서 공부하지 않도록 도와드릴게요. 인프라(NoSQL, Message Queue...)나 Spring security 같은 기술 스택을 공부하는 게 여러분의 개발 능력 향상으로 이어지는 건 아니니까요! 실천할 수 있고 필요한 내용만 쏙쏙 집어 짧은 시간 안에 설명한 강의입니다.

그래서, 이런 내용을 배웁니다.

다년간 코드 리뷰를 하면서 경험했던, 주니어 개발자 분들이 많이 하는 개발 실수를 교정해드릴게요!

의존성 주입과 의존성 역전의 차이를 설명하실 수 있나요? 기계적으로 외웠던 모호한 개념들을 바로잡아드릴게요.

테스트 코드가 왜 필요한지, 왜 테스트 코드 작성이 좋은 설계로 이어지는지를 알려드릴게요.

회의 내용 쫓아가기 힘드시죠? 실무에 필요한 개념들을 정리해드릴게요! (MSA, ACL 등...)


주니어 여러분의 고민을 
해결해드릴게요.

여러분은 의존성 역전이 무엇인지 알고 계신가요?

...상위 계층(정책 결정)이 하위 계층(세부 사항)에 의존하는 전통적인 의존관계를 반전(역전)시킴으로써 상위 계층이 하위 계층의 구현으로부터 독립되게 할 수 있다. (위키피디아 "의존관계 역전 원칙" 중)

그래서, 이게 무슨 의미죠? 🙄 하나도 와닿지 않는 백과사전식 문답 해설은 답이 아닙니다! 
정확한 개념을 스스로의 언어로 풀어 설명할 수 있도록 알아야 합니다.

그동안 멘토 입장이 되어 정말 많은 주니어 개발자분들을 만나뵌 것 같습니다. 그리고 이분들의 멘토가 되어 매번 같은 질문에 같은 답변을 드리면서, 이런 내용을 전문적으로 다루는 강의가 하나쯤 있으면 좋겠다고 생각하게 됐습니다. 이 강의는 주니어 개발자 분들의 멘토가 되어 해드렸던 공통된 질문/답변을 모아둔 강의입니다.

제가 봐온 주니어 개발자분들의 상황은 대부분 아래와 같았습니다.

  • 컴퓨터 공학 지식도 어느 정도 알고 계셨습니다.
  • Spring을 어느 정도 다룰 줄 알고 계셨습니다.
  • JPA를 다룰 줄 알고 계셨습니다.
  • 『클린 코드』도 읽어보셨습니다.

그런데 이 다음 스텝이 무엇이 되어야 하는지 모르시더라고요. 🤷‍♂️ 그래도 남는 시간... 일단 뭐라도 공부해야겠으니, 회사에서 쓰는 인프라 기술 스택인 NoSQL, Message Queue, RDB를 공부하거나 요즘 트렌드라는 새로운 언어를 공부합니다. 물론 저도 그랬습니다!


이런 분들이라면 
특히 도움이 될 거예요.

  • 컴퓨터 공학만 공부하고 입사해서, 실무에서 쓰는 개발 용어를 빠르게 학습해야 하는 분.
    • 네트워크 / 인프라
    • 운영 용어 / 개발 용어
    • CI/CD / 쿠버네티스
    • NoSQL / MySQL
  • 모르는 실무 용어가 많아 회의 내용을 못 쫓아가는 분
  • 설계 공부를 해보려고 디자인 패턴을 무작정 외우려 시도하셨던 분
😂 우리 모두 이런 생각을 하지 않나요?
  • TDD / DDD 이론이 너무 멋진 건 알겠는데, 도대체 실무에 어떻게 적용하라는 건지 이해 안 되시는 분
  • 코드 리뷰를 받고 있지 못하거나, 회사 내 나의 성장을 도와줄 멘토 또는 사수가 없으신 분
  • 스프링 개념을 기계적으로 외우시기만 하셨던 분
  • 스프링 어노테이션의 의미에 대해 고민해본 적 있으신 분
  • 스프링에 객체 지향적인 코드를 적용하고 싶으신 분

주니어 개발자에게 꼭 필요한 팁을 알려드립니다.

모호한 개념을 확실하게

분명 알고 있지만 설명하기 어려운 개념이 있지요? 의존성 역전이 무엇인가요? Entity가 무엇인가요? Service가 무엇인가요? 순차 지향 프로그래밍과 절차 지향 프로그래밍은 뭐가 어떻게 다른가요? 알고 있지만 제대로 설명하지 못하는 개념을 확실히 짚어드립니다.

실무에 가까운 지식 전달

그놈의 TDD, DDD... 학습할 때는 너무 좋죠. 너무 멋진 이론인 건 알겠는데, 대체 이걸 실무에 어떻게 적용하라는 거죠? 더 구체적으로 말해서 스프링 프레임워크에 어떻게 TDD, DDD를 적용하라는 거죠?

TDD 관련 책도 많이 찾아보고 관련된 세미나 영상도 많이 찾아보지만 딱 입문자의 입맛에 맞을 만큼 간단한 예제만 다루고 있습니다. 실제로는 어떻게 적용하면 되는지 알려드릴게요.

암기가 아닌 이해

설계에 관심 있는 당신, 혹시 설계 공부를 해보겠다고 디자인 패턴을 무작정 암기하려 하지 않으셨는지요? 그러다 문득 이런 생각이 듭니다. 예제로 나온 코드들... 이게 실제로 실무에서 적용할 수 있는 건가?

그렇지만 알고 보면 디자인 패턴에서 중요한 건 패턴이 어떻게 생겼는지가 아닙니다! 의존 관계를 파악하고 어떻게 의존 관계를 약하게 만들고 있는지가 중요합니다!

학습을 마치면, 이렇게 달라질 수 있습니다!

  • 앞으로의 성장을 위해 필요한 내용이 어떤 내용인지 알게 됩니다.
  • 기존에 내용을 알고 계시던 내용이라면, 알고 계신 내용을 조금 더 실무에 가깝게 정리해서 기억할 수 있게 될 겁니다.
  • 회사에서 시니어 개발자분들이 회의 시간에 하는 내용을 빠르게 이해할 수 있게 됩니다.
  • 객체 지향적인 코드가 무엇인지 조금은 감이 잡힙니다.
  • 테스트 코드가 왜 필요한지, 어떻게 적용해야 하는지 알게 됩니다.
  • 개발 서적 3~4권 정도 읽은 포만감을 얻으실 수 있을 겁니다.
오프라인 수강생들의 후기 💬

강의를 듣고 나서 무심코 썼던 용어들, 들어봤지만 명확하게 정의할 수 없었던 언어들에 대한 정의와 어원, 의미까지 이해할 수 있게 되었습니다. 이러한 내용을 몰라도 개발하는데 문제는 없을수도 있지만, 객체의 행동과 역할에 대해 고민하고, 각 레이어의 의미를 고민하며 더 OOP 스럽게 코딩해보려는 자세를 만들어 주었습니다. 직접 고민한 내용을 주니어의 눈높이로, 이해하기 쉽게 설명해주셨기에 더 와닿고 편하게 들을 수 있었어요. 제가 그랬듯이, 이제 막 입사한 주니어 백엔드 개발자라면 무엇을 모르는지, 어디까지 알아야 하는지 조차 몰라 헤메이는 경우가 많을거라고 생각합니다. 이러한 상황에서 어떤 내용을 더 공부해야 하는지, 내가 몰랐던 부분이 무엇이었는지 알게 되어 길잡이가 되어주었던 강의였습니다. (이*규)

평소에 깊게 생각하지 않았던 부분까지 알려주는 좋은 강의인거 같습니다. 주니어 개발자로서 최근에 회사에서 하면서 늘 같은일만 하면서 성장하고 있는게 맞나라는 고민을 하고 있었는데, 강의를 듣고 방향성에 대해 알수 있었습니다. (신*호)

처음에 회사에 입사하게 되면 어떻게 개발하면 좋을지 또는 어떻게 하면 개발할 때 실수를 줄일수 있을지와 같은 고민을 많이 하게 됩니다. 이 강의는 이런 고민들을 해결해주고 주니어 개발자가 올바르게 개발을 할 수 있게 방향을 잘 잡아주는 좋은 강의라고 생각합니다. 업무적인 지식 이외에도 “객체 지향적으로 아키텍처를 설계하려면 어떤 식으로 해야 좋을까?”, “DTO, VO, Entity는 실무에서는 어떤 식으로 구분해서 사용할까?”, “테스트 코드를 정말 작성해야 하는걸까?”등 주니어 개발자가 개발하면서 어려워했고, 한 번쯤은 궁금해했을 내용들도 다룹니다. 또한 실무에서 자주 사용되는 용어들도 배울 수 있어 실제 업무 적응에 도움이 많이 된다고 생각합니다. 실무에 익숙하지 않은 주니어 개발자나 성장을 위한 모든 개발자분에게 추천해 드리는 강의입니다. (이*찬)

개발자로써 현업에서 사용하는 객체지향의 핵심 개념들을 습득하는데 많은 도움이 되었습니다. 어려운 개념들도 도식화가 잘되어있어서 쉽게 이해됬었고, 오히려 간단하게 설명해줘서 한번 듣고난 뒤 개념이 오래 기억에 남았습니다. (심*철)


철저히 저연차 시선에서 
궁금할 내용을 짚어드립니다.

예비 수강생 여러분은 순차 지향 프로그래밍과 절차 지향 프로그래밍의 차이를 알고 계신가요? 궁금하시다면 무료로 공개된 오리엔테이션 영상을 보고 어떤 내용을 학습하게 될지 알아봅시다.

개념이 무엇인지 정확하게 이해하면, 눈에 보이는 게 훨씬 많습니다! 철저히 저연차 시선에서 궁금해할 만한 내용들을 짚어드립니다.

주니어 개발자가 많이 하는 개발 실수 교정

첫 회사에 입사했을 때 많이 하는 컨벤션 실수부터 객체가 무엇이고, 객체 지향적으로 코드를 짜기 위해선 어떤 걸 신경 써야 하는지 알아봅니다. 그리고 좋은 설계를 이해하기 위해 의존성이 무엇인지 알아봅니다.

스프링을 OOP스럽게 사용하기

스프링을 OOP스럽게 사용하는 방법에 대해 알아보기 위해, 역으로 OOP스럽게 사용하지 못한 사례를 살펴봅니다. 그리고 서비스란 본질적으로 무엇이고, 각 레이어를 어디까지 추상화해야 하는지를 알아봅시다.

테스트는 왜 해야 하는가?

테스트 코드가 필요하다고들 하는데, 막상 테스트 코드 작성이 왜 좋은 설계로 이어지는지 이유를 잘 모르시겠다고요? 테스트는 왜 해야 하는지 조금 더 실무적인 관점에서 설명해 드립니다. 그리고 어떻게 하면 자연스러운 테스트를 할 수 있는지를 알려드립니다.

실무에 필요한 개념 정리

스프링만 알고 실무를 하기에는 주변에 엮인 인프라 지식이 너무 많죠. 회의 시간에 네트워크, 인프라 얘기만 나오면 무슨 말인지 찾아보기 바쁘거나 멍때리고 계시는 분들이 많습니다. 그렇다고 인프라나 네트워크 공부를 하기 위해 전공 서적을 다시 펼쳐야 할까요? 딱 실무에 필요한 수준으로 요약해드릴게요!

BONUS

학습 자료를 제공합니다!

수업별 약 15~20장으로 이루어진 PPT 약 20개를 학습 자료로 제공합니다. 또한, 별도의 실습 환경을 요구하지 않습니다! 출퇴근길 지하철에서 딱 20분만 투자해서 공부할 수 있도록 강의를 구성하였습니다.


개발자로 성장하는 데  
도움을 드리고 싶습니다!

안녕하세요, 김우근입니다! 👋

현재 카카오에서 일하고 있고, 만드는 것을 좋아해서 퇴근 후에도 항상 무언가를 개발하고 있습니다. "거인의 어깨 위에 선 난쟁이"라는 말이 있습니다. 저 역시 한낱 작은 난쟁이일 뿐이지만, 올라탄 거인의 성장에 도움이 될 수 있도록 지식의 대물림을 위해 노력하고 있습니다. 다수의 주니어 개발자분들을 멘토링한 경험이 있어서 여러분의 성장을 도와줄 수 있을 거예요.

  • Github / Blog
  • ✅ 현 카카오 백엔드 엔지니어
  • ✅ 공개 SW 개발자대회 2020 일반부문 금상: 정보통신산업진흥원장상 수상

Q&A 💬

Q. 비전공자도 들을 수 있는 강의인가요?

강의는 기본적인 컴퓨터 공학 지식을 알고 있다는 것을 전제로 진행됩니다. 다만 전공 지식을 알고 있어야 하는 구간이 매우 짧기 때문에, 선수 지식으로 요구되는 Java, Spring, JPA 을 알고 있고, 아래 내용을 이미 알고 계신 상태라면 충분히 수강할 수 있습니다. 

  • Hash, List가 무엇인지 알고 있다.
  • 비대칭키 암호화 방식이 public key, private key로 이루어져 있고 public key는 공개되어도 상관없다는 사실을 알고 있다.

Q. 상세한 개념 설명은 지양한다고 하는데, 그럼 대체 뭘 알려주신다는 거죠?

개념 설명은 되도록 세줄 요약으로 끝날 수 있도록 하려 합니다. 물론 MSA 나 OAuth 같은 복잡한 내용들은 진행 흐름이 어떤 식으로 되는지 설명 드립니다. 대신 OAuth 의 탄생과 배경, OAuth 1.0, 2.0 이런 상세한 내용들은 다루지 않는다는 의미에요! 어차피 실무에서는 2.0 을 쓸 테니까요. 그리고 실무자 입장에서는 토큰이 어쨌고 signature 가 어떻고 이런 것 보다는 API 통신으로 어떤 데이터를 주고받는지가 더 궁금하니까요.

추가로 질문하기는 애매한 사소한 용어들도 설명하고 넘어가려 합니다. 예를 들면 저 같은 경우, 처음 입사했을 당시 CS라는 용어를 몰라 회의 내용을 못 쫓아가 곤욕스러웠던 경험이 있습니다. 그런데 CS를 구글에 검색하면? 뭔가 하나같이 와닿는 의미가 아닙니다. 사실 고객 문의일 뿐인데 말이에요!

Q. 개념 설명을 해주는 영상이나 블로그 포스팅이 많은데 왜 이 강의를 들어야 하죠?

네 맞습니다. 사실 유튜브나 블로그에 좋은 글과 영상이 이미 너무나도 많습니다. 하지만 주니어 여러분들은 뭘 모르는지 모르는 상태인 경우가 훨씬 많습니다. 백엔드 개발자로 취업했는데 인프라 / 네트워크 용어가 나올 때마다 벙찌시는 분들 계실 거에요. 그럼 인프라 공부를 해야 하나? 하고 무슨 내용인지 하나도 모르겠는, 전문가용 두꺼운 책을 하나 사서, 이해하지도 못한 채 꾸역꾸역 읽습니다. 너무 비효율적이지 않나요?

이 강의는 빠른 성장을 도와주는 스타터 팩 같은 강의라고 보시면 됩니다. 더불어 블로그 글을 보다 보면 대학생 수준에서 티스토리에 공부한 내용을 기록하는 경우가 많아서 잘못된 개념이 적혀있는 경우가 꽤 많습니다. 예를 들어 몇몇 블로그 포스팅에서는 DTO가 DAO를 이용해 DB에 저장하기 위해 사용되는 객체라고 알려주는 글도 있더라고요!

Q. 이 강의만의 차별화된 점이 무엇인가요?

대부분의 강의가 설계에 대한 내용은 다루지 않는 것 같습니다. 이 강의에서는 좋은 설계가 무엇인지에 대한, 강연자 나름의 정의를 설명해 드리고 있습니다.

설계와 관련된 강의가 많지 않은 건 지식공유자 분들이 다들 움츠러들기 때문이라 생각합니다. 아시다시피 좋은 설계에는 답이 정해져 있지 않습니다. 그런데 강의를 제작하는 사람 입장에서는 정확한 지식을 객관적으로 전달해야 하니, 답이 정해져 있지 않은 주제를 본능적으로 피하게 되는 것이죠. 그래서 설계와 관련된 강연들은 기껏해야 SOLID가 무엇인지, 디자인 패턴이 어떻게 생겼는지 하나하나 되짚어주는 수준인 겁니다. 제 나름대로 정의한 좋은 설계가 무엇인지를 설명해 드릴 테니 의견을 한번 듣고 가봐 주세요.

Q. 좋은 설계가 무엇인지 정의를 내릴 수 없다면, 지식공유자님은 어떻게 좋은 설계를 강의할 수 있는 건가요?

네, 좋은 설계에 대한 정의를 내릴 수 없기 때문에 강의에서 제가 정의하는 좋은 설계는 저만의 개인적인 정의일 뿐입니다. 하지만 사실 모든 비문학 서적과 강의는 타인의 의견을 들어보고 논리적으로 공감되면 받아들이는 과정일 뿐이라고 생각합니다. 그래도 가능하면 최대한 객관적으로 풀어내려 노력했으니 납득이 되면 수용하시고, 아니라면 본인만의 좋은 설계를 새로 정의해 보시는 것도 좋을 것 같습니다.

📢 수강 전 확인해주세요!

  • 개념에 대한 상세한 설명은 드리지 않습니다. 예를 들어 쿠버네티스에 대한 내용을 설명할 때, 오브젝트나 컨트롤러 하나하나에 대한 설명을 드리지 않습니다. "쿠버네티스는 개략적으로 이렇게 돌아가고, 그래서 여러분이 중요하게 학습해야 할 내용은 이런 내용입니다." 정도로 설명해 드립니다.
  • 더불어 여러 개념을 압축해서 설명해 드릴 예정이라 압축 손실이 발생할 수 있습니다.
  • 디테일하고 적확한 설명보다는 약간은 왜곡되더라도 이해가 될 수 있는 설명을 위주로 해드릴 예정입니다! 😭
  • 이 강의는 프로그래밍 언어나 스프링을 다루는 방법 등에 대해 다루지 않습니다. 그리고 수강자가 Java, Spring 및 JPA에 대한 기본 지식이 있다는 것을 전제로 진행됩니다.
  • PPT 일부를 캡처해서 공부한 내용을 블로그에 올리는 것은 허용하나 자료 전체를 개인 블로그에 공유하는 건 금합니다. 양해 부탁드립니다!

이런 분들께
추천드려요!

학습 대상은
누구일까요?

  • 모르는 개념이 많아 회의를 못 쫓아가시는 분

  • 설계에 관심 있으신 분

  • 입사했는데 개발을 어떻게 해야 할지 모르시겠는 분

  • 테스트를 왜 짜는지 궁금하신 분

  • 스프링의 특징을 기계적으로 외운 분

  • 내가 스프링을 제대로 다루고 있는지 궁금하신 분

  • 신규 입사자

  • 성장하고 싶은 개발자

선수 지식,
필요할까요?

  • Java 코드를 이해하실 수 있으신 분

  • 스프링 기본 (Controller / Service / Repository가 무엇인지 아시는 분)

  • JPA 를 잠깐 사용해보신분

안녕하세요
김우근입니다.

  • (현) 카카오 백엔드 엔지니어
  • (수상) 🏆 공개 SW 개발자 대회 [2020 일반부문 / 금상_정보통신산업진흥원장상] 

 

현재 카카오에서 일하고 있고, 만드는 것을 좋아해서, 퇴근 후에도 항상 무언가를 개발하고 있습니다.

"거인의 어깨 위에 선 난쟁이"라는 말이 있습니다. 저 역시 한낱 작은 난쟁이일 뿐이지만, 올라탄 거인의 성장에 도움이 될 수 있도록 지식의 대물림을 위해 노력하고 있습니다. 다수의 주니어 개발자분들을 멘토링 한 경험이 있어서 여러분의 성장을 도와줄 수 있을 거예요. 

 

깃허브 > https://github.com/kok202
블로그 > https://kok202.tistory.com

커리큘럼

전체

25개 ∙ (4시간 8분)

수업 자료

가 제공되는 강의입니다.

강의 게시일: 
마지막 업데이트일: 

수강평

아직 충분한 평가를 받지 못한 강의입니다.
모두에게 도움이 되는 수강평의 주인공이 되어주세요!