분류 전체보기 (340)

Tools/R

R - (7) 함수

2017. 2. 19. 02:29
반응형

(7) 함수


함수는 특정한 태스크를 하기 위한 구문들의 집합이다. R에는 in-built 함수들이 많이 있고 또한 직접 함수를 정의하여 사용할 수도 있다. 한 가지 주의할 점은 R에서 함수는 객체이다. 



함수 정의


R에서 함수는 function() 키워드를 통해 만들 수 있다.


function_name <- function(arg_1, arg_2, ...) {
   Function body 
}



함수의 구성요소 


  • Function Name : 함수의 실제 이름이다. R environment에 해당 이름의 객체로 저장된다. 
  • Arguments : Arguments는 placeholder이다. 함수가 호출 될 때, arguments에 값이 할당된다. arguments는 없어도 되며, 또한 default 값을 가질 수 있다.
  • Function Body : function이 하는 일을 기술한 구문들이다.
  • Return Value : function body가 최종적으로 리턴한 값이다.


Built-in 함수


in-built 함수의 간단한 예에는 seq(), mean(), max(), sum() 등이 있다.


더 많은 in-built function 보기

https://cran.r-project.org/doc/contrib/Short-refcard.pdf 


# Create a sequence of numbers from 32 to 44.
print(seq(32,44))

# Find mean of numbers from 25 to 82.
print(mean(25:82))

# Find sum of numbers frm 41 to 68.
print(sum(41:68))



사용자 정의 함수


사용자 정의 함수의 예이다.


# Create a function to print squares of numbers in sequence.
new.function <- function(a) {
   for(i in 1:a) {
      b <- i^2
      print(b)
   }
}   
# Call the function new.function supplying 6 as an argument.
new.function(6)


다음과 같이 argument의 이름을 명시적으로 지정하여 호출할 수도 있다.


# Create a function with arguments.
new.function <- function(a,b,c) {
   result <- a * b + c
   print(result)
}

# Call the function by position of arguments.
new.function(5,3,11)

# Call the function by names of the arguments.
new.function(a = 11, b = 5, c = 3)



Default 값

다음과 같이 함수 내부에 default 값을 선언할 수도 있다. argument가 아무것도 주어지지 않는다면 default 값을 사용한다.


# Create a function with arguments.
new.function <- function(a = 3, b = 6) {
   result <- a * b
   print(result)
}

# Call the function without giving any argument.
new.function()

# Call the function with giving new values of the argument.
new.function(9,5)


아래 튜토리얼을 참고한 포스팅입니다. 

https://www.tutorialspoint.com/r/r_operators.htm 

반응형

'Tools > R' 카테고리의 다른 글

R - (8) 문자열 (Strings)  (0) 2017.02.23
R을 통한 2017년 대선 주자들 페이스북 분석  (5) 2017.02.21
R - (6) 반복문  (0) 2017.02.17
R - (5) If, else if, switch  (0) 2017.02.15
R - (4) 연산자  (0) 2017.02.15

Tools/R

R - (6) 반복문

2017. 2. 17. 02:58
반응형

6. 반복문


(1) repeat


repeat는 계속해서 내부 코드를 반복한다. 반복문을 제어하는 내부 변수와 break 문을 통해 반복문을 탈출한다.


v <- c("Hello","loop")
cnt <- 2

repeat {
   print(v)
   cnt <- cnt+1
   
   if(cnt > 5) {
      break
   }
}


[1] "Hello" "loop" 
[1] "Hello" "loop" 
[1] "Hello" "loop" 
[1] "Hello" "loop" 


(2) while


while은 주어진 조건문이 true일때 계속 반복한다.


v <- c("Hello","while loop")
cnt <- 2

while (cnt < 7) {
   print(v)
   cnt = cnt + 1
}



(3) for 


for문은 vector나 list의 마지막 원소까지 반복한다.


v <- LETTERS[1:4]
for ( i in v) {
   print(i)
}



아래 튜토리얼을 참고한 포스팅입니다. 

https://www.tutorialspoint.com/r/r_operators.htm 


반응형

'Tools > R' 카테고리의 다른 글

R을 통한 2017년 대선 주자들 페이스북 분석  (5) 2017.02.21
R - (7) 함수  (0) 2017.02.19
R - (5) If, else if, switch  (0) 2017.02.15
R - (4) 연산자  (0) 2017.02.15
R - (3) 변수  (0) 2017.02.15
반응형

5. If, if else, switch



If 문


x <- 30L
if(is.integer(x)) {
   print("X is an Integer")
}


[1] "X is an Integer"



If else 문


x <- c("what","is","truth")

if("Truth" %in% x) {
   print("Truth is found")
} else {
   print("Truth is not found")
}


[1] "Truth is not found"



Switch 문


switch 문은 일반적인 C, Java등의 프로그래밍 언어와는 조금 다르다.


# by index
switch(1, "one", "two")
## [1] "one"


# by index with complex expressions
switch(2, {"one"}, {"two"})
## [1] "two"


# by index with complex named expression
switch(1, foo={"one"}, bar={"two"})
## [1] "one"


# by name with complex named expression
switch("bar", foo={"one"}, bar={"two"})
## [1] "two"

아래 튜토리얼을 참고한 포스팅입니다. 

https://www.tutorialspoint.com/r/r_operators.htm 

반응형

'Tools > R' 카테고리의 다른 글

R - (7) 함수  (0) 2017.02.19
R - (6) 반복문  (0) 2017.02.17
R - (4) 연산자  (0) 2017.02.15
R - (3) 변수  (0) 2017.02.15
R - (2) R의 데이터 타입 (자료구조)  (0) 2017.02.13

Tools/R

R - (4) 연산자

2017. 2. 15. 01:53
반응형
4. 연산자

연산자는 산술적, 논리적 연산을 위한 것이다.  R에는 아래와 같은 연산자들이 있다.

  • 산술 연산자 (Arithmetic Operators)
  • 관계 연산자 (Relational Operators)
  • 논리 연산자 (Logical Operators)
  • 할당 연산자 (Assignment Operators)
  • 기타 연산자

산술 연산자 


OperatorDescriptionExample
+두 벡터를 더함

v <- c(2,5.5,6) t <- c(8, 3, 4) print(v+t)

[1] 10.0  8.5  10.0
두 벡터를 뺌

v <- c( 2,5.5,6) t <- c(8, 3, 4) print(v-t)

[1] -6.0  2.5  2.0
*두 벡터를 곱함
v <- c( 2,5.5,6)
t <- c(8, 3, 4)
print(v*t)
[1] 16.0 16.5 24.0
/두 벡터를 나눔
v <- c( 2,5.5,6)
t <- c(8, 3, 4)
print(v/t)
[1] 0.250000 1.833333 1.500000
%%

두 벡터를 나눈 후 나머지

v <- c( 2,5.5,6)
t <- c(8, 3, 4)
print(v%%t)
[1] 2.0 2.5 2.0
%/%

나눗셈의 몫

v <- c( 2,5.5,6)
t <- c(8, 3, 4)
print(v%/%t)
[1] 0 1 1
^

지수

v <- c( 2,5.5,6)
t <- c(8, 3, 4)
print(v^t)
[1]  256.000  166.375 1296.000
관계 연산자


OperatorDescriptionExample
>

왼쪽에 있는 벡터의 엘리먼트가 오른쪽에 있는 벡터의 엘리먼트보다 큰지를 체크한다. 

v <- c(2,5.5,6,9)
t <- c(8,2.5,14,9)
print(v>t)
[1] FALSE  TRUE FALSE FALSE
<

오른쪽에 있는 벡터의 엘리먼트가 왼쪽에 있는 벡터의 엘리먼트보다 큰지를 체크한다.

v <- c(2,5.5,6,9)
t <- c(8,2.5,14,9)
print(v < t)
[1]  TRUE FALSE  TRUE FALSE
==

벡터들의 엘리먼트들이 같은지를 체크한다.

v <- c(2,5.5,6,9)
t <- c(8,2.5,14,9)
print(v == t)
[1] FALSE FALSE FALSE  TRUE
<=

왼쪽에 있는 벡터들의 엘리먼트가 오른쪽에 있는 벡터의 엘리먼트보다 작거나 같은지를 체크한다.

v <- c(2,5.5,6,9)
t <- c(8,2.5,14,9)
print(v<=t)
[1]  TRUE FALSE  TRUE  TRUE
>=

왼쪽에 있는 벡터들의 엘리먼트가 오른쪽에 있는 벡터의 엘리먼트보다 크거나 같은지를 체크한다.

v <- c(2,5.5,6,9)
t <- c(8,2.5,14,9)
print(v>=t)
[1] FALSE  TRUE FALSE  TRUE
!=

벡터들의 엘리먼트가 다른지를 체크한다.

다르면 TRUE, 같으면 FALSE

v <- c(2,5.5,6,9)
t <- c(8,2.5,14,9)
print(v!=t)
[1]  TRUE  TRUE  TRUE FALSE
논리 연산자

논리 연산자는 logical, numeric, complex 타입의 벡터에만 적용 가능하며, numeric이나 complex 타입에 적용될 경우 1보다 큰 모든 수들은 TRUE라고 간주된다. 즉, 논리 연산자는 0과 1을 대상으로 적용된다.

OperatorDescriptionExample
&

&은 element-wise AND 이다. 각 원소별로 AND 연산을 적용한 결과를 만든다.

v <- c(3,1,TRUE,2+3i)
t <- c(4,1,FALSE,2+3i)
print(v&t)
[1]  TRUE  TRUE FALSE  TRUE
|&은 element-wise OR 이다. 각 원소별로 OR연산을 적용한 결과를 만든다.
v <- c(3,0,TRUE,2+2i)
t <- c(4,0,FALSE,2+3i)
print(v|t)
[1]  TRUE FALSE  TRUE  TRUE
!

element-wise NOT 이다.

v <- c(3,0,TRUE,2+2i)
print(!v)
[1] FALSE  TRUE FALSE FALSE
&, | 연산자가 element-wise 연산자인 반면, &&과 ||은 벡터의 첫번째 element 끼리 논리 연산을 적용한다.

OperatorDescriptionExample
&&

벡터의 첫번째 원소끼리 & 연산한 값

v <- c(3,0,TRUE,2+2i)
t <- c(1,3,TRUE,2+3i)
print(v&&t)
[1] TRUE
||벡터의 첫번째 원소끼리 | 연산한 값
v <- c(0,0,TRUE,2+2i)
t <- c(0,3,TRUE,2+3i)
print(v||t)
[1] FALSE

할당 연산자

벡터에 값을 할당할 때 쓰이는 연산자이다.

OperatorDescriptionExample

<−

or

=

or

<<−

왼쪽에 있는 변수에 값을 할당한다.
v1 <- c(3,1,TRUE,2+3i)
v2 <<- c(3,1,TRUE,2+3i)
v3 = c(3,1,TRUE,2+3i)
print(v1)
print(v2)
print(v3)
[1] 3+0i 1+0i 1+0i 2+3i
[1] 3+0i 1+0i 1+0i 2+3i
[1] 3+0i 1+0i 1+0i 2+3i

->

or

->>

오른쪽에 있는 변수에 값을 할당한다. 

c(3,1,TRUE,2+3i) -> v1
c(3,1,TRUE,2+3i) ->> v2 
print(v1)
print(v2)
[1] 3+0i 1+0i 1+0i 2+3i
[1] 3+0i 1+0i 1+0i 2+3i
기타 연산자

이 연산자는 일반적인 논리, 산술 연산자가 아니며, 특수한 상황에서 쓰이는 연산자이다.

OperatorDescriptionExample
:숫자의 시퀀스를 생성하는 연산자
v <- 2:8
print(v) 
[1] 2 3 4 5 6 7 8
%in%

엘리멘터가 벡터에 속해있는지를 체크하는 연산자

v1 <- 8
v2 <- 12
t <- 1:10
print(v1 %in% t) 
print(v2 %in% t) 
[1] TRUE
[1] FALSE
%*%

행렬을 그것의 transpose와 행렬곱셈을 할 때 쓰인다.

M = matrix( c(2,6,5,1,10,4), nrow = 2,ncol = 3,byrow = TRUE)
t = M %*% t(M)
print(t)
      [,1] [,2]
[1,]   65   82
[2,]   82  117

아래 튜토리얼을 참고한 포스팅입니다. 

https://www.tutorialspoint.com/r/r_operators.htm 

반응형

'Tools > R' 카테고리의 다른 글

R - (6) 반복문  (0) 2017.02.17
R - (5) If, else if, switch  (0) 2017.02.15
R - (3) 변수  (0) 2017.02.15
R - (2) R의 데이터 타입 (자료구조)  (0) 2017.02.13
R - (1) Introduction  (0) 2017.02.13

Tools/R

R - (3) 변수

2017. 2. 15. 01:38
반응형

https://www.tutorialspoint.com/r/r_variables.htm



변수


변수는 변수명을 통해 프로그램에서 데이터를 조작할 수 있도록 한다. 변수를 통하여 여러가지 자료구조를(atomic vector, vector, R-Object들의 여러가지 조합) 저장할 수 있다. 변수명에는 숫자, 문자, ., _가 포함될 수 있으며, 문자 또는 .을 첫글자로 하여야 한다. 단 .를 첫글자로 할 때는 .뒤에 숫자가 오면 안된다. 아래의 예를 참고하라.





변수 할당


# Assignment using equal operator.
var.1 = c(0,1,2,3)           

# Assignment using leftward operator.
var.2 <- c("learn","R")   

# Assignment using rightward operator.   
c(TRUE,1) -> var.3           

print(var.1)
cat ("var.1 is ", var.1 ,"\n")
cat ("var.2 is ", var.2 ,"\n")
cat ("var.3 is ", var.3 ,"\n")


변수할당은 = 또는 <-, -> 을 통해 할 수 있다. 또한 출력은 print(), cat()을 통해 할 수 있다. cat() 함수는 여러개의 인풋을 합쳐서 프린트한다.


결과


[1] 0 1 2 3
var.1 is  0 1 2 3 
var.2 is  learn R 
var.3 is  1 1 



변수들의 데이터 타입


R에서 변수의 데이터 타입은 변수에 할당되는 R-Object의 데이터 타입을 따른다. 그래서 R을 동적인 언어(dynamically typed language)라고 부른다. R에서는 변수의 데이터 타입이 하나에 고정되는 것이 아니라 계속해서 바꿀 수 있다. 


var_x <- "Hello"
cat("The class of var_x is ",class(var_x),"\n")

var_x <- 34.5
cat("  Now the class of var_x is ",class(var_x),"\n")

var_x <- 27L
cat("   Next the class of var_x becomes ",class(var_x),"\n")


The class of var_x is  character 
   Now the class of var_x is  numeric 
      Next the class of var_x becomes  integer



변수 찾기


현재 사용되고 있는 변수들의 목록을 보기 위해서는 ls() 함수를 이용한다. 또한 ls() 함수는 변수를 찾기 위해 '패턴'을 이용할 수도 있다. 


print(ls())


[1] "my var"     "my_new_var" "my_var"     "var.1"      
[5] "var.2"      "var.3"      "var.name"   "var_name2."
[9] "var_x"      "varname" 



# List the variables starting with the pattern "var".
print(ls(pattern = "var"))   


[1] "my var"     "my_new_var" "my_var"     "var.1"      
[5] "var.2"      "var.3"      "var.name"   "var_name2."
[9] "var_x"      "varname"  



주의할 점은 .으로 시작하는 변수들은 hidden 이다. 이것을 보기 위해서는 아래와 같이 all.name 파라미터를 TRUE로 설정한다.


print(ls(all.name = TRUE))



변수 삭제


변수는 rm() 함수를 사용해 지울 수 있다. 


rm(var.3)
print(var.3)


위의 스크립트를 실행시키면 var.3 변수를 삭제시키고 두 번째 줄에서는 에러가 뜬다.


rm(list = ls())
print(ls())


모든 변수를 지우고 싶으면 rm()과 ls()를 위와 같이 결합한다.



반응형

'Tools > R' 카테고리의 다른 글

R - (6) 반복문  (0) 2017.02.17
R - (5) If, else if, switch  (0) 2017.02.15
R - (4) 연산자  (0) 2017.02.15
R - (2) R의 데이터 타입 (자료구조)  (0) 2017.02.13
R - (1) Introduction  (0) 2017.02.13
반응형

https://www.tutorialspoint.com/r/r_data_types.htm


일반적인 프로그래밍에서는 값들을 저장하기 위하여 다양한 변수(Variables)들이 필요하다. 변수는 값을 저장한 메모리의 위치를 나타낸다. 이것은 변수를 만들면 그것이 메모리를 일정 공간을 차지한다는 것을 뜻한다. 문자, 정수, 실수, 진릿값 등 다양한 데이터를 변수에 저장하는 것이 필요할 것이다. 운영체제는 이러한 데이터 타입에 알맞게 변수에 메모리를 할당한다. 


R에서는 C나 Java와 같은 프로그래밍 언어와는 다르게 R 에서는 변수를 만들 때 데이터 타입을 선언하지 않는다. 변수는 R-Object로 할당되며 R-Object의 데이터타입이 변수의 데이터타입이 된다. 다양한 타입의 R-Object가 있지만 자주 사용되는 R-Object의 타입은 아래와 같다.



자주 사용하는 데이터 타입


  • Vectors
  • Lists
  • Matrices
  • Arrays
  • Factors
  • Data Frames

R-Object 중 가장 심플한 것은 vector object이고, 이 atomic vectors 또는 classes of vectors라고 불리는 것에는 아래와 같이 6개의 데이터 타입이 있다. 다른 R-Object들은 이 atomic vectors를 기반으로 한다.


  • Logical     
      • ex) TRUE, FALSE
  • Numeric
      • 12.3, 5, 999
  • Integer
      • 2L, 34L
  • Complex
      • 3+2i
  • Character
      • 'a', 'good'
  • Raw
      • "Hello" 는 48 64 6c 6c 6f로 저장된다.

atomic vectors

v <- TRUE 
print(class(v))

v <- 23.5
print(class(v))

v <- 2L
print(class(v))

v <- 2+5i
print(class(v))

v <- "TRUE"
print(class(v))

v <- charToRaw("Hello")
print(class(v))


결과 : 

[1] "logical"

[1] "numeric"
[1] "integer"
[1] "complex"
[1] "character"
[1] "raw"



Vectors

R 언어에서 가장 많이 사용되고 기본적인 R-Object는 Vectors이다. 이것은 위의 열거된 atomic vector들을 저장한다. Vectors는 c() 함수를 사용하여 만들 수 있다. 이것은 엘리먼트들을 벡터로 합친다는 뜻이다. (combine의 c)



# Create a vector.
apple <- c('red','green',"yellow")
print(apple)

# Get the class of the vector.
print(class(apple))



[1] "red"   "green" "1"    
[1] "character"




Matrices



매트릭스는 2차원의 데이터셋이다. 이것은 매트릭스 함수에 벡터를 제공함으로써 만들 수 있다.



# Create a matrix.
M = matrix( c('a','a','b','c','b','a'), nrow = 2, ncol = 3, byrow = TRUE)
print(M)
print(class(M))


     [,1] [,2] [,3]
[1,] "a"  "a"  "b" 
[2,] "c"  "b"  "a" 
[1] "matrix"


Arrays


매트릭스는 2차원에 한정되지만 arrays는 어떠한 차원으로 만들 수 있다.


# Create an array.

a <- array(c('green','yellow'),dim = c(3,3,2))

print(a)


, , 1

     [,1]     [,2]     [,3]    
[1,] "green"  "yellow" "green" 
[2,] "yellow" "green"  "yellow"
[3,] "green"  "yellow" "green" 

, , 2

     [,1]     [,2]     [,3]    
[1,] "yellow" "green"  "yellow"
[2,] "green"  "yellow" "green" 
[3,] "yellow" "green"  "yellow"


위 코드는 3차원의 array를 만들고, 원소들을 차례대로 green, yellow로 지정한다.


Factors


Factors는 vector로 만들어지는 R-object이다. Factors는 vector의 element들의 고유값(distinct value)를 레이블로 저장한다. 이 레이블들은 벡터 원소 타입이 어떻든 간에 항상 문자이다. Factors는 통계적 모델링에 유용하다. Factors는 factor()함수를 사용하여 만들 수 있다. nlevels() 함수를 통해 factors의 레벨을 알 수 있다.



# Create a vector.
apple_colors <- c('green','green','yellow','red','red','red','green')

# Create a factor object.
factor_apple <- factor(apple_colors)

# Print the factor.
print(factor_apple)
print(nlevels(factor_apple))

[1] green  green  yellow red    red    red    green 
Levels: green red yellow
[1] 3


Data Frames


데이터프레임은 구조화된 데이터 오브젝트이다. 매트릭스와 다른점은 데이터프레임은 컬럼으로 어떠한 데이터타입이든 넣을 수 있다. 첫 번째 컬럼은 numeric, 두 번째 컬럼은 문자열, 세 번째 컬럼은 논릿값 등 자유롭게 지정할 수 있다. 이것은 같은 길이의 vector들의 list로 볼 수 있다.


데이터 프레임은 data.frame() 함수를 통해 생성할 수 있다.


# Create the data frame.

BMI <-  data.frame(
   gender = c("Male", "Male","Female"), 
   height = c(152, 171.5, 165), 
   weight = c(81,93, 78),
   Age = c(42,38,26)
)
print(BMI)

gender height weight Age
1   Male  152.0     81  42
2   Male  171.5     93  38
3 Female  165.0     78  26



반응형

'Tools > R' 카테고리의 다른 글

R - (6) 반복문  (0) 2017.02.17
R - (5) If, else if, switch  (0) 2017.02.15
R - (4) 연산자  (0) 2017.02.15
R - (3) 변수  (0) 2017.02.15
R - (1) Introduction  (0) 2017.02.13
반응형

구글의 PaaS(Platform as a Service) 구글 앱 엔진(Google App Engine)에는 크게 두 가지 환경, standard environment와 flexible environment가 있습니다.


저 같은 경우 아무 생각도 없이 node.js google app engine 어플리케이션을 개발한 후 서버에 deploy 했는데, 지출 한도를 0으로 설정했음에도 불구하고 과금이 계속되어 결국에 25달러를 날리게 된 경험이 있습니다..


찾아보니 node.js의 경우 flexible 환경에서만 지원되고, 지출 한도는 standard environment에 적용되는 것이었습니다. 또한 flexible 환경에서는 cpu, memoery 등을 사용한 시간에 따라 과금되는 것이더라구요. 그래서 deploy가 된 시간만큼 요금이 나왔던 것이었습니다. 


아래는 두 가지 환경을 비교한 표입니다.


<https://cloud.google.com/appengine/docs/the-appengine-environments>








참고


https://cloud.google.com/appengine/docs/the-appengine-environments



반응형

Tools/R

R - (1) Introduction

2017. 2. 13. 01:06
반응형

원문 : https://www.tutorialspoint.com/r/index.htm


R tutorial


R은 통계 분석, 그래픽 표현 그리고 리포팅을 위한 프로그래밍 언어 및 소프트웨어 환경이다. R은 뉴질랜드 오클랜드 대학교의 Ross Ihaka and Robert Gentleman에 의해 만들어졌고, 현재는 R Development Core Team가 R을 개발하고 있다. R은 GNU(General Public License) 라이센스하에서 자유롭게 이용가능하며, 리눅스, 윈도우즈, 맥과 같은 다양한 운영체제에 컴파일된 바이너리를 제공하고 있다.  이 프로그래밍 언어 R은 두 명의 개발자, Ross Ihaka and Robert Gentleman 이름의 가장 앞 글자를 딴 것이다. 그리고 Bell Labs에서 만든 프로그래밍 언어 S를 근간으로한다.


대상 독자


이 튜토리얼은 R을 이용하여 통계 소프트웨어를 만들고자하는 소프트웨어 개발자, 통계학자, 데이터 마이너를 대상으로 한다. 만약 당신이 R에 처음이라면, 이 튜토리얼을 통해 R 언어의 대부분의 컨셉을 이해할 수 있고, 이를 통해 더 높은 레벨의 전문가가 될 수 있을 것이다.


선행 조건


이 튜토리얼을 시작하기 앞서 컴퓨터 프로그래밍 언어의 용어들에 대한 기본적인 이해가 필요하다. 프로그래밍 언어에 대한 기본적인 이해는 R 언어의 컨셉을 이해하고 학습하는데 도움이 될 것이다. 


반응형

'Tools > R' 카테고리의 다른 글

R - (6) 반복문  (0) 2017.02.17
R - (5) If, else if, switch  (0) 2017.02.15
R - (4) 연산자  (0) 2017.02.15
R - (3) 변수  (0) 2017.02.15
R - (2) R의 데이터 타입 (자료구조)  (0) 2017.02.13
반응형

Google App Engine + node js 환경의 sample 어플리케이션인 BookShelf 어플리케이션을 로컬에서 개발하려던 중,

npm start를 통해 어플리케이션을 실행한 후 홈에 접속하려고 할 때 아래와 같은 문제가 있었다.



Error: Could not load the default credentials. Browse to https://developers.google.com/accounts/docs/application-default-credentials for more information.



문제는 위의 에러 코드에서도 나오듯 아래 URL에서 확인할 수 있는데

https://developers.google.com/accounts/docs/application-default-credentials

Google App Engine 어플리케이션을 로컬에서 작동시키려면 Google App Engine API의 Credential이 필요하다. 


아래와 같은 방식으로 해결하였다. Google Cloud SDK가 설치된 상태에서 콘솔창에


gcloud auth application-default login


를 입력한다. 이후 웹 브라우저가 자동으로 실행되고 자신의 구글 계정으로 로그인하여 클릭을 하면 credential 파일이 로컬에 다운로드되고 알아서 그 파일을 어플리케이션 안에서 default credential로 잡게 되는 것 같다.


이후 다시 npm start를 통해 어플리케이션을 실행하면 Bookshelf 어플리케이션이 잘 구동되는 것을 확인할 수 있다.



반응형
반응형

이 책은 인종주의에 반대하는 책이다. 즉, 인종에 대한 선입견과 차별을 반대한다. '흑인은 지적으로 열등하다' 라거나, '아시아인은 소심하다' 와 같이 인종에 따라 사람을 평가해서는 안된다는 것이다. 이 책은 이와 같은 인종 차별적 연구 결과와 사람들의 선입견에 대해 유전체학으로 반론을 제기한다. (이 부분은 생물학적인 내용이 많이 들어가서 다소 어렵게 느껴졌다.) 이 책에 따르면 인종간의 차이를 정당화 할만한 유전적인 근거는 없다. 또한 만약 인종간에 유전적인 우열이 있다고 하더라도 이는 전체의 평균에 차이에 해당하는 것이므로 소속 공동체로 사람을 평가해서는 안되고 차별이나 계급을 정당화하여서는 안된다. 


이 책에서 저자의 결론은 아래와 같이 정리되었다.


  • 엄밀한 의미에서 인종은 생물학적 존재의의를 갖지 않는다.
  • 그렇지만 DNA를 통해 조상을 분류할 수는 있다.
  • 질병의 경우 인종에 따른 유전적인 영향이 있다. 하지만 그 탓을 100% 유전으로 돌리긴 어렵다.
  • '종'의 선천적 능력(흑인의 리듬감 등)은 과학적으로 증명하기 어렵다.


하지만 저자는 반인종주의도 반대한다. 왜냐하면 실제로 인종간에 드러나는 분명한 차이가 있기 때문일 것이다. 저자가 하고 싶은 말은 인종의 차이는 받아들이되, 그 차이를 평가해 증오와 대립의 동기로 삼지 말자는 것이다. 외면적으로 분명히 드러나는 차이를 외면한채 오로지 '다양성 존중' 이라는 명목하에 화합을 한다는 것은 위선이 아닐까. 오히려 그 차이를 분명히 인지한 채 포용하는 것이 진정한 화합이 아닐까 생각해 보았다. 

반응형