반응형
반응형

📝──────────────── 주석 ────────────────

 

📝SVN, GIT 커밋

──── 제목 ────

─ Body
# ✨feat      : 기능 (새로운 기능)
# 🐛fix       : 버그 (버그 수정)
# 📝docs      : 문서 (문서 추가, 수정, 삭제)
# 🎨style     : 스타일 (코드 형식, 세미콜론 추가: 비즈니스 로직에 변경 없음)
# ♻️refactor  : 리팩토링
# ✅test      : 테스트 (테스트 코드 추가, 수정, 삭제: 비즈니스 로직에 변경 없음)
# 🔨chore     : 기타 변경사항 (빌드 스크립트 수정 등)
# 이모지 참조 > https://gitmoji.dev/

─ Footer
# 이슈번호
# 무엇을 수정했는지
# 왜 수정했는지



🔗 참고 및 출처

https://hyeonsook95.github.io/2021/08/16/git-commit/

 

 

 

반응형
반응형

📝 Java Clean Code  

  • for문의 Iterator의 경우 i, j로 명명하기 보다는 의미있는 변수명을 짓기 → 매직넘버, 스트링 제거
for (int i = 0; i < fruits.size(); i++)
→ for (int fruitIndexNum = 0; fruitIndexNum < fruits.size(); fruitIndexNum++)

하지만 그 자체로 이해가 되는 수준의 코드면 굳이 할 필요는 없다 → 유연하게 처리

 

  • 함수를 리턴하거나 로직처리 시 함수 그대로 사용하지 말고 변수에 담아서 사용하기
return fruits.size() + vegitables.size();

→ int totalFruits = fruits.size()
int totalVegitables = vegitables.size()
int totalCount = totalFruits + totalVegitables

return totalCount

하지만 그 자체로 이해가 되는 수준의 코드면 굳이 코드를 늘릴 필요는 없다 → 유연하게 처리

 

  • // 은 해당 변수가 무엇을 의미하는지 적는다.
int totalFruits = fruits.size() // 과일 총 개수

 

  • /** **/는 프로세스의 흐름을 정의한다.
/** ──── 오늘 산 과일과 야채의 총 개수 구하기 ──── **/
int totalFruits = fruits.size()
int totalVegitables = vegitables.size()
int totalCount = totalFruits + totalVegitables

return totalCount

<HTML>
<body>
    
    <div>테이블</div>
    /** 과일 테이블 **/
    <table>
    	...
    </table>
</body>

</HTML>

 

반응형
반응형

📝 HTML, CSS 

  • class name
    • kebab-case 또는 BEM방식
    • 예) nav-button
  • id
    • camelCase 또는 kebab-case
    • 예) myUniqueId, my-unique-id 

 

class name의 경우 BEM Naming Convention을 사용한다고 한다

블록(B), 블록 내부 요소(E) 수정자인 스타일 변경(M) → button__icon--large

근데 BEM은 점점 늘어날 수록 헷갈려 보이기 때문에 개인적으로는 kebab-case가 더 나아보인다

 

📝 JavaScript 

  • Boolean
    • (is, has, can) + (형용사 or 명사) + CamelCase
    • 예) boolean isBroken, boolean hasBanana, boolean canFix
  • 변수명
    • 명사 + CamelCase
    • 예) smartPhone
    • 자주 쓰이는 명사 → total (전체) count (개수)
  • Enum
    • PascalCase
    • 예) Fruit
    • 예) enum Fruit {APPLE, ORANGE, BANANA, PEAR};
  • 메소드명
    • (동사 or 전치사) + CamelCase  → 한 가지의 역할을 해야 한다
    • 예) getParts, toString
    • 자주쓰이는 동사 → get (가져오다) set (설정하다) find (찾다) init (데이터 초기화) create (생성하다) delete (삭제하다) update (갱신하다)

 

📝 주석 (HTML, CSS, JS 구분으로 사용)

/** ──── Fetch Data ──── */

/** ──── 상태관리 함수 ──── */

/** ──── 상태관리 ──── */

/** ──── PAGE ──── */

 

 

반응형
반응형

 

📝──────────────── React Naming ────────────────

  • custom hook file
    • kebab-case
    • 예) use-single-upload
  • custom hook
    • use + PascalCase
    • 예) useSingleUpload
  • 변수명
    • Camel Case
    • 예) fileFormData
  • 페이지 컴포넌트
    • PascalCase + Page
    • UploadPage
  • 디렉토리
    • kebab-case
    • item-category
  • 파일명
    • kebab-case
    • global-error.tsx
  • Redux Slice
    • 필드명은 스네이크 기법 → ad_item

 

나만의 주석 예시

/** ──── 상태관리 함수 ────**/

/** ──── Query & Mutation ────**/

/** ──── 상태관리 ────**/

/** ──── 이미 등록된 키워드인지 체크 ──── **/ (필요한 경우)

/** ──── TSX ────**/

{/*──── 선택 키워드 ────*/}

등...

 

Code-Map

export enum Code {
  /** ─── 상태 ─── **/
  WEAK = 'WEAK',     // '약함',
  NORMAL = 'NORMAL', // '보통', 
  STRONG = 'STRONG', // '강함,
}

type CodeMap = {
  [key in Code]: string;
};
export const CODE_MAP: CodeMap = {
  [Code.WEAK]: '약함',
  [Code.NORMAL]: '보통',
  [Code.STRONG]: '강함',
}

백엔드에서 코드로 내려온 경우 한글로 변환시키는 Mapping을 만들어두고 한 곳에서 관리하면 좋다

 

 

📝──────────────── Next.js Project Structure ────────────────

프로젝트 구조 (Next + 개인화) [redux + graphql]

src
├ components
│  ├ common
│     └ button.tsx
│  └ dashboard
│       └ pie-chart.tsx
├ config
├ constant
│  └ date-time-constant.ts
├ enums
│  └ code-map.enum.ts
├ assets
│  └ dog.png
├ gql
│  └ dashboard
│       ├ mutations.graphql
│       └ query.graphql
├ hooks
│  └ use-intersection-observer.ts
├ libs
│  └ utils.ts
└ redux
     ├ slices
     ├    └ modal-slice.ts
     ├ reducer.ts
     └ store.ts

 

📝──────────────── React.js Project Structure ────────────────

 

React 프로젝트 구조 (개인화) [redux 사용]

src
├ components
│  ├ common
│  │    └ button.tsx
│  └ dashboard
│       └ pie-chart.tsx
├ config
├ constant
│  └ date-time-constant.ts
├ enums
│  └ code-map.enum.ts
├ assets
│  └ dashboard
│       └ dog.png
├ config
├ services
│  └ dashboard
├ styles
│  └ dashboard
│       └ table.css
├ hooks
│  └ use-intersection-observer.ts
├ utils
│  └ utils.ts
└ redux
     ├ slices
     ├    └ modal-slice.ts
     ├ reducer.ts
     └ store.ts
  • components
    • 재사용 가능한 컴포넌트들이 위치하는 폴더로 컴포넌트는 매우 많아질 수 있기 때문에 이 폴더 내부에서 하위폴더로 추가로 분류합니다
  • assets
    • 컴포넌트 내부에서 사용하는 이미지 파일인 경우 이 assets 폴더에 위치시킵니다
  • hooks
    • 커스텀훅이 위치하는 폴더입니다
  • pages
    • 라우팅을 적용할 때 페이지 컴포넌트를 이 폴더에 위치시킵니다
  • enums
    • enum 관련 파일이 들어갑니다
  • constants
    • 공통적으로 사용되는 상수들을 정의한 파일들이 위치하는 폴더입니다
  • config
    • config 파일이 따로 있는 경우 둡니다
  • styles
    • css 파일이 포함되는 폴더입니다
  • service
    • 외부 API와 상호작용하는 모든 코드들을 넣으며 auth와 같이 인증과 관련된 파일을 포함합니다
  • utils
    • 정규표현식 패턴이나 공통함수 등 공통으로 사용하는 유틸 파일들이 위치하는 폴더
  • redux
    • 리덕스 폴더가 들어갑니다

 

 

프로젝트 구조의 정답은 없다 React의 경우 feature으로 분리하는 방식을 많이 이야기한다 이걸 사용하면 ToDo 기능, 인증 등으로 기능별로 분리할 수 있다 feature/ToDo안에 ToDo관련 components, ToDo.tsx, css 등 관련된 걸 다 넣는다 이럴 경우 기능별로 딱 깔끔하게 되겠지만 양이 엄청 많아질 거고 A라는 페이지에서 쓰는 ToDo랑 B라는 페이지에서 쓰는 ToDo가 살짝 다를 수도 있다 특징별로 분리한 건 어떤 기능이 있는지 확인하고 기능별로 분리가 철저해 보이지만 실제 프로젝트를 하면 재활용성을 완벽하게 하는 경우가 그렇게 많지 않다

 

그럴바에 그냥 DDD구조처럼 중복되더라도 (Auth같이 무조건 공통인 경우는 따로 분리 필요) 살짝 달라서 안에서 분기태우고 이럴바에야 그냥 또 다른 이름으로 제대로 만드는게 좋아보인다

또한 업무도 페이지의 어떤 영역을 맡게 될테고 백엔드도 DDD구조로 가면 프론트에서도 찾기 쉽게 DDD로 가져가는게 프로젝트 이해와 해당 페이지를 찾는게 더 쉬워보인다 그래서 개인적으로는 DDD의 구조를 가져가는게 좋아보인다 

→ 물론 프론트랑 백엔드랑 확실히 구분되어있어서 프론트는 백엔드 프로젝트를 볼 일이 없을 경우는 제

 

물론 회사 프로젝트에서 이미 진행되고 있는 구조가 있다면 그렇게 따라가는 게 맞다

만약 이런 룰을 명확하게 하고 싶다면 프레임워크를 이용하면 된다 (Next.js)

 

 

 

 

🔗 참고 및 출처

https://velog.io/@cjkangme/%EB%A6%AC%EC%95%A1%ED%8A%B8%EC%9D%98-%ED%8F%B4%EB%8D%94-%EA%B5%AC%EC%A1%B0

https://velog.io/@sisofiy626/React-%EB%A6%AC%EC%95%A1%ED%8A%B8%EC%9D%98-%ED%8F%B4%EB%8D%94-%EA%B5%AC%EC%A1%B0

반응형
반응형

 

1. 요구사항 분석

제품을 만들 때 현재 이와 비슷한 제품은 없는 지 어떠한 서비스가 있고 어떤 자료를 수집해야할지 등에 대한 요구사항 및 분석의 단계이다


 

2. 설계

요구사항을 토대로 선순위, 마일스톤, 개발에 필요한 환경 구축 등을 한다

백로그

  • 백로그 관리
    • 제품의 개발 방향을 결정한다 → 요구사항, 기능, 개선, 리스크를 정리 후 우선순위를 정한다
    • Notion, Jira 이용

태스크 플로우

  • 태스크 플로우
    • 유저가 어떤 식으로 이용할지에 대한 프로세스를 정의한다
    • draw.io 이용

IA (정보구조도)

  • IA (정보구조도)
    • 화면에 필요한 정보 구조(기능)를 정의하는 것입니다
    • draw.io 이용

화면 설계

  • 화면 설계
    • 웹사이트 또는 모바일 앱 서비스를 제작하기 위한 화면 설계도면
    • PPT 템플릿, Miro, Figma 이용
      • 개인적으로 PPT는 틀에 박힌 크기로인해 문서 출력에는 적합할 것 같다 하지만 틀에 박힌 크기로 인해 페이지안에 화면이 다 안들어가거나 비율 때문에 한 페이지에 화면이 표현이 안 되는 단점이 있는 것 같다
      • Miro의 경우 PPT처럼 문서 출력할 땐 힘들어보이지만 Notion과 같이 사용하기 편하고 화면 제한이 없어서 개발자들이 이해하기 쉽게 만들 수 있을 거 같다 [물론 PPT 화면설계 템플릿처럼 1번 2번 이러한 설명 붙여서 쓰는 건 없지만 대충 내가 그에 맞게 템플릿을 만들면 된다]
      • FigmaInteractive한 화면도 만들 수 있으며 Miro의 기능도 웬만해서 지원해준다 → 추천

 


 

DB ERD 설계

  • 데이터 모델 및 설계
    • 데이터베이스 설계를 의미합니다
    • ERD Cloud 이용

 


 

시스템 아키텍처

  • 시스템 아키텍처 설계
    • 여러 시스템들의 아키텍처를 의미합니다 (서버간의 관계)
    • draw.io 이용

 


 

  • 기술적인 설계 문서
    • 시스템의 구현 방법과 기술적인 세부사항이다 예) 프로그래밍 언어, 프레임워크, 라이브러리, 알고리즘 등..
    • Notion 이용 [노션에 대충 정리해서 올림] (버전 명시 필수)

 

 


  • 마일 스톤 (일정, 인력관리)
    • 일정에 맞게 인력 분배 및 To Do List에 역할 할당
    • Jira, Notion 이용

 


 

3. 개발

  • 정해진 네이밍 및 프로젝트 룰에 맞게 개발
  • To Do List에 있는 것 처리하기
  • 이슈사항 있을 시 백로그 또는 이슈관리에 올리기
  • Jira, Notion 이용

 


 

4. 테스트

  • 테스트를 통해 소프트웨어의 품질을 유지하고 버그를 발견하여 수정하는 등 여러 측면에서 개발자들에게 도움

 

  • 테스트 종류
    • 단위 테스트 → 메소드 단위에서 코드가 올바르게 동작하는지 확인 [기능의 최소한 단위]
      • 결제 시스템에서 요청한 사용자의 DB에서 잔액 조회 메소드가 정상 동작 하는가?
    • 통합 테스트단위들이 모여서 하나의 동작을 이루어내는 단위에서 예상대로 동작하는지 확인 [기능 정상 동작]
      • 결제 시스템에서 잔액 조회한 이후에 잔액이 있는 경우 결제처리가 정상 동작하는가?
    • 시스템 테스트전체 시스템이 예상대로 동작하는지 확인하며 비즈니스 요구사항 충족 확인 [프로세스 흐름]
      • 로그인한 이후에 상품을 등록하고 결제를 했을 때 정상 동작하는가? 
    • 성능 테스트성능을 측정해 병목현상을 찾아내며 응답시간과 처리량을 평가
      • 결제 처리하는데 5초 내로 이루어지는가?
    • 회귀 테스트새로운 변경사항이나 기능 추가 후 이전에 작동하던 부분이 여전히 정상 동작하는지 확인
      • 잔액이 없을 때 결제 처리가 안 되게끔 바꾸었을 때 관련된 부분 잔액 있을 때 정상 처리 됐던 것을 다시 테스트했을 때 문제가 있는가?
      • JUnit따위로 테스트를 미리 만들어둔 경우 간편하게 처리 가능 물론 직접 시스템 테스트를 한번 더 해보는게 맞다 시간이 없을 경우 통합테스트로 기능단위에서라도 직접 손으로 테스트 해봐야함
    • 보안 테스트시스템 보안 취약점이 견고한지 확인하며 보안 문제를 식별하고 개선
      • CSRF를 이용해 보안 취약점을 공격했을 때 방지 처리가 되어있는가?

 

  • 사용 툴
    • JUnit/TestNG (Java), pytest (Python), NUnit (C#) → 단위 테스트 자동화
    • Selenium → 자동화 테스트 도구로 프론트엔드에서 화면으로 테스트 자동화에 사용된다
    • JMeter → 성능 테스트를 위한 도구
    • Cypress, Jest → JavaScript 기반 프로젝트 테스트 도구

 

5. 배포

  • 소프트웨어가 실제 운영 환경에서 원활하게 동작하는지 확인하고 사용자에게 서비스를 제공해주는 단계

 

  • 사용 툴 및 방법
    • Kubernetes → 도커로 배포할 때 컨테이너들을 관리 및 자동 배포 등 다양한 기능 제공
    • Jenkins → 소스 코드 변경 시 자동으로 빌드 및 테스트를 수행하고, 성공한 경우 자동으로 배포까지 수행하는 CI/CD 파이프라인을 구성할 수 있는 도구
    • 수동 배포 → 직접 서버에 접근해 필요한 파일을 넣고 재기동하거나 하는 행동

 

 

 

🔗 참고 및 출처

https://imgscf.slidemembers.com/

https://www.edrawsoft.com/kr/program-review/architecture-drawing-program.html

https://www.erdcloud.com/d/TzHsgqxPRGzWGzytR

https://brunch.co.kr/@junovoir/26

https://salmon-kim.tistory.com/25

https://carrotdesign.tistory.com/entry/UXUI-%EA%B8%B0%ED%9A%8D-11%EA%B0%95

https://deep-wide-studio.tistory.com/37

https://m.blog.naver.com/sslim21/221443489759

https://www.marimba.team/kr/blog/task-management-using-backlog/

 

 

 

반응형
반응형

📝─Java Naming

  • 프로젝트명
    • snake_case
    • 예) shinhan_delivery
  • 패키지명
    • com.회사명.프로젝트명 (snake_case)
    • 예) com.naver.advertise_admin
  • 클래스명
    • 첫글자 대문자 + camelCase
    • 예) WeaponFactory
  • Enum
    • PascalCase
    • 예) Fruit
    • 예) enum Fruit {APPLE, ORANGE, BANANA, PEAR};
  • 메소드명
    • (동사 or 전치사) + camelCase  → 한 가지의 역할을 해야 한다
    • 예) getParts, toString
    • 자주쓰이는 동사 → get (가져오다) set (설정하다) find (찾다) init (데이터 초기화) create (생성하다) delete (삭제하다) update (갱신하다)
  • Boolean
    • (is, has, can) + (형용사 or 명사) + camelCase
    • 예) boolean isBroken, boolean hasBanana, boolean canFix
  • 변수명
    • 명사 + camelCase
    • 예) smartPhone
    • 자주 쓰이는 명사 → total (전체) count (개수)
  • 상수
    • screaming_snake_case
    • 예) SHOP_NAME
  • 배열
    • camelCase + 복수형
    • 예) fruits → fruits[0] = banana , fruits[1] = apple
  • JSONObject
    • camelCase
    • 예) student
    •  
  • JSONArray
    • camelCase + 복수형
    • 예) students
  •  
  • JSON 키
    • calmelCase
    • 예) “shopNm” : “맛있는 짜장면집”
    • 만약 DB에서 조회한 값 그대로 Return해 DB field 네이밍인 snake_case로 내려오는 경우는 그냥 사용
      • 예) “shop_nm” : “맛있는 짜장면집”
  • 약어
    • number = num
    • address = addr
    • name = nm
    • temp = tmp
    • 약어를 사용할 경우 널리 사용하는 것이 아니면 약어리스트에 추가하고 공통적으로 관리하는게 좋다

 

솔직히 모든 Naming Convention을 세세한 것까지 지키면서 한 사람이 작성한 것처럼 보이기는 쉽지 않다 하지만 아무리 그래도 위에 정한 큰 틀은 지키는게 좋다

 

📝JavaDoc (자바 클래스 및 메소드 주석)

JavaDoc은 JDK와 함께 패키지로 제공되는 도구로 Java소스 코드의 코드 문서를 생성하는데 도움을 주는 도구로 JDK기본적 + 공식적으로 지원하기 때문에 이용하는게 좋다 → 일단 사용해봐야 알 거 같음

 

📝Swagger (API 문서)

백엔드에서 쓰이는 경우 API문서의 경우 Swagger로 작성하고 공통 메소드나 그 외의 클래스의 경우는 JavaDoc으로 작성하는게 좋아보인다 → 일단 사용해봐야 알 거 같음

 

 

 

 

 

 

 

반응형
반응형

📝API 생성 팁

  • 에러 발생시 어떤 식으로 데이터를 내려줄 지 미리 설계를 해야한다
  • CRUD에 맞는 HTTP 통신 방식을 설정해야한다 (POST, GET, DELETE, PUT)
반응형
반응형

 

📝로그 찍을 때 필요한 내용 팁

  1. Running Time (예) HTTP 통신시 통신 전 후의 Loose Time
  2. 시각 (처리된 시각)
  3. 내가 만든 API를 호출하는 API의 URI
  4. 중간 중요 내용(내용이 너무 길면 필요한 포인트만 출력)
  5. 에러 메세지 ( HTTP 통신 실패 코드 등... 예외 처리 중요)

 

// 로그 시각
Date today = new Date();
SimpleDateFormat todayDate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

String getMembmerQuery = "select * from member where id='1'"

"["+ todayDate + "] " + "get_member_query : " + getMemberQuery
예시) [2022-07-17 12:43:22] get_member_query : select * from member where id='1'
반응형
반응형

📝비난이 아닌 사실을 이야기해라

 

📝프레임워크에 맞는 기술을 써라

  • 스프링프레임워크를 쓰며 스프링프레임워크에서 만든 걸 쓰는게 좋다 (스프링이 아니라 그 안에서 서블릿을 쓴다는 등에 행위는 지양하는 게 좋음) 그리고 웬만해서 유명한 걸 써라

 

📝개발자는 자기 영역에만 최선을 다한다

  • 개발은 기본적으로 잘해야(다양한 기술 선택지)하며 같이 협업하는 기획자, 디자이너 등… 다양한 직군 존중을 해야한다 만약 정말 필요한 의견을 낼 때는 상대방의 허가 또는 조심스럽게 양해를 구하며 이야기를 한다

 

📝라이브러리를 활용할 때 공식버전의 라이브러리를 사용하고 의존적이지 않는게 좋다

  • 예를 들어서 Oracle DB에서 제공하는 테스트 함수가 있고 Java표준인 Javax의 테스트 함수가 있는데 Oracle DB에서 제공하는 테스트 함수를 사용할 경우 여러가지 Side Effect가 생길 수 있다길 수 있다. 만약 MySQL로 변경했을 때 MySQL에 있는 테스트 함수는 Oracle이나 다르거나 없을 경우 모든 코드를 수정해야할 수 있다 그리고 스프링의 의존적이면 스프링 프레임워크가 구축되어야 테스트나 할 수 있기 때문에 제약사항이 많이 생긴다 [스프링 점유율이 어마무시해서 이 부분은 거의 Trade off 가 없긴 하다]

 

📝공부는 복리이다

  • 빨리 배우는게 좋다 앞서 배운 내용으로 다음 공부를 하기 수월해진다

 

📝사용하는 제품의 호환성을 따져라

  • 어떤 버전을 쓰느냐는 정말 중요하다 여러 프로그램을 쓸텐데 그 프로그램들 끼리 버전호환이 안 되면 잘 만들었어도 안 돌아간다
  • 예) jdk 버전이 다른 경우 , 톰캣 버전이 다른 경우 등...

 

📝API 등 비즈니스 로직을 만들 때 다른 이상한 값을 못 넣게 아예 사전에 차단하도록 설계해라

  1. 예를 들면 Code를 String으로 선언한 경우 01, 02 이렇게 넣어야하는 경우 어떤 사람이 04 이런식으로 넣어서 문제를 일으킬 수 있다. 만약 Enum을 이용한 자료구조를 사용한다면 사전에 에러를 방지할 수 있다
  2. 운영 디비에는 접근 못하도록 막던가 계정 권한을 달리주는 등 반드시 필요한 조건이다

 

 

📝나의 프로젝트를 공유할 때 WAS와 IDE도 같이 배포한다.

  • 위와 같이 제품 호환성 때문에 다른 환경에서도 돌아가기 위해서 IDE(이클립스)와 1개의 프로젝트(workspace)와 1개의 WAS(Tomcat)를 세트로 묶어서 제공해준다.

 

📝여러번 확인하기

  • 문서를 배포하든 프로그램 테스트를 하든 문자를 보내든 여러번 검토한다.
  • 문자나 이메일의 경우 2 ~ 3번 정독을 하고 문서를 배포할 때도 2 ~ 3번 정독을 한다.
  • 프로그램 테스트를 하고 문제가 생겨서 고친 후에는 다시 처음부터 테스트를 다시 시작한다. (관계 있는 부분 즉, 영향을 받는 부분은 모두 다시 테스틀 처음부터 다시해야한다)

 

📝문서화를 잘 해라

  • API 명세 등 아무것도 모르는 상대방이 읽었을 때 읽기 쉽고 이해하기 쉽게 만들어야한다.

 

📝버그가 일어날 시

  • 해당 버그 원인 파악 후 직접 재연 후 해당 버그 고치고 다시 해당 버그 재연해 테스트해 문제 없음 증명 후 배포한다.

 

📝피드백을 잘해라

  •  내가 하는 일이 맞는지 능동적으로 움직이며 체크한다 (내가 하는 일이 이게 맞는지 상사에게 체크를 한다)

 

📝외부 일정은 최대한 길게 잡아라

  • 아직 고민중... 하지만 너무 짧게 잡지는 마라... 전 회사가 너무 병신같아서 5일 걸릴 일 하루만에 끝내라고 한 경우가 부지기수라 밤새서한 적도 부지기수였음

 

📝데이터 관리를 잘해라

  • 을 넘겨받을 때 "빈값"인지 체크하고 Default 값을 넣던가 반드시 필요한 값이면 required로 에러를 방지해야한다

 

📝개인면담을 가져라

  • 팀장인 경우 개인 면담을 가져서 일에 대한 불만 및 이슈사항이 있는지 체크를 해야하고 개선해야 한다.

 

📝말 잘 하는 법

  1. 예시를 들며 설명하고 맨 마지막에 결론을 한 번 더 이야기하기
  2. 상대방의 이야기를 듣고 생각한 다음에(3초 이상+심호흡) 이야기하기 [재촉시에는 잠시만요 컨트롤하기]
  3. 아이컨택과 제스처가 중요하다
  4. 여러 사람과 이야기할 때는 한 문단씩 이야기하면서 시선을 옮겨가며 이야기하기

 

📝DB 설계

  • 너무 큰 확장성을 고려한 설계독이 될 수 있으므로 조심해야한다.

 

📝프로젝트 산정일 설정

  • 야근해서 개발을 마치거나 미리 리소스를 크게 잡아 일을 시작하게 되면 개발자나 회사 모두에게 부담이 될 수 있기 때문에 개발자는 자기자신의 개발 속도를 객관적으로 판단할 수 있는 능력이 필요하다 → 자신의 실력 및 맡은 일이 어느정도 공수가 드는지 알 수준이 되어야 판단할 수 있다 즉, 어떤 일이고 어떤 프로세스로 돌아갈 지 사이드이펙트 등 많은 경우의 수가 떠올라야한다

 

📝실력이 늘지 않는다

  1. 적절하지 않은 난이도
    1. 너무 낮으면 지루함을 느끼고 너무 높으면 불안감을 느끼게 되니 알아서 조절을 잘 해야한다
    2. 높은 경우는 버텼을 때 차라리 도움이라도 되는데 너무 낮으면 진짜 정체
  2. 회사 문화
    1. 새로운 기술을 두려워하지말며 적용시키며 피드백을 받고 실수를 고쳐나갈 수 있는 환경이 필요하다 즉, 실수를 잘 들어줄 수 있는 회사 환경이 중요하다
  3.  본질을 이해해라
    1. 그냥 무작정 가져다 쓰는게 아니고 심도 있게 이해를 한다면 [데이터의 흐름 등...] 다른 프레임워크나 기술을 쓰더라도 많은 도움이 된다

 

반응형