HTML : HyperText Markup Language. 웹 페이지의 구조를 만드는 마크업 언어이다. HTML은 tag의 집합이다.
Flexbox를 사용하여 박스를 늘리거나 줄여 레이아웃을 구성할 수 있다. Flex 레이아웃을 만들기 위한 HTML 구조는 다음과 같다.
와이어프레임은 웹이나 앱을 개발할 때 레이아웃의 구조를 그리는 것이다. 단순한 선이나 도형으로 인터페이스를 묘사한다. 와이어프레임은 단순하게 레이아웃을 보여준다. 성공적인 와이어프레임은 어떤 목적을 가진 프로그램인지 유추할 수 있다.
GUI (Graphical User Interface) 우리가 컴퓨터를 사용할 때를 생각해보자. 파일 탐색기를 열기 위해 우리는 마우스로 파일 탐색기 아이콘을 클릭한다. 또한, velog에서 아이콘을 클릭하면 글을 쓸 수 있는 화면이 나온다.
Linux 기반 운영체제는 시스템 자체에서 전역변수를 설정할 수 있다. 시스템에 설정한 전역변수를 환경변수라고도 한다. 환경변수란 프로그램 동작에 영향을 미치는 값을 의미한다. 예를 들어, 프로그램A를 사용하려면 폴더B에 저장된 어떠한 값을 가져와야 한다.
버전 관리란 각 버전 별로 변경된 이력을 저장하는 작업이다. 변경 사항을 저장할 때는 변경된 사항에 대한 코멘트를 작성해야 한다. 누가 어떤 파일을 수정, 삭제, 추가했는지 확인이 가능하다. 코드가 아닌 텍스트 파일도 변경 사항을 확인할 수 있다.
GitHub에 오픈 소스 프로젝트가 있을 때, 어떻게 기여할 수 있을까? 먼저, GitHub에서 기여할 repository로 들어간 후 Fork 버튼을 클릭하여 내 repository로 가져온다. 코드를 수정하기 위해 작업할 컴퓨터로 가져오는 작업이 필요한데, 나는
JAVA는 운영체제에서 독립적으로 실행이 가능한 언어다. 즉, OS에 따라 다르게 작성해야 할 필요가 없다. 또한, 객체 지향 언어로, 자바로 설계된 프로그램은 유지 보수가 쉽고 확장성이 높다.
정수 타입이란 숫자를 나타내는 타입으로 , , , 총 4개로 분류할 수 있다. 일반적으로는 형을 사용한다. 실수 타입이란 소수점을 가지는 값을 의미한다. 형과 형으로 분류된다. 형 보다는 형의 정밀도가 더 높고, 더 큰 실수를 저장할 수 있다.
제어문이란 조건문과 반복문을 통틀어서 말하는 것이다. 일반적으로 코드의 흐름은 위에서 아래로 순차적으로 실행된다. 하지만 제어문을 사용하면 코드의 흐름을 원하는 방향으로 바꿀 수 있다.
클래스와 객체는 객체지향 프로그래밍의 가장 기본이다. 클래스란 객체를 정의한 설계도 혹은 틀이라고 할 수 있다. 즉, 클래스는 객체를 생성하는데 사용된다.
생정자는 클래스의 구성 요소로서 객체를 생성한다. 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드라고 할 수 있다. 키워드를 사용해 객체를 생성할 때 호출되는 것이 바로 생성자다. 생성자가 인스턴스를 생성한다는 오해를 할 수 있는데
지난 이틀간 객체지향 프로그래밍의 기본이되는 클래스와 객체를 배웠고 이를 정의하기 위한 변수와 메서드, 그리고 변수를 초기화하기 위한 생성자에 대해 배웠다. 객체지향 프로그래밍의 핵심 기둥이 되는 4가지는 상속, 캡슐화, 다형성, 추상화다.
객체지향의 기둥은 상속, 캡슐화, 다형성, 추상화 라고 배웠는데, 오늘은 다형성과 추상화에 대해 정리하고자 한다.다형성이란 객체지향 프로그래밍의 가장 핵심적인 부분이라 할 수 있다. 일반적으로 다형성이란 하나의 객체가 여러 형태를 가질 수 있는 성질을 의미한다.
Day 15에는 심화 학습을 했기에 블로깅을 따로 올리지 않았다. 심화 학습으로 계산기와 키오스크 프로그램을 만들어봤다. 키오스크 프로그램은 간단하게 메뉴와 수량을 입력 받아서 총 금액을 출력해주는 프로그램이다.
개발자는 프로그램을 만들고 실행하는 과정에서 수많은 에러와 마주치게 된다. 어떤 원인에 의해 에러가 발생하게 되면 프로그램은 의도한대로 작동하지 않고 비정상적으로 종료된다. 자바의 예외 처리란 이렇게 예기치 않게 발생하는 에러에 대응할 수 있는 코드를 사전에 작성하
스트림은 중간 연산과 최종 연산을 파이프라인으로 해결한다. 파이프라인은 여러개의 스트림이 연결되어 있는 구조를 말한다. 파이프라인에서 최종 연산을 제외하고 모두 중간 연산 스트림이다.
자바는 입출력을 다루기 위한 InputStream, OutputStream을 제공한다. 스트림은 단방향으로만 데이터를 전공할 수 있어, 입력과 출력을 동시에 처리하기 위해 각각의 스트림이 필요하다. 입출력 스트림은 어떤 대상을 다루느냐에 따라 종류가 나뉜다. File
무수한 상황에서 데이터를 효율적으로 다룰 수 있는 방법을 모아 자료구조라는 이름을 붙였다고 한다. 많은 방법 중, 가장 많이 쓰이고 알고리즘 테스트에 자주 등장하는 Stack, Queue, Tree, Graph를 학습했다. 대부분의 자료구조는 특정 상황에 놓인 문제를
특정 목적을 위해 트리의 모든 노드를 방문하는 것을 트리 순회라고 한다. 트리 구조는 계층적 구조라는 특별한 특징을 가져, 모든 노드를 순회하는 방법으로는 크게 3가지가 있다. 우선, 이진트리를 순회하는 방법으로는 전위 순회, 중위 순회, 후위 순회가 있다. 루트와
알고리즘이란 문제를 해결하는 최선의 선택이다. 컴퓨터를 이용해 문제 해결을 할 때는 무수히 많은 방법을 시도할 수 있다. 모든 경우의 수를 하나씩 비교해 최선을 골라내거나, 가장 좋아보이는 수를 찾았다면 다른 경우의 수를 무시하는 경우도 있다.
'hello'란 문자열을 찾아야 한다고 가정해보자. 사전과 같이 모든 단어가 정렬돼 있다면 이진 탐색 알고리즘을 통해 절반씩 범위를 줄여가며 찾을 수 있다. 하지만, 문서는 사전처럼 정렬되어 있지 않다. 'hello'에 도달하려면 각 단어를 반복해 비교해야 하므로
특정 기기에 설치해서 사용하는 애플리케이션을 네이티브 애플리케이션이라 한다. iOs, Android, Windows와 같은 특정 실행 환경에 종속된다. 쉽게 말해, 아이폰에 설치되도록 만들어진 애플리케이션은 갤럭시나 윈도우에서 실행할 수 없다.
IP 주소는 TCP/IP 구조에서 컴퓨터를 식별하기 위해 사용되는 주소다. 서울특별시청을 가기 위해서는 서울특별시청의 주소를 알고 있어야 하듯이, 네트워크도 마찬가지다. 서울특별시청에서 근무하는 홍길동의 PC에 접속하기 위해 홍길동의 PC 주소인 IP 주소를 알아야
웹 애플리케이션에선 HTTP메서드를 사용해 서버와 통신한다. GET으로 웹 페이지나 데이터를 요청하고, POST로 새로운 글이나 데이터를 전송하거나, DELETE로 저장된 글이나 데이터를 삭제할 수 있다. Rest API는 웹의 장점을 최대한 활용할 수 있는 아키텍처
JavaScript에서 데이터를 다룰 때 프로그램이 실행될 때에만 존재하는 데이터가 있다. JavaScript에서 변수를 만들어 저장한 경우, 프로그램이 종료될 때 해당 프로그램이 사용하던 데이터도 사라진다. 이 말은 변수 등에 저장한 데이터가 프로그램의 실행에 의존
Framework란 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것이라 정의하고 있다. 쉽게 말하자면, Frame의 대표적인 의미는 틀, 구조이다. Frame은 어떤 대상의 큰 틀이나 외형적인 구조
아키텍처는 건축 분야에서 유래된 용어로, 청사진과 같은 역할을 한다. 건축물의 조감도를 생각하면 이해가 쉬울 것이다. 컴퓨터 시스템에서의 아키텍처 역시, 어떠한 시스템을 구축하는데 있어 해당 시스템의 비즈니스적 요구 사항을 만족하는 전체 시스템 구조를 정의한다. 이해
스프링 컨테이너는 스프링 프레임워크의 핵심이다. 내부에 존재하는 애플리케이션의 Bean의 생명주기를 관리한다. Bean의 생성, 제거, 관리 등의 역할을 담당한다. ApplicationContext를 스프링 컨테이너라 하며 인터페이스로 구현되어 있다.
의존 관계 주입은 처음 애플리케이션이 실행될 때 대부분 정해지고 종료 전까지 변경되지 않고 변경되면 안 된다. 수정자 주입 같은 경우에는 이름 메서드를 public으로 열어두어 변경이 가능하기 때문에 적합하지 않다. 생성자 주입은 객체를 생성할 때 최초로 1번만
관점 지향 프로그래밍(Aspect-Oriented Programming, AOP)은 Spring 프레임워크의 핵심 프로그래밍 모델 중 하나다. AOP는 애스펙트를 사용해 다양한 기능들을 분리한다. 핵심 기능과 부가 기능을 분리하고, 분리된 부가 기능을 어디에 적용할지
AOP는 스프링 IoC를 보완해 매우 강력한 미들웨어 솔루션을 제공한다. @AspectJ는 애너테이션이 있는 일반 Java 클래스로 관점을 선언하는 스타일이다. AOP 런타임은 여전히 순수한 스프링 AOP이며, AspectJ 컴파일러나 위버에 의존하지 않는다.
Spring 모듈 중에는 웹 계층을 담당하는 몇 개의 모듈이 있다. Servlet API를 기반으로 클라이언트의 요청을 처리하는 모듈이 있는데, 이 모듈이 바로 Spring Web MVC이다.
DTO란 Data Transfer Object의 약자이며, 엔터프라이즈 애플리케이션 아키텍처 패턴 중 하나이다. Transfer라는 이름에서 알 수 있듯이 데이터를 전송하기 위한 용도의 객체라고 할 수 있다. 클라이언트에서 서버로 전송하는 요청 데이터와 서버에서 클라
이번엔 Spring의 DI를 이용해서 API 계층과 비즈니스 계층을 연동하고, API 계층에서 전달 받은 DTO 객체를 비즈니스 계층의 도메인 Entity 객체로 변환해 전달하는 실습을 해보았다.
지난번에 작성했던 코드들은 애플리케이션에서 발생할 수 있는 예외를 처리하는 프로세스가 전혀 적용되지 않았었다. 그래서 애플리케이션에 어떤 예외가 발생했는지 클라이언트 쪽에서 구체적으로 알 수 있는 방법이 없었기 때문에, 지난번에 작성한 샘플 코드에 예외 처리를 적용해
Java에서는 throw`키워드를 사용해 예외를 메서드 바깥으로 던질 수 있다. 던진 예외는 메서드 바깥인 메서드를 호출한 지점으로 던져진다. 서비스 계층에서 예외를 던진 경우 Controller의 핸들러 메서드 쪽에서 잡아서 처리할 수 있다.
어떠한 애플리케이션을 제작하더라도 데이터베이스와 같은 데이터 저장소와의 연동은 필수이다. 이번엔 서비스 계층에서 비즈니스 로직을 통해 처리된 데이터를 DB에 저장하고 비즈니스 로직을 처리하기 위해 DB에서 데이터를 조회하는 등의 역할을 수행하는 데이터 액세스 계층에 대
Spring Data JDBC 기반의 데이터 액세스 계층을 연동하기 위해 제일 먼저 해야할 일은 DB의 테이블과 도메인 엔티티 클래스의 설계이다. DDD는 도메인 주도 설계라고 해석할 수 있다. 의미 그대로 도메인 위주의 설계 기법을 말한다.
JPA는 Java 진영에서 사용하는 ORM(Object-Relational Mapping) 기술의 표준 사양 또는 명세이다. 즉, Java의 인터페이스로 사양이 정의되어 있어 JPA라는 표준 사양을 구현한 구현체는 따로 있다는 것이다.
엔티티 매핑은 객체와 테이블 간의 매핑, 기본키 매핑, 필드(멤버 변수)와 컬럼 간의 매핑, 엔티티 간의 연관 관계 매핑 등으로 나눌 수 있다. Spring Data JDBC에서 테이블 설계와 클래스 다이어그램 설계를 통해 회원과 주문, 주문과 커피와의 관계를 도출했었
Spring Data JDBC와 Spring Data JPA는 Spring Data라는 패밀리 그룹에 포함되어 있다. Spring Data라는 추상화 된 데이터 액세스 접근 방식으로 구성되어 있기 때문에 Spring Data JDBC와 Spring Data JPA라는
트랜잭션은 여러 개의 작업들을 하나의 그룹으로 묶어서 처리하는 단위이다. 애플리케이션의 신뢰성이 깨지는 상황이 발생하면 트랜잭션이라고 할 수 없다. All or Nothing 트랜잭션 처리 방식은 애플리케이션에서 사용하는 데이터의 무결성을 보장하는 핵심적인 역할을 한다
트랜잭션은 신뢰할 수 있는 애플리케이션을 구축하기 위해 가장 중요한 부분 중 하나이다. 트랜잭션은 크게 로컬 트랜잭션과 분산 트랜잭션으로 구분할 수 있으며, Spring에서 사용되는 트랜잭션 방식은 선언형 트랜잭션 방식과 프로그래밍 코드 베이스 트랜잭션 방식이 있다.
테스트는 어떤 대상에 대한 일정 기준을 정해놓고, 그 대상이 정해진 기준에 부합하는지 부합하지 못하는지 검증하는 과정이다. 테스트를 해야 하는 이유는 테스트 대상이 무엇이든 간에 테스트를 거쳐서 테스트 대상이 검증 과정에 통과하게 하여 최대한 더 나은 결과를 얻기
만약 우리가 만든 애플리케이션의 API를 프론트앤드 쪽에서 사용하고 싶다는 연락이 온다면 어떻게 해야할까? 우리가 만든 애플리케이션을 사용할 수 있게 해주는 방법이 API 문서화(Documentation)이다.
Spring Rest Docs는 REST API 문서를 자동으로 생성해 주는 Spring 하위 프로젝트이다. Spring Rest Docs의 가장 큰 특징은 Controller의 슬라이스 테스트를 통해 테스트가 통과 되어야만 API 문서가 정상적으로 만들어진다는 것이
Asciidoc은 Spring Rest Docs를 통해 생성되는 텍스트 기반 문서 포맷이다. Asciidoc 포맷을 사용해서 문서, 웹 페이지, 블로그 게시물 등을 작성할 수 있고 Asciidoc 포맷으로 작성된 문서는 HTML, PDF, EPUB, 매뉴얼 페이지를
Spring Boot은 Gradle 빌드 툴을 이용해 애플리케이션을 빌드할 수 있는 플러그인을 지원하기 때문에 Gradle task 명령을 통해 애플리케이션을 손쉽게 빌드 할 수 있다.
우리가 접속한 사이트가 보안이 된 웹사이트인지 알 수 있는 방법은 현재 화면의 주소 옆에 자물쇠 아이콘을 클릭해보면 된다. 자물쇠 아이콘을 눌러보면 `이 사이트는 보안 연결(HTTPS)이 사용되었습니다.` 라는 메세지를 확인할 수 있다.
눈에 보이지 않는 가장 중요한 영역은 바로 보안(Security)이다. 보안은 굉장히 어려운 영역이지만, Spring Security라는 아주 잘 만들어진 보안 프레임워크가 있다.
안전하게 보호된 애플리케이션을 개발하기 위해 반드시 익혀야 되는 중요한 보안 요소는 두 가지인데, 그 중 하나는 바로 인증이다. Spring Security에서는 Spring Security Filter Chain을 통해 보안을 위한 특정 작업을 처리한다.
이전 챕터에서 보호된 애플리케이션 개발을 위해 반드시 알아야 하는 중요한 보안 요소 두 가지 중 하나인 인증(Authentication)에 대해 살펴봤다. 애플리케이션 서비스를 이용하기 위한 사용자 인증에 성공해도, 체크해야 할 또 하나의 보안 요소가 있다.
REST API 통신을 사용하는 백엔드 서버에 사용하기 적합한 자격 증명 방식 중, 가장 활용도가 높은 JWT에 대해 학습해보자!
OAuth 2의 개념을 이해하고 OAuth 2를 이용해 사용자의 인증을 처리하는 방식을 알아보았다.
CSR 방식의 애플리케이션에 OAuth 2 + JWT를 제대로 잘 적용하기 위해서는 OAuth 2의 인증 처리 흐름과 JWT를 통한 자격 증명 정보 제공 시점에 대해 이해하는 것이 중요하다.
이전까지 학습하며 만들어 본 애플리케이션은 명령형 프로그래밍 방식을 사용했다. 명령형 프로그래밍 방식은 전통적인 개발 방식이다. 반면에 리액티브 프로그래밍은 전통적인 명령형 프로그래밍 방식과 달리 선언형 프로그래밍 방식을 사용한다.
Reactor는 Reactive Streams의 구현체 중 하나로, Reactive 기반의 Spring Web Application을 만들고 싶다면 반드시 알아야 하는 핵심 기술이다.
Spring WebFlux는 전통적인 Spring MVC 방식의 애플리케이션보다 대량의 클라이언트 요청을 조금 더 효율적으로 처리할 수 있는 현대적인 애플리케이션 구현을 위한 기술이다.
개발 중인 웹 서비스가 배포가 되지 않는다면, 더 이상의 의미를 가질 수 없다. 웹 개발자는 배포에 대한 기본 지식을 탑재하고, 간단한 배포는 혼자 할 수 있어야 한다. 배포를 위한 클라우드 서비스인 AWS를 이용해 웹 애플리케이션을 배포해보자.
물자의 수송에 획기적인 단축을 가져다준 컨테이너 기술을 "소프트웨어 배포에 사용할 수 없을꺼?"라는 생각을 하게 되었고, 리눅스 컨테이너(lxc)라는 것을 만들어냈다. 2013년 Docker가 등장했고, 개발자들은 쉽게 애플리케이션을 배포하고 실행할 수 있게 되었다.
서비스 규모가 복잡해지고 커질수록, 서비스 배포 과정이 복잡해지고 소요 시간이 늘어나게 된다. 변경 사항이 생길 때마다 배포 과정을 수동으로 진행하면 많은 시간을 허비해야 할 것이다. 버튼 하나만 클릭하면 모든 배포 과정이 자동으로 진행되게 할 수 있다!
서비스 규모가 복잡해지고 커질수록, 서비스 배포 과정이 복잡해지고 소요 시간이 늘어나게 된다. 변경 사항이 생길 때마다 배포 과정을 수동으로 진행하면 많은 시간을 허비해야 할 것이다. 버튼 하나만 클릭하면 모든 배포 과정이 자동으로 진행되게 할 수 있다!
프로젝트의 효율적인 관리를 위해 고민해볼 수 있는 것은 운영 전략이다.