-
Github Action Basic
github 에서 제공하는 공식 hello-world 튜토리얼을 진행하면서 적는 일지. https://lab.github.com/githubtraining/github-actions:-hello-world 배우게 될 것 workflow file을 구성하는 방법 실행가능한 script를 추가하는 방법 workflow와 action blocks를 만드는 방법 workflow를 실행시키는 방법 workflow log를 확인하는 방법 Github action은 무엇인가? 테스트 자동화 (CI) CD github의 이슈, @멘션, 라벨 등을 이용한 workflow trigger 코드리뷰 진행 브랜치 관리 이슈, PR관리 라고 한다.. Actions and Workflows 액션과 워크플로우에 대한 설명 깃헙액션에는 2개의 컴포넌트가 있는데 그것이 바로 action 그 자체 action을 이용하는 workflow...
firepizza's profile imagefirepizza
2022-01-12 20:00
-
브라우저에서 비동기요청을 수행할 때 도움이 될 수도 있는 글 (api wrapping)
API 서버와의 통신 웹 개발 환경이 여러모로 다양해지면서 REST API 서버를 별도로 두고 클라이언트(브라우저)에서 특정 endpoint를 호출해 CRUD를 수행하는 모델이 속속 등장하고 있습니다. 이러한 개발을 진행하다 보면 자연스레 소위 AJAX(Asynchronous JavaScript and XML) 라고 불리우는 기법을 클라이언트단에서 활용하게 됩니다. AJAX 를 이용하기 위해서는 여러가지 방법이 있을 수 있는데, 먼저 js 네이티브단에서 지원하는 XMLHttpRequest (XHR이라고도 불리는)객체를 활용한 방법이 있겠습니다. XMLHttpRequest const xhr = new XMLHttpRequest(); xhr.onreadystatechange = () => { // 콜백은 간략화 if (xhr.status ===...
firepizza's profile imagefirepizza
2021-11-04 10:00
-
나의 개인 프로젝트가 주로 실패했던 이유
머릿말 어느덧 이 블로그에 글을 작성하기 시작한 지 2년 가까운 시간이 되어 가고 있습니다. 지금까지 썻던 글 들을 되돌아 보면… 몇가지의 news를 소개하는 글을 제외하면 대부분이 기술적인 공부와 그 결과에 대한 정리 및 설명글이었던 것 같습니다. 이번에는 어느정도 주니어 개발자의 티를 벗어보려고 하는 시점에서 (현재기준 개발자로 일한지 만 4년째,, 조금 이른가?) 개인적으로 실패했던 경험에 대해 회고하고 기록해 함께 나눠보고자 합니다. 미리 말씀 드리자면 조금은 지루하고 고리타분한 이야기가 될 수도 있겠네요. 누구나 생각하는 개인 프로젝트 개발에...
firepizza's profile imagefirepizza
2021-08-26 19:00
-
java 커스텀 어노테이션
Annotation Annotation을 직역하면 주석 이라는 뜻인데, 간단히 말해 소스에 메타 데이터를 주입시켜주는 일종의 표식 정도로 생각하면 좋겠습니다. 스프링 으로 구성된 웹서버에서 흔히 사용하는 @Controller, @Service, @Repository 등을 예로 들 수 있겠네요. 물론 다양하고 광범위한 활용 방법이 있겠지만.. 직접 사용해 보았던 것을 소개하고, 방법을 이해하신 뒤에 응용해 보시는 편이 더 좋을 것 같습니다.! 어노테이션을 만들자 간단한 커스텀 어노테이션을 만들어 보겠습니다. // MyAnnotation.java @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface MyAnnotation { } MyAnnotation 이라는 이름의 커스텀 어노테이션이...
firepizza's profile imagefirepizza
2021-06-24 10:00
-
AWS Polly로 만들어보는 장난감
AWS Polly polly란, Amazon에서 제공하는 TTS 서비스입니다. 생성된 음성을 S3 버킷에 저장할 수도 있고, 파일째로 다운받을 수도 있습니다. 별도 구축도 필요 없고, 단순히 Tool 정도로만 기능이 제공되고 있습니다. 그러나 제공되는 aws-sdk를 이용하면 이런 polly의 기능을 API 형태로 활용할 수 있게 되는데요, 오늘은 이를 이용해 다음과 같은 간단한 서비스(?)를 만들어 보려고 합니다. 클라이언트가 어떤 텍스트를 요청하면 람다가 작동해 Polly 서비스를 통해 TTS처리된 음성파일을 얻고 다시 람다는 해당 파일을 S3버킷에 저장한 뒤 클라이언트에게 그 파일을 재생시켜 준다....
firepizza's profile imagefirepizza
2021-04-14 18:00
-
객체의 복사에 대하여 (Shallow copy / Deep copy)
java는 Pass by value 일까? reference 일까? 자바를 처음 배울 즈음, 메소드 인자(parameter)로 사용되는 객체는 value가 아닌 reference를 전달한다는 교과서 구문을 읽고 이게뭐야 하고 가볍게 흘려넘긴 기억이 있다. 말도 안되는 코드지만 다음 코드의 결과를 예측할 수 있었을까?? Person p = new Person("noname"); setAgentName(p); System.out.println(p.getName()); // 1 p = setAgentName(p); System.out.println(p.getName()); // 2 private Person setAgentName(Person p) { p.setName("firepizza"); return p; } 물론 모두 예상했겠지만 1,2 모두 ‘firepizza’가 출력된다. 그럼 이건 어떨까? Person p = new...
firepizza's profile imagefirepizza
2021-02-03 19:00
-
[JS] 행복한 신기능
ES2020, ES2021 모던 스크립트 기법을 나누는 분기점이 되었던 ES6(ES2015)가 발표된지 어느덧 6년째가 되었습니다. 작년말에는 ES12(ES2021)가 발표되었고, 그간 업데이트 된 추가 기능 중 흥미로운 기능들이 있어 몇가지 소개하고자 합니다. Optional Chaining (?.) 예전에 웹뷰 기반의 앱 서비스를 하던 때 처음으로 iOS 개발자분과 협업을 할 수 있는 기회가 있었고, bridge통신이 중요했기에 서로 코드를 공유하며 일했던 적이 있었습니다. 그때 처음으로 swift 라는 언어를 접할 수 있었고, 당시 자바개발에만 푹 빠져있던 저에게 충격적으로 다가왔던 문법이 있었는데요, 그건 바로 nil...
firepizza's profile imagefirepizza
2021-01-14 15:00
-
GET vs POST 그리고 RESTful의 등장
GET vs POST 들어가며 웹개발을 처음 배우면서 작성해 보는 웹 페이지는 아마 간단한 form을 만든 뒤 이름,나이,주소 등을 입력받아 submit 해 DB(또는 파일)에 저장하는 예제일 것이다. (적어도 나는 그랬다.) 그리고 그때 처음 만나게 되는 게 바로 form 태그의 method 속성이며, 아마 특별한 교육과정이 아닌 이상 get방식과 post 방식이 있음을 배울 것이다. (get방식 전송의 경우 생략가능하다는 것과 함께) 그리고 그 둘의 차이는 get 방식의 경우 URL에 다음과 같이 파라미터가 전송되며, http://some-url.com?name=firepizza&age=20 post 방식의 경우 URL에 노출되지...
firepizza's profile imagefirepizza
2020-11-18 13:00
-
NPM 번외편 - npm에 내 라이브러리 등록하기
나만의 라이브러리를 만들어 보자. 오픈소스… 라이브러리… 말은 많이 들어 봤지만.. 그런건 정말 대단한 슈퍼개발자들이나 하는 거 아닌가? 라는 생각을 어렴풋이 가지고 있었던 것 같다. (물론 지금도 어느 정도는 벽을 느끼고 있지만.) 그런데 아래와 같은 경험을 하며 그 진입장벽중 꽤나 큰 부분이 허물어졌던(?) 기억이 있어, 이 글을 읽은 분들이라면 한번쯤은 도전해 보셨으면 하는 마음에 주제를 선정해 보았다. 개발을 하다 보니 유틸리티성을 띄는 js모듈을 별도로 만들어 작업하는 경우가 있었다. 그런데 이런 유틸성 모듈들은 또 다른 프로젝트에서도 사용하고...
firepizza's profile imagefirepizza
2020-08-26 15:00
-
Webpack 입문하기-2/4 (NPM과 친해지기)
Webpack 입문하기 4부작 [1] node와 npm [2] NPM과 친해지기 (현재 글) [3] Webpack [4] Webpack과 친해지기 이번 글의 목차 0. 단어 뒤집기 프로그램 1. 랜덤뉴스 사이트 지난 글에 이어 이번에는 NPM을 실제로 활용하는 간단한 예제들을 실습해 보겠습니다. 0. 단어 뒤집기 프로그램 NPM으로 패키지를 관리하는 node.js 프로그램을 하나 만들어 보겠습니다. 단순히 문자열을 입력받아 해당 문자열을 반대로 뒤집어 출력해 주는 프로그램 입니다. 먼저 적당한 디렉토리에서 npm init 명령어를 통해 NPM 으로 관리되도록 프로젝트 세팅을 해 줍니다. 패키지를...
webpack node npm bundle javascript
firepizza's profile imagefirepizza
2020-06-25 10:00
-
Webpack 입문하기-1/4 (Node와 NPM)
Webpack 입문하기 4부작 [1] node와 npm (현재 글) [2] npm과 친해지기 [3] Webpack [4] Webpack과 친해지기 이번 글의 목차 0. npm start? 그래서 그게 뭔데요? 1. Node.js 설치 2. Node.js란 무엇인가 3. NPM 4. npm이 왜 필요할까? 0. npm start? 그래서 그게 뭔데요? 제가 다닌 첫 회사에서 운영중인 서비스는 Spring boot로 구성된 MPA 사이트였고, 프론트에서는 js파일만 따로 모아 webpack번들링을 통해 배포하고 있었습니다. webpack은 커녕 npm도 몰랐고, 프로그래밍이라곤 java, spring과 jsp를 사용해 본 게 전부였던 제가...
webpack node npm bundle javascript
firepizza's profile imagefirepizza
2020-05-21 16:00
-
인터넷은 무엇인가?
처음 웹 개발을 시작하고 나서 정말 여러가지 궁금증이 많이 있었습니다. 인터넷은 누가 만든거지? 불 처럼 원래 존재했으나 기술이 발전하면서 발견된 것일까? 아니라면 존재하지 않는 것을 발명해낸 것일까? 와 같은 원론적인 내용부터 인터넷 주소는 누가 정해주는 것일까? 주소를 사고팔고 할 수 있다던데.. 그렇다면 최초에 인터넷 주소는 누구의 소유였을까..? 그 사람은 돈을 엄청나게 벌었겠다… 와 같은 부분까지요. 그런데 개발 자체에 목매달고 기술 자체에 공부하다 보니 이런 기본적인? 본질적인? 부분에 대한 이해는 생각보다 깊지 않게 되더라구요. 사실 몰라도...
firepizza's profile imagefirepizza
2020-03-31 16:00
-
자바스크립트 콜백지옥 탈출기 - 3.async/await
async/await 지금까지 콜백지옥을 탈출하기 위해 Promise를 사용하여 적극적으로 해결해 보았습니다. 지난시간에는 제가 마주했던 트위치 API를 사용한 팔로우/언팔로우 기능을 Promise를 이용해 구현했는데요 마지막에 우리는 한가지 의문을 갖게 되었습니다. 바로 아래와 같은 코드로 마치 동기처리를 하듯이 비동기처리를 순차처리할 수 없을까? 하는 것입니다. const userId = getUserId(); const isFollowing = getIsFolowing(userId); toggleFollow(isFollowing); const msg = isFollowing ? "언팔로우 성공" : "팔로우 성공"; console.log(msg); 그러나 아시다시피 getUserId 라는 함수는 내부적으로 트위치 API서버와 비동기 통신을 하고 있고, getIsFollowing과 toggleFollow 역시...
javascript promise async es6 es8
firepizza's profile imagefirepizza
2020-02-03 10:00
-
자바스크립트 콜백지옥 탈출기 - 2.Promise의 활용
Promise 지난 시간에는 콜백지옥 이라는 문제에 좌절했다가, Promise를 리턴하는 함수의 체이닝을 통해 문제를 해결해 보았었습니다. 그렇다면 이번에는 조금 더 적극적으로 Promise를 활용하는 방법에 대해 알아보겠습니다. 현실의 문제 최근에 트위치 API를 활용해 특정 스트리머를 팔로우/언팔로우 하는 기능을 개발했을 때 만났던 문제인데요, 어떻게 해결할 수 있을지와, Promise를 통해 해결한 방법을 소개해 볼까 합니다. 요구사항은 아래와 같았습니다. ABC 라는 채널을 팔로우중인지 여부에 따라 팔로우/언팔로우 요청을 보내야 함 팔로우여부를 먼저 알아내고.. 해당 여부에 따라 각기 다른 API호출을 해야 함....
firepizza's profile imagefirepizza
2019-11-06 10:00
-
자바스크립트 콜백지옥 탈출기 - 1.영원한 사랑
Callback hell 비동기 호출이 자주 일어나는 프로그램을 짜다 보면 반드시 한번쯤은 마주할 수 밖에 없는 문제가 있습니다. 그것은 소위 콜백헬 이라고 불리는 것인데요. 콜백장풍을 받아라 저의 경우는 주로 다음과 같은 요구사항을 해결하려다 보면 어느순간 콜백헬이 만들어져 있었던 것 같습니다. 하나의 비동기 요청이 완료된 뒤, 완료로 인해 얻어진 값을 사용해 다음 비동기요청이 이루어짐. 여러 번의 비동기 호출이 이루어지는데 각 처리는 비동기로 이루어지나, 각 비동기호출간의 실행순서는 동기적이었으면 함. 여러분은 어떤 경우에 이 친구를 만나보셨나요? 어찌되었던, 비동기 프로그래밍을...
firepizza's profile imagefirepizza
2019-10-29 10:00