react2023. 12. 25. 19:10
  • DOM (  Document Object Model )
    • 렌더링
      • == 랜더링 엔진
      • HTML, CSS
      • 볼 화면을 그려내는거 == 압축 풀어서 실행하는 거
  • React
    • User Interface 배치 위한 자바스크립트 라이브러리
      • 컴포넌트를 이용한 배치
        • 클래스형 컴포넌트 ( 지는 해 )
          • 코드 안에서 라이프사이클 기능, state 기능
            • 라이프 사이클 기능
              • 실행 or 업데이트 or 제거될 때 특정 이벤트 호출되는 것
          • render 함수가 필수
            • 랜더 : 화면에 띄우는 거
        • 함수형 컴포넌트
          • hook을 사용하여 라이프사이클 기능과 state 기능을 구현
        • 왜 함수형 컴포넌트가 뜨는 해인가 ?
          • 가독성 -> 요건 맞는 거 같음.
          • props 에 따른 결과를 보장받음
          • 메모리 자원 덜 쓴다고 카더라.
          • 빌드 후 파일 크기가 더 작다고 카더라.
    • Props 이용하여 데이터 전달
    • State 이용하여 상태 변화 감지
      • 이 후 컴포넌트 업데이트
    • 직접 랜더링 하지 않음. 배치만 해줄 뿐.
    • React 에서 변경이 감지되면 React DOM 에게 알림
      • 뭐를 알림 ? 알린다기보다는 virtual DOM 을 전달함
        • 가상의 DOM 을 React DOM 에게 줌
          • 가상의 DOM 과 실제 DOM 이 서로 똑같으면 업뎃 안 함
          • 가상의 DOM 과 실제 DOM 이 다른 부분이 있으면 그 부분만 업뎃 함

 

 

src/App.js( react, 함수형 컴포넌트 )

import React from 'react';

export const App = () => {
  return <div>Hello world</div>;
}

export default App;
 

 

src/App.js ( react, 클래스형 컴포넌트 )

import React from 'react';

class App extends React.Component {
  render() {
    return (
      <div>
        Hello World!
      </div>
    )
  }
}

export default App;

 

src/index.js ( react DOM, 랜더 해주는 곳 )

import ReactDOM from 'react-dom';
import App from './App.js';

ReactDOM.render(
  <App>
  </App>,
  document.getElementById('root')
);

 

Posted by 넓스
카테고리 없음2021. 8. 1. 02:36

사실은 굉장히 복잡하다.

 

행렬로 이루어진 DB라 할지라도 어쩌면 3차원 공간인 우리 실세계를 

 

2차원으로 표현한다는게 직관적으로 생각해봐도 복잡하다.

 

그렇기 때문에 DB를 잘 배열하고 직관적으로 배열하고 조직화하는게 중요하다.

 

오죽하면 DBA 라는 직업까지 있겠는가.

 

이 DB를 바탕으로 SW 를 작업하기 때문에, DB가 직관적으로 잘 짜여진 환경이라면 SW 를 작성하기에 아주 천국같은 환경이라 하겠다.

 

원하는 DB를 제공할테니, 마음 껏 그 위에서 뛰어놀아 보라(정확성을 놓치지 않으면서 '효율성을 극대화' 해보라) 이런 느낌인 것.

Posted by 넓스
개발 :: DB == 행렬2021. 8. 1. 02:31

프로세스가 하나 진행하면서,

변수 하나를 할당해서 거기에 데이터를 집어넣는 메모리(힙이든 스택이든) 저장 부터

프로세스가 꺼지더라도 휘발되지 않고 남아있을 수 있도록 하는 파일로의 저장까지.

 

'개발 :: DB == 행렬' 카테고리의 다른 글

실제 세계를 어떻게 표현할 것인가?  (0) 2021.08.01
Posted by 넓스
개발 :: DB == 행렬2021. 8. 1. 01:37

예를 들어보자.

 

교실 하나에 있는 학생 하나하나의 이름을 저장하는 DB를 만들고 싶다면.

 

 

num      이름

1    빅쇼

2    락밴댐

3    춘향이

4    방자

5    ...

6    ...

7    ...

8    ...

9    헐크

10     토르

 

이런식으로 저장할 것이다.

 

num은 내가 임의로 붙인 것이다. 저게 있어야 SQL 에서 편해진다. 저게 유일무이한 학생 한명이다 라는 그런걸 의미해준다.

 

즉, 토르는 10 번이라 되어있다. 다른 num에 같은 이름이 있을 순 있지만, num이 10이고 이름이 토르인 사람은 현재 가리키고 있는 대상밖에는 없다.

 

이런 이유 때문에, num을 붙여주면 그 대상이 분명해지는 효과가 있다.

 

내가 추후에 그 대상의 특징을 더 추가하고 싶거나 수정하고 싶거나 혹은 아예 그 대상을 없애고 싶을 때

대상 지목이 num 덕에 아주 편해진다.

 

num이나 이름을 column이라고 하고

그 각각 한줄 한줄을 row 라고 한다.

Posted by 넓스
개발자 일기장2021. 8. 1. 00:47

개발자의 길은 다양하다.

 

컴퓨터 공학을 전공한 난 적성은 확실히 맞다.

 

어떤 친구는 공기업에 입사한다. 어떤 친구는 나와 같이 사기업에 입사한다.

 

공기업에도 종류가 많아서 실제적인 개발을 하는 부서도 있겠지만.

그렇지 않은 곳이 많다고 알고 있다. (실제적인 개발 프로젝트나 이런 것은 적다고 알고 있다.)

 

사기업도 대기업과 중견 , 중소기업으로 나뉜다.

대기업은 의외로 외주를 많이준다고한다. 

그래서 대중적으로 생각하는 개발의 업무는 중견/중소 기업에서 많이 한다고 생각한다.

 

나는 현재 300명 정도 근무하는 개발 기업에 종사한다.

 

물론 약 100명 정도는 비개발 부서가 있다면, 나머지 200명은 개발직이다. 

전체 인원의 2/3가 하나의 프로젝트를 위해 개발을 진행하는 회사는 드물다고 알고 있다.

무튼, 나는 SW 개발자로서 현재 대규모 프로젝트를 진행하는 회사에 종사한다.

현재까지는 약 7개월 근무중인 파릇파릇한 그러나 어느정도 개발 프로세스를 경험해본 사람이다.

 

적성을 얘기하다가, 조금 세서, 여기까지 얘기가 왔는데 어느정도 내 백그라운드를 얘기한 셈이 되었다.

다시 본론으로 돌아와 개발을 하면서 내 적성에 너무 잘 맞다. 이게 무슨 말이냐,

일이 일처럼 느껴지지 않고. 아니, 느껴지나 그 시간이 집중도가 너무 높아 순식간에 흘러간다.

다른 생각을 하지 않고 일만 하는데 말이다. 그게 나는 적성에 맞는 일이라 생각한다. 

정신적으로는 즐겁다. 육체적으로 힘들 수는 있다. 그런 생각이 현재까지 이어지고 있고.

현시점에서 그러니 나는 적성에 맞다 라고 생각하는 것이다.

 

향후 어떻게 될는지는 모르겠지만, 단순히 신입사원의 일 적응에서의 흥미라고는 생각하지 않는다.

왜냐하면 개발 자체에 대한 나의 호기심은 대학 4년과 그 전의 몇년의 기간, 그리고 현재까지 흔들림 없기 때문이다.

그 흥미의 형체는 오히려 점점 구체화되어가면서 더욱 재밌어지는 중이다.

 

나는 개발이 잘 하고 잘 못하고의 그 경계가 기준을 어떻게 잡느냐에 따라 달라진다고 생각한다.

이게 무슨말이냐 하면, 개발이라함은. 

내가 경력이 오래되진 않았지만, 현재의 식견으로는 개발은 단순히 '코딩' 만을 의미하진 않는다.

 

개발 프로세스를 보면 = 고객의 니즈 + 개발 ( DB , SW ) 이렇게 정리할 수 있을 것 같다.

 

말 그대로, 고객의 니즈를 얼마나 잘 파악하느냐도 개발의 한 요소고.

흔히 얘기하는 알고리즘은 SW에 속한다.

 

대박난 어플을 개발한 사람을 대단한 개발 실력자라고 한다면,

그 사람이 단순히 코딩만 잘해서 개발을 잘한다 라고 정의할 순 없다.

 

고객의 니즈를 얼마나 잘 파악했느냐. 즉 아이디어다. 

아이디어는 얼마나 코딩을 잘했느냐 잘 못했느냐와는 동떨어진 이야기다.

비개발자도 얼마든지 아이디어를 낼 수 있기 때문이다.

요즘 시대는 HW 가 엄청나게 발전한 시대다. 코어며, ram이며. 

그래서 SW 의 효율성이 덜 강조되는 시대에 산다.

즉 이게 무슨 말인지, 쉽게 얘기하자면. 비개발자도 더하기 연산 열번으로 개발을 할 수 있다는 말이다.

개발자는 잘 알아서 곱하기 연산 한번으로 할 수도 있지만, 비개발자는 더하기 연산 열번으로 조금 비효율적인 개발을 할 수 있다는 말이다.

하지만 겉으로 보이는 기능은 똑같다. 

물론 효율성이 아주 강조되는 그러한 SW 개발이 필요한 경우도 있을 것이다.

기왕이면 효율성이 높으면 좋으나,

하지만 말하고자하는 것은 개발이라는 게 단순히 코딩에 국한되지 않는다 라는 것이다.

 

이빨이 없으면 입술로도 개발할 수 있는 것이 개발의 세계라 생각한다.

 

하다보면 는다. SW 는. 나는 무엇보다도 '아이디어'가 본질이라 생각한다.

 

그래서 하고자하는 이야기가 뭐냐 ?

 

이렇게 예를 들고 싶다.

 

1달된 비전공자 개발자 vs 10년된 전공자 개발자 가 어플을 만든다고 가정하자.

누구 것이 더 흥행할 것 같은가?

나는 여기의 답을 감히 ' 더 재밌게 만든 사람 ' 이라고 하고싶다.

 

이 처럼 돈을 많이 벌어내는 사람을 개발을 잘한다의 기준으로 삼으면 위와 같은 답이 나온다.

개발보단 마케팅력 사람들의 심리를 잘 간지럽히는 아이디어를 가진자 개발을 잘하는 사람이라는 결론인 셈이다.

 

혹자는 유지보수를 하기 좋게 개발을 하는사람이 개발을 잘한다 라고한다면, 그 기준이라면

주석을 잘 다는 사람. 변수명을 깔끔하고 직관적으로 작명하는 사람. 코딩룰이 아주 직관적이어서 누가봐도 깔끔하게 읽히는 코드를 짜는 사람. 설계가 깔끔하여 모듈별 시퀀스가 명쾌한 사람. 클래스 하나만 봐도 그 목적성이 뚜렷하게 잘 만든사람. 이런 사람이 개발을 잘하는 사람이라고 할 수 있을 것이다.

 

딱 개발을 잘한다가 뭐라고 하기는 어려운 것 같다. 

Posted by 넓스

서버를 nodeJS로 작성한 것이다.

 

 

'KOCW > 코틀린 안드로이드 스튜디오 개발' 카테고리의 다른 글

서버 구축  (0) 2020.11.09
Posted by 넓스
카테고리 없음2020. 11. 29. 07:17

x축,y축,z축 물질적 공간에서 정의되는 웬만한 것들은 자료구조로 표현할 수 있다.
형태를 표현하기 어렵지만, 크기/무게/갯수의 증감은 표현이 가능하다.
(3차원의 형태를 2차원으로 표현하면 매우 복잡하게 나타내려면 나타낼 순 있다.)
(고려할게 많기 때문에 필드도 많고 데이터도 많아질 것이다)
(ex.색상, x축에서봤을때 점들의 값, 명암 등 y축에서도 마찬가지, x축에서도 마찬가지)

 

포인터 자료형도 마찬가지다.
포인터는 그저 '주솟값을 담는' 자료구조야 라고 하는 담는 자료의 특성이 추가되었을 뿐,
위에서 언급한 자료구조라는 측면에서는 똑.같.다.
그러니 포인터라고해서 특별히 겁내거나 할 필요가 없다.

Posted by 넓스
개발 :: SW == 알고리즘2020. 11. 18. 15:08

 

사고
접근법
구현

결과 :

'개발 :: SW == 알고리즘' 카테고리의 다른 글

알고리즘 문제풀이  (0) 2020.11.17
Posted by 넓스
개발 :: SW == 알고리즘2020. 11. 17. 12:32

 

· 알고리즘과 자료구조는 구현 도구..

· 문제를 보고 해결하려고 노력하다보면  '어떠어떠한 기능이 있으면 참 좋겠는데...'라고 생각들 때가 있다.
그 부분 자료구조와 알고리즘이 필요한 부분이라고 생각한다.

· 자유로운 사고를 방해받아서는 안된다  그 사고를 구현하는 데 있어서 더 효율적이고 덜 효율적인 구현방법이 있을 뿐이지.
그 중 효율적인 구현방법이 바로 당신이 알고있는 유명한 알고리즘/자료구조일 것이다.

문제를 보고, 해결하는 능력은 별개인 것이다. 이는 난 얼마나 많은 문제를 직면해보았는지 즉, 경험의 문제라고 생각한다.
(똑똑한 사람은 처음보는 문제도 쉽게 길을 볼 것이지만..) 무튼, 해결의 길이 안보이면, 구현은 당연히 못하게 된다.

 

· 함수를 왜쓸까?

반복해서 쓰이고 , 특정 기능을 수행하는 게 필요할 때 함수를 쓴다. 리턴값,인자는 자유롭게!

 

 

'개발 :: SW == 알고리즘' 카테고리의 다른 글

구르미 알고리즘 근묵자흑 문제  (0) 2020.11.18
Posted by 넓스

-

· 인터럽트 번호(HW 中 IRQ번호)에 대해서 껐다(mask) 켰다(unmask) 가능
· CPU에 대해서도 인터럽트 번호 껐다가 켰다가 가능.

- 인터럽트 관리가 필요한 경우
  · 인터럽트 핸들러가 사용하는 전역 자료구조에 접근할 때
    · 경쟁 상태 -> critical section -> semaphore로도 처리할 수 있음 -> schedule(cpu 가져감)
  · 인터럽트 핸들러는 매우 빨라야한다. CPU 빼앗겨서는 안됨. semaphore는 cpu를 가져감.
     => 따라서 CPU 발생하지 않는 인터럽트 사용.
  · 누가?
    · 후반부처리, 시스템 호출
    · 인터럽트 핸들러가 받고, 많은 부분을 후반부로 처리(대체로 kernal thread에서 처리) 를 넘긴다.

- 인터럽트 번호 확인
  · cat /proc/interrupts

- 인터럽트 관리 함수
  · 하드웨어
    · 인터럽트 발생시 해당 irq 번호의 인터럽트는 mask 된다.(꺼진다.)
    · 그 다음부터는, 해당 irq 번호의 인터럽트가 발생하면 block 된다.
    · cpu에 대한 인터럽트 mask 는 드물다.
  · 소프트웨어
    · irq 번호나 CPU에 대해 인터럽트를 mask 할 수 있다.
      · 여러가지 interrupt mask 함수들이 제공된다.

- CPU에 대한 interrupt mask 함수들

  · local_irq_disable()
    · 현재 CPU에 대한 interrupt를 mask 한다.
    · header : include/linux/irqflags.h
  · local_irq_enable()
    · 현재 CPU에 대한 interrupt를 unmask 한다.

=> 두 함수는 nested call 에서 문제가 발생. 

 

  · local_irq_save(flags);  // save는 매크로다. 따라서 flags 값이 바뀐다.
    · unsigned long flags
    · 현재 CPU에 대한 interrupt 상태를 flags 에 저장하고, 이 CPU에 대한 interrupt를 mask 한다.
  · local_irq_restore(flags);
    · CPU에 대한 interrupt 상태를 flags 값으로 복원.

=> 두 함수는 nested call 에서 문제 해결

- IRQ 번호에 대한 interrupt mask
  · void disable_irq(unsigned int irq); // <-> enable_irq(irq)
    · header file : include/linux/interrupt.h
    · irq: mask 하려는 irq 번호
  · disable_irq() 호출 시 관련 irq의 interrupt handler가 이미 실행 중이면 어떻게 하나?
    · Ex. 커널스레드나 시스템콜에 의해 CPU1(disable_irq())을 호출 하려는데 , CPU0는 interrupt handler를 사용중.
    · 실행 중인 interrupt handler 가 끝날 때까지 대기한 후 interrupt mask
      · schedule 아님. busy waiting.
  · interrupt context(후반부처리) 에서 사용 가능
    · 하지만 가급적이면 interrupt context에서 사용하지 않는 것이 좋다.
  · Nested call 가능.

Posted by 넓스