이민석 교수님의 OT 강의
좋은 개발자란?
- 제품을 만드는 개발자
- 기본을 잘 알고, 잘 만들고, 운영도 해보고 배울 줄아는 개발자
- 회사에서 바로 쓰임 받는 개발자
- 면접에서는 프로젝트를 만드는 과정을 물어본다
- 무엇을 배웠고, 무엇을 회고했고, 리뷰했는지가 중요하다. 회사에서는 내가 만든거를 만들지 않을 것이기 때문에 무엇을 만들었는지는 중요하지 않다. 왜 썼는지에 대한 타당한 이유를 찾아야 한다.
- 결과에 집착하지 말고 과정에 충실하며 배우는 것에 집중해라 !!
AI에 대하여..
- AI는 단순하고 어려운 일들은 잘하지만 아직 복잡한 일을 잘 못한다. (프론트 같은 경우 커서 ai 사용해서 구현할 거임)
- 이전에 AI는 부가적인, 첨가하는 요소였다면 지금은 AI를 잘 쓰기위해 개발을 하는 추세로 변화되고 있다.
- 현재 AI를 잘 활용하고 잘쓰는 개발자가 필요하다.
프로젝트의 핵심은 개발이 아니다. 풀사이클의 관리가 중요하다. 그 중 변화의 대한 관리가 중요한데 DevOps의 역할이 중요하다.현재 AI로 만든 코드는 변화관리가 힘들다 (바이브 코딩)데이터 파이프라인 관리는 AI가 못한다. 데이터를 볼 줄 아는 것은 도메인 지식이 중요한데 AI가 잘 못한다.
개발자.. 공부 어떻게 해야하나?
1️⃣ 프레임 워크, 기술들
- 프레임 워크를 배울 때 알맹이부터 배워야 한다. 어떻게 돌아가는지 설명할 수 있어야 다른 프레임워크 사용시에도 적응이 가능하다.
- 프레임 워크나 기술들을 왜 썼는지에 대해 말할 줄 알아야 한다. 문제에 대한 대안들이 3가지 정도 있었는데 그 중에 내가 선택한 방법에 대한 이유를 설명해야 함
2️⃣ CS 지식
- 회사의 취업과 승진에는 CS 지식이 너무 중요하다. 이게 없으면 절대 승진도 못하고 좋은 개발자가 될 수 없다.
- CS 지식을 코드 수준에서 이해해야 한다. 예시들로 내 몸에 체화시켜야 한다.
- CS 지식을 알면 문제가 왜 문제인지 이해가 되며, 실제로 그 이론을 내가 정의한 문제에 코드로 도입할 때 깨닫게 된다.
- 코드와 지식의 매칭의 중요성!!
- CS 공부를 시간 할당해서 해야한다. CS 스터디를 만들고 서로 코드 리뷰하면서 깊게 공부해야 한다.
3️⃣ 알고리즘의 3가지 관점
- 온라인 코딩테스트
- 풀이 방법이 생각이 안나면 바로 답을 봐라!
- 답을 보고 데이터를 그림으로 그려야 한다. Tree 같은 경우 그림으로 그리면서 코드를 따라가며 패턴을 외워야 한다.
- 평생!!! 시간을 따로 떼어서 공부해야 한다. (일주일에 몇 시간 정해놓고 체크하면서 가야된다)
- 면접에서의 코딩테스트
- 쉬운 문제로 시작하고 그 문제에서의 조건을 바꾼다. 예를 들어 어떤 문제의 최적화 방법, 시간 복잡도를 개선하는 방법 같은 것
- 정답을 못 내도 괜찮다. 어떻게 문제를 정의하고, 어떻게 생각하는지 보는것이다.
- 질문을 잘해야 한다. 내가 어떤 것을 모르는지에 대한 것들, 어떤 질문들을 하는지도 본다. ( 개발자 소통의 중요성! )
- 내가 뭘 모르는지 아는 것, 질문을 정리해서 말하는 것이 매우 중요하다!
- 현업에서 마주하는 REAL 진짜 알고리즘 문제 (해결하기)
- 서버를 일단 늘려본다. 코드를 리펙토링하고 바꾸는 것을 꺼려한다. 어떤 에러가 터질지 모르기 때문.
- 코드 프로파일링 해서 시간이 가장 오래 걸리는 곳을 찾고 분석하고 해결한다.
🤔 스스로 성장하는 방식
CS 전공지식, 코딩 테스트, 프레임 워크 중요하다.
일주일에 어디에 얼만큼시간을 썼는지 확인하자. 하루의 시간을 분류해서 CS 전공지식, 코딩 테스트, 프레임 워크 를 얼마만큼 공부했는지 엑셀에 표로 정리해서 일주일마다 회고하자.
- 뭐하면서 시간을 썼는지 아는게 중요하다.
- 커리어에도 중요하다. 개발자는 시간을 돈으로 바꾸는 사람이다.
의미있는 시간을 나누는 것도 중요하다.
- 개발과 관련된 시간을 어떻게 쓰는지 매우 중요하다.
기능 정의, 내가 해야할 일들, 얼마나 많은 시간이 걸릴지 예측을 해야 한다.
- 이 기능은 몇 시간 정도만에 구현 가능할지 예상하고 예측 시간과 비교하는 것을 연습해야 한다.
- 이것 또한 실력이다. 이게 내가 연봉을 멀마나 받아야 할지 알게 된다.
잘하는 사람과 못하는 사람이 함께 협업해서 서로 공유하며 함께 성장해야 한다.
- 두려워하지 말고 서로 이야기하고 질문해라 !
시간관리 공유
https://docs.google.com/spreadsheets/d/15pNR2lw9cvIQwxi9roHYKLmovMnnD43g2muEa_YsKho/edit?usp=sharing
시간 관리
이 브라우저 버전은 더 이상 지원되지 않습니다. 지원되는 브라우저로 업그레이드하세요.
docs.google.com
협업 (Collaboration)
개발자는 개발만 잘하는 사람이 아니다. 기획팀, 프론트, 마케팅 팀과 같은 개발자를 둘러싼 모든 조직의 사람들과 함께 협업을 잘해야 한다.
- 협업과 분업의 차이
- 분업은 그 사람이 뭘 했는지 알빠가 아니다. 내가 할 일만 잘하면 된다.
- BUT ! 협업은 그 사람이 무엇을 했는지 알아야 한다.
- 협업은 문제를 똑같이 인식하고 공동의 목표를 향해 함께 가야 한다.
- 문제를 스스로 다르게 정의하고 열심히 개발한다 생각해봐라. 열심히 해봤자 다시 해야함. 개손해.
- 협업은 누군가 한 명이 갑자기 퇴사해도 땜빵할 줄 아는게 협업이다.
- 옆에서 모르고 있다면 알려주자 !
- 옆에서 알려주면서 나도 배운다.
- 생각의 다름을 이해하고 협업해야 한다. '이 사람은 이 문제를 이렇게 이해하고 생각했구나, 잘못된 부분을 알려주고 더 나은 방법을 알려주자 ! ' 이것이 나의 실력 증진이다.
- 코드 리뷰가 중요하다 !
- 옆사람이 만든 코드를 내가 알 수 있어야 한다.
- 코드리뷰는 공격적으로 해야 한다 ! 코드가 지저분하면 수정 해달라 요구해야 한다. 그 똥을 내가 치울 수도 있다.
- PR에 잘 짰다 이런 거 적지마라. 논리적으로 어떤 점을 고쳐야할지 공격적으로 적어놔야 한다.
- 내가 다른 사람의 코드를 짜지는 않았지만, 내가 알고 있어야 한다. 서로 배우고 발전해야 한다.
Agile 방식, 점직적 개발 방식
- 작은 문제를 정하고 그 문제들을 순서대로 진행
- 일단 최소한의 기능이 실행될 수 있게 결과물을 일단 만들자 ! 그 위에 기능을 추가해라
- 모두가 이해하고 확인할 수 있는 결과를 만들어야 한다.
- 기능의 우선순위를 정하고 만들고 배포, 만들고 배포를 빠르게 반복해야 한다. (빠르게 배포, CI/CD 구축)
- 데모를 계속해서 보여줄 수 있다. (어제보다 오늘 더 기능이 추가됨)
Spring Boot 프레임워크 공부
https://jinsang-2.tistory.com/135
[Spring Boot] REST API 사용, DTO
SPRING RESTGETGET으로 원하는 데이터 요청하는 방법 2가지@RequestParam@PathVariable@GetMapping(path="/echo/{message}")public String echo( @PathVariable(name = "message") String msg, @PathVariable int age, // integer, int 중 integer은 null
jinsang-2.tistory.com
Kernel 360 선배 기수 프로젝트 분석
1초의 1만5천건의 데이터를 60초마다 60개 모아서 kafka를 통해 데이터 처리를 함.
- 분당 약 90만 건의 데이터 처리가 필요하므로 RabbitMQ보단 kafka 도입이 적절
메시지 브로커를 사용했는데 메시지 브로커란?
- 프로듀서가 보낸 데이터를 컨슈머가 안전하고 효율적으로 데이터 처리를 해주는 중간 시스템
- kafka, RabbitMQ 핵심 차이항목 Kafka RabbitMQ
기본 개념 분산 로그 저장 시스템 (Stream) 메시지 큐 (Queue) 메시지 처리 Publish/Subscribe 모델 Queue 기반 성능 초고속, 수백만 TPS 가능 중속도, 수천~수만 TPS 데이터 저장 디스크에 오래 저장 (내구성 강조) 기본은 처리 후 삭제 (메모리 기반 빠른 처리) 메시지 순서 보장 파티션 단위로 순서 보장 기본적으로 FIFO, Queue 단위로 내결함성/복제 브로커 복제, 장애 복구 기능 강함 복제 가능하지만 Kafka보다 약함 사용 예시 대규모 실시간 데이터 스트리밍, 빅데이터 파이프라인 간단한 비동기 메시징, 작업 큐(Task Queue) 운영 난이도 높음 (Zookeeper 필요, 설정 복잡) 상대적으로 쉬움
JPA saveAll()을 사용해서 데이터 누락 발생
MyBatis 를 이용한 bulk insert가 왜 해결방법인지??
- saveAll() 내부적으로는 각 엔티티마다 INSERT INTO ... 쿼리 따로 날림
- DB 커넥션 유지 비용 문제
- 네트워크 왕복 비용 문제
- 트랜잭션 오버헤드 발생
- 즉, 메모리 쌓인 데이터를 모두 밀어 넣지 못하는 상황 발생
- MyBatis bulk insert를 사용하면 1건의 INSERT 문으로 처리 가능
INSERT INTO car_info (id, model, location) VALUES
(1, 'Tesla', 'Seoul'),
(2, 'BMW', 'Busan'),
(3, 'Audi', 'Incheon')
...;
'Kernel360 > 기록' 카테고리의 다른 글
[4/30 TIL] Spring Boot 공부, 이길주님 특강, ORM,JPA에 대해 (0) | 2025.04.30 |
---|---|
[4/29 TIL] Spring Boot 톺아보기 Day (1) | 2025.04.29 |