분류 전체보기

반응형

 

I used the following instructions to upgrade from Node.js and NPM version 6.14.14 to 7.23.0 on a Mac. It's very easy and simple.

 

I found npm version updates!

 

▶ Node.js Version Upgrade 

 

1. clean NPM's cache

 

sudo npm cache clean -f

 

2. Install module called 'n' which is Node.js version management helper.

 

sudo npm install -g n

 

3. Install stable or latest version Node.js

 

sudo n stable

 

by use 'n', you can interarctively manage your node.js version.

 

  • n latest (latest version)
  • n stable (stable version)
  • n lts (lts version)
  • n x.x.x (specific version)

 

4. Version check

 

node -v

 

▶ NPM Version Upgrade

 

1. Install npm 

 

sudo npm install -g npm

 

 

2. Version check

 

npm -v

 

 

반응형
반응형


 

SQLP (Structured Query Language Professional)

SQLD (Structured Query Language Developer)

 

1. 개요

SQL?

SQL은 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어입니다.

 

SQLD

SQLD

한국데이터산업진흥원(KData)에서 주관하는 국가공인 민간자격증으로 Structured Query Language + Developer의 약자로 SQL 개발자를 의미합니다. 국가공인자격인 정보처리기사와 자주 비교되지만 정보처리기사보다는 조금 더 전문적이고 실무에 가까운 자격이라고 할 수 있습니다.

 

SQLP

 

SQLP

SQLD와 마찬가지로 한국데이터산업진흥원에서 주관하는 국가공인 민간자격증으로 Structured Query Language + Professional의 약자이며 SQL 전문가를 의미합니다. SQLD의 상위 자격증입니다

 

2. 응시자격

SQLD

별도의 응시자격 제한 요건이 없습니다.

 

SQLP

필기 시험일 기준으로 경력/학력 또는 자격기준 중 한 가지 이상 요건 충족시에만 응시가 가능합니다

 

경력/학력 기준

  • 학사학위 이상 취득자
  • 전문학사학위 취득 후 실무경력 2년 이상인 자
  • 고등학교 졸업 후 실무경력 4년 이상인 자

자격기준

  • 국내·외 데이터베이스 관련 자격을 취득한 자
  • 데이터아키텍처 전문가(DAP), 데이터아키텍처 준전문가(DAsP), SQL 개발자(SQLD) 자격을 취득한 자
반응형

3. 시험과목

 

SQLD (90분 - 50문항)

1과목 데이터 모델링의 이해 (10문항)
         - 데이터 모델링의 이해
         - 데이터 모델과 성능

2과목 SQL 기본 및 활용 (40문항)
         - SQL 기본
         - SQL 활용
         - SQL 최적화 기본 원리

 

SQLP (180분 - 필기 70문항 / 실기 2문항)

필기

1과목 데이터 모델링의 이해 (10문항)
         - 데이터 모델링의 이해
         - 데이터 모델과 성능

2과목 SQL 기본 및 활용 (20문항)
         - SQL 기본
         - SQL 활용
         - SQL 최적화 기본 원리

3과목 SQL 고급활용 및 튜닝 (40문항)
         - 아키텍처 기반 튜닝원리
         - Lock과 트랜잭션 동시성 제어
         - SQL 옵티마이저 원리
         - 인덱스와 조인
         - 고급 SQL 튜닝

실기

SQL 고급활용 및 튜닝 실무 (2문항)

 

4. 합격기준

SQLD : 100점 만점 기준 60점 이상, 과락 기준 40점 미만

SQLP : 100점 만점 기준 75점 이상, 과락 기준 40점 미만 + 응시자격심의 서류 통과자

 

5. 시험일정

2021년 기준 시험일정입니다.

자격명 시험명 접수기간 수험표발급 시험일 결과발표 증빙서류 제출기간
SQL
전문가

개발자
제40회 SQL 전문가/개발자 2.22 ~ 2.26 3.5 3.20(토) 4.16 4.16 ~ 4.23
제41회 SQL 전문가/개발자 5.3 ~ 5.7 5.14 5.29(토) 6.25 6.25 ~ 7.2
제42회 SQL 전문가/개발자 8.9 ~ 8.13 8.20 9.5(일) 10.1 10.1 ~ 10.8
제43회 SQL 전문가/개발자 10.25 ~ 10.29 11.5 11.20(토) 12.17 12.17 ~ 12.24

 

6. 응시수수료와 실시기관 홈페이지

- 응시료 (2021. 09. 12 기준)

SQLD : 50,000원

SQLP : 100,000원

 

- 실시기관 및 시험 전반에 대한 안내 : KData(한국데이터산업진흥원)

 

7. 유효기간

SQLD, SQLP : 2년 (보수교육 이수 후 영구자격으로 전환)

 

8. SQLD, SQLP 자격증을 취득해야하는 이유?

  • 높은 취득 난이도로 인한 SQL 스킬 증명
    SQLD의 경우에도 SQL에 전문성이 강화된 시험으로 60점 합격의 시험치고도 꽤나 어려운 난이도를 자랑하고 있어 인정받는 시험이고, SQLP의 경우에는 75점 합격에 실기까지 포함된 굉장히 어려운 시험으로 취득 자체만으로도 SQL에 대한 높은 이해능력을 인정받을 수 있습니다.
  • 보수교육 이수만 하면 영구자격
    이전에 알아본 CCNA CCNP와 같은 자격은 3년의 자격 유효기간이 있으나 SQLD, SQLP는 보수교육을 이수하면 영구자격으로 전환되어 추후에 다시 자격시험에 응시하지 않아도 되는 장점이 있습니다.
  • DB 실무에 도움이 되는 자격
    Oracle 이외에도 MySQL, MS-SQL, 요즘 핫한 PostgreSQL 등 모두에 공통적으로 활용가능한 SQL 기본 문법에 대한 능력에 대한 평가를 받을 수 있기 때문에 DB 실무에서도 폭넓에 활용이 가능한 지식을 다루는 자격이라고 볼 수 있습니다. 

 


 

최근 DB와 관련된 수업을 들으면서 관심이 생긴 SQLD, SQLP 자격에 대한 정리를 해보았습니다. SQLP의 경우 상당히 난이도가 있고 합격 기준 또한 높아서 쉽지 않더라도, SQLD의 경우는 한 번 도전해볼만한 메리트가 있다고 생각합니다. 다만 다른 국가공인 자격에 비해 응시료가 높은 편이라 충분히 준비되었을 때 응시하는 것이 좋아보입니다. 

반응형
반응형

Go의 인기 Web Framework 'Gin' 


해당 튜토리얼은 'Building Go Web Applications and Microservices Using Gin'의 내용을 번역하며 개인적으로 정리한 것입니다.


이번 시간에는 각 기사(Article)를 선택할 때 표시될 수 있는 핸들러와 템플릿을 추가하도록 하겠습니다.

 

1. 라우터 설정

이전 라우터와 동일한 방식으로 단일 기사에 대한 요청을 처리하기 위해 새 라우터를 설정하도록 합니다. 모든 기사들의 핸들러는 동일하겠지만, 각 기사별 URL은 다를 수 있다는 점을 고려해야 합니다. Gin을 사용하면 다음과 같이 경로 매개변수를 정의해서 해당 조건을 처리할 수 있습니다.

 

router.GET("/article/view/:article_id", getArticle)

 

이 라우터는 위 경로와 맞는 요청에 대해 라우터를 일치시키고, 라우터의 마지막 부분 값을 article_id 에 저장하도록 합니다. 이 라우터는 getArticle을 정의합니다.

 

이로 인해 업데이트된 routes.go 파일의 코드는 다음과 같습니다.

 

▶ routes.go

 

// routes.go

package main

func initializeRoutes() {

  // 인덱스 라우터 처리(Handle)
  router.GET("/", showIndexPage)

  // /article/view/some_article_id 부분에 대한 GET 요청 처리
  router.GET("/article/view/:article_id", getArticle)

}

 

2. 뷰 템플릿 작성

 

우리는 templates/article.html 이라는 이름으로 새로운 템플릿을 생성할 필요가 생겼습니다. 해당 파일은 index.html 템플릿과 유사한 방법으로 만들 수 있습니다. 다만 이 경우 기사 목록이 포함된 Payload 변수 대신 단일의 기사가 포함될 것입니다.

 

▶ article.html

 

<!--article.html-->

<!-- header.html 템플릿을 이 위치에 포함시킵니다 -->
{{ template "header.html" .}}

<!--기사 제목을 표시합니다-->
<h1>{{.payload.Title}}</h1>

<!--기사 본문 내용을 표시합니다-->
<p>{{.payload.Content}}</p>

<!-- footer.html 템플릿을 이 위치에 포함시킵니다 -->
{{ template "footer.html" .}}

 

3. 라우터 핸들러 생성

기사 페이지 핸들러 getArticle은 다음의 작업을 수행합니다.

 

3-1. 표시할 기사의 ID를 추출합니다

알맞는 기사를 가져와 표시하려면 먼저 Context에서 ID를 추출해야 합니다. 추출하는 방법은 다음과 같습니다.

 

c.Param("article_id")

 

여기서의 c 는 Gin을 사용할 때 라우터 핸들러의 매개변수인 Gin Context를 의미합니다.

 

3-2. 기사 가져오기

이 부분은 models.article.go 파일에 정의된 getArticleByID() 함수를 통해 수행할 수 있습니다.

 

article, err := getArticleByID(articleID)

 

models.article.go에 포함된 getArticleByID 함수는 다음과 같습니다

 

func getArticleByID(id int) (*article, error) {
  for _, a := range articleList {
    if a.ID == id {
      return &a, nil
    }
  }
  return nil, errors.New("기사를 찾을 수 없습니다")
}

 

이 함수는 기사 목록을 반복하고 ID가 전달된 ID와 일치하는 기사를 반환합니다. 일치하는 기사가 없으면 오류를 반환합니다.

 

3-3. 기사를 전달하는 article.html 템플릿을 렌더링합니다

다음과 같은 코드를 사용해 수행할 수 있습니다.

 

c.HTML(
    // ----- HTTP Status를 200(OK)로 설정합니다 ------ //
    http.StatusOK,
    // ----- article.html 템플릿을 사용합니다 ------ //
    "article.html",
    // ---- 페이지에서 사용하는 데이터를 전달합니다 ----- //
    gin.H{
        "title":   article.Title,
        "payload": article,
    },
)

 

위의 코드를 포함하여 업데이트된 handlers.article.go 파일은 다음과 같이 구성될 것입니다.

 

▶ handlers.article.go

 

// handlers.article.go

package main

import (
  "net/http"
  "strconv"

  "github.com/gin-gonic/gin"
)

func showIndexPage(c *gin.Context) {
  articles := getAllArticles()

  // 템플릿 렌더링을 위해 Context의 HTML 메소드 호출
  c.HTML(
    // ----- HTTP Status를 200(OK)로 설정합니다 ------ //
    http.StatusOK,
    // ----- article.html 템플릿을 사용합니다 ------ //
    "index.html",
    // ---- 페이지에서 사용하는 데이터를 전달합니다 ----- //
    gin.H{
      "title":   "Home Page",
      "payload": articles,
    },
  )
}

func getArticle(c *gin.Context) {
  // ----- 기사 ID가 유효한지 확인합니다 ----- //
  if articleID, err := strconv.Atoi(c.Param("article_id")); err == nil {
    // ----- 기사가 존재하는지 확인합니다 ----- //
    if article, err := getArticleByID(articleID); err == nil {
      // Call the HTML method of the Context to render a template
      c.HTML(
        http.StatusOK,
        "article.html",
        gin.H{
          "title":   article.Title,
          "payload": article,
        },
      )

    } else {
      // ---- 기사를 찾을 수 없는 경우 오류와 함께 중단합니다 ---- //
      c.AbortWithError(http.StatusNotFound, err)
    }

  } else {
    // ---- URL에 잘못된 기사 ID가 지정된 경우 오류와 함께 중단합니다 ---- //
    c.AbortWithStatus(http.StatusNotFound)
  }
}

 

이제 어플리케이션을 Build하고 실행시켜봅니다. http://localhost:8080/article/view/1 에 접속하면 다음과 같은 화면이 뜨게됩니다.

 

제목과 내용이 정상적으로 출력됩니다

 

 

반응형
반응형

BOJ 문제풀이!

 


 

BOJ 2884번 알람 시계 Go Lang 문제풀이입니다.

 

45분인지 아닌지를 확인하기 위해 If문을 사용해서 45분 보다 많이 남았을 때, 딱 45분일 때, 45분 미만일 때로 분류해서 작성합니다.

 

시간은 h, 분은 m으로 입력값을 받아서 다음과 같이 나타낼 수 있습니다.

 

package main

import (
	"fmt"
)

func main() {
	var h int
	var m int
	fmt.Scan(&h, &m)

	if m-45 >= 0 {
		fmt.Printf("%d %d\n", h, m-45)
	} else if h == 0 {
		fmt.Printf("%d %d\n", 23, 15+m)
	} else {
		fmt.Printf("%d %d\n", h-1, 15+m)
	}
}

 


 

 

 

 

반응형
반응형

BOJ 문제풀이!


 

BOJ 14681번 사분면 고르기 Go Lang 문제풀이입니다.

 

x좌표와 0보다 큰 경우와 0보다 크지 않은 경우를 if 문을 통해 나누고, 그 안에서 다시 y좌표가 0보다 큰 경우와 크지 않은 경우에 따라 각각의 사분면이 표시될 수 있도록 Println합니다.

 

package main

import (
	"fmt"
)

func main() {
	var x, y int
	fmt.Scanln(&x)
	fmt.Scanln(&y)

	if x > 0 {
		if y > 0 {
			fmt.Println(1)
		} else {
			fmt.Println(4)
		}
	} else {
		if y > 0 {
			fmt.Println(2)
		} else {
			fmt.Println(3)
		}
	}
}

 


 

 

 

반응형

+ Recent posts