Post
KO

꽤 늦은 인프콘 이야기 (8/2)

첫번째 세션

​

지속 성장 가능한 설계를 만들어가는 방법

토스 페이먼츠 - 김재민

https://www.inflearn.com/conf/infcon-2024/session-detail/877/

​

설계를 잘하는 방법

​

오늘 이걸 들으면 설계를 잘할 수 있다고 함

​

그 방법은 설계를 하지 않는 것이라고 하넹?

​

실제로 이야기 하고 싶은 것은 구현

​

개념, 격벽

​

개념 :

​

특정 도메인에 기준으로 생각을 했을 때 여러 연관된 정보들이 떠오르는데, 이때부터 어느 정도 그룹화 시켜 개념들을 묶기 시작한다.

이렇게 개념을 묶어서 생각하다보면 그룹이 많아질 수 있다.

이렇게 되면 개념의 흐름이나 경계가 잘 구분되지 않는다.

​

이럴 경우 개념 그룹을 명확하게 경계를 구분한다.

​

격벽

​

개념들 사이에 격벽을 세우고 경계를 만들어야 한다.

이런 구분을 짓지 않으면 경계가 허물어져서 문제가 발생할 수 있다.

​

코드 구조 예제

​

개념이 잘 나뉘어져 있는지 확인하는 방법은 그룹화 시킨 것들 중 하나의 클래스를 수정했을 때 영향이 있는 클래스들을 살펴보면 잘 개념과 격벽을 세웠는지 확인할 수 있다.

​

​

하나의 개념이 많이 쓰이면 분리를 검토하자

- 코드를 작성한 내용을 확인했을 때에도 거대해지는 것을 방지하는 것이 좋다

상태에 의해 개념이 생기면 격벽을 세워보자

상태나 행위를 개념으로 착각할 수 있다.

- 면밀히 살펴보고 올바르게 행위인지 상태인지 구분이 필요하다.

​

​

스스로 비즈니스를 제어할 수 있는 곳을 개념으로 규정한다.

​

개념에도 계층이 있다?

모두 같은 수준의 개념이 아니라는 것.

​

모든 것이 개념이 되지 않는다.

​

개념 영역을 분리할 수 있다

​

​

설계

​

어느 정도 숙성이 된 설계에 대해서는 설계 변경은 어려운 것이다.

​

소프트웨어는유연해야하고 변경 가능해야 한다.

​

아래 내용을 명심해야 한다.

​

- 요구사항은 계혹 변한다.

​

- 완벽한 설계란 없다.

​

- Software는 Soft 해야한다.

​

​

하지 말아야 되는 말

​

- 요구사항이 완벽해야 설계 가능해요

​

- 우리 설계에서 그건 개발 못해요

​

- 설계해 봐야 개발 일정이 나옵니다.

​

이런 말을 안하도록 해야 한다.

​

그리고 다시 한번 생각해야될 것은

​

- 성급한 설계는 모든 것을 망가트린다.

​

- 과도한 설계는 모든 것을 망가트린다.

​

- 설계는 필요한 만큼만 하자

​

​

기존 개발 과정

​

분석 -> 설계 ->구현

​

​

세션에서 이야기 하는 것

​

구현부터 해라

​

개념 + 격벽

Test code

증명 + 피드백

​

이런 구조로 진행하면 자연스럽게 설계가 나오게 된다.

​

그래서 세션 마지막에 하는 말

​

설계를 하지 않는 것 이란 마지막에 말한 개념 + 격벽 + 테스트 코드 + 증명 + 피드백 = 설계 이기 때문이다.

​

​

———————————————

​

​

두번째 세션

​

디버깅 마인드셋: 디버깅의 고통을 절반으로 줄이는 고수들의 행동패턴 따라하기

- 배휘동 XL8

https://www.inflearn.com/conf/infcon-2024/session-detail/862/

​

​

실리콘밸리 팀에서 프론트엔드 팀 리더로 일하고 계신다고 함

​

Media cat 서비스를 담당하고 있다.

​

​

Front end 위주의 내용을 이야기 함

​

​

Gary Klein

​

인지작업 분석 CDM 관련 내용도 일부 함

​

​

디버깅 행동들을 나열하고

​

디버깅을 잘하는 사람과 못하는 사람의 차이를 위의 행동에서 선택해서 확인한다.

​

​

디버깅 3단계

​

- 원인 파악

​

- 문제 해결

​

- 사후 처리

​

3단계로 나뉘어지지만 비중은 서로 다르다.

​

원인 파일이 크거나, 문제 해결이 크거나 사후처리가 크거나

​

​

디버깅 고수들은 원인 파악에 비중이 매우 크다(7정도) 3은 문제해결, 사후처리 1정도

​

원인 파익은 디버깅 전문가들의 핵심 역량이다.

​

​

디버깅 의도대로 동작하지 않은 무언가를 정상화 하는 행위

​

정상적인 환경에서는 어떤 조건에서 어떤 순서로 어떤 일들이 벌어져야 하는가?

​

이게 심적 표상이라고 하네

​

마음 속에 존재하는 지식 구조

​

정보를 이해, 기억, 분석, 활용해 올바른 결정을 내리도록 도와줌

​

​

패턴 인식과 의사 결정을 위한 Decision Tree가 매우 선명하게 있다.

​

고수들의 디버깅은 양과 질이 좋다.

​

​

​

5단계 가이드

​

- 문제정의

- 정상 동작 정의

- 최소 재현 환경 구축하며 관찰

- 차이를 발생시키는 다양한 원인 탐색

- 가설 설정 및 검증

​

이게 디버깅 훈련법이다.

​

​

들어가기 전에

​

사전 : 작업을 위한 계획 세우기 (시간 분배 등) -> 적절하게 멈추고 회고하기

​

- 문제정의

- 정상 동작 정의

- 최소 재현 환경 구축하며 관찰

- 차이를 발생시키는 다양한 원인 탐색

- 가설 설정 및 검증

​

사후 : 해결법 설계, ROI 파악, 우선순위 결정

​

​

원인 파악이 거의 핵심이라 생각한다.

맞는 말이지

​

이정표를 잘 만들어야 한다.

​

정상적인 환경에서 어떤 조건에서 어떤 순서로 어떤 일들이 벌어져야 하는가?

​

- 현재 벌어지는 일 관찰 관찰한 정보를 기록

- Given, when then 형태로 정리

​

​

차이를 발생시키는 다양한 원인 탐색

​

추상적이든 구체적이든 떠오르는대로 적어보기

도메인 경험이 많을수록 첫번째 옵션이 진실일 가능성이 높으나, 주니어는 훈련을 위해서라도 3개 정도는 적어보는게 좋음

​

​

가설 설정 및 검증

​

- 옵션을 ‘검증 가능한 가설’ 형태로 문장화

- 실제로 작은 변경을 가하면서 가설대로 현상이 변하는지 관찰(이 과정에서 다른 문제가 발생된다면 1단계부터 재시작)

- 가설이 틀렸다면 무엇 때문인지 적어보고 다음 가설로 넘어감

​

​

사후 해결법 설계, ROI 파악, 우선순위 결정 등 정리하는 것이 중요하다.

​

디버깅 고수들 의 도구는 마인드셋이 가장 중요했다.

​

크롬 디버거를 잘 활용하면 꽤 괜찮은 경험을 할 수 있다.

Google 교육 자료를 신청해서 들어보면 도움이 된다.

​

​

고수의 습관

​

TDD

Toilet Driven Development

​

DDD

Description Driven Development

​

커밋은 나중에 찾아보기 위한 것, PR은 리뷰를 하는 사람을 위한 것

​

IDD

Issue Driven Development

최소 재현 코드를 먼저 만들고, 다음작업을 만들어가는 방석이 많다고 함

​

내용은 결국 훔치기 기술 이전에 읽었던 책 내용임

​

- 인류가 되는

​

​

​

세번째 세션

사이드 프로젝트로 커리어 레벨업!

조현우

하이퍼커넥트

​

https://www.inflearn.com/conf/infcon-2024/session-detail/876/

​

​

관심 있는 분야에 연관된 프로젝트를 사이드 프로젝트로 진행했다.

​

포지션 연계

내가 원하는 포지션으로 옮겨갈 수 있도록 사이드 프로젝트를 이용해서 기술 역량을 키워서 이직을 진행함

​

​

사이드 프로젝트 포트폴리오

​

gitbook을 이용해서 이력서, 경력기술서 등을 정ㄹ리 해봄

​

​

사이드 프로젝트 잘하는 방법

​

크기를 2~3일 내에 끝낼 수 있는 규모가 좋다.

​

중요한건 몰입

​

시작한 프로젝트를 끝내는 것이 중요했기 때문에 규모를 조정한다.

​

일정은 개인차가 있으니, 알아서 조절

​

​

관심 있는 분야에 맞춰서 간단한 프로젝트를 진행함

​

몰입이 중요한데, 이걸 잘 끝내기 위해서는 흥미가 유지될 수 있어야 한다고 생각한다.

​

(너무 의미 있는걸 할려고 했낭..)

​

사이드 프로젝트 진행시 안써봤던 기술은 딱 1개만 도입하자

​

​

비용을 아까워하지말자

​

비용 측정을 하는데 도움이 됨

돈을 써봐야 ㅋㅋ

​

​

이왕 할 거라면

팀 프로젝트 «** 개인 프로젝트**

​

​

일단 해보쟈

​

———————————————————————

​

세션 4

목적 조직 구조 안에서 개발팀이 일하는 법

​

김경백, 신유나, 오준상, 이재석, 이동욱(모더레이터)

인프랩 패널토크

​

https://www.inflearn.com/conf/infcon-2024/session-detail/904/

​

​

기존에 기능 조직으로 조직되었다. 디자인, 개발, 프론트 등등

​

최근에는 목적조직으로 진행하는 것이라 생각한다.

​

​

목적조직을 구성하고 나서 혼란한 상황을 해소한 내용을 공유한다.

​

​

목적조직

PM

Design

Backend

Frontend

​

목적조직을 cell이라고 한다.

같은 직군끼리는 Part로 되어 있다.

​

Cell에서 비즈니스 성과

Part에서 기술적 성장

​

​

Code gen 이라는 걸 이용해서 api 응답을 만들어주는 것이 있다.

MSW라는 api mocking 라이브러리가 있다.

​

https://oliveyoung.tech/blog/2024-01-23/msw-frontend/

​

https://www.daleseo.com/mock-service-worker/

​

​

API 스펙을 정하는 방법

​

기획 문서 기반으로 API를 도출, confluence로 작성해둠

이걸 기반으로 FE팀에 전달

이후에는 스웨거를 통해서 전달 함

​

​

​

기술 용어들을 어려워하는 경우 어떻게 진행하는가?

​

프로젝트 회고시 점검해봤는데 큰 이슈가 없었다.

​

주 2회 직군별 미팅 진행

- 이슈 되었던 상황 공유

- 공유할만한 내용 공유

​

​

세션5

​

클린 스프링: 스프링 개발자를 위한 클린코드 전략

이일민(토비)

Epril

​

https://www.inflearn.com/conf/infcon-2024/session-detail/880/

​

​

기술을 통한 성장

​

이게 인프콘의 주제라고 함

​

​

클린코드

​

이걸 하면 구현 능력이 떨어지고, 구현 속도가 떨어진다??

​

클린 코드나 DDD 나 이런 걸 이력서에 작성하면 주의 딱지를 붙인다고 함 ㅋㅋ

​

​

클린 스프링

​

작동하지 않는 클린 코드?

​

- 클린 코드를 추구해서 주석을 작성하지 않음

- 코드가 클린하면 리팩터링 할 이유가 없다

- 클린 코드는 버그가 적어서 테스트 코드가 없어도 되지 않나?

- 클린 코드를 작성해야되서 일정이 부족하다.

- 클린 코드 원칙에 위배되어서 리뷰를 승인할 수 없습니다.

​

개웃기네 진짜 ㅋㅋㅋ

​

클린코드가 강조하는 것

​

- 읽기 좋은 코드

- 이해하기 좋은 코드

- 확장하기 좋은 코드

- 유지보수하기 좋은 코드

​

유지보수성(maintainability)

결국 이게 핵심이지

​

​

클린 아키텍처

​

- 품질에 관한 요구사항(비 기능적 요구사항)에서 유지보수성은 특별하다.

- 유지보수하기 좋은 코드는 확장하기 좋고, 안전하고, 신뢰할 수 있고, 좋은 성능으로 발전시킬 수 있고, 상호 호환성이 뛰어나서 변경하기 쉽다

- 유지보수성은 코드의 변경가능성과 동의어 이다

​

​

유지보수하기 좋은 클린 코드는 개발 생산성이 떨어지는가?

-> 놉

​

유지보수성에 집착하면?

​

개발 생산성과 유지보수성은 서로 영향을 주는 관계이다.

​

부채 (Dept)

​

​

기술 부채

Technical Dept

​

​

부채 은유 (Dept Metaphor)

- 개발 하는 소프트웨어에 대한 현재 이해를 반영하는 코드를 작성하고 빠르게 출시

- 소프트웨어에 대해서 배우게 된 것을 리팩터링을 통해서 코드에 반영

- 그러지 않으면 이자가 쌓여서 점점 큰 부담

​

Ward Cunningham 최초 언급

​

최근 ward는 기존에 부채의 의미를 다른 것으로 오용하는 것이 있다. 고 말함

​

- 코드를 대충 작성하라는 게 아님

- 부채는 나쁜 코드에 대한 변경이 될 수 없음

- 처음부터 리팩터링하기 좋은 코드를 만들어야 함

​

부채가 지속적으로 효과를 발휘하려면 리팩터링(부채상황)이 필요하다?

​

유지보수성이 좋은 코드는 변경가능성이 좋다.

- 리팩터링 (클린코드 선순환)

빠르게 변경되는 코드는 개발 생산성이 좋다.

​

​

시작은 어떻게 해야 하는가?

​

개발 시작은 빠르고 간단하게

​

- 익숙한 기술로

- 핵심 기능이

- 동작하는

- 가장 단순한 코드를

- 리팩터링 하기 좋게 작성

​

일부 기능을 완벽하게 만드는 것으로 시작하지 마세요.

​

​

기술 아키텍처를 검증할 수 있는 버티컬 슬라이서가 있다고 하네?

​

유지보수성과 생산성의 균형을 잡아줄 리팩터링을 잘 하려면?

테스트!

​

​

이걸 만들어야 되는데..

​

그런데 테스트를 작성하면 구현 능력과 구현 속도가 또…

​

테스트를 빠르고 효과적으로 작성하면서 개발하는 능력이 필요

​

- 동의, 어려움, 가능하다고 함..

​

​

- 익숙한 기술로

- 핵심 기능이

- 동작하는

- 가장 단순한 코드를

- 리팩터링 하기 좋게 작성

​

누구에게??

대상이 중요하다 같이 일하는 동료 등

​

삼체 문제

Three Body Problem

​

팀워크(teamwork) 가 필요하다

​

​

유지보수성 생산성

\ / 코드 | 팀워크

​

클린 코드의 많은 원칙은 팀의 동료 개발자와 관련된 것이다.

나만을 위한 클린 코드는 없다.

​

클린 코드의 많은 원칙은 상황에 따라 다른 기준을 가지고 있다.

​

​

기준을 잡는 방법을 탐험(Exploration) 이라고 하자

​

팀과 함께 결정하고 탐험하고 학습하고 성장한다.

​

결정은 주니어가 했으면 좋겠다.

장단점과 트레이드오프를 포함해서 이야기 하면서

​

이런 과정을 탐험하는 과정이라고 할 수 있다.

​

이 과정 속에서 팀 구성원들이 배우는 점이 있었으면 한다.

​

함께 탐험하는 것을 즐거워 하는 팀

​

Great Teams make great people

​

​

친절(Kind)

​

교양있는 개발자

​

​

자신의 말을 하더라도 다른 사람의 기분을 나쁘지 않게 하는 것

​

자기의 이야기를 해야 됨, 부정적인 피드백이라도 해야 됨 다만 다른 사람의 기분을 나쁘지 않게 하는 것이다

이걸 훈련해야 함

​

함께 코드를 작성하고, 읽고, 변경할 동료 개발자들에게 친절한 코드

​

항상 친절하세요

동료에게

자신에게

​

​

클린 스프링 원칙

​

자기 책임에 충실한 오브젝트로 구분하고 의존관계를 유연하게

​

클린 (자동) 구성 정보

​

헥사고날 아키텍처

- 토비님은 좋아 함

​

계층과 모듈 경계에는 API, 즉 인터페이스를 사용

​

테스트를 안 만들 거면 스프링을 뭐하러?

- 정말 스프링만큼 테스트의 중요성을 알려주고 도구를 제공해주는 것이 없다.

​

DB 테스트에는 @Transactional을 사용!

​

ㅋㅋㅋㅋ

​

토비의 클린 스프링의 강좌를 만들려고 하신다고 함

- 강의 홍보하는 시간이 됨

- 올 가을부터 나온다고 함

​

클린 코드는 항상 코드에 관심을 가지고 보살피는 사람이 작성한 것처럼 보인다

​

나도 나중에 이렇게 재미나게 할 수 있을까 ㅋㅋ

​

​

​

———————

​

5번째 세션

​

객체지향은 여전히 유용한가?

조영호

지식공유자

​

​

https://www.inflearn.com/conf/infcon-2024/session-detail/881/

​

​

객체지향은 여전히 유용한가에 대해서 질문이 있다.

​

왜 이런 질문이 있는지 알아봄

​

장바구니 코드

​

​

절차적인 설계

​

데이터와 프로세스를 구분해서 작성하는 것이라 설명한다.

​

​

절차적인 설계와 객체지향적인 설계는 언제 사용하는가?

​

역할과 책임을 나눌 수 있도록,

​

객체지향적인 설계는 담당하고 있는 부분이 변경되면 다른 클래스들에게 영향을 주지 않는다.

​

​

객체지향의 큰 장점은 구현에 관련된 규칙을 제한할 수 있다.

​

기능에 대한 추가가 많은지, 규칙의 추가가 많은지에 따라 선택적으로 절차적으로 할지 객체지향적으로 할지 결정한다.

​

​

절차적인 설계

​

포멧 변경을 위한 데이터 변환

데이터 중심

데이터 노출

기능 추가에 유리

​

객체지향 설계

​

규칙에 기반한 상태 변경

행동 중심

데이터 캡슐화

타입 확장에 유리

​

​

조영호님꺼는 너무 졸리넹 ㅋㄷㅋㄷ

​

프리젠테이션 레이어는 절차적으로 작성

서비스 레이어는 절차적으로 작성

도메인 레이어는 객체지향적으로 작성

퍼시스턴스 레이어는 절차적으로 작성

​

객체지향은 언제 유용한가요?

​

적합한 컨텍스트에 맞게 이미 사용하고 있다.

​

어떤 기술이나 패러다임을 이야기할 때 언제 유용한지 고민 하고 학습한 다음에 필요할 때 사용해라 정도

​

​

코드의 목적과 변경의 방향성에 따라 언제 어떤 기술을 사용할지 결정하세요.

​

​

​

**—- **

​

https://www.inflearn.com/course/%EC%9D%B8%ED%94%84%EC%BD%982024-%EB%8B%A4%EC%8B%9C%EB%B3%B4%EA%B8%B0

[**[지금 무료] 인프콘 2024 다시보기 강의 인프런 - 인프런**](https://www.inflearn.com/course/%EC%9D%B8%ED%94%84%EC%BD%982024-%EB%8B%A4%EC%8B%9C%EB%B3%B4%EA%B8%B0)
인프런 성장하는 IT인들의 축제, 인프콘 2024에서 진행된 오프닝 및 발표 세션을 영상으로 다시 보실 수 있습니다., ✅ 확인해주세요이 콘텐츠는 2024년 8월 2일 금요일 진행된 인프콘 2024 발표 녹화 영상입니다. 강의 관련 질문/답변을 제공하지 않는 점 양해

​

This article is licensed under CC BY 4.0 by the author.