본문 바로가기

All categories

(58)
프론트 입문 리액트 삽질기 1 - Create React App, Functional Component 안녕하세요, 백엔드 개발자로 근무하다 프론트가 어떻게 돌아가는지는 알고 협업을 하는게 좋지 않을까? 라는 생각이 문득 들어 리액트 스터디를 시작하게 되었습니다. JS에 아직 익숙하지도 않고, 프론트라곤 angular, php만 살짝 건드려본 백엔드 개발자의 프론트 삽질기(흑역사)를 공유하기 위해 블로그에 기록을 시작하게 되었습니다. 공부하는 단계다 보니 정확하지 않은 정보를 올릴 수도 있어 따끔한 지적과 조언을 소중히 귀담아 듣겠습니다. 개발환경은 Mac os Big Sur, Apple M1 Sillicon 입니다. 다음 명령어를 사용해 node를 설치해 줍니다. brew install node 다음 명령어를 사용해 yarn을 설치해 줍니다. npm install --global yarn 설치된 node..
package ... is not in GOROOT 해결법 goLang을 공부하던 도중, 점점 작업 디렉토리가 지저분해지는걸 보고 다른 언어들처럼 폴더를 만들어 소스를 관리하고자 했습니다. 그러면 import문을 사용해서 main.go에서 깔끔하게 불러올 수 있을테니깐요. 조금의 삽질을 거쳐 ,이럴 때 go에서 제공하는 디펜던시 관리 시스템인 go modules를 사용하면 해결할 수 있다는 것을 확인했습니다. https://blog.golang.org/using-go-modules Using Go Modules - The Go Blog Tyler Bui-Palsulich and Eno Compton 19 March 2019 Introduction This post is part 1 in a series. Note: For documentation on manag..
Apple Silicon M1 Mac에서 ARM Native homebrew 설치하기 안녕하세요! 이번에 애플 M1 맥을 구매하면서 새로운 ARM 환경의 맥에 개발 환경을 셋팅하는데 난항을 겪고 있었습니다.. 다름이 아니라 homebrew 홈페이지의 다음 명령어는 Intel Mac을 위해 빌드된 homebrew를 설치하도록 하기 때문입니다. /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" M1 맥을 위해 빌드된 homebrew는 다음 github gist의 스크립트를 통해 설치하면 됩니다. Install Native Homebrew on Apple Silicon M1 Install Native Homebrew on Apple Silicon M1. GitHub Gist..
맥 쉘에서 java 버전 변경(스위칭)하기 개인 프로젝트를 진행하면서 JDK 버전을 11로 올려서 작업을 시작했습니다. 그런데 기존 관리하던 코드는 모두 JDK 8을 쓰고 있어 어떻게 각 버전으로 스위칭할지 고민하다가 다음 글을 보았습니다. advenoh님의 글 : 맥 환경에서 여러 JDK 버전 설치하고 변경하기 맥 환경에서 여러 JDK 버전 설치하고 변경하기 자바 개발을 하다 보면 하나의 JDK 버전이 아니라 여러 버전을 설치해야 할 때가 종종 있습니다. 진행하는 프로젝트마다 개발하는 JDK 버전이 조금씩 다를 수 있고 새로 릴리스한 버전을 설치해서 advenoh.tistory.com advenoh님의 스크립트를 사용하며 자바 버전을 스위칭하다가 $PATH가 쉘 세션 내에서 점점 비대해지는걸 보고 스크립트를 약간 수정하여 사용하고 있습니다. 해..
Thread-Safe하지 않은 자바의 SimpleDateFormat Java의 SimpleDateFormat은 절대 Simple하지 않습니다. 멀티 스레드 환경이면 더더욱이요. 다음과 같은 코드를 실행해 봅니다. import java.text.SimpleDateFormat import java.util.Date import scala.concurrent._ import ExecutionContext.Implicits.global val format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") def fmtFuture(dateStr: String): Future[Date] = Future { format.parse(dateStr) } val parseList: Seq[Future[Date]] = (1 to 10).map(i => "20..
[Scala Cats] 펑터 Functors, Higher Kinded Types 펑터란 리스트나 옵션 등과 같은 컨텍스트(혹은 객체)에서 내부의 값에 연산자(함수)를 편하게 적용할 수 있도록 도와주는 컨텍스트입니다. 펑터 그 자체는 그닥 유용하지 않지만, 모나드 및 applicative functor는 Cats에서 가장 보편적으로 사용되는 추상화 계층입니다. Functor를 이해하기 위한 예시 러프하게, 펑터란 map 메소드를 사용할 수 있는 '것'들을 의미합니다. (Option, List, Either 등을 생각하면 됩니다.) 우리는 보통 map 메소드를 Lists 내의 원소에 대한 반복 탐색을 수행할 때 처음 접하게 됩니다. 하지만, 펑터를 이해하기 위해서는 이 메소드를 다른 방법으로 생각해볼 필요가 있습니다. List 내의 원소를 순회하기 위해 사용하는 함수라 생각하지 말고, ..
[Scala Cats] 모노이드와 세미그룹 이번 글에서는 모노이드와 세미그룹에 대해 다룰 예정입니다. 여전히, 레퍼런스는 Scala with Cats [무료 PDF] 입니다. Recap. 모노이드와 세미그룹은 값을 더하거나 합치는데 사용됩니다. 들어가기에 앞서, 몇 가지 기초적인 수학 법칙들에 대해서 짚고 넘어가고자 합니다. 우리는 덧셈과 곱셈 연산에 대해 결합법칙과 교환법칙이 성립하는 것과 덧셈 연산의 항등원은 0, 곱셈 연산의 항등원은 1이라는 사실을 이미 알고 있습니다. 더불어, 문자열의 덧셈 연산은 결합법칙이 성립하며, 항등원을 가지고 있습니다. "One" ++ "Two" // "OneTwo" "Two" ++ "One" // "TwoOne" 교환법칙은 성립하지 않는다. ("One" ++ "Two") ++ "Three" // "OneTwoT..
[Scala Cats] 타입 공변성/반공변성 다루기 지난 글에서는 Cats 라이브러리의 타입 클래스에 대해 다루었습니다. [Scala Cats] Cats의 타입 클래스 지난번 포스트에서 타입 클래스를 스칼라에서 어떻게 구현하는지를 알아보았습니다. [Scala Cats] 스칼라 타입 클래스 기초 귀여운 고양이로 시작합니다. 스칼라 Cats는 스칼라에서의 Functional한 프 sean-ma.tistory.com 타입을 다룰 때 가장 조심해야 할 부분중에 하나가 상/하위 타입을 같이 사용해야 하는 경우입니다. 이번 글에서는 타입 간의 계층 관계에 대해서 다루어 보겠습니다. 레퍼런스는 Scala with Cats [무료 PDF] 입니다. 타입 변성 스칼라에서 타입 간의 계층 관계를 처리할 때, 항상 따라오는 문제 중 하나가 타입의 변성(Type Varianc..