◎ 이제라도 SQL 공부
○ 2023
1. Java 백엔드 개발을 위한 8월 학습 계획 (SQL + HTTP)
- 이것이 MySQL이다 (우재남ㆍ2020), Real MySQL 8.0 (백은빈ㆍ2021)
- HTTP 완벽 가이드 (데이빗 고울리ㆍ2014)
2. Java 백엔드 개발자로 취업하고 싶은 사람이라면 '꼭' 알아야 할 YouTube 채널 소개
- <쉬운코드> 데이터베이스 입문
- 2진 트리 → B-Tree
- Web - Was - DB 관계에서 DB에서 병목이 일어나면 어려움이 생긴다.
- 마스터 슬레이브, 레플리카, 파티셔닝, 샤딩
- 메모리 수준 DB, 레디스
- RAM Drive
◎ 주관적 답변 시즌2
○ 2025
3. AI시대, 코딩을 배워야 하나? 그리고 기존 개발자는 어떻게 해야 할까?
- CS 기초는 중요하다. 지식수준과 이해도가 높으면 질문 수준이 높아지고 AI를 활용하여 질 좋은 답을 얻는다.
- AI는 훌륭한 학습도구이다. 많이 사용해보아야 한다. 유료버전를 사용한다. AI가 효율적이라는 것을 경험해야 한다.
- AI 모델별 특징을 이해해야 한다.
- 2~3년 내 AI를 잘 사용하는 개발자와 그렇지 않은 개발자로 구분된다.
- CS에 대한 더 높은 이해도를 요구한다. 큰 틀의 흐름과 구조를 이해할 수 있는 능력이 필요하다.
- AI는 불평하지 않는 동료이자 너그러운 강사이다.
- GPT에게 예제를 학습시켜 문제를 내도록 한다.
- 주요 이론에 대해 검증을 한다. 블로그 글은 신뢰하지 않는다.
- AI의 한계. 책임의 주체가 되지 못한다.
○ 2024
3. 30대 중반 물경력자의 이직 고민에 대한 의견
- 30대 중반, 비전공자, 국비학원 출신, 웹 개발자, 유지보수 전문 소기업
- 4년 전 Java + Spring 수료 후 취업하였다면 사상누각이다.
- 기술력은 없지만 영업력이 있는 회사는 비용 최소화에 중점을 둔다. 최소 비용 최대 효과의 인력을 찾는다. 인력의 커리어에는 관심이 없고, 동반자가 아닌 소모품이 필요할 뿐이다. 신입을 뽑고 내보낼 수도 있다.
- 경영진은 프런트와 백을 구분하지 않고 웹 지식 여부를 묻는다.
- 대체로 유지보수 업무이고, 5개월 React native 기반 iOS, 안드로이드 앱 개발이 유일한 개발 경험이다. 개발경력으로 판단컨대 백엔드로 이직은 쉽지 않다. 차라리 프런트를 권한다. 이직하더라도 지금과 크게 다르지 않을 수 있다.
- 실력과 경험 그리고 학습이 없는 상황이니 신입과 다를 바 없다. 이직 전에 학습 계획을 세워야 한다.
- 최근 경력을 속이고 신입으로 들어오는 경우가 있다.
- 개발에 재미를 느껴도 부족한 상황에 월급만 받으려는 태도는 부적절한다.
- 물경력이라도 경력이라고 한다면 늦은 나이가 아니다. 포장을 잘 하면 충분하다.
- 유지보수가 아닌 SI업체를 권한다. 기계적 개발 실력을 키울 수 있다. 대신 유지보수 목적의 파견이 많다면 피하는 것이 좋다.
4. 실무는 원래 다 이런 가요? 제가 철이 없는 것인가요?
- N년차 풀스택 웹 개발자, 30대 중반, 전공자, Java, 각종 자격증, Springboot, JPA, React, MariaDB, MS-SQL, Git
- 웹 서비스를 구현하지만 CS 부족을 느낀다.
- 회사는 온 프레미스 서버를 사용한다. 물리적 망분리 환경이다. 인터넷이 연결된 외부 네트워크와 차단된 내부 네트워크로 나뉜다. 복사 붙여넣기가 불가능하다. 만일 폐쇄망 개발이라면 최악이다. 개발DB과 운영DB가 분리되어 있다.
- 보안성과 편의성/성능은 반비례한다.
- 내부/외부 고객을 위한 웹 서비스 제작 및 유지보수. 팀내 모든 개발자가 풀스택이다.
- 유명하고 장기간 사용된 서비스 중 레거시 코드를 만나면 멘붕이 온다.
- 현재 프로젝트는 MS-SQL, Srpingboot, JSP 기반, MVC 구조. 비즈니스 로직의 상당수가 DB 프로시저에 존재한다. DB에 부하가 집중된다. 권한 문제로 테이블에 직접 쿼리를 수행할 수 없다. 보안문제의 결과로 추정된다.
- 데이터베이스에 대한 의존도를 낮추기 위해 로직을 분리해야 하지만 절대 안될 것이다. 정상 운영중인 서비스를 개선하고자 불편한 리스크를 감수할 경영진은 없다.
- 실무가 최신 기술과 서비스 구조와는 거리가 있다. ORM 기술을 이용한 개발과 비교하면 생산성 차이가 크다.
- 절이 싫으면 중이 떠나라. 전면 재개발이 아닌 이상 불가능하다. 전면 재개발을 하더라도 구형 시스템의 레거시 코드 중 어느 누구도 이해할 수 없는 내용이 분명히 있다. 고생길이다. 전설이 되고자 한다면 존중한다.
- 자주 있는 일이다.
◎ 주관적 답변 시즌1
○ 2022
1. MFC를 공부해야 하나?
- MFC는 구형 기술이자 완성된 기술이다. MFC는 해보되 깊이 있게 하지 않기를 바란다. 윈도우 PC 전용 S/W를 개발할 때 유용하다.
- 안드로이드 앱의 구조가 MFC와 Web Front를 결합한 수준과 유사하다.
- 주변 사람의 말에 신경쓰지 마라.
- MFC 구조를 이해하고 나면 다른 것들이 보이기 시작한다. GUI를 보면 MFC에서 포함된 내용이 그대로 있다.
2. 일부 국비지원 교육 IT강사에 대해서
- 강사는 반복적으로 강의를 하다보면 강의 중 졸기가 가능하다.
- 체육과 비전공자가 수업을 듣고 강의자료를 받아서 1달 뒤 강사로 활동하는 경우가 있다. 비슷한 경우를 여러 차례 경험했다. 앵무새처럼 읊어도 강의력이나 전달력이 좋으면 배우는 사람은 모를 수 있다. 다만 문제해결력은 기대하기 어렵다. 시간당 5~7만원. 강사 돈 잘 번다.
3. 국비지원 IT교육시스템 구조
- IT 개발자 인력이 부족하여 나라에서 돈을 지원하여 양성한다. 필요한 인력을 선정하고 훈련기관에 교육을 맡긴다. 훈련기관은 수강생을 모집하고 강사를 찾는다. 교육의 질이 천차만별이다. 심지어 강사가 중간에 변경되는 경우가 있다.
- 훈련기관은 나라에서 돈을 받아 강사에게 일부 지급하고 돈을 번다. 국가는 훈련기관을 감시하고, 최종적으로 취업율로 평가한다.
- 비전공자가 6개월 교육으로 IT 전문가로 변신하는 시스템이다. 많은 경우 Java를 가르쳐 SI 인력을 양성한다. C/C++에 비해 Web 기술은 상대적으로 실수를 하더라도 작동하므로 배우기에 적합하다.
4. 국비지원 IT교육 선택 시 고려사항 하나!
- 핵심은 누구에게 배우느냐에 달려있다. 운에 맡겨야 한다. 강사를 먼저 확인해야 한다. 훈련기관은 중요치 않다.
- 인강으로도 양질의 교육이 가능하다.
- 취업에 목숨 걸지 말고, 무료 수업에 현혹되지 않아야 한다.
- 같은 내용이라도 강사에 따라 학습효과가 다르다.
5. 제 강의를 활용하시는 분들께
- 전달력이 더 좋다고 판단하여 판서를 선호한다.
- 상업적으로 활용한다면 법적 대응한다. 나머지는 신경쓰지 않는다.
6. 프알못의 적정 학습기간
- 적정 학습 기간은 언어 기본 문법과 자료구조를 배우는데 최소 6개월이다.
- Java 쉽지 않다.
- 최소 6개월 준비하고 6개월 프로젝트로 구성된 총 1년 필요하다.
7. C/C++ 프로그래밍 입문자에게...
- 컴퓨터 구조를 배우고 자료구조를 배운다.
- 알고리즘보다 자료구조가 더 우선한다.
- 주소록(Database) 만들기
연결리스트(책 없이 2시간 내 구현) → 2진 트리 → AVL → B-Tree → 조건 검색 (2차 메모리 Index) → SQL
- 이해가 안되는 것은 저마다의 이유가 있다.
8. 취업목적 프알못을 위해
- 어렵게 배워라. 쉽게 공부한 사람은 기술이 변했을 때 같은 점보다 다른 점만 인식한다.
- 취업만을 목표로 한다면 잘못된 길이다.
9. 전문 프로그래머가 되려면 이것을 잘 해야 합니다!
- 프로그래머가 되려면 논리적 글쓰기 능력이 필요하다.
10. 코리아앳홈 프로젝트를 아시나요?
- 2002년 개인 PC와 인터넷의 결합으로 슈퍼컴퓨터를 만드려는 시도이다. 결국 실패했다.
11. 독하게 시작하는 C... 추가인쇄 결정
12. C++ 최신 표준 꼭 배워야 하나요?
- 자신과 맞는 책을 직접 서점에 가서 확인하고 선택해야 한다.
- C++ 최신 문법은 절대로 하지 마라. C++11부터 '모던 C++'이라 한다. 신형 언어의 장점을 구형 언어에 덧붙였다.
- C++98만 배우기도 벅차다. 처음에는 C++ 기본 문법과 객체지향 개념을 동시에 이해하는데 어려움이 있다. C++ 언어로 대단히 절차지향적인 프로그래밍을 하기가 쉽다.
- 함수객체가 왜 필요한지 모르는 상태에서 람다식을 이야기하면 와닿지 않는다.
- C언어 → 연습 → 자료구조(선형 연결리스트, 비선형 B트리) → 시스템 프로그래밍 → C++(~11) → STL → 모던 C++(11~)
- 2시간 안에 홀로 단일 연결리스트로 주소록을 만들 수 있어야 한다. 이 수준까지 최소 3 ~ 6개월 소요된다.
- 멀티스레딩, 동시성, 동기화 등으로 고생해보면 왜 이러한 문법이 등장했는지 알 수 있다. 특히 시스템 프로그래밍을 학습할 때 얻는 것들이 있다.
13. 20분 만에 전공자처럼 도커, 가상화 이해하기!
- Virtual Memory는 하드디스크와 메모리를 합쳐서 하나의 메모리로 추상화한다. 프로세스마다 독립적인 공간이다.
- S/W NIC → Virtual NIC Driver → NAT(공유기 역할) → H/W NIC
- 도커는 Guest OS들의 H/W와 Kernel 등을 하나로 묶은 것과 같이 기능한다.
- 애플리케이션을 도커 환경에 맞추어 컨테이너를 제작해서 배포한다. 쿠버네티스는 이 과정에서 관리하는 역할을 한다.
14. 중소기업 대표가 생각하는 개발자 연봉 (저의 뇌피셜)
- 개발자의 회사에 대한 매출기여도는 연봉의 최소 3배 수준이다. 그렇지 않으면 회사가 살아남기 어렵다. 예를 들어 퇴직적립금 10%와 기타 복지비를 고려할 때, 연봉 3,000만원 기준으로 1억 프로젝트를 혼자서 해내야 한다.
- 나라장터에서 1억원 수준의 프로젝트 사업을 찾아보면 혼자할 수 있는 일이 아니다.
- PM 1, 기획자 1, 개발자 3의 조합이라면 최소 4억 수준의 사업이어야 한다.
- 2022년 기업과 계약 시 Man Month 단가 기준으로 응용SW 개발자 월평균 630만원, 연봉 8천 수준이다. 모든 기업을 고려한 수치이다. 회사를 거친 개인의 실수령 평균은 더 낮다. 중소기업은 월평균 4~500만원 수준이다. 연봉 5천도 어려운 일이다. 개발자보다 기획자나 PM이 더 높다.
- 크몽과 같은 플랫폼 덕분에 회사에 소속되지 않는 프리랜서가 늘어났다. 프리랜서 실력이 출중하여 신입사원을 덜 고용한다.
- 3년차는 신입과 달리 실수를 하지 않는다.
15. 우리나라 국산 OS가 없는 이유는 무엇인가요?
- H/W와 Kernel을 합쳐 플랫폼이라 한다.
- H/W에 비해 OS에 대한 국가 지원이나 회사의 투자가 거의 없다.
- 사례가 없지는 않다. 바다, K-DOS. 모두 실패 했다.
- 현재 시스템에서 개발한다면 SI 프로젝트화 되어... 슬픈 현실이다.
- K-OS를 만들기보다는 Linux를 변형, 튜닝해서 개발하는 것이 낫다.
16. 대학 졸업 전에 CCNA 따려고 하는데 괜찮을까요?
- Cisco 주로 네트워크에 특화된 하드웨어를 만드는데, 이를 위해 자체 OS를 적용한다. CCNA는 이 운영체제의 명령어의 사용법을 검증한다. 네트워크에 대한 이해도가 필요하다.
- 정보처리기사는 반드시 취득해야 한다. 있어서 득이 되지는 않아도 없으면 손해볼 일이 생긴다. 창업하여 국가기관에 S/W를 팔 때 법으로 정해진 자격이 필요하다. 관련 서류를 제출할 때 정보처리기사ㆍ산업기사 취득 확인서를 요구한다. 직원이 가지고 있으면 가능할 수도 있다.
17. 프로그래밍 언어 자료형이 만들어지는 방법이 궁금합니다.
- 자료형은 언어별로 해석하는 방법이 다르다.
- C언어의 관점에서 자료형은 일정 길이의 메모리에 저장된 정보를 해석하는 방법 또는 규칙이다.
- 운영체제 또는 커널 수준은 C/C++의 관점이다. CPU는 Machine Code이고 Kernel은 Native Code이다. Native Code는 CPU에 직접적으로 의존적이다. Software CPU(JVM)에 의존적이라면 Managed Code이다.
- C언어는 정수형과 실수형, 두 가지밖에 없다.
- ASCII는 7bit + 1 = 8bit로 256가지이다. 가능한 숫자와 특정 문자를 맵핑한다. 약속으로 정해진 것이다.
18. 비전공자가 전공자를 따라가려면 무엇이 더 필요한가요?
- 코딩 경험 → 선형ㆍ비선형 자료구조 → 컴퓨터구조 → 운영체제(가상메모리)
- 비전공자가 취업하는 수단은 국비교육 또는 부트캠프이다.
- 인프런 강의로 전공자와 대화가 가능하다. 다만 인강은 집중하기 어렵다. 독학은 질문으로 궁금증을 해결하지 어렵다.
- C/C++, UML, Java 등을 배우고 Web Front 개발하는 사람은 Web Front만 개발한 사람과 수준이 다르다.
- 자료구조, 컴퓨터구조, 운영체제의 기초가 튼튼하다면 신기술이 나와도 놀랍지 않다.
19. IT보안 공부를 위해 알아야 할 언어와 기술은 무엇이 있나요?
- 보안 분야는 파이썬, 정규표현식, Shell Script(OS별)가 필수이다.
- 침해사고 또는 악성코드 분석을 목표로 리버싱을 하고자 한다면 어셈블리어를 배워야 한다.
- 보안은 집요함, 끈기, 꼼꼼함이 가장 중요하다. 그리고 윤리의식이 요구되는데, 불리한 상황에서 악용할 유혹을 이겨내야 한다.
- 평생 공부는 불가피하다. '온갖 기술'에 대한 보안을 감당해야 한다. 어렵지만 흥미로운 분야이다.
20. Docker? 그 전에 Process
- Program을 실행했을 때 그 Instance가 Process 또는 개념적으로 Task이다.
- PID는 Process ID(정수)이다. 프로세스에는 고유한 PID가 있다.
- 프로세스가 여러개 작동하면 멀티태스킹이다.
- 프로세스가 있기 전에 운영체제가 있다.
- 하드디스크에 있으면 명령어 집합 덩어리인 프로그램, 실행하여 메모리에 올리고 연산하면 프로세스이다.
- 운영체제 커널은 CPU와 메모리의 할당과 관리를 한다. 한 프로세스가 타 프로세스의 메모리를 침범하지 않도록 한다. 자원 할당과 관리의 단위는 프로세스이다.
- 컨테이너는 같은 세상을 공유하되, 다른 세상인 것처럼 공간을 마련하고 프로세스를 가두어버린다. 해당 프로세스는 컨테이너 안에서 행동 반경이 제약된다. 외부에 영향을 주지 않고 독립적으로 새로운 OS처럼 작동한다.
- 도커 또한 Host입장에서 하나의 프로세스이다.
- 메모리는 가상메모리 체계로 할당한다.
24. 해킹툴과 트로이목마 악성코드에 대해서...
- 해킹툴 RAT(Remote Access Tool)은 한 사람을 감시하는 용도로 사용된다.
- MS의 Process Explorer와 VirusTotal
38. 망분리에 대한 이야기
- 내부망과 외부망을 분리한다. 망분리는 물리적인 망분리와 논리적인 망분리가 있다. 물리적인 망분리는 인터넷용 컴퓨터와 내부용 컴퓨터를 따로 두는 것이다. 논리적인 망분리는 컴퓨터 내 가상머신을 통해 인터넷과 연결한다. 샌드박스(Sandbox)로 가상머신 밖으로 악성코드가 나오지 못하게 한다.
- 내부망에서 VDI(Virtual Desktop Infrastructure)를 통해 클라우드 내 가상머신에 원격 접속하여 인터넷을 할 수 있다.
- 망연게는 망분리에서 임시로 망을 연결을 허용한다.
39. 2013년 3ㆍ20 사이버테러와 망분리
- 망분리는 극단적인 보안이다.
- 금융사와 방송사에서 초대형 보안사고가 발생하였다. 이후 망분리가 대두되었다.
○ 2023
77. 28살 비전공자의 백엔드 개발자 국비지원교육 커리큘럼에 대한 의견
- 20대 중반까지 운동하다가 비전공자로 비대면 강의로 국비교육 진행. 독해 능력이 상대적으로 떨어질 것으로 예상. 비대면은 질문하기 쉽지 않다. 내가 무엇을 모르는지를 강사와 교감하고 물어보며 채워가야 하지만 어렵다.
- HTML/CSS/JS 7일. 강사는 진도를 나갈 수 있지만 수강생은 이해하기 어렵다. 강사의 시연을 구경하다 끝난다. 자바 5일, SQL 8일, Git 2일, SERVLET/JSP/MVC 5일, 스프링 9일. 따라가기 힘들다. 2달 동안 무엇을 했는지 의문이 들 것이다.
- 핵심 커리큘럼은 서버사이드 컴포넌트 구현 및 개발(Sevelt, JSP, MVC, Spring)이다. 프로그래밍에 대한 경험이 없는 사람들을 모으기 위해 HTML, CSS, JS, Java을 앞부분에 배치한다. 최종적으로 게시판을 만드는 것이 목표이다.
- 알고리즘 7일, Mongo DB 11일.
- 전체적으로 Spring과 SQL을 배우는 과정이다. 나머지는 구색을 갖추기 위해 배치한다.
- 2.5개월 교육으로 백엔드 개발자가 되기 불가능하다.
- 프로젝트는 스스로 구현하기 보다 인터넷 자료를 조합하여 만들 것이다.
- 취업은 가능하지만 개발자로서 주도적인 개발은 어렵고, 유지보수 역할을 하고 파견직 근무를 할 가능성이 높다.
- 교육이 끝나고 바로 취업을 할 생각보다는 자료구조와 DB를 충분히 공부하기를 바란다.
- 프로그래밍을 많이 해보지 않은 상태에서 프레임워크를 사용하는 것은 의미가 없다. 프레임워크는 원리를 모른 채 암기로 해결되는 것처럼 보일 수 있다. 프로그래밍를 이해하기 위해 최소 3개월의 시간이 필요하다.
- 코딩테스트를 충분히 풀어야 한다.
- 급하게 취업하면 곧 그만두는 위기가 찾아온다. 1년 더 공부하기를 권한다.
88. 네카라쿠배나 대기업을 원하는 취준생의 탈락사유에 대한 느낌적 의견
- 20대 후반, 수학/컴퓨터 전공, 백준 골드4, C언어/Python, AI를 목표로 Python 프로젝트
- 대기업 또는 금융권 희망, 스타트업나 중소기업은 연봉 때문에 거절
- 대기업의 코딩테스트는 최소 수준을 점검하기 위한 도구이다.
- 신입에게 언어가 중요하지 않다는 생각은 잘못된 생각이다.
- 왜 그 회사에 가서 동료가 되고 싶은지, 무슨 역할을 할 것인지에 대한 고민이 없다. 회사에 대한 분석이 필요하다.
- 탈락 사유를 알아내거나 고민해야 한다.