새로운 내용을 공부할 때
새로운 내용의 공부를 시작할 때 용어의 정의를 이해하지 못하거나 정확하게 알지 못한다면 그 용어가 포함된 문장을 이해하지 못합니다.
작은 단어 하나가 내용을 이해하지 못하게 하기 때문에 용어를 정확하게 이해하는 것이 중요합니다.
240626~240704 학습목표
6월 말부터 7월 첫 번째 주까지 어떤 학습을 할 예정인지 목표를 잡습니다.
학습 계획(~ 24.07.04 수요일)
불변 객체 ★★★
- 코틀린 불변 객체를 만드는 방법과 메서드로 초기화 하는 방법
- 자바에서 불변 객체를 만드는 방법과 유지 보수를 하는 방법
- MapStruct
- 불변 객체
- 어셈블 레이어
불변 객체는 실무에서 국룰로 사용하므로 반드시 숙지해야합니다.
장점 중 GC에 효과적으로 작용할 수 있는 이유를 학습을 제대로 못했습니다.
해시충돌 ★★★
- 해시 충돌의 원인과 그 해결 방안들의 비교를 통해 이해합니다.
해시 충돌 원인과 방안은 알고 있지만, 더 나아가 한가지 방법이 무조건
bestPractice
가 아니므로 상황에 맞는 방식을 분별할 수 있도록 비교를 해야합니다.체이닝 방식과 오픈 어드레싱 방식이 어떤 상황 (예: 많은 량의 데이터의 동시 삽입으로 해시 충돌이 발생 하는 경우)에 적합한지 비교 할 줄 알아야합니다. 단순히 해결 방안이 아니라 장/단점까지 알아야합니다.
상속과 조합 ★★★
- 상속과 조합에 대한 비교와 상황에 따라 어떤 방식을 선택할 수 있는지 알아야합니다.
- 7월 초에 학습
단순히 다른 사람들이 조합이 좋다고 사용하는 것보다 왜 조합을 우선시 하는지 알아야하는게 중요합니다.
추상 클래스와 인터페이스
- 인터페이스를 추상 클래스보다 선호하는 이유
인터페이스를 구현하는 방식과 추상 클래스를 상속하는 방식의 큰 차이점은 인터페이스 구현 방식이 불변 객체의 장점을 더 많이 가져갈 수 있습니다.
불변 객체는 시스템이 커질 수록 장점이 더 많은 방식입니다. 유지보수나 유연성을 고려했을 때에는 큰 이펙트를 가져옵니다.
그래서 웬만하면 인터페이스를 사용하는 것을 권장합니다.
자바 8
스트림
- 스트림에 대해서 학습하기
- Lazy Evaluation
- Pipelining
- Parallel Processing
주의 사항도 별도로 학습합니다.
- 스트림은 재사용 반찬을 사용하지 않습니다
- 병렬 스트림시 공유 자원을 변경하는 연산
- 무한 스트림일 경우 제한 조건(
limit
) 와 종료조건(fin
) 명시- 디버깅의 어려움
- 코드 가독성 저하
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
title
과 body
의 작성 규칙을 학습합니다.
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 테이블 설계
댓글남기기