새로운 내용을 공부할 때
새로운 내용의 공부를 시작할 때 용어의 정의를 이해하지 못하거나 정확하게 알지 못한다면 그 용어가 포함된 문장을 이해하지 못합니다.
작은 단어 하나가 내용을 이해하지 못하게 하기 때문에 용어를 정확하게 이해하는 것이 중요합니다.

2 분 소요

6월 말부터 7월 첫 번째 주까지 어떤 학습을 할 예정인지 목표를 잡습니다.

학습 계획(~ 24.07.04 수요일)

불변 객체 ★★★

  • 코틀린 불변 객체를 만드는 방법과 메서드로 초기화 하는 방법
  • 자바에서 불변 객체를 만드는 방법과 유지 보수를 하는 방법
    • MapStruct
    • 불변 객체
    • 어셈블 레이어

불변 객체는 실무에서 국룰로 사용하므로 반드시 숙지해야합니다.

장점 중 GC에 효과적으로 작용할 수 있는 이유를 학습을 제대로 못했습니다.

해시충돌 ★★★

  • 해시 충돌의 원인과 그 해결 방안들의 비교를 통해 이해합니다.

해시 충돌 원인과 방안은 알고 있지만, 더 나아가 한가지 방법이 무조건 bestPractice가 아니므로 상황에 맞는 방식을 분별할 수 있도록 비교를 해야합니다.

체이닝 방식과 오픈 어드레싱 방식이 어떤 상황 (예: 많은 량의 데이터의 동시 삽입으로 해시 충돌이 발생 하는 경우)에 적합한지 비교 할 줄 알아야합니다. 단순히 해결 방안이 아니라 장/단점까지 알아야합니다.

상속과 조합 ★★★

  • 상속과 조합에 대한 비교와 상황에 따라 어떤 방식을 선택할 수 있는지 알아야합니다.
    • 7월 초에 학습

단순히 다른 사람들이 조합이 좋다고 사용하는 것보다 왜 조합을 우선시 하는지 알아야하는게 중요합니다.

추상 클래스와 인터페이스

  • 인터페이스를 추상 클래스보다 선호하는 이유

인터페이스를 구현하는 방식과 추상 클래스를 상속하는 방식의 큰 차이점은 인터페이스 구현 방식이 불변 객체의 장점을 더 많이 가져갈 수 있습니다.

불변 객체는 시스템이 커질 수록 장점이 더 많은 방식입니다. 유지보수나 유연성을 고려했을 때에는 큰 이펙트를 가져옵니다.

그래서 웬만하면 인터페이스를 사용하는 것을 권장합니다.

자바 8

스트림

  • 스트림에 대해서 학습하기
  • Lazy Evaluation
  • Pipelining
  • Parallel Processing

주의 사항도 별도로 학습합니다.

  1. 스트림은 재사용 반찬을 사용하지 않습니다
  2. 병렬 스트림시 공유 자원을 변경하는 연산
  3. 무한 스트림일 경우 제한 조건(limit) 와 종료조건(fin) 명시
  4. 디버깅의 어려움
  5. 코드 가독성 저하

GC

자바의 대표적인 GC에 대해서 학습하도록 합니다

  • Z-GC
  • G1GC
  • 그 외

GIT

git 명령어의 쓰임새는 알고 있지만 git 마다 가진 glow에 대해서 학습을 합니다.

Flow

  • Git Flow
  • GitHub Flow
  • GitLab Flow

Issue

  • git issue 사용방법

Pull Request

  • pull request 작게 만드는 방법

Convention

Git

  • git commit message
  • git issue
  • git pull request

titlebody의 작성 규칙을 학습합니다.

Java

언제나 다른 개발자가 투입될 수 있도록 컨벤션을 유지합니다.

컨벤션도 “그냥”이 아니라 선택한 이유가 있어야 하므로 이유를 작성합니다.

Skill

Java

  • Java 21 버전까지 Features(기능과 변경사항)을 이야기 할 수 있을 정도로 학습한다.

    첫 번째는 LTS의 요소도 있지만 기술적으로 자바 기술의 피처에 이야기를 하여 알고 사용해야한다.

스프링 버전

  • 스프링 2.7 이후 3.x를 사용하는 이유를 설명할 줄 알아야한다.

    단순히 기능이 추가되어서, 기능이 개선되어서 가 아니라 내가 현재 사용하는 프로젝트의 어떤 점이 맞기 때문에 사용하게 되었는지 설명할 줄 알아야한다. 마이너 버전의 개선 사항은 아니더라도 큰 버전의 변경 사항을 큰 틀에 맞게 알고 있어야한다.

MySQL

  • 자바, 스프링과 같이 피처에 대해 상세히는 몰라도 큰 개선 사항은 알아두는 게 좋다.

JPA

  • 데이터 접근 기술중 JDBC와 MyBatis와 JOOQ 중에서 JPA를 선택한 이유와 트레이드 오프를 정리해야합니다.
  • SQL Mapper와 ORM에 대해 생각을 정리해서 현재 프로젝트에 ORM을 적용한 이유를 설명합니다.

Redis

  • 인메모리 DB중 Redis, Memcached중에서 현재 프로젝트에 Redis를 선택한 이유

    어떤 상황 ( 트래픽 초과, 그외 기타 문제)가 발생했을 경우에 레디스가 더 내 프로젝트에서 유용한 기능을 제공하기 때문에 선택했다.라는 뉘양스의 방식을 선택합니다.

CI/CD

CI/CD에 대해서 학습을 했지만, CI/CD가 무엇인지 물어볼 때 대답을 하지 못했습니다. 공부를 하지 않은 것과 같습니다.

  • git action과 jenkins에 대해서 트레이드 오프 생각해봅니다.
  • 젠킨스와 git Action에 대해 비교하여 어떤 방식을 사용할지 생각해야합니다.
  • CI도 문화가 있다. 테스트 커버리지 80% 이상과 같은

BuildTool

  • Gradle과 Maven과 Ant에 대해서 비교하여 어떤 점때문에 Gradle을 선택했는지 생각합니다.

배치와 스케줄러의 차이

  • 스프링 배치와 스프링 스케줄러의 역할을 비교할 수 있을 정도로 설명한다.

  • 스프링 배치를 프로젝트에 적용하려면 왜 적용하는지 기술적으로 고민하는 것이 중요하다

    스프링의 철학과 설계에 대해서 굳이 이 프로젝트에 적용하게 되었지는 생각해봅니다.

프로젝트 만들기

  • 멘토님에게 어드민 권한 드리기

  • 기능 정의하기 ★
  • USECASE
  • DB 테이블 설계

태그:

카테고리:

업데이트:

댓글남기기