목록전체 글 (124)
지나공 : 지식을 나누는 공간
지난 신입 과제 때 webclient로 기상청 API를 호출하는 과정에서 아래와 같은 에러를 마주한 적이 있다. (해결법을 보고 싶은 분은 이 포스팅 맨 아래쪽으로 내리세욤) HTTP 헤더에 대한 기본 지식이 없었다. 그래서 지금 보니 진짜 엉망진창의 요청헤더였네?!?! 어디로 숨을가... 이 사진을 그대로 여쭤봤다니....어휴어휴.. 아무튼 과거의 쪽팔림은 뒤로 하고,(ㅋㅋ) HTTP 헤더 기본 내용도 공부했으니, 이제 이 내용을 적용해서 위에서 뭐가 잘못됐었는지 아래에서 살펴볼 예정이다. Header 기본 뭐가 잘못됐는지 보기에 앞서, 필요한 기본 개념부터 정리하잣. Header의 용도 HTTP 전송에 필요한 모든 부가 정보. 메시지 바디의 내용, 크기, 압축은 뭘로 했는지, 인증에 대해서, 캐시 관..
지난번엔 웹서버와 WAS를 간단히 알아보고, Nginx도 간단히 알아봤다. 오늘은 그것들이 등장한 배경과 구조를 알아본다. 우아한Tech 채널에서 너무 잘 정리해 주셔서 nginx.conf 파일과 같이 글로 정리해 봤다. Nginx와 Apache의 등장배경 1995년 Apache 아파치는 본래 정적 컨텐츠만 처리하는 웹서버이다. 초기 구조를 보면 클라이언트로부터 요청이 들어올 때마다 process를 할당한다. 근데 process를 매번 만들기는 부담이 있으니 prefork 방식을 사용하는데, 미리 process들을 만들어두고 새 요청이 들어올 때마다 꺼내서 할당하는 것이다. 그리고 만들어뒀던 프로세스가 모두 할당되면 추가로 프로세스를 만든다. 장점 : - 개발하기가 쉽다. - 새 모듈마다 새 프로세스를 ..
들어가는 글 웹사이트가 서비스되려면 브라우저가 읽을 수 있는 파일들, HTML이나 CSS, js, 이미지와 같은 여러 데이터가 필요하다. 이런 걸 서버의 특정 폴더, 디렉토리에 넣어두고 이 폴더를 외부에서 접근 가능하도록 개방해둔 뒤, 서버에 지정된 웹사이트 주소로 접속하면 해당 데이터들을 받아갈 수 있게 하는 것이 웹 서버의 기본 역할이다. 이번에는 다소 지루할 수도 있지만(?) 웹 서버와 WAS의 딱딱한 정의를 먼저 보고, 다음 글에서는 등장 히스토리를 함께 정리할 예정이다! Web Server 클라이언트가 어떤 페이지를 요청하면 그 요청을 받아서 정적 컨텐츠를 제공하는 서버인데, 만약 동적 컨텐츠에 대해 요청을 받는다면 WAS에게 해당 요청을 넘겨준 뒤 WAS에서 처리한 결과를 클라이언트에게 전달한..
결과물과 과정 간단히 지난 금요일, 최종 발표를 하면서 4개월의 신입 과제 프로젝트를 마무리했다. 내가 진행한 과제의 주제는 체크인날 숙소 위치의 날씨 정보를 제공하는 것이었고, 아래 그림은 개발 결과물이다. (뿌-듯!) 부끄럽지만 그동안 디자인과 FE 개발을 외면하며 살아왔는데 이번에 처음으로 디자인과 FE 개발까지 다 해내서 더욱 뿌듯한 것 같다.ㅎㅎ 이걸 만들기 위한 작업은 크게 세가지가 있었다. 1. 배치 작업 : Spring Scheduler로 기상청 open API를 주기적으로 호출하고, 전국의 날씨 데이터를 지역 별로 조회할 수 있게 DB에 저장하기. 여기서는 WebClient를 처음 사용해보면서 Reactor에 대해 조금 공부했다. Redis도 사용하고~ 2. BE 개발 : 그 다음 클라이..
요즘 동기들이랑 매주 모던 자바 인 액션의 챕터를 읽고 궁금한 내용을 대화로 풀어가는 시간을 가지고 있다. 이번엔 스트림에 대해 읽었는데 읽으면서 우리가 되게 헷갈려서 궁금해했던 질문이 있었다. 흥미로운 것 같아 기록하려고 한다. 보고 잘못된 부분 있으면 답글 달아주세요~!!! 의문들 모든 요소가 만족되는 filter를 만들어놨을 때. stream에 findAny를 하면 filter건 조건에 만족하는 것들 중에 반드시 맨 첫 번째 요소가 나오고, parallelStream에 findAny를 하면 첫째 요소가 아닐 수도 있겠네!? 확인해보고 싶다! stream과 parallelStream에 각각 findFirst를 하면 어떨까? 1의 결과로 보아 parallelStream은 과연 진짜로 first인 값을 ..
요즘 신입사원 과제 프로젝트 덕분에 안 써본 다양한 기술을 접하고 있다. 지난 번엔 Reactive Streams에 대해 간단히 적었는데, 지금은 GraphQL을 다룬다.ㅋㅋㅋ 아직 reactive 에서 쓰다 만 임시저장 글이 많은데 graphQL 한번 올리고 그 담에 이어서 또 reactive 정리를 이어서 할 것 같다. 이번 포스팅은 Apollo 블로그에서 REST와 GraphQL을 비교한 내용을 번역하면서 설명을 추가했다. https://www.apollographql.com/blog/graphql/basics/graphql-vs-rest/ 로드맵 펼치기 더보기 야생형 개발자로서... 일단 더 많이 접한 REST랑 어떻게 다른지를 보는 게 더 이해가 빠를 것 같다. REST와의 비교 : https:..
전에 RxJava 첫 포스팅에서 Reactive Stream에 대해 적었는데 여기서 한번 더 정리하고, 그것들과 관련된 Reator와 RxJava, WebFlux 등이 어떤 건지 알아본다. Reactive Streams Reactive Streams is a standard for asynchronous data processing in a streaming fashion with non-blocking back pressure. 논블로킹 백프레셔를 이용한 비동기 데이터 처리의 표준이라고 말하고 있다. 그렇다면 아래 세 가지를 더 알아봐야 한다. 스트리밍 처리 비동기 방식 백 프레셔 표준. 뭐가 표준이란거?? 스트리밍 처리 전통적인 데이터 처리 방식 요청이 오면 저장소에 쿼리해서 모든 데이터를 메모리로 ..
둘 다 데이터를 통지하는 생산자인 Flowable 과 Observable을 비교해보자. Flowable Observable Reactive Streams 인터페이스를 구현했음. Reactive Streams 인터페이스를 구현한 게 아니라 RxJava 1.x에서 독자적으로 제공하는 클래스임. Subscriber에서 데이터를 처리한다. Subscriber는 reactive streams의 기본 스펙임. Observer에서 데이터를 처리한다. Observer도 RxJava1.x에서 독자적으로 제공하는 클래스임. 데이터 개수를 제어하는 배압 기능이 있음. 배압 기능이 없음. 배압 기능이 있기 때문에 subscription으로 전달 받는 데이터 개수를 제어할 수 있다. 배압 기능이 없기 대문에 데이터 개수를 제어..
들어가기 전에 이제부터 데이터를 생성해서 내보내는 쪽은 생산자라고 부르고, 생산자가 데이터를 내보내는 행위를 데이터를 통제한다고 하며, 생산자가 보낸 데이터를 받아 처리하는 쪽은 소비자라 부르기로 하자. 그리고 소비자가 데이터를 처리하는 것을 데이터를 소비한다고 하자. Reactive Streams 란? 리액티브 프로그래밍에 대한 인터페이스만 제공한다. RxJava는 Reactive Streams의 인터페이스들을 구현한 구현체다. Reactive Streams는 Publisher, Subscriber, Subscription, Processor라는 4개 인터페이스를 제공한다. Publisher : 데이터를 생성하고 통지한다. Subscriber : 통지된 데이터를 전달받아서 처리한다. Subscripti..
용도 코드 뜯어볼 때 필요한 원하는 breakpoint 한번에 해제 cmd + shift + f8 break point들 한번에 조회 cmd + shift + f8 find usage option + f7 코드에 대한 설명 보기. docs cmd + Q 코드 작성할 때 필요한 class 만든 뒤 depth 하나 들어가기 (바로 코드 쓰게) cmd + shift + Enter 필요없는 import 없애줌 Ctrl + Option + O 방금쓴 윗줄코드를 아랫줄에 그대로 복사 윗줄에서 Cmd + D 코드 수정 단어 찾아서 일괄 수정 cmd + r / cmd + shift + r (전체) 변수 추출하기 : cmd+opt+v 함수 위에서 쓰면 리턴 타입 변수 자동 생성 해줌 함수 추출하기 : cmd+opt+m ..