물론, 단순 코딩을 해서 개발자로 취업은 가능하나 전체적인 개발 구조를 모른체로 취직을 한다면 그건 지식을 기반으로 무언가 개발하는 개발자가 아니라 단순 코더라는 노가다꾼이라 볼 수 밖에 없다. 그럼 개발을 위한 전체적인 공부 노하우를 공유해 보겠다.
1. 기본적인 영어 소양(필자 기준 토익 600~700수준 이상은 수월하다고 봄)
~ 이유 :
영어 위주의 자료와 용어가 많기에 꼭 필요한 요소
2. 듀얼 모니터 활용
~ 이유 :
듀얼 모니터는 훨씬 빠르게 코드 작업이 가능하며 몇몇 실무자는 듀얼 모니터를 사용 안하는 실무자의 태도를 안좋게 봄
3. 획일화 되고 전략적인 코딩
~ 이유 :
획일화되고 전략적인 코드 표기법 사용은 더 직관적으로 이해하기가 쉬우며 나중에 업데이트시에도 훨씬 편하게 작업이 가능, 협업시에 다른 팀원들 역시 획일화된 코드를 보고 빠르게 코드 수정 작업이 가능
필수적으로 읽어야할 링크:
https://velog.io/@jp-share/Coding-표기법-카멜케이스-파스칼케이스-스네이크케이스
https://velog.io/@kwontae1313/클린코드란-무엇인가
4. 노션+노트+GPT또는 부가적인 익스텐션 툴 활용
~ 이유 :
구글 킵 같은 클라우드 포스트잇 노트는 기본 코드와 필수 세팅 지식들을 저장하는데 편리, 참고로 기본적인 세팅의 종류가 많아서 다 기억하질 못하니 항상 구글 킵에 저장하고 사용 하도록 한다.
--구글킵 메모 다운로드 링크: https://m.blog.naver.com/iamjunsikk/222676689691
노션은 개발자들의 필수 정리 노트로 수많은 개념들, 코드들, 메뉴얼 등등을 기록, 더하여 여기에 재사용 하기 쉽도록 정리하는 것 역시 필수적인 소양(코드 재사용은 빈번히 일어남)
노션 코드 가이드 템플릿 링크:
https://www.notion.so/templates/coding-guidelines
노션 인기 가이드 템플릿 링크:
https://www.notion.so/templates/category/documentation
!!필기활용!!
- 기본 지식이 익숙하기 전까지는 구글킵에 링크를 스크랩
- 어느정도 익혀도 정리가 필요하면 노션으로 재정리
- 필자는 주로 테이블 셀 형태로 재정리해서 구성 (개념 정의 - 예제 및 설명 - 추가 자료) 이렇게 3가지 칼럼 형태로 구성하여 정리
GPT는 질문만 구체적으로 한다면 해결 방법이 될 만한 코드들을 생성, 더하여 문제 원인과 이유를 잘 설명 --gpt 다운로드 링크: https://chatgpt.en.softonic.com/
vscode 익스텐션은 보조적인 코딩 툴들을 여러가지 제공
--vscode용 편리한 익스텐션 다운로드 링크
Name: Base16 Terminal
https://marketplace.visualstudio.com/items?itemName=piyush-bhatt.base16-terminal
Name: GitLens — Git supercharged(깃허브 변경 기록 살펴보기 가능) 협업용
https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens
Name: Git Graph - git 작업 추적
https://marketplace.visualstudio.com/items?itemName=mhutchie.git-graph
Regex previewer regex 미리보기 가능
https://marketplace.visualstudio.com/items?itemName=chrmarti.regex
vs-color-picker 칼러 선정 가능 html이나 css 에서
https://marketplace.visualstudio.com/items?itemName=lihui.vs-color-picker
graphql for vscode 펑션으로 뛰어넘기라던지 기타 하이라이트 오토로 내용 보임
https://marketplace.visualstudio.com/items?itemName=kumar-harsh.graphql-for-vscode
indent rainbow 뛰어쓰기 색깔표시됨
https://marketplace.visualstudio.com/items?itemName=oderwat.indent-rainbow
Name: open in browser - 브라우저 우클릭으로 직접 여는거 가능
https://marketplace.visualstudio.com/items?itemName=techer.open-in-browser
Prettier - Code 포맷 자동 정렬 ctrl+s 정리 등등
https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode
5. 노트와 코드등 필요 정보들은 미래에 재사용을 위해 보관
~ 이유 :
코드 재사용은 빈번히 일어나며 추후에 다른 팀원들에게 알려줘야할 경우가 생김
6. 코딩은 실전처럼~ 모든 환경을 구축하고 연습
~ 이유 :
실전처럼 개발 통합 프로그램 안에서 코딩을 해야하고 익숙치 않다면 여러번 연습을 하는 것이 좋다. 되새김질 해야 다음에 똑같은 상황을 맞았을때 대처하기 편하다.
~ 이유 :
개발 분야에 따른 필요한 언어와 그 언어들이 가지는 각 장점이 다르다.
~ 첨언 :
개발 언어를 다양하게 다루기 보다 소수의 언어만 선택해서 깊게 파는것을 추천
~ 산업에서 주로 사용하는 언어 시스템 :
스타일 시트 구현 언어, 시스템 구현을 위한 언어, db를 다루기위한 언어
~ 주요 산업에서 사용되는 언어의 특징 :
단순 플랫폼이나 서비스 구현이 빠른 언어(node.js), 대용량 데이터를 쉽게 처리하는 언어(Java/Kotlin), 데이터 분석에 특화된 언어(Python), 연구나 금융 연산이 빠른 언어(C관련 언어), 보안 또는 블록체인 관련 언어(C++, Python, Rust), 등등
~ 언어 선택 방법 :
가려는 분야가 정해졌고 그 분야에서 요구하는 언어를 집중하여 공부하는 것을 추천
가려는 분야가 안정해져 있다면 구글등으로 산업 분야에 개발 환경을 리서치 후 결정
기초 익히기
기초인 for, while, if, object, list, float, character, 연산자(+,-,*,%,!=,==등등)은 필수적으로 익힌후에 개발 통합 프로그램을 통하여 익히는 것을 추천
아래링크는 필수용어. 이정도는 이해하고 알고 있어야하니 이 부분은 필독!!
https://sticktoit.tistory.com/137
아래링크는 언어별로 연습할 수 있는 시뮬레이션이 있으니 이걸로 연습
https://www.geeksforgeeks.org/
언어에 대하여 어느정도 익숙해 졌다면 각 언어에 맞게 개발된 프레임 워크를 선택하여야 한다. 따라서 프레임워크에 따른 프로젝트를 새로 만들어 개발하는 것을 추천한다.
프레임워크와 가상환경
개발 통합 프로그램(IDE), homebrew(mac), WSL(window), zshell, 언어 설치, git, db관련 툴등을 설치하고 적용
우선 필수 프로그램을 다 깔았다면 가상환경 설정을 해야하고 이에 다루는 방법도 익숙해져야한다.
!!!가상환경이 필요한 이유는 서버 구축과 협업에서의 장애를 예방하기 위하여 필수적으로 알아야하는 사항이다.
node js 환경 설정
https://charliecharlie.tistory.com/235
spring boot java 환경 설정
https://velog.io/@jaeygun/Spring-Boot-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8-%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%84%B1
프레임워크를 사용하면 설치해야할 버젼과 설정해야할 부분이 많다. 이부분은 프로젝트의 방향성에 따라 또 달라질 수 있기에 구글에서 직접 찾아보길 권한다.
깃허브
기본적인 코드라도 정상 작동되고 완성된 코드를 만들었다면 깃허브에 올리는 것을 추천
깃허브의 잔디라고 불리우는 깃허브 코드 업로드 활동창이다. 이 활동을 보고 회사 면접에서 가산점을 주는 경우도 많다.
git ignore는 git hub에 코드를 올리기전에 사용하는 부가적인 툴
주로 프레임워크를 같이 활용하여 깃허브 활동할때 git ignore 활용
아래링크는 git ignore 사용법
https://velog.io/@psk84/.gitignore-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0
이외에도 Docker나 dbeaver, sqlwork bench, mongodb atlas 등등 여러가지 숙지해야될 툴들이 존재
개발하는 분야의 전체적인 구조와 로드맵을 알고 있어야 다음 필요한 지식이 무엇인지 스스로 공부하고 배울 수 있다.
~ 이유 :
같은 분야라도 너무 다양하게 많이 나눠지기 때문에 자신이 어떤쪽으로 집중해서 개발할지를 알고 가야한다. 추가로 구조를 어느정도 알게되면 내가 가려는 분야에 필요한 추가 지식과 지혜가 무엇인지도 자연스럽게 깨닫게 된다.
~ 첨언 :
집중할 개발 분야의 구조를 이해해야지 습득해야할 전문 지식과 기능들을 이해하고 적용할 수 있다.
참고로 애매하게 두분야다 섭렵하는 풀스택 같은건 비추천, 얇게 많은 것을 할줄 아는 것 보다 깊게 한 분야를 전문성있게 다루는 능력을 갖추는게 훨씬 뛰어난 인재이다. 이걸 반증하는게 풀스택 엔지니어를 구하는 회사치고 좋은 회사를 많이 못봤다. 주로 내실이 단단한 회사들은 분야를 나눠서 엔지니어를 구한다.
예: 프론트 엔드 개발 로드맵
https://velog.io/@hannaa/2023%EB%85%84-%EA%B0%9C%EB%B0%9C-%EA%B3%B5%EB%B6%80-%EB%A1%9C%EB%93%9C%EB%A7%B5-feat.-%EC%A0%9C%EB%A1%9C%EC%B4%88%EB%8B%98
https://yozm.wishket.com/magazine/detail/2302/
예: 백엔드 개발 로드맵
https://okky.kr/articles/1410489
https://www.developerfastlane.com/blog/backend-developer-roadmap
예: 블록체인 개발 로드맵
https://brunch.co.kr/@sparkplus/434
번역하는 친구가 가장 번역하기 까다로운게 IT계열이라고 했다. 이처럼 IT 계열은 전문 용어로 3 ~4단계의 구조를 한단어로 표현하는 지식 산업이라서 다양한 용어가 즐비한다.
~ 이유 :
이유트렌드에 매우 민감한 지식 산업이다 보니 기술의 방향성들이 자주 변한다. 따라서 다양한 지식을 섭렵하고 공부하며 트렌드를 파악해가며 공부해야 가치가 떨어지지 않는 개발자가 된다.
~ 첨언 :
면접, 자소서, 개발 이력서를 쓸때에 약간의 전문 용어를 쓴다면 훨씬 경쟁력있는 인재로 보여지기가 쉽다.
추천 저널 자료 --벨로그, 티스토리 등의 블로그는 제외하고 추천
미디엄 - 샘플 실습들이 많이 등장 주로 영어 저널이 많음
https://faun.pub/kotlin-with-springboot-2-0-f3c8ef02a830
커리어리 - 저널 + 개발자들의 QnA 커뮤니티
https://careerly.co.kr/home
요즘IT - 개발 산업 트렌드에 관한 저널
https://yozm.wishket.com/magazine/
긱뉴스 - 깃허브에서 인기있는 글들이 여기에 수록
https://news.hada.io/
위키독스 - 도움되는 개발 서적 요약 본들이 많이 존재
https://wikidocs.net/
회사 기술 블로그 모음
https://brunch.co.kr/@sicle-official/35
필요 개발 서적이 있다면?
구글에 "책이름 깃허브" 또는 "책이름 위키독스"로 찾으면 꽤 많은 요약 자료가 뜸
Top 1 :
Udemy (영어 자료가 많지만 샘플 코드 제공이 잘 되어있고 트렌디한 자료들이 많음)
Top 2 :
인프런 (잘 구성된 개발 강의가 많음, 강의 페이스가 다소 느림)
Top 3 :
패스트 캠퍼스 (스킬 로드맵은 굉장히 길고 잘 짜여져 있지만 다소 부실한 부분이 존재)
가치있는 필수 CS지식
https://velog.io/@kwontae1313/series/%EC%A7%80%EC%8B%9D%EC%A0%95%EB%A6%AC
개발 통합 프로그램 단축키
window+v - 윈도우에서 다중 복사 붙여넣기를 위한 클립보드 - 약10개의 복사 기록이 존재
vscode 단축키 모음
-필자는 주로 ctrl+shift+L, ctrl+h, ctrl+f, 메소드에 ctrl+click을 자주 사용
https://inpa.tistory.com/entry/VS-Code-%E2%8F%B1%EF%B8%8F-%EC%9C%A0%EC%9A%A9%ED%95%9C-%EB%8B%A8%EC%B6%95%ED%82%A4-%EC%A0%95%EB%A6%AC
IntelliJ 단축키 모음
https://velog.io/@minji104/IntelliJ-%EB%8B%A8%EC%B6%95%ED%82%A4-%EB%AA%A8%EC%9D%8C
가치 있다고 느끼는 자격증
SQLD
Association level의 Docker 관련 자격증
Association level의 AWS 관련 자격증
추가 지식관련 자료
디자인 패턴 - 오브젝트와 인터페이스 활용에 관한 코딩 기법
https://m.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS8616098823
코딩 아키텍쳐 설계 개념
https://devkingdom.tistory.com/341?category=838914
필수!!! 아키텍쳐와 리팩토링이 중요한 이유
https://www.youtube.com/watch?v=mNPpfB8JSIU
인기있는 백엔드 면접 관련 질문
Spring 스프링 IoC와 DI에 대해서 설명하세요.
Spring "DI 하는 3가지 방법에 대해서 비교해보세요. 그리고 그 중 스프링에서
권장하는 방법은 무엇인가요?"
Spring 스프링 부트가 아니라 스프링 프레임워크를 다뤄본 적이 있나요?
Spring JPA를 다뤄본적 있나요?
Spring 사용해본 ORM이 무엇인지와, ORM의 장단점에 대해서 설명해주세요.
Spring "JPA의 영속성 컨텍스트가 가지는 특성과, 이로 인해 발생하는 이슈에
대해 아는 것을 말씀해주세요."
Spring Kafka와 RabbitMQ 를 비교하여 설명해 주세요.
Spring RabbitMQ의 동작 원리에 대해 설명해 주세요.
Spring Redisson Lock의 원리에 대해 설명해 주세요.
Spring JPA에서 dao, dto를 사용해야하는 이유는 무엇인지 설명해보세요.
Spring 스프링 시큐리티의 원리와 동작 방식 설명해주세요.
Spring 스프링 빈이라는 게 어떤 역할을 하는지 설명해주세요.
Spring 스프링 로컬 캐시쓰면 되는데 redis를 쓰는 이유는 무엇일까요?
Spring Spring MVC 패턴이 요청을 주고 받을 때 어떤 흐름인지 설명해보세요.
Spring @Component랑 @Bean 차이 에 대해서 설명해주세요.
Spring Spring의 작동하는 흐름에 대해 설명해주세요
Spring 오버로딩과 오버라이딩 차이가 무엇인가요?
Spring Spring에서 주입을 하는 이유가 무엇인가요?
Spring MVC 패턴에서 모델1과 모델2의 차이가 무엇인가요?
Spring 테스트 어노테이션을 사용하면 좋은 점을 설명해보세요.
Spring 전역 예외처리할 때 어노테이션을 사용하는 이유를 설명해보세요.
Spring 전역 예외처리를 하는 이유는 무엇인가요?
Spring 스프링 배치 스케줄러 설정 단위 어떻게 했는지 설명해주세요.
Spring Entity 클래스와 DTO 클래스를 분리하는 이유에 대해서 설명해주세요.
Spring "Spring에서 Bean을 주입 받는 방식 중 생성자 주입 방식을 권고하는데
그 이유는 무엇인가요?"
Spring jpa와 mybatis의 장단점을 비교해주세요.
Spring Transactional 옵션에 대해서 설명해보시겠어요?
Spring GET 요청과 POST 요청의 차이는 무엇인가요?
Spring aop 에 대해서 설명해주세요.
Spring 캐싱을 통해 어떻게 동시성제어/성능을 개선했는지 설명해주세요.
Spring 기본게시판 CRUD 몇일 주면 작업할 수 있나요?
Spring "lombok의 @RequiredArgsContructor에서 필드 주입시 final을
빼면 어떤 발생하나요?"
Spring Autowired를 사용한것과의 차이가 있나요?
Spring JPAN +1 발생 원인과 해결방법에 대해 말씀해주세요.
Spring "crud에서 파라미터나 데이터 전송시 어떻게 주고 받았는지
설명해주세요."
Spring crud할 시, 페이지 구현은 어떤 식으로 진행되었는지 설명해주세요.
Spring Put과 Patch의 차이점에 대해 설명해 주세요.
Spring 레디스에 저장한 건 리스펀스인가요, 리퀘스트인가요?
Spring "레디스가 죽었다고 가정해보자. 그러고 나서 다시 재부팅을 했는데,
그 과정에 100개의 요청이 도달했다. 이거는 어떻게 처리할 건가요?"
Spring Spring에서 왜 싱글톤이 기본값인지 알고 계신가요?
Spring CORS 에러에 대해서 설명해주세요.
Spring CORS 에러가 났을 때 어떻게 해결하셨는지 설명해주세요.
Spring "RESPONSE.MESSAGE를 클라이언트에서 그대로 보여주는거에
대해서 어떻게 생각하세요?"
Spring "Spring MVC와 Spring Webflux에 대한 내용의 차이에 대해
설명해주세요."
Spring "Webflux의 경우에 서버 리소스를 보다 효율적으로 사용할 수 있는데,
그렇다면 모든 개발에서 사용하면 되는 것 아닐까요?"
Java 필터에서는 빈 접근이 가능할까요?
Java Collection에 대해 설명해 주세요.
Java Garbage Collection 특징에 대해 설명해 주세요.
Java 객체지향에 대해 설명해보세요.
Java "Transactional 이 class 단에 붙어있다가 method로 위치 변경을 한
이유를 설명해주세요."
Java Read와 Write Service 분리한 이유에 대해서 설명해주세요.
Java GC 내부에서 어떤 변화가 발생하는지 설명해주세요.
Java 버전별로 다른 GC가 있는 걸로 아는데 어떤 걸 모니터링 하셨나요?
Java 객체지향을 중요하게 생각하시나요?
Java Stop the world 상황이 자주 발생하지 않도록 하려면 어떻게 설계해야 하나요?
Java java boxing unboxing 에 대해서 얘기해주세요.
Java jvm이 무엇인가요?
Java 자바에서 쓰레드가 무엇인가요?
Java Java에서 스택처럼 메모리가 쌓이고 쓰이는 과정에 대해서 아시는지?
Java 객체지향의 추상화 이유를 말씀해주세요.
Java 객체지향 5대 원칙에 대해 설명해주세요.
Java 일급 객체에 대해 설명해주세요.
Java 상수에 Final을 사용하는 이유는 무엇인가요?
Java Class에서 final을 사용한다면 이것은 어떤 의미인가요?
Java 자바의 컴파일 구조에 대해 설명해주세요.
Java 코틀린과 자바의 차이에 대해서 설명해주세요.
Java ORM이 왜 등장하게 되었는지 알고 계신가요?
Java Interface에 대해서 설명해주세요.
Java Java에서 동시성을 지원하는 것에는 어떤것들이 있는지 얘기해주세요.
Java "변수, 메서드, 클래스에 final 키워드가 붙을 경우, 각각 의미하는 것이
달라지게 되는데 각각 어떤 의미로 사용되는지 설명해주세요."
Java 웹소켓에 대한 설명해주세요.
Java 웹소켓 사용 시, 사용자 식별 방법에 대해서 설명해주세요.
Java "자바 버전은 몇 버전을 사용했나요? 이전 버전과 해당 버전의 차이점
등을 인지하고 있나요?"
Java Interface와 abstract의 차이점에 대해서 설명해주세요.
Java filter와 interceptor의 차이점에 대해서 설명해주세요.
Java 자바 소스는 어떻게 배포했나요?
Java "자바, 자바스크립트의 차이점 및 언어별 특징에 대해서
설명해주세요."
Java 객체 지향의 상속과 관련된 내용을 설명해주세요.
Java ORM 사용해서 개발해본 경험이 있나요?
Java API 개발 경험이 있다면 설명해주세요.
Java 객체지향언어와 절차지향언어의 차이점에 대해 말해주세요
Java Python과 JAVA의 차이점을 설명해 주세요.
Java 웹소켓과 SSE 차이를 설명해주세요
Java oauth2 어려움 겪었다고 했는데, 어떤 이유에서 겪은 어려움인가요?
Java access token과 refreshtoken 차이점을 설명해주세요.
Java "한 서버에서 oauth를 도입할 경우 token 사용에 문제가 없는데,
여러 서버로 나뉠 경우 해결해본 경험이 있나요? 없다면 이와 같은
상황을 가정하고 어떻게 할지 말씀해주세요."
Java try-catch-finally가 동작하는 순서에 대해서 설명해주세요.
Java JDK, JRE, JVM이 무엇인지 설명해주세요
Java WAS는 무엇을 쓰는지 설명해주세요.
Java int 와 Integer의 차이점은 무엇인가?
Java call by value, call by reference에 대해 설명해주세요.
Java 객체지향에서 다형성이란 무엇일까요?
Java 객체 지향에서 다형성의 장점은 무엇이 있을까요?
Java Java에서 어노테이션이란 무엇일까요?
Java 어노테이션은 어떻게 동작할까요?
Java Java에서 메인 메서드는 왜 Static으로 되어 있을까요?
Java java 8 기준으로 gc 동작 과정을 설명해 주세요.
Java Java와 Python 에 대해서 언어를 비교해주세요.
Java OAUTH2 구조 및 동작 방식에 대해서 설명해주세요.
Java 객체지향의 인터페이스와 관련된 내용에 대해 설명해주세요.