본문 바로가기

Study

(6)
프로세스(Process), 스레드(Thread) 시작하기에 앞서 우리는 자바 프로그래밍을 진행하다보면 멀티 쓰레딩을 마주치곤 한다. 나에게 프로세스가 무엇인가, 스레드가 무엇인가, 멀티 프로세싱과 멀티 쓰레딩의 차이가 무엇인가에 묻는다면 제대로 대답할 수 있을까에 대한 고민을 한 결과 그렇지 못했다. 그래서 이번 기회로 공부를 해보고자 이 포스트를 작성했다. 프로그램, 프로세스, 스레드 우리가 컴퓨터를 켜고 무슨 일을 하려고 한다면 프로그램을 켜서 작업을 진행한다. 프로그램은 정확히 무엇일까? 작업을 위해 실행할 수 있는 파일 저장 장치에 저장되어 있지만 메모리에 올라와 있지 않은 정적인 상태 그렇다면, 프로세스는 무엇일까? 메모리에 올라와 실행중인 프로그램 운영체제로부터 시스템 자원을 할당받는 작업의 단위 프로그램과 프로세스에 대해 요리로 비유해보자..
OAuth 2.0, JWT 시작하기에 앞서 OAuth 2.0(Open Authorization 2.0)은 인증을 위한 개방형 표준 프로토콜이다. 이 프로토콜은 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서사용된다. 우리는 실제로 OAuth 2.0를 자주 사용하고 있다. 구글, 카카오, 네이버, 페이스북, 깃허브 등에서 제공하는 간편 로그인 기능이 하나의 예이며, 우리가 인스타그램을 할 때 페이스북 친구와 연동하여 친구를 추천해주는 것도 OAuth 2.0 중 하나이다. 그렇다면, OAuth 2.0이 어떻게 동작하는지 알아보자. OAuth 2.0 개념 OAuth 2.0에서 사용하는 주요 용어와 개념들에 대해서 살펴보자. OA..
REST, REST API 우리는 개발을 할 때, 수도 없이 API라는 개념을 접한다. 그런데 우리는 이제 단순 API가 아니라 REST 혹은 RESTFUL한 API를 지향해야한다고 말한다. (API에 대해 잘 모르겠다면, API 링크(tistory.com)를 참고하자) 대체 왜 REST를 지향하는 것일까? 현대에 안드로이드폰, 아이폰와 같은 모바일 디바이스와 브라우저 등 다양한 클라이언트들이 등장함에 따라 다양한 클라이언트들에 대응하기 위한 전략이 필요했다. 또한, 애플리케이션이 점점 더 복잡해지면서 애플리케이션을 어떻게 효율적으로 분리하고 통합하느냐가 큰 쟁점 중 하나로 대두되었다. 그에 따라, 이에 대한 대안을 마련해줄 수 있는 REST에 관심을 가지게 되었다. 그렇다면 REST, RESTFUL는 무엇일까? REST란 RES..
API API? API는 우리가 프로그래밍을 하다보면 수도 없이 접하는 개념 중 하나이다. 당장, 웹 서비스 개발에서만 봐도 구글 API, 카카오 API 등 다양한 API들이 존재하고 이름에서 알 수 있듯이 다양한 플랫폼에서 API를 제공해준다. 나도 이 개념을 상당히 많이 접해보고 사용했는데 이 포스트에서는 이 API라는 것에 대해서 정리해보려고 한다. ​ 사람들이 API를 쉽게 설명하려고 예시를 들 때 "가게"를 자주 언급한다. 가게의 서비스 과정을 보면 API의 개념을 쉽게 이해할 수 있을 것이다. ​ 우리는 흔히 밥을 먹으러 어떤 가게에 찾아가면 메뉴판에서 메뉴를 고른 뒤 음식을 주문한다. 그렇다면, 우리는 점원에게 (혹은 키오스를 통해) 주문을 하고 주문은 접수되어 요리사에게 전달된다. 요리사는 주문된..
함수형 프로그래밍 프로그래밍 패러다임 함수형 프로그래밍에 대해서 알아보기 전 프로그래밍 패러다임을 간단히 알아보려고 한다. 프로그래밍 패러다임(Programming Paradigm)에서의 프로그래밍과 패러다임의 의미를 각각 살펴보자. 프로그래밍 : 컴퓨터 프로그램을 작성하는 일 패러다임 : 한 시대의 사람들의 견해나 사고를 근본적으로 규정하고 있는 인식의 체계 ​ 이러한 의미로 바라보았을 때, 프로그래밍 패러다임은 프로그래머가 컴퓨터 프로그램을 작성하는 데 있어 바라보는 관점 정도로 해석할 수 있을 것 같다. 즉, 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를 어떻게 작성할 지 결정하는 역할을 한다. 그렇다면, 현대에 주를 이루던 프로그래밍 패러다임에 대해서 몇 가지 살펴보자. 명령형 프로그래밍 : 어떻게(HOW) ..
TDD, BDD, DDD TDD (Test Driven Development) TDD를 직역하면 테스트 주도 개발이다. TDD는 매우 짧은 개발 서클의 반복에 의존하는 소프트웨어 개발 프로세스이다. 새로운 기능에 대해 자동화된 테스트 케이스를 먼저 작성하고 테스트 케이스를 통과하는 최소한의 코드를 작성한다. 그 이후, 코드에 대한 리팩토링을 진행한다. 우리가 흔히 새로운 기능에 대한 코드를 짠 후, Test 코드를 짜는 것과 대비되는 모습을 보여준다. TDD는 "테스트 케이스 작성 -> 기능 구현 -> 리팩토링"의 단계를 반복하여 좋은 코드를 작성하기에 유리하다. 각 기능마다 테스트를 통해 기능의 안정성을 보장할 수 있다. 하지만, 테스트 케이스를 작성해야한다는 점으로 인해 절대적인 코드량이 늘어날 수 밖에 없어 프로젝트 개발의..