GraphQL을 사용하면 기존의 REST 엔드 포인트의 집합이 아니라 타입 집합으로 API가 보이게 된다. 따라서 GraphQL API를 만들기 전에는 우선적으로 API에서 반환할 데이터 타입에 대해 생각하고 정의해야 한다. 이러한 데이터 타입의 집합을 스키마(Schema)라고 부른다. GraphQL은 스키마 정의를 위해 SDL(Shema Definition Language)를 지원한다. 이 스키마 문서는 애플리케이션에서 사용할 타입을 정의해 둔 텍스트 문서이다. 여기서 정의한 타입은 나중에 클라이언트-서버 통신 시 GraphQL 요청에 대한 유효성 검사에서 사용된다. 사진 공유 애플리케이션 사진 공유 애플리케이션을 만들어 보면서 GraphQL 타입과 스키마를 공부해보자. 사진 공유 애플리케이션은 깃허브..
GraphQL이 한글패치해서 제공하는 공식 튜토리얼이 있다. 잘 정리해서 알려주고 있어 매우 도움이 되니 참고하자. https://graphql-kr.github.io/learn/ GraphQL: API를 위한 쿼리 언어 GraphQL은 API에 있는 데이터에 대한 완벽하고 이해하기 쉬운 설명을 제공하고 클라이언트에게 필요한 것을 정확하게 요청할 수 있는 기능을 제공하며 시간이 지남에 따라 API를 쉽게 진화시키고 graphql-kr.github.io 회사에 들어가니 REST API가 아닌 GraphQL을 사용한다고해서 급하게 공부하게 됐다. 학부 4년 내내 공부 및 플젝을 하면서 서버-클라이언트 통신 구조에서 REST를 사용하지 않는 경우는 배워본적도 들어본적도 없었지만 이는 매우 우물한 개구리에 불과..
Cookie, Session, JWT 이러한 방법들을 사용해서 사용자 정보를 갖는 이유는 HTTP의 Stateless한 특징 때문이다. Cookie HTTP의 무상태를 보완하기 위해 사용자 정보를 쿠키에 담아서 요청 시 함께 보내는 방법 매커니즘 클라이언트(브라우저)가 로그인을 하면 서버가 응답 시 쿠키에 사용자 정보를 담아서 반환해준다. 클라이언트는 사용자 정보를 저장하고 서버에 요청할 때마다 HTTP HEADER에 해당 쿠키를 실어서 보낸다. 주의사항 HTTPS가 아니라면 쿠키가 암호화되지 않으므로 노출될 가능성이 있다. 따라서 회원관련 정보는 담지 않는것이 좋다. HTTP Only 설정 시 브라우저를 통한 요청이 아닌 Javascript 등을 통해 Cookie를 담아 요청하면 HTTP ONLY가 아..
SYN Flooding Attack란? SYN ACK는 4 Layer 계층에서 TCP의 3-way hadnshake를 맺을 때 교환하는 비트 정보이다. 기본적인 TCP 3-way handshake 클라이언트가 서버에 SYN을 보낸다. 서버가 SYN 응답으로 ACK를 보내고 연결을 위해 SYN을 보낸다. 클라이언트가 SYN 응답으로 ACK를 보낸다. SYN Flooding Attack 방식의 경우 공격자가 서버에 SYN을 보낸다. 서버가 SYN 응답으로 ACK를 보내고 연결을 위해 SYN을 보낸다. (ACK를 기다리며 대기한다.) 공격자는 ACK를 보내지 않고 대량의 SYN을 보낸다. (이때 패킷은 내용은 없고 헤더에 SYN 비트만 체크되어있다) 서버는 SYN에 대응하기 위해 사용하지 않는 포트를 계속 할..
서블릿 서블릿은 클라이언트의 요청에 대해 멀티 쓰레드로 처리가 가능하도록 한 기술이다. 쓰레드가 서블릿을 할당받아서 수행하게 되고, 개발자는 쓰레드에 관해 신경쓰지 않아도 되게됐다. 문제는 HTML 생성이 어려웠다. 요청에 대해 동적으로 HTML 웹 뷰를 생성하는게 너무 힘들었다는 것. JSP HTML 화면을 쉽게 작성할 수 있고 + Java code도 작성할 수 있게 됐다. 결국 서블릿으로 변환되어 처리되지만 해당 부분은 개발자가 신경쓰지 않아도 되는 부분이다. 문제는 HTML 생성은 편리한데 비지니스 로직까지 담당하게 된다. 서블릿, JSP 조합 MVC 패턴 사용 모델, 뷰, 컨트롤러로 역할을 나누어 개발하게 된다. 화면을 담당하는 뷰에 너무 많은 부담을 주지 않도록 하기위해 나왔다. 이 패턴이 비슷..
자바 웹 서버에서 요청들이 오면 해당 요청들을 처리하는 것이 서블렛이다. 이 서블렛들은 싱글톤으로 관리된다 했는데 서블렛을 부르는 존재는 누구일까? 쓰레드 애플리케이션 코드를 하나하나 순차적으로 실행하는 것이 쓰레드이다. 프로그램의 수행단위가 쓰레드. 자바 메인 메서드를 처음 실행하면 main이라는 이름을 가진 쓰레드가 실행된다. 쓰레드가 없다면 자바 애플리케이션 실행 조차 불가능하다. 쓰레드는 한번에 하나의 코드라인만 수행한다. 이를 위해 각 쓰레드는 PC라는 프로그램 카운터를 갖는다. 동시 처리가 필요하면 쓰레드를 추가 생성한다. WAS에 클라이언트로부터 요청이 들어오고 -> 해당 요청에 쓰레드가 할당된다 -> 쓰레드에 요청에 맞는 서블렛을 불러와서 코드를 실행을 하게 된다. Q. 만약 쓰레드가 할당..
HTTP Hypter Text Transfer Protocol Hyper Text : 대표적으로 html이 있다. 클라이언트와 서버 사이에서 이뤄지는 요청/응답 프로토콜이다. HTTPS Hyper Text Transfer Over Sercure Socker Layer SSL/TLS 상에서 동작하는 HTTP이다. TLS (SSL) Transport Layer Security 초기 발명되었을 때 이름이 SSL이었고, 이후 표준화 기구 IETF로 이관되면서 TLS라는 이름으로 변경되었다. 즉, 동일한 프로토콜을 지칭한다. TLS는 SSL 3.0을 계승한다. Application Layer와 Transport Layer 중간에서 역활을 수행한다. 응용 프로그램이 전달한 데이터를 암호화해서 TCP에 전달하거나, ..
트랜잭션이란? 데이터베이스 관리 시스템 (DBMS)에서 DB의 상태를 변화시키는 작업의 논리적 최소 단위를 의미한다. 트랜잭션 특징 : ACID Atomicity 원자단위로서 더이상 쪼갤 수 없는 논리적 최소 단위임을 말한다. 예를 들어 계좌이체를 하는 경우 송금/입금이 존재하는데 두 작업은 쪼갤 수 없다는 것이다. 송금이 성공하고 입금이 실패하는 트랜잭션은 존재하지 않도록 하는 것이 목적. Consistency 트랜잭션이 성공했다면 데이터베이스는 항상 일관성 있는 상태로 유지 되어야 하는 것을 말한다. 만약 도메인 무결성 제약조건이 잔고는 0미만이 될 수 없다는 것이라면 이를 위반하는 트랜잭션은 존재할 수 없는 것이다. Isolation 트랜잭션을 수행중에 다른 트랜잭션이 끼어들 수 없음을 말한다. 송..
Pipline 구성 Pipline을 구성하기 위해 내부를 채운다. agent : 스테이지 별로 수행할 agent를 선언한다. triggers : 얼마를 주기로 수행할 것인지 설정. enviornment : 전 포스트글에서 정리한 내용들이 들어가는 것으로 환경변수 등을 세팅 stages : 일련의 목차들을 담고 있는 곳 stage : 목차 stage : prepare // 레포지토리를 다운로드 받음 stage('Prepare') { agent any steps { echo 'Clonning Repository' git url: 'https://github.com/choiwoonsik/jenkinsTest', branch: 'master', credentialsId: 'gitForJenkins' } post..
개발 환경의 종류 개발자가 개발을 하는 Local 환경 개발자들끼리 개발 내용에 대한 통합 테스트를 하는 Development 환경 개발이 끝나고 QA 엔지니어 및 내부 사용자들이 사용해보기 위한 QA 환경 실제 유저가 사용하는 Production 환경 -> LOCAL, DEV, QA, PORD 환경 이라고 지칭 개발 프로세스 개발자가 자신의 PC에서 개발을 진행한다. 다른 개발자가 작성한 코드와 차이가 발생하지 않는지 내부 테스트를 진행한다. (git hook 등) 진행한 내용을 다른 개발자들과 공유하기 위해 git과 같은 SCM에 올린다. -> 흔히 DEV 브랜치 Jenkins는 Git을 계속 보고 있는다. 이때 코드에 변화가 생겼음을 인지하면, DEV 브랜치의 내용을 개발 환경에 배포하기 전에 테스..
CI/CD란? CI Continuous Integration : 지속적인 통합 여기서 통합은 코드의 통합을 의미한다. 여러 개발자들의 코드베이스를 계속해서 통합하는 것. CD Continuous Delivery : 지속적인 배달 사용자에게 제품을 서비스를 지속적으로 배달한다는 것. 코드베이스가 항상 배포가능한 상태를 유지하는 것이다. CD Continuous Deployment : 지속적인 배포 코드베이스를 사용자가 사용가능한 환경에 배포하는 것을 자동화하는 것. 즉, CI/CD란 각각의 개발자들이 개발하는 개발 환경을 사용자가 사용 가능한 서비스로 전달하는 모든 과정을 지속 가능한 형태로 또 가능하다면 자동으로 해서 개발자와 사용자 사이의 격차를 없애는 것이다. 모든 과정 : 코드의 빌드, 테스트, 배..
Exception과 Error의 구분 예외와 에러에 대한 차이부터 알아보자. 예외(Exception)은 사용자의 잘못된 값이나 접근으로 인해 발생하는 것으로 정상적인 코드의 흐름에서 벗어나는 행동을 했을 때 발생한다. 따라서 개발자가 예외상황을 미리 예측해서 에러 핸들링을 할 수 있다. 에러(Error)는 시스템 상의 문제가 발생해서 발생되는 것으로 개발자가 따로 막을 수 없는 경우이다. 이 경우는 애플리케이션의 코드레벨에서 방어가 불가능하다. 일반적으로 OutOfMemorry, StackOverflow 등이 있다. 예외 구분 예외는 크게 Checked Exception과 Unchecked Exception으로 나눌 수 있다. 이를 구분 짓는 특징은 RuntimeException의 상속 여부이다. 상속한..
- Total
- Today
- Yesterday