사는동안 한번은 팔아봐라 (책표지)

월급쟁이에서 월 1억 수익까지! 『사는 동안 한 번은 팔아봐라』 서과장 리뷰

"팔기를 두려워하지 마라. 살면서 한 번은 반드시 팔아봐야 한다"

 

이렇게 술술 읽히는 책는 정말 오랜만인거 같다.

너무 빠져들어서, 지하철 정거장을 지나칠뻔하고, 더 읽고 싶은데 멈춰야할때 아쉬운 마음이 정말 많이 들었다.

N-job러를 꿈꾸는 직장인이 봐야할 필독서가 아닌가 싶네요!

강추입니다.


📖 책 내용 요약: 평범한 직장인의 경제적 자유 도전기

🏢 김 차장의 변화 스토리

이 책은 단순한 자기계발서가 아니라 실제 사례를 바탕으로 한 스토리텔링 방식으로 구성되어 있어요.

주인공은 평범한 회사원 김 차장입니다. 매월 통장 잔고를 보며 한숨만 쉬던 그가, 성공한 선배인 서과장의 조언을 받아 부업을 시작하면서 벌어지는 변화의 이야기죠.

💡 핵심 메시지: "팔기"의 중요성

서과장의 가이드에 따라 김 차장이 퇴근 후 부업으로 시작해 월 1억 원의 수익을 만들어내기까지의 과정이 단계별로 자세히 나와있어요.

책에서 강조하는 핵심은 바로 **"팔기"**입니다. 우리는 살면서 무언가를 팔고 있지만, 정작 그것을 인지하지 못하고 있다는 거예요.

  • 직장인은 시간과 노동력을 팔고 있어요
  • 사업가는 상품과 서비스를 팔고 있고요
  • 크리에이터는 콘텐츠와 아이디어를 팔고 있죠

🎯 단계별 실행 가이드

  1. 마인드셋 변화: 소비자에서 판매자로 전환
  2. 아이템 발굴: 내가 가진 것 중 팔 수 있는 것 찾기
  3. 플랫폼 활용: 온라인 판매 채널 구축
  4. 마케팅 전략: 고객의 마음을 사로잡는 방법
  5. 수익 극대화: 단순 판매에서 비즈니스 모델로 확장

💎 인상 깊었던 구절들

읽으면서 밑줄 치고 또 치게 된 구절들을 정리해봤어요:

"팔지 않으면 가난하다. 팔면 부자가 된다."

이 문장을 보는 순간 정말 소름이 돋았어요. 너무나 단순명료하면서도 강력한 메시지였거든요.

"당신이 가진 모든 것은 누군가에게는 필요한 것이다."

평소에 "나는 팔 게 없어"라고 생각했던 제 고정관념을 완전히 깨뜨린 문장이었습니다.

"실패는 팔지 않았을 때 일어난다. 팔기 시작하면 성공은 시간문제다."

도전하기를 주저하던 제게 용기를 준 말이에요.

"부업이 본업이 되고, 취미가 사업이 되는 시대다."

요즘 시대상을 정확히 반영한 표현이라고 생각해요.


🌟 나에게 깊은 깨달음을 준 인사이트

1️⃣ 모든 사람은 이미 '판매자'다

가장 큰 깨달음은 우리 모두가 이미 무언가를 팔고 있다는 사실이었어요.

저 역시 직장에서 제 시간과 능력을 팔고 있었지만, 그걸 '판매'라고 생각해본 적이 없었거든요. 이 관점을 바꾸니까 제가 가진 모든 것들이 다르게 보이기 시작했어요.

  • 제가 좋아하는 영화 리뷰 → 콘텐츠로 판매 가능
  • 요리 취미 → 레시피나 쿠킹클래스로 판매 가능
  • 외국어 실력 → 번역이나 과외로 판매 가능

2️⃣ '완벽함'보다 '시작'이 중요하다

책을 읽기 전엔 "내가 뭘 팔 수 있을까? 전문성이 부족한데..."라는 생각에 갇혀있었어요.

하지만 김 차장도 처음엔 완전 초보자였거든요. 중요한 건 완벽한 준비가 아니라 일단 시작해보는 것이라는 걸 깨달았습니다.

3️⃣ 경제적 자유는 선택이 아닌 필수

요즘 같은 시대에 한 가지 수입원에만 의존하는 것은 위험하다는 생각이 강하게 들었어요.

물가는 계속 오르는데 월급은 그만큼 오르지 않죠. 노후 준비도 걱정이고요. 이 책을 통해 부업이나 사업이 사치가 아니라 생존을 위한 필수라는 걸 실감했습니다.

4️⃣ 디지털 시대의 기회

과거와 달리 지금은 누구나 쉽게 판매할 수 있는 환경이 구축되어 있어요.

  • 온라인 쇼핑몰 (네이버 스마트스토어, 쿠팡 파트너스 등)
  • 콘텐츠 플랫폼 (유튜브, 인스타그램, 블로그 등)
  • 중고거래 플랫폼 (당근마켓, 중고나라 등)

이런 플랫폼들을 잘 활용하면 정말 누구나 판매자가 될 수 있다는 걸 깨달았어요.


🎯 이 책을 추천하는 이유

✅ 이런 분들에게 강력 추천!

  • 월급만으로는 부족하다고 느끼는 직장인
  • 부업이나 창업을 고민하고 있는 분
  • 경제적 자유를 꿈꾸지만 뭐부터 해야 할지 모르는 분
  • 판매에 대한 막연한 두려움이 있는 분

📚 이 책의 장점

  1. 스토리텔링 방식으로 재미있게 읽힘
  2. 구체적인 실행 방법 제시
  3. 현실적이고 실용적인 조언
  4. 부담스럽지 않은 분량으로 부담 없이 읽을 수 있음

 

📌 책 정보

  • 제목: 사는 동안 한 번은 팔아봐라
  • 저자: 서과장
  • 페이지: 약 200페이지
  • 추천도: ⭐⭐⭐⭐⭐ (5/5)

🔖 이 글이 도움이 되셨다면 좋아요와 댓글 부탁드려요! 📚 다른 독서 리뷰도 확인해보세요!

 

#사는동안한번은팔아봐라 #서과장 #부업 #재테크 #경제적자유 #직장인부업 #창업 #독서리뷰 #책추천 #자기계발

 

 

 

'기타 > 독서' 카테고리의 다른 글

미러 | 루이스 L. 헤이  (0) 2025.10.23
저는 브랜딩을 하는 사람입니다 – 허준  (0) 2025.09.28
라커룸 리더십 (존고든, 마이크 스미스)  (1) 2025.09.13
거인의 노트 (김익한)  (0) 2025.09.07
투자의 태도  (1) 2025.09.05

 

 

작업과정 요약:

1. 동화 데이터 수집

2. google cloude gemini로 줄거리 요약 및 이미지 생성용 동화 Scene 스크립트 작성

3. google cloude Text-to-Speech 모델로, 한국어/영어 오디오 변환

4. google cloude  이미지모델로 동화 씬 이미지 11장 생성(썸네일1장 + 스토리10장)

5. Vrew로 이미지 + 오디오 간단 합성

6. 유튜브 제목/설명/태그 Chatgpt로 최적화 및 업로드

 

(google colude 모델 비용은 300$ 무료로 제공되는걸로 사용시 영상 50편 이상 제작가능)


1. 영미 고전동화 다운로드(저작권이 60~70년 지난 데이터)

 

2. google cloude gemini로 줄거리 요약 및 이미지 생성용 동화 Scene 스크립트 작성

- gemini로 작성할 Scene 예시(0번, 썸네일)

- (2.5-flash-lite 저비용) https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-lite:generateContent

"scenes": [
    {
      "scene_id": 0,
      "title": "피터팬",
      "title_en": "Peter Pan",
      "one_line": "네버랜드의 신비로운 모험!",
      "script_ko": "창문 너머로 들려오는 '어린 시절'이라는 노래에 이끌려, 웬디와 형제들은 밤하늘을 나는 신비로운 소년 피터팬을 만나게 됩니다.",
      "script_en": "Drawn by the song of 'childhood' from beyond the window, Wendy and her brothers meet the mysterious boy Peter Pan, who flies across the night sky.",
      "image_prompt": "A whimsical night scene with a starry sky over a London rooftop. A silhouette of a young boy with a mischievous grin, Peter Pan, is seen flying with two young children, Wendy and her brothers, holding his hands. The moonlight casts a magical glow. The style should be a classic storybook illustration with rich, deep blues and silvers, emphasizing wonder and adventure. Consistent character designs for Peter, Wendy, and her brothers should be maintained throughout.",
      "negative_prompt": "photorealistic, modern, blurry, disfigured, extra limbs, low quality",
      "seed": 1000,
      "painting_style": "storybook watercolor illustration, vibrant colors, consistent character design"
    },

 

3. google cloude Text-to-Speech 모델로, 한국어/영어 오디오 변환

 - (모델은 검색후 돌려가며 음성 테스트 및 선택) https://texttospeech.googleapis.com/v1/text:synthesize

 

4. google cloude  이미지모델로 동화 씬 이미지 11장 생성(썸네일1장 + 스토리10장)

  * 핵심 *

    - google cloude 이미지 생성모델은 한번 4장까지 생성해서 출력할수 있다고 한다 -> 시도했지만 실패하였다.

    - 할수 없이, 한장씩 전달해서 이미지를 생성해야했다.

      * 그런데 문제는 이렇게 하면, 이미지 스타일이 제각각이고 주인공 생김새나 표현도 다 다르게 생성되는 문제점이 발생한다.

      * 그래서 나는, 11장의 이미지를 차례로 전달하되, 전체 줄거리도 전달하여 전체 맥락을 제공하였다.

      * 추가로 Seed값을 고정시키니 11장 이미지 모두 유사한 스케치 패턴이 적용되었다.

 

5. Vrew로 이미지 + 오디오 간단 합성

 

6. 유튜브 제목/설명/태그 Chatgpt로 최적화 및 업로드

 

 - 태그

  • n8n
  • 유튜브 쇼츠 만들기
  • 유튜브 자동화
  • 유튜브 무료 영상 제작
  • 쇼츠 자동 제작
  • 영상 편집 자동화
  • 유튜브 채널 운영 꿀팁
  • 유튜브 크리에이터 툴
  • 노코드 영상 제작
  • 유튜브 쇼츠 제작 프로그램

 

n8n구동시간 5분, Vrew 이미지/동영상 편집시간 15분, 기타 등 해서 30분안에 업로드 완료!

+ 구글 Cloude 무료 크레딧으로 AI 모델 공짜 사용!

 

 

[1분 동화] 피터팬, 네버랜드로 떠나는 짧은 여행

https://youtube.com/shorts/r74AC9PoOQY?feature=share

 

 

매트릭스(matrix, 행렬)
  같은 자료형의 여러개의 데이터를 2차원 구조로 저장한다.
  행: 가로줄, row
  열: 세로줄, column  

매트릭스 생성
  matrix(2차원 벡터)
  벡터를 기반으로 행렬을 생성한다.
  ex) 20칸 짜리 벡터를 4행5열의 매트릭스로 생성

  matrix 생성 함수(기능) 존재, arguments(인수) 정보
    (data) 값 전달
    (nrow) 행의개수
    (ncol) 열의개수
    (byrow) False(데이터를 채우는 방향, 기본 열방향), True(행방향)

 

###########################
# 매트릭스 생성
help(matrix)

matrix(data = 16)   # 데이터 1개
matrix(data = 1:16)
matrix(data = 1:16, nrow=4, ncol=4)  # 값이 채워지는 방향 세로
matrix(data = 1:16, nrow=4)
matrix(data = 1:16, ncol=8)
matrix(data = 1:16, ncol=7) # 부족한값은 재사용

# byrow=TRUE : 가로 방향 채우기
matrix(data = 1:16, nrow=4, byrow=TRUE)
# 가로 index, 세로 index가 존재
matrix(data = 1:16, nrow=2, byrow=TRUE)

 

 

매트릭스와  연산자


  매트릭스와 비교 연산자를 비교하면 결과가 논리벡터가 나온다
  *매트릭스와 연산자(비교, 산술 등)를 사용하면 element(요소)간 연산 수행

  m2 <- matrix(data=1:4, nrow=2)
  # 1 3
  # 2 4
  m2 > 2
  # F T
  # F T


매트릭스에서 요소 가져오기


  매트릭스명[행 인덱스 번호, 열 인덱스 번호]
  * 매트릭스의 요소는 행과 열 인덱스 번호 2개를 가지고 있다.

  1. 하나의 행 요소 가져오기
    매트릭스명[행 인덱스번호, ]
    * 생략된 인덱스 번호는 모든 것(열)을 의미
  2. 하나의 열 요소 가져오기
    매트릭스명[, 열 인덱스번호]
    * 생략된 인덱스 번호는 모든 것(행)을 의미
  3.하나의 요소 가져오기
    매트릭스명[행 인덱스번호, 열 인덱스번호]
  4.특정 행과 열을 제외한 데이터 가져오기
    매트릭스명[-제외할 행 인덱스번호, -제외할 열 인덱스번호]

 

###########
# 매트릭스에서 요소 가져오기
m1 <- matrix(data = 1:16, ncol=4)
m1
# 데이터 10의 요소 가져오기
m1[2,3]
# 데이터 15의 요소 가져오기
m1[3,4]

# 매트릭스에서 2행의 요소 가져오기
m1[2,] # 비어있으면 모든 요소
m1[,3]

# 부분 요소 가져오기
m1[1:2, ]k

# 매트릭스 구조로 가져오기, drop=F 속성 사용
m1[, 3, drop=F]

# 1행,3행의 2열,4열의 데이터 가져오기
m1[c(1,3), c(2,4)]

#음수 인덱스(제외하기)도 행과 열 모두 사용가능
m1[-1, -1]

# 쉼표 없이 인덱스 번호를 가져오면, 벡터의 인덱스가 됨
# 매트릭스를 벡터로 변환후 해당 인덱스를 가져옴
m1[1]
# 기본 열단위로 벡터를 풀어서 반환함
m1[3]

# 행단위 매트릭스의 벡터 변환후 값 확인하기
m2<-matrix(data=1:16, ncol=4, byrow=TRUE)
m2
m2[3]

# matrix를 vector로 명시적으로 변환하여 확인
m2_v = as.vector(m2)
m2_v
m2_v[3]

# maxtrix를 행단위로 벡터로 변환하는 방법
# T(Transpose): 전치행렬 만듦, 대각선 방향 치환
m2
t(m2)
m2_v_t = as.vector(t(m2))
m2_v_t
m2_v_t[3]

# m1에서 10보다 큰 요소 가져오기
m1>10
m1[m1>10]

# 1행에서 10보다 큰 요소 가져오기
m1[1, m1>10] # 에러
m1[1, m1[1,] >10] 
m1[1,] > 10

#문) 3열에서 10보다 큰 요소 가져오기
m1 <- matrix(data = 1:16, ncol=4)

#과제3.
#아래의 코드를 실행했을때 1 37 NA를 가져오게 됩니다.
#그이유는?
nums <- c(1, 3, NA, 10, 37)
nums[c(T,F,F,F,T,T)]

###############################
# 매트릭스를 인덱스로 사용하기
m1
m_idx = matrix(data=c(1,1,2,2), nrow=2, byrow=T)
m_idx
m1[m_idx]

 

*만약에 인덱스 자리에 매트릭스를 사용한다면,
   1) 논리 매트릭스
     기준 매트릭스와 인덱스로 사용하는 매트릭스가
     둘다 벡터로 변환되어 벡터(논리벡터)로 사용된다
     -> 결과가 벡터로 나온다.
   2) 숫자 매트릭스
     인덱스로 사용하는 매트릭스의 각 행 요소를 
     기준 매트릭스 행과 열 인덱스 번호로 사용한다.

 

매트릭스의 정보


  1. str(): 매트릭스의 정보
  2. length(): 매트릭스의 전체 데이터의 개수
  3. dim(): 행과 열의 수, dimension(차원)
    * 직선: 1차원
      표:  2차원
      공간: 3차원
  4. nrow(): 매트릭스의 행의 개수
  5. ncol(): 매트릭스의 열의 개수
  6. dimnames(): 매트릭스의 행과 열의 이름
    * rownames(): 행이름
    * colnames(): 열이름
    -> 매트릭스도 벡터와 마찬가지로 이름을 붙이면
       인덱스번호 대신 이름을 사용할 수 있다.

#######################
# 매트릭스 정보 확인

# 매트릭스 정보확인: 자료형, 행번호/열번호, 총 데이터
str(m1)
# 매트릭스 데이터 개수
length(m1)

class(m1) # 자료구조의 자료형 
mode(m1)  # 데이터의 자료형
typeof(m1)# 데이터의 자료형(내부저장관점)

#벡터여부 확인
is.matrix(m1)
is.matrix(1:3)
      
#행/열의 개수
dim(m1)
#행/열의 이름
dimnames(m1)
colnames(m1)
rownames(m1)

#행/열에 이름 붙이기
rownames(m1) <- c("R1", "R2", "R3", "R4")
m1
colnames(m1) <- c("C1", "C2", "C3", "C4")
m1

colnames(m1)
rownames(m1)
dimnames(m1)

m1[1,]
m1["R1",]

#벡터의 데이터 추가
v1<-1:5
v2<-10:15
v1; v2
v3 <- c(v1, v2)
v3
v4 <- c(v3, 100)
v4

# 매트릭스의 추가(노트정리 후 추가 실습)
m3 <- c(m1, matrix(1:4, 2))
m3

 

매트릭스 사용


  1.추가
    행추가: rbind(기존 매트릭스, 추가할 행)
    열추가: cbind(기존 매트릭스, 추가할 열)
  2.수정
    매트릭스명[행 인덱스번호, 열 인덱스번호] <- 새로운 값
  3.삭제
    매트릭스명 <- 삭제할 요소를 제외하고 가져온 매트릭스

 

########
# 매트릭스 사용
# 매트릭스는 벡터와 다르게 길이를 넘은
# 인덱스를 사용하면 에러 발생
m1[5,]

#추가
# cbind:열추가
m1
cbind(m1, 1:4)

#추가할려는 벡터를 변수에 담으면
#행 또는 열의 이름을 벡터명으로 자동 사용
C5 <- 1:4
cbind(m1, C5)
R5 <- 10:13
rbind(m1, R5)

help(rbind)
# 행렬끼리 연결시, 행과, 열의 개수가 동일해야함
rbind(m1, matrix(20:35, 4))

# 수정
m1[1,1] <- 1000
m1

m1[2,] <- 99
m1

# 수정할려는 값의 길이와 행렬의 행,열의 길이가 일치해야함
m1[3,] <- 1:6
cat(length(1:6), length(m1[3,]))
m1

#삭제
m1[-2, ]
m1_d = m1[-2, ]
m1_d

# 매트릭스 연산
m2 <- matrix(1:6, nrow=2)
m2

# 10이 6개 들어가 있는 벡터 생성
m3 <- matrix(rep(10, 6), nrow=2)

m2 + m3
m2 * m3

# 매트릭스끼리는 서로 길이가 같아야 연산가능
m4 <- matrix(rep(10,4), nrow=2)
m2 + m4

m5 <- matrix(rep(10,6), ncol=2)
m5
m2

# 행렬의 내적
# 같은 위치 원소끼리 곱한 뒤 합산
m2 %*% m5

라커룸 리더십 요약

저자: 마이크 스미스(Mike Smith), 존 고든(Jon Gordon)
핵심 주제: 팀과 조직에서 가장 먼저 ‘라커룸’에서 이겨야 한다는 개념. 즉 경기 시작 전에, 외형적 전략이나 기술보다 팀의 문화(Culture), 태도, 분위기, 관계 등이 이미 승패에 큰 영향을 미친다는 것. 리더는 라커룸 내부(구성원 간, 리더–팀원 간 관계 등)를 먼저 단단하게 만들어야 함.

7가지 핵심 원칙 (7 C's)

책은 “7 C’s”라는 프레임워크로 구성됨. 각각이 서로 연결되어 있고,

리더가 팀을 변화시키기 위해 연쇄적으로 작용할 수 있는 요소들:

핵심 내용
Culture 문화 팀이 어떤 가치를 갖고, 어떤 행동양식을 허용할지, 정체성이 무엇인지 정의함. 공유된 가치, 기대, 믿음 등이 행동을 결정하고 습관을 만들며 결과로 이어진다. 
Contagious Energy / Belief 전염성 있는 에너지 / 믿음 리더의 태도, 믿음, 긍정적 에너지는 팀원들에게 전염된다. 의욕, 낙관주의, 회복력 등이 중요. 
Consistent 일관성 리더의 말과 행동이 일치해야 하고, 규칙/가치/기준이 경기 전, 경기 중, 경기 후 모두에서 유지돼야 함. 일관성은 신뢰를 쌓는 핵심.
Communicate 소통 명확하고 개방적인 커뮤니케이션. 리더가 메시지를 명확히 전달할 뿐 아니라 듣는 것도 중요함. 피드백, 비판보다 제안 중심, 불만보다 해결책 중심.
Connect 연결 / 관계 구축 팀원 간, 리더-팀원 간의 신뢰와 유대. 서로를 인간으로서 이해하고, 서로의 배경/가치/힘든 점을 공유할 수 있는 관계. 연결이 있으면 어려움을 같이 이겨내고 협력 가능성이 높아짐. 
Commitment 헌신 팀 목표와 가치에 대한 몰입. 어려움에도 불구하고 포기하지 않고 지속적으로 노력함. 헌신이 행동으로 이어질 때 팀이 진짜 강해짐. 
Care 배려 / 관심 리더가 구성원의 개인적인 삶, 감정, 성장 등에 관심을 가질 때 팀원들은 자신이 존중받고 있음을 느낌. 이것이 팀의 몰입과 연결감 강화에 도움됨.

 


좋은 구절

1. 문화가 기대와 신념을 만든다.

    기대와 신념이 행동을 만든다.

    행동이 습관을 만든다.

    습관이 미래를 만든다.

    그 모든 시작은 문화다.

 

2. 리더십이란 목적과 열정, 낙천적 시간, 그리고 신념을 전달하는 것이다.

 

3. 일관성이 없다면, 팀원들의 신뢰를 잃은 것이다.

    신뢰를 잃는다면 라커룸에서 이미 진 것이다.

 

4. 소통 사이에 공백이 생기면, 부정적인 것들이 그자리를 채운다. 

    훌륭한 소통으로 공백을 메워라.

 

5. 개개인의 재능이 뛰어나지 않아도 팀워크는 재능을 이긴다.

 

6. 중요한 것은 여러분이 아니다.

    중요한 것은 여러분 자신을 팀에 헌신하는 것이다.

 

7. 리더가 뿌리가 아닌 과실에 초점을 맞추고, 팀원들을 키우는 과정보다는 결과를 걱정한다면,

    단기적으로는 살아남을지 몰라도 장기적으로 번창할 수 없다.

 

8. 진정한 위대함은 리더가 다른 사람들 안의 위대함을 끌어낼 때 달성되는 것이다.

 

9. 훌륭한 코치는 자신이 훌륭해서 성공하는 것이 아니라,

    남들의 훌륭함을 이끌어내기 때문에 성공한다.

 

10. 인성이 훌륭한 선수들이 바로 이기는 팀과 이기는 문화의 근간이 되는 벽돌이고,

      그 벽돌을 끈끈하게 뭉쳐주는 시멘트 역할을 하는것이 소통, 관계, 헌신, 관심이다.

 

11. 칭찬은남들앞에서 크게, 비난은 조용한 곳에서 속삭이듯 해야한다.

 

 

 

라커룸 리더십:성공하는 조직은 뿌리부터 진화한다, 리얼부커스

 

라커룸 리더십:성공하는 조직은 뿌리부터 진화한다 - 기획/시간관리 | 쿠팡

쿠팡에서 라커룸 리더십:성공하는 조직은 뿌리부터 진화한다 구매하고 더 많은 혜택을 받으세요! 지금 할인중인 다른 기획/시간관리 제품도 바로 쿠팡에서 확인할 수 있습니다.

www.coupang.com

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

 

 

#라커룸 리더십 요약

#팀 문화 구축 방법

#긍정적인 리더십

#리더의 일관성과 신뢰

#조직 문화 개선

#커뮤니케이션 전략

 

 

R 자료구조
  1.스칼라
  2.벡터
  3.매트릭스
  4.배열
  5.데이터프레임
  6.리스트
  7.팩터

 

---

 


1.스칼라(scala)


  길이가 1인 벡터, 하나의 데이터만 저장
  (skip) 출력시 [1] 값 이라고 표현되는 이유(뒤에서 설명)
'''
x <- 10      # 길이 1인 numeric 벡터
length(x)    # 1
'''

2.벡터(vector)


  같은 자료형을 가진 여러개의 데이터를 저장하는 구조
  1차원구조, 순서 개념이 있음
'''
v_num  <- c(1, 2, 3)         # numeric 벡터
v_char <- c("a", "b", "c")   # character 벡터
v_log  <- c(TRUE, FALSE)     # logical 벡터
'''

 

---

 

벡터


  [ 값1 ][ 값2 ][ 값3 ]...
  같은 자료형을 가진 여러 값들을 저장하는 1차원 구조
  하나의 자료형의 여러개 값들을 변수 1개로 관리
 
  여러개 값들이 나열되어 있어서 순서가 존재
  인덱스: 각 값에 부여된 순서번호, 1번부터 순차 증가

---

벡터생성


  1) c() 함수 (combine)
      c(값1, 값2, 값3...)
      여러개의 값을 하나의 벡터로 결합해서 생성

  2) seq() 함수 (sequence)
      seq(시작값, 끝값, 증감값)
      seq(from=시작값,to=끝값,by=증가값)
      시작부터 끝값까지 증감(또는 감소)하는 값들을 하나의 벡터로 생성

(실습)

c(1,2,3,4,5)
v1 <- c("a","b","c")
v1
# 출력 [1] "a" "b" "c"
# [1]의 의미 -> 첫번째 항목의 인덱스 번호 -> print(v1[1]) -> "a"출력

# 논리벡터
v2 <- c(T, F, T)

c(1, "hello", T) # 벡터는 하나의 자료형만 저장-> 문자가 존재하면 문자로 형변환
c(1, TRUE)       # 숫자,논리 -> 숫자로 형변환
c(1.7, 3, -10)   # 정수,실수 -> 실수로 형변환



  3) 콜론 연산자(:) *입력방법: shift + ;(세미콜론)
      시작값:끝값
      시작값부터 끝깞까지 1씩 증감/감소하는 숫자 벡터 생성
      
  4) rep() 함수(replicate)
      rep(벡터, times, each)
      기존 벡터를 복제해서 새로운 벡터를 만듦
      벡터의 요소(element)를 각각 each번 반복하고, 이 행위를 times번  반복하는 벡터생성
      *times나 each 하나만 쓸수도 있다.

(실습)
'''
# 콜론 연산자
1:5
5:1
-1:-10

# rep() 함수
rep(1:3, each=2)   #  1 1 2 2 3 3  *each: 요소반복
rep(1:3, times=3)  #  1 2 3 1 2 3 1 2 3  *times:대상 벡터 반복
rep(1:3, each=2, time=3) 
# 1 1 2 2 3 3 1 1 2 2 3 3 1 1 2 2 3 3


'''

---

벡터에서 요소 가져오기(인덱스 접근)
  # () 소괄호, {} 중괄호, [] 대괄호

  인덱스 번호 : 벡터에서 요소(element)를 접근할때 사용하는 정수
  v = c('a','b','c') 
        [1] [2] [3] -> 인덱스 번호, * 1부터 시작(다른언어는 0부터 시작)
                                 * 0번째 인덱스에는 빈벡터가 리턴된다.(length(v)=0)

  1.벡터에서 하나의 요소(element) 가져오기
    원하는 특정 요소를 가져올때는 해당 요소에 부여된 인덱스 번호 사용
    벡터명[인덱스 번호]
    ex) v[1] # 'a'

  2.벡터에서 여러개의 요소 가져오기
    여러개의 값들을 가져올때는 대괄호 안에 해당 요소들의 인덱스 번호가 담긴 벡터를 사용
      ex) v[1:2] # 'a', 'b' 
          *시작 인덱스 ~ 끝 인덱스까지 가져옴(다른언어는 보통 마지막_인덱스-1까지 접근)
          v[c(1,2)] # 'a', 'b'

      기타) v[5] = 'e'   # 오류발생 안함
           print(v) # 'a', 'b', 'c' NA, 'e' => 벡터의 재확장 규칙(NA가 들어감)

  3.벡터에서 특정 요소 제외하고 가져오기
    음수 인덱스를 사용하면 그 자리 제외하고 가져옴
    벡터명[-(제외할 여러개의 인덱스번호가 담긴 벡터]
       ex) v[-1] # 'b', 'c'
           v[-c(1,3)] # 'b'

  4.논리값 인덱스
    벡터를 사용해서 원하는 자리만 고른다.
    벡터의 사이즈만큼 논리벡터가 순차적으로 적용됨 + T인 값만 가져옴
       ex) v[c(T, F, T)] # 'a', 'c'
           #T T T 
           v[T] # 'a', 'b', 'c'
           v[F] # 빈벡터
  *조건을 통해서 특정 요소 가져오기
    1) 논리 벡터를 생성
    2) 벡터의 인덱스 자리에 논리 벡터를 적용
    3) 전체 요소에 논리값이 순차적으로 부여도미, 논리벡터가 TRUE인 값만 가져옴
      ex) num_vec[num_vec %% 2 ==0]

  5.이름 인덱스
     x <- c(a=100, b=200, c=300)
       a     b     c
     [100] [200] [300] 
     x['a'] # 100

---

# 벡터 생성
vec <- c("a", "b", "c", "d")
vec

# 벡터에서 하나의 요소 가져오기
vec[2]
vec[4]

# 벡터에서 여러개의 요소 가져오기
vec[1:2]
vec[c(1,2)]
vec[seq(1,2)]

# 벡터의 값을 다른 값으로 바꾸기
vec[1:2] <- c("A","B")
vec

# 벡터에서 특정 요소를 제외하고 가져오기
vec[1]
vec[-1]
vec[-4]

# 1번, 4번 제외하고 가져오기
vec[-c(1,4)]
vec[-(1:2)]

# 벡터에서 조건을 통해 특정 요소 가져오기
num_vec <- 1:5

#1 2 3 4 5
#T T T T T
num_vec[TRUE]
#F F F F F
num_vec[FALSE]
#T F T F T
num_vec[c(TRUE,FALSE)]
num_vec[c(F,T,F)]

# 벡터와 관계연산자
num_vec > 3
# 벡터의 모든 요소를 관계연사자를 통해 연산하고 그결과를 논리벡터로 생성한다.
num_vec[num_vec > 3]

#문) 2의 배수인 요소만 가져오기
# 나머지 연산자 활용(나머지가 0인경우)
num_vec %% 2
num_vec %% 2 == 0
num_vec[num_vec %% 2 == 0]

# 홀수만
num_vec[c(T,F)]
# 짝수만
num_vec[c(F,T)]

#문2) 3배수이거나, 4이상인 요소 가져오기, 힌트:논리연산자
num_vec%%3==0
num_vec>=4
num_vec%%3==0| num_vec>=4
num_vec[num_vec%%3==0 | num_vec>=4]

 

 

벡터의 정보
: str() : 벡터자료형/인덱스번호, 요소를 보여준다.
 ex) int [1:5] 1 2 3 4 5
: length() : 벡터의 길이 조회(요소개수)
 ex) 5
: names() 열이름 가져오기(함수)
 * names(벡터변수) <- c("이름1", "이름2", "이름3"...) : 열이름 부여 가능
   벡터의 열 이름은 중복되면 안됨, 한글사용X
 * 벡터의 열 이름을 지정하면 인덱스 번호 대신, 열이름으로 가져올수 있다.

 

# 벡터의 정보
str(num_vec)
length(num_vec)
names(num_vec)

ages <- c(35, 15, 23, 11)
names(ages) # NULL: 열 이름이 없다.

names(ages) <- c("A1", "A2", "A3", "A4")
names(ages)
ages

# 이름으로 요소 가져오기
ages[2]
ages['A2']
#여러 요소를 가져올때 쉼표를 쓰면 안됨
ages[c('A2','A3')]

# 특정 요소의 이름을 조회하기
names(ages[1])

# 이름을 사용해서 특정 요소 제외하기
# 음수는 사용할수 없음
names(ages) != 'A1'
ages[names(ages) != 'A1']

names(ages) <- 5:8 # 이름이 문자로 형변환됨
ages
ages["5"] # 문자형로 가져오기

 


벡터의 사용
  1. 벡터 값 추가
    벡터명[인덱스번호] <- 새로운 값
    벡터의[열이름] <- 새로운 값
  2. 벡터의 값 삭제
    벡터명 <- 벡터명[-삭제할 요소 인덱스]
  3. 벡터 값 수정
    벡터명[수정인덱스번호] <- 새로운값
    벡터명[열이름] <- 새로운값
    * 열이름수정: names(벡터변수)[index] <- "열이름"

 

#########################
# 벡터의 사용

names(ages) <- c("A1", "A2", "A3", "A4")
ages[5]
ages[5] <- 50
ages
ages[7] <- 45
ages
ages["A8"] <- 68
ages

# 벡터의 요소 수정
ages["A8"] <- 70
ages
ages["A4"] <- ages["A8"]
ages
ages[5] = 51

# 벡터의 요소 삭제
ages <- ages[-1]
ages

# 열이름 수정하기
# names로 열이름 벡터를 가져온뒤에 수정
names(ages)
names(ages)[5]="A5"
ages


### 과제
math_scores <- c(76.7, 87.3, 94.2, 70.6)
: 수학점수가 85점 이상인 학생들의 이름을 조회하기

########################
# 벡터의 연산
#산술연산자

v1 <- seq(10, 60, 10)
v1

v1>30
#각 요소에 연산이 적용
v1+5

#변수에 결과를 저장해야 반영된다.
v1
v1 <- v1+5
v1

# 벡터끼리 연산할때는 길이가 서로 다르면, 길이가 짧은 벡터의 요소를 재활용 한다.
v1 + 1:3
v1 + 1:4 # 에러:수행X, 경고:경고메세지+수행O
v2 <- v1 + 1:4
v2

v1
v1 > 30
v1 > 30:31

v1 * 3

 

 

'프로그래밍 > R' 카테고리의 다른 글

R언어, 제어문  (0) 2025.09.20
R 매트릭스 (matrix, 행렬)  (0) 2025.09.14
R 연산자  (1) 2025.09.08
컴퓨터 기초, 프로그래밍 기초(변수, 자료형)  (0) 2025.09.07
R 프로그래밍 개론  (0) 2025.09.06

연산자

  값을 계산하거나, 조작하기위해 사용하는 기호
  산술, 관계(비교), 논리, 할당 연사자 등

산술연산자 
  산술 연산자의 연산 결과는 수치형이 나온다.
  
  연산자       의미        예시
  ====================================
  +         더하기        5 + 8
  -         빼기          5 - 8 
  *         곱하기        5 * 8
  /         나누기        5 / 8
  %/%       몫           8 %/% 5
  %%        나머지        8 %% 5
  ^, **     지수(거듭제곱) 2^3, 2**3

(실습)

cat("덧셈 : ", 5 + 8)
cat("뺄셈 : ", 5 - 8)
cat("곱셈 : ", 5 * 8)
cat("나눗셈 : ", 5 / 8)
cat("몫 : ", 8 %/% 5)
cat("나머지 : ", 8 %% 5)
cat("거듭제곱 : ", 2^3)
cat("거듭제곱 : ", 2**3)

# 다른 자료형의 산술연산
"A" + "B"
"1" + 3
as.numeric("1") + 3
TRUE + TRUE
5 + TRUE


---

관계(비교) 연산자


  >, <, >=, <=, ==, !=
  관계 연산자의 연산결과는 논리형이 나온다(TRUE, FALSE)

  연산자    의미            예시        결과
  =========================================
  ==      같다            3 == 3     TRUE
  !=      같지않다         3 != 3     FALSE
  >       같다(초과)       5 > 2      TRUE
  >=      크거나 같다(이상)  2 >= 5     FALSE
  <       작다(미만)       5 < 5      FALSE
  <=      작거나 같다(이하)  5 <= 5    TRUE


논리 연산자
  논리 연산자의 연산결과는 논리형이 나온다(TRUE, FALSE)

  연산자    의미          예시            키보드입력
  ===============================================
  &      AND(그리고)     조건1&조건2      shift+7
  |      OR(또는)       조건1&조건2      shift+|(역슬러시)
  !      NOT(부정)      !조건1          shift+1

  *&(AND) : 두개의 조건이 모두 TRUE이면 TRUE
            한개라도 FALSE이면 FALSE
  *|(OR)  : 두개의 조건중에 하나라도 TRUE이면 TRUE
            모두 FALSE이면 FALSE
  *!(NOT) : 조건을 반대로 바꾼다(TRUE->FALSE, FALSE->TRUE)

---

(실습)

help() 함수: 도움말 보기
ex) help(print), help(cat)

# 관계연산자 실습 -> 결과는 논리형(TRUE, FALSE) 출력
cat("5 == 3 : ", 5 == 3)
cat("5 != 3 : ", 5 != 3)
cat("5 > 3 : ", 5 > 3)
cat("5 <= 3 : ", 5 <= 3)


# 문자 숫자 대소비교시, 강제형변환
'A' > 1   # TRUE
# 1) character로 변환
'A' > '1' 
# 2) ASCII(문자/숫자/기호 이진코드 표현)로 변환
utf8ToInt("A") # 65
utf8ToInt("1") # 49
'01' > '02'
utf8ToInt("01") # 48 49
utf8ToInt("02") # 48 50

# 숫자와 논리비교 : 논리가 숫자로 자동 형변환(T->1, F->0)
TRUE > 0
FALSE == 0

---

# 논리연산자 실습
num <- 5
#1 < num < 10

# 동시조건 표현 -> 논리연산자 사용

# AND : 둘다 참이여야 참
1 < num & num < 10
num > 1 & num < 10 # 가독성 좀더 좋다.

# OR :둘중에 하나만 만족하면 참
num <= 1 | num >= 10

cat("참 or 참 : ", TRUE | TRUE)     
cat("참 or 거짓 : ", TRUE | FALSE)
cat("거짓 or 거짓 : ", FALSE | FALSE) # 전기가 둘다 흐르지 않는다-> 모두 OFF(FALSE)
cat("참 and 참 : ", TRUE & TRUE)     # 전기가 모두 흐른다 -> 모두 ON(TRUE)
cat("참 and 참 : ", TRUE & FALSE)
cat("거짓 and 거짓 : ", FALSE & FALSE)

---

#숫자와 논리의 연산 : 0은 FALSE, 그외 모든 음수/양수 수치는 TRUE
-0.1 & 1  # TRUE
0 & 1 # FALSE

# not 연산자
!TRUE  # not TRUE
!FALSE # not FALSE


---

# 다음의 결과는?
1 + 2 * 2 
# 1 + (2 * 2)

TRUE | TRUE & FALSE
# TRUE | (TRUE & FALSE)

-연산자 우선순위 확인: ?Syntax

# 필요할때 아래를 참고해서 우선순위 파악
# *중요* 헷갈릴때(모호할때) -> 괄호를 쓰는게 좋은 코드 습관!

:: ::: access variables in a namespace
$ @ component / slot extraction
[ [[ indexing
^ exponentiation (right to left)
- + unary minus and plus
: sequence operator
%any% |> special operators (including %% and %/%)
* / multiply, divide
+ - (binary) add, subtract
< > <= >= == != ordering and comparison
! negation
& && and
| || or
~ as in formulae
-> ->> rightwards assignment
<- <<- assignment (right to left)
= assignment (right to left)
? help (unary and binary)

'프로그래밍 > R' 카테고리의 다른 글

R언어, 제어문  (0) 2025.09.20
R 매트릭스 (matrix, 행렬)  (0) 2025.09.14
R언어 벡터  (0) 2025.09.09
컴퓨터 기초, 프로그래밍 기초(변수, 자료형)  (0) 2025.09.07
R 프로그래밍 개론  (0) 2025.09.06

 

 

 

1. 책 내용 요약

김익한 교수의 『거인의 노트』는 성공한 사람들의 공통된 사고방식과 행동 패턴을 기록한 ‘성공의 인사이트 모음집’ 같은 책이에요. 저자는 단순히 "성공하려면 열심히 해라"라는 뻔한 이야기를 하지 않습니다. 대신, 역사 속 인물부터 현대의 리더들까지, 거인들이 어떤 방식으로 생각하고 기록하며 배워왔는지를 구체적으로 보여줍니다.

핵심 주제는 바로 **‘기록의 힘’과 ‘사고의 틀 만들기’**입니다. 성공한 사람들은 단순히 공부하거나 노력하는 데 그치지 않고, 매일 자신만의 ‘노트’를 통해 생각을 정리하고 습관화한다는 점을 강조하죠.
책은 크게 다음과 같은 메시지를 전합니다.

  • 기록은 사고의 틀을 만든다: 단순히 메모가 아니라, 생각을 구조화하는 도구로 활용.
  • 반복 학습의 힘: 거인들은 비슷한 주제를 끊임없이 노트에 기록하며 자기만의 철학을 완성.
  • 사소한 습관이 큰 차이를 만든다: 작은 기록, 작은 성찰이 결국 큰 성취로 이어진다.
  • 성공은 ‘노트에서 시작된다’: 기억에만 의존하지 않고, 반드시 ‘시각화’하는 습관을 가져야 한다.

즉, ‘거인의 노트’는 단순한 필기법이 아니라, 인생을 바꾸는 사고 체계의 도구라는 걸 보여주는 책이에요.

 


2. 인상 깊었던 구절

 

1) 생각을 끄집어 내 메모하는 행위, 그 행위를 통해 자신만의 콘텐츠를 만들어내는 능력은

    인생의 방향을 좌우할 강력한 무기이다.

 

2) 생각하는 힘 기르기

    - 반복적으로 되뇌기 (ex: 바둑 복기)

    - 생각 이어가기 (분류->순서 장하기)

    - 글로 쓰기

 

3) 새로운 지식, 깨달음 -> 키워드 메모

    메모를 토대로 나의 이야기를 덧붙인다.

    -> 말과 글로 표현, 빠르게 성장하는 지름길

    -> 10 %를 나의 생각으로 덧붙임, 자기화, 학문의 방법

 

4) 정보  ->  지식  ->  지혜

    - 지식: 정보가 누적된 상태

    - 지식 -> 지혜로 변화는 과정: 나를 거쳐야 한다. 자신만의 방법 정리

    - 지혜: 그동안 쌓인 정보와 지식을 연결해서 얻는것

 

5) 지식- > 질서부여, 체계적으로 정리

    * 정리가 공부의 핵심

      - 분류론(정리론) 연관, 비슷한 연결되는 것들을 하나의 흐름으로 묶기

      - 평가론: 좋은것은 골라내고 나쁜것은 버림

   

    * 공부를 잘하는 3가지 기록원칙

      (1) 명확성: 남에게 설명할 정도로  확실하게 알야아 함

      (2) 요약성 : 키워드 기록 -> 연상효과로 기억 불러내기

      (3) 종합성 : 자신만의 생각으로 재정렬

 

 

 

https://link.coupang.com/a/cPmtt7

 

거인의 노트 책 베스트셀러 ((사은품++)) - 처세술/삶의 자세 | 쿠팡

쿠팡에서 거인의 노트 책 베스트셀러 ((사은품++)) 구매하고 더 많은 혜택을 받으세요! 지금 할인중인 다른 처세술/삶의 자세 제품도 바로 쿠팡에서 확인할 수 있습니다.

www.coupang.com

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

 

프로그래밍 개론

 

-컴퓨터구조: CPU(두뇌,연산자이), 메모리/RAM(단기기억), 디스크(장기기억), 입출력(모니터,키보드..)
-컴퓨터기초: HW/SW
          sw: 운영체제(windows os), app/프로그램(브라우저, 카카오톡..)
          0과 1만 구분할수있다(1:전기가흐를때, 0:전기흐르지않을때)
-프로그래밍언어: 사람이 컴퓨터에게 명령을 내리는 방법
             저급언어(기계어,어셈블리어): 사람이 이해하기 어려운,기계가 이해하기 쉬운 언어
             고급언어(python,java,c): 사람이 이해하기 쉬운 표현
             고급언어->변환(컴파일러,인터프리터)->기계어

-프로그램 동작원리
 소스코드->(변환)기계어->실행
 디스크->메모리 적재->CPU에서 명령어 해석/실행->출력장치(화면) 표시

 *메모리 크기확인: 32G
  1byte  = 8 bit (2^8 = 256가지 수 표현), 00000000(2진수) = 0, 11111111(2진수) = 255
  1KB = 1024 byte (2^10)
  1MB = 1024 KB
  1GB = 1024 MB
  32G = 32 * 1024MB (2^35 Byte)

 *R에서는 정수형 표현 4Byte 사용 
 *기타: 11111111 = 255인 이유 설명
  b₇ b₆ b₅ b₄ b₃ b₂ b₁ b₀   (각각 0 또는 1)
  = b₇×2⁷ + b₆×2⁶ + b₅×2⁵ + ... + b₁×2¹ + b₀×2⁰


프로그래밍 기초


- 변수                         
(개념) 값이 저장되는 저장공간
(문법) 변수명 할당연산자 값
      msg <- "hello, world!"  (msg변수에 ""문자열 할당한다)
                                          (할당연산자는 오른쪽에서 왼쪽으로 할당한다)
      msg = "hello, world!"   (가능한데, <-더 권장, =는 함수의 argument값 전달시 사용?)
      val <- 10

      msg 공간을 가르킨다 [hello, world]
      *변수를 사용하는 이유: 값을 저장해두고 재사용하기 위한 목적

(부연설명-생략) 책장에 책을 두는데, 라벨을 붙이는 개념이랑 유사
             skip(R에서는 모든 변수가 객체이다(객체를 바인딩하는게 변수를 처리하는 방식))

- 변수명 명명(작명) 규칙
1) 영문자/숫자/마침표(.)/밑줄(_) 사용 가능
2) 첫 글자는 숫자가 될 수 없음
3) 이름에 띄어쓰기 사용 불가
4) 대소문자 구분, 변수명은 소문자로
5) 예약어는 사용불가(if, else, for, TRUE, FALSE, NA 등)

- 변수명 표기법
: snake표기법 권장
: (예전 base R) total.sales (dot.separated 많이 사용했었음) 

- 변수 네이밍(best-practice)
  변수는 명사형으로 기술
    ex) my_name <- '홍길동'
        #(함수 동사형) 함수: 특정 기능을 사전에 구현해둔 것(모듈)
        write_file(), print_result()

  (소문자) 지역변수 
    ex) val = 1

  (대문자) 전역변수, 상수(불변의 고정값)
    ex) MAX_VAL = 100
        FILE_NAME = 'data.excel'

  (logical 변수)is_를 앞에 붙인다.
    ex) is_error = FALSE



- 자료형


 : 데이터의 유형, 데이터 저장하는 방식

자료형               의미            예시
==============================================
수치형(numeric)     정수,실수        5, 3.14     
문자형(chracter)    문자,문자열      "C", "hello" ('', "" 모두 가능)
논리형(logical)     참,거짓         TRUE, FALSE  (대문자로 사용)

*numeric
 (정수형) integer, (실수형) double
*문자,문자열
 char:길이1, string:길이 0이상
 R은 모두 character 형으로 간주
*TRUE = T, FALSE = F 
 약어로 T,F 라는 논리변수에 TRUE, FALSE 저장되어있다.
 변수이기 때문에 변경가능하지만, 변경하지 않는것이 좋다.
*R은 동적 형변환 지원하는 언어(동적 타입 언어), 실행시에 자료형이 결정
 ex) val <- 1
     val <- "hello"
 ex) 정적 타입 언어 예
 int val = 5;

기타(skip)
(complex) 복소수
(raw) 이진데이터

-그외의 값
 NULL : 값이 비어있음
   ex) val <- NULL
 NA  : Not a available, 값이 없거나 알수없음 (결측값)
 NaN : Not a number(수학적 오류)
   ex) 0/0 
 inf, -inf : 무한대(infinite)
   ex) 1/0

-자료형 확인(내장함수)


# 함수: (중등과정) y = f(x), 입력 x에 대응하는 출력 y가 존재할때 함수라고한다.
# 프로그래밍 함수의 개념
# (정의) 사전에 특정 작업을 수행하는 코드를 미리 구현해둔 모듈(기능)
# (동작) x를 입력받아 기능을 수행하고 y를 리턴한다.
# ex) 출력값 = print(입력값)

(무슨 자료형인지 체크) typeof, mode, class
종류           차이점                  출력결과
======================================================================
typeof      내부저장방식         integer/double, character, logical
mode        전통적분류           numeric, character, logical
class       객체의 자료형(종류)   numeric, character, logical + 객체의 자료형
                              (skip) 예시 typeof(matrix(1:4, 2, 2))
                                         typeof(data.frame(x=1:3))

(특정 자료형인지 체크) is.numeric(), is.character(), is.logical(), is.integer(), is.double()
  결과값이 TRUE, FALSE로 나온다

-자료형 변환: as.numeric(), as.logical(), as.character()



(실습) day02.R 스크립트 파일 생성

# 자료형 실습
# 실행 단축키: ctrl + 엔터

# 1.기본 자료형
# 문자
print("hello")
# 오류
print(hello)
# 오류
#print("abc)

# 수치
print(3.14)
print(5)
print(10L)

# 논리
print(TRUE)
print(FALSE)
print(true)

# 2.변수 생성 및 초기화
name = 'juk' # 오른쪽의 값이 왼쪽의 변수에 저장된다(초기화된다)
print(name)
val = 3.14
print(val)
is_error = FALSE
print(is_error)

# cat 함수(기능): 인자값 여러개를 받아서 모두 출력해준다.
cat("name:", name)
cat("name:", name, ", val:", val)

#값 복사(call by value/call by reference->함수 시간에)
#swap(값 교환) 예제
num1 <- 1
num2 <- 2

# todo. num1=num2, num2=num1, 그런데 num1에 값을 교체하는순간 num1의 값은 잃어버림
tmp <- num1   # num1의 값이 tmp에 복사됨
num1 <- num2  
num2 <- tmp 
cat(num1, num2, tmp)

# 3.자료형 확인(내장 함수)
# (무슨 자료형인지 체크) typeof, mode, class

typeof(name)
typeof(val)
typeof(is_error)

mode(name)
mode(val)
mode(is_error)

class(name)
class(val)
class(is_error)

# (특정 자료형인지 체크) is.numeric(), is.character(), is.logical(), is.integer(), is.double() 
is.numeric(age)
is.numeric(name)
is.character(name)
is_true = is.logical(is_error)
print(is_true)

# 4.자료형 변환(명시적 형변환)
as.numeric('1') 
as.numeric('abc') 
as.numeric(TRUE) 
as.numeric(FALSE) 

val = as.character(100)
print(val)
as.character(TRUE)

as.logical(1.5)
as.logical(0) 
as.logical('a')
as.logical('true')



'프로그래밍 > R' 카테고리의 다른 글

R언어, 제어문  (0) 2025.09.20
R 매트릭스 (matrix, 행렬)  (0) 2025.09.14
R언어 벡터  (0) 2025.09.09
R 연산자  (1) 2025.09.08
R 프로그래밍 개론  (0) 2025.09.06

 

 

 

-빅데이터(Big Data)
 (개념) 대량의 다양한 데이터들의 모음
 Volume(규모)  : 거대한 규모 (기가->테라바이트)
 Variety(종류) : 다양한 종류와 범위 (text, 이미지, 영상...)
 Velocity(속도): 빠른 데이터 축적 (SNS글, 센서 데이터..) 
 => 거대한 규모의 다양한 데이터를 빠른 

-데이터의 유형:정형,비정형,반정형
 정형: 구조화된 데이터, 예시) 엑셀, 데이터베이스 테이블
 비정형: 비구조화 데이터, 예시)text, 이미지, 동셩상..
 반정형: 반구조화(json, xml 규칙은 있지만 완적한 테이블형태 X) 예시) http응답데이터 등

-빅데이터 처리과정
 수집 > 저장 > 처리 > 분석 > 시각화 > 활용
 수집: 외부 리소스로부터 데이터는 모으는 과정
 저장: 정형/비정형 데이터를 시스템에 정의 저장
 처리: 데이터 전처리/정제 
 분석: 다양한 분석방법(R,통계,머신러닝 등)
 시각화: 보고서/리포트/그래픽
 활용: 영업/예측/추천 등
 
-빅데이터 활용 사례
  유통업: 고객 구매 데이터를 분석해 할인 쿠폰 타겟팅.
  의료: 환자 진단 기록을 분석해 질병 예측.
  금융: 거래 데이터를 분석해 사기 탐지.
  엔터테인먼트: 넷플릭스 영화 추천 시스템.

-R의 특징
  1. 통계학자가 만든 언어로 데이터 분석에 특화, 다양한 통계산출이 가능
  2. 그래픽 처리 기능이 뛰어나다.(시각화 기능 강력)
  3. 다양한 패키지 제공(다른 사람들이 만들어 놓은 기능)
  4. 한글에 취약. 윈도우 계정이름, 폴더이름을 한글로 사용하면 오류 발생 가능
  5. 사용자 간의 커뮤니티가 발달되어 있다.
  6. 오픈소스, 무료 사용 가능
  : R은 데이터를 분석하고, 통계 처리와 그래프를 쉽게 만들어주는 무료 도구

-R(vs Python)
  R, 파이썬(python) -> 무료
  통계분석 소프트웨어(프로그램) -> SAS, SPSS-> 유료
   
  *R: 프로그래밍 언어이나 파이썬에 비해 데이터분석(통계분석)에 특화
  *파이선(Python): 프로그래밍 언어로 데이터분석 뿐만 아니라
                  어플리케이션 개발등 범용적 사용 가능

-R 설치
  구글 검색: R
  홈페이지: https://www.r-project.org/
  한국 다운로드 페이지 검색: ctrl + f -> korea
  다운로드 경로
   : https://cran.r-project.org/mirrors.html
   : https://cran.yu.ac.kr/
     > Download R for Windows
     > install R for the first time.
     > Download R-4.5.1 for Windows (86 megabytes, 64 bit)
       * R-4.5.1-win.exe 실행 (resource 옮기기 실행)
         (설치언어 한국어, 경로변경없이 그대로 설치)
  삭제시: 제어판에서 app 삭제  

-R Studio
  R을 편하게 사용하기 위한 IDE(통합개발환경) 소프트웨어
  IDE(Integrated Development Environment)
   : 다양한 언어지원, 프로그래밍 통합개발환경, 코드개발 지원하는 다양한 기능제공

-R Studio 설치
  구글 검색: R Studio
  홈페이지: https://posit.co/download/rstudio-desktop/
  (R 부터 설치해야함)
   > 2. install R Studio 
    : DOWNLOAD RSTUDIO DESKTOP FOR WINDOWS 선택
    : RStudio-2025.05.1-513.exe (resource 옮기고 실행)
      설정/경로 변경없이 다음/다음 실행



-R Studio UI(User Interface) 설명
   구성:
     상단메뉴
     탭메뉴(Env, His, Conn, Tut)
     Console, Teminal 
     Files, Help ... 

   1.Script: 스크립트 파일 view, 코드 작성하는 공간
   2.Environment:현재 사용중인 데이터 표시
   3.Console: 코드 실행결과 표시
   4.Files: 작업공간 안의 파일 목록 표시

   프로젝트 생성하기(작업공간을 별도 지정), 우측상단 메뉴
    > create project from existing directory

   스크립트 파일
     소스코드를 작성, 재사용 가능(Console 작성시 재사용불가)
     * 새파일 생성(+메뉴버튼 or file->new file->R script)
       (저장하기) file->save or ctrl+s
       (파일이름) day01.R 저장
  
   설정변경
     - 패널 위치변경: tools > global options > Pane Layout
        source  | console
        Environ | Files
     - 명령어가 길어져서 줄바꿈: tools > global options > Code
        [체크]soft-wrap source file
        화면에서 자동 줄바꿈 설정(안되있으면 스크롤로 넘겨야함)
     - 글씨체 설정: tools > global options > Appearance
     - 기본 workspace설정 : tools > global options > General
     - 인코딩 설정: tools > global options > Code > Saving

 


 

https://link.coupang.com/a/cO29Z4

 

모두를 위한 R 데이터 분석 입문 - 프로그래밍 언어 | 쿠팡

쿠팡에서 모두를 위한 R 데이터 분석 입문 구매하고 더 많은 혜택을 받으세요! 지금 할인중인 다른 프로그래밍 언어 제품도 바로 쿠팡에서 확인할 수 있습니다.

www.coupang.com

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

 

'프로그래밍 > R' 카테고리의 다른 글

R언어, 제어문  (0) 2025.09.20
R 매트릭스 (matrix, 행렬)  (0) 2025.09.14
R언어 벡터  (0) 2025.09.09
R 연산자  (1) 2025.09.08
컴퓨터 기초, 프로그래밍 기초(변수, 자료형)  (0) 2025.09.07

 

 

완벽하지는 않지만, 그래도 들어줄만한 품질로 완성되었다.

(이정도 수준이면, 잘때 둘째에게 들려줘도 되겠다는 생각이 든다ㅋ)

 

3시간짜리 Audio북을 작업하는데는 꽤나 노하우가 필요했다.

 

- 봉착한 문제들과 해결방법

 

1. text chunk

 

 : google cloud text-to-speech모델은 5000자까지만 한번에 변환이 가능하다.

 : 5000자 이하로 자르고 이걸 차례대로 호출하며 반복적으로 생성해야한다.

 : 이때 특수문자(특히 개행문자) 관련 처리가 까다로웠음

    * 원본 데이터를 저장해서 txt파일로 보관해서 검사할때는 개행을 남겨두고, text2speech로 전달할때는 모든 개행을 점(.)으로 변환하였다.(그래야만 끊어읽기가 적당히 들어가기 때문이다)

    * 사실 이조차도 ChatGPT로 작업을 하면 되겠지만, 여기서도 또 큰 데이터는 한번에 처리가 안되기 때문에, 아쉽게도 이부분은 약간의 수작업과 자동화를 섞을수 밖에 없었다.(body추출은 수동으로, 개행문자 치환등은 code 노드에서)

    * 이때, wait 노드를 on-form-submitted로 하면, 중간에 내가 txt파일을 만들고, 이후에 완성이되면 재시작 버튼을 누르듯 처리가 가능하다.

 

2. audio 합성

 

  : 여러개 분해된 오디오 파일을 FFMpeg (loca docker구동)로 병합한다.

  : 이때 메모리를 최소화하도록 적당히 페라미터들을 세팅해줘야한다.(그래야 변환속도도 빨라지고, PC 메모리가 터지는 문제도 방지할수 있다.)

  : 약 5~10분 정도면 70M정도의 오디파일을 병합할수 있음

  : 이미지와 오디오를 합성하면 150~200M (3시간) 짜리 파일이 생성됨(약 10~15분 소요),

     * PC사양이 너무 낮아서 여러개를 동시에 돌릴수도 없는게 넘 아쉽다.

 

3. 유튜브 업로드 및 업데이트

 

  : 장시간짜리 영상을 업로드할때는, 추가적인 인증을 받아야 업로드가 가능하다.(인증절차는 간단, 업로드 후 처리실패 내용을 알려줌)

  : 유튜브 사이트에서 설정하는 모든 정보를 n8n 노드에서 설정할수 없는게 좀 아쉬운 점이다.

  : 업로드시 공개설정을 비공개(부분공개?)로 올렸다가, 완성시 실제로 이상없이 올라간게 확인되면 설정을 공개로 수동으로 바꿔주게끔 하였다.

 

 

4. Google Sheets로 목록 및 처리순서 관리

 

  : 100개의 동화내역을 미리 만들어두고, 처리 성공하면 N->Y로 바꿔주도록 하였다.

  : 매번 노드 시작 버튼을 눌렀을때 다음번(N)인 목록을 순서대로 가져오도록하여 편의성을 높임.

 

5. 작업비용

 

 : 일단, google colud에 있는 API 위주로 사용하였고, 최초 가입시 300$(약 40만원) 정도를 무료로 쓸수가 있다.

 : 한편당 대략 3~5천원 이내로 비용이 발생하는듯하고, 대략 100편 정도는 무료로 작업이 가능할듯하다.


 

https://youtu.be/IEXjaY98Ti8

 

https://www.youtube.com/@Moonlight-Stories-i7f

 

Moonlight-Stories

영어 고전 동화를 읽어주는 오디오북 채널입니다. 자녀들에게 영미 고전을 들려주세요. 영어 공부를 하고싶은 성인에게도 추천합니다.

www.youtube.com

 

+ Recent posts