cs 컴퓨터 시스템의 구조

빌드도구 Maven 의 기본적인 사용법

들어가며 스프링부트를 사용할 때 대체로 메이븐, 그래들 둘 중 하나를 빌드도구로 선택한다. 그 중 메이븐에 대하여 간략하게 정리하였다. 개발자 뉴렉님의 강의(https://www.youtube.com/watch?v=VAp0n9DmeEA)를 참고하였다. 간편한 라이브러리의 구성과 환경 설정(pom.xml)

js 와 jquery 의 form 태그의 접근 방식

들어가며

HTTP, TCP 커넥션의 최적화를 위한 방법 - 병렬, 지속, 파이프라인 등

들어가며 HTTP의 통신에 있어서 서버와 클라이언트가 request, respose를 수송신할 때, 트랜잭션을 어떻게 설정하고 유지할지가 주요 쟁점이다. 한 페이지가 요구하는 이미지와 데이터량이 계속하여 늘어나는 현 시대의 웹사이트에서 효율적인 커넥션은 매우 중요하다.

thymeleaf, 객체에 대한 null 처리

스프링 컨트롤러에서는 null이 올 수 있는 객체에 대해서는 @Nullable, @RequestParam(required=false) 등 어너테이션을 붙인다. 타임리프에서도 객체에 대한 null을 보정할 수 있다. (객체)?.(필드값) 으로 물음표를 삽입한다. 값이 존재하지 않으면 그 값을 공백으로 한다. 아래의 코드를 참고하자.

java 연산자

1. 연산자와 연산식 자바는 데이타를 처리하고 결과를 산출하는 과정을 연산(Operations)이라고 한다. 연산을 위한 연산자(operator)와 연산하는 대상으로의 피연산자(opreand)가 있다. 이러한 코드를 연산식(expression)이라 한다. 연산자의 종류에 따라 연산의 우선 순서와 방향이 차이를 가진다. 괄호 ()는 최우선 순위이므로 필요에 따라 적절하게 사용한다. 연산자는 다른 연산자를 합쳐서 하나의 새로운 연산자를 만들 수 있다(+, ++, <, <=) 연산자의 경우 단항연산자(!, –), 이항연산자(a+b), 삼항연산자(a?b:c) 등, 연산식에 사용하는 연산자의 갯수에 따라 구분한다.

HTTP 파일 업로드 및 호출(multipart, cos.jar)

들어가며 JAVA에서는 기본적으로 제공되는 FILE과 PATH 클래스를 통해 파일에 접근하고 관리할 수 있는 기능을 제공한다. 하지만 HTTP 통신 과정에서는 라이브러리를 사용하며, cos.jar(http://www.servlets.com/cos/)를 통한 방법을 살펴보겠다. form 을 다루는 것과 file을 다루늘 때는 Content-type 을 달리한다. MIME 에 multipart/form-data 을 명시해야 한다. form 의 input 을 서블릿은 request param 으로 받고 이를 객체의 필드값으로 손쉽게 바인딩한다. 하지만 multipart/form-data 로 데이터를 받을 경우, reqeust 가 아닌 MultipartRequest 등 파일 타입을 위한 데이타 타입으로 초기화 및 바인딩 된다. 이러한 객체로부터 필요한 데이타를 추출해야 한다. MultipartRequest의 경우 file 의 갯수와 관계 없이 배열 형태로 받는다. 파일을 서버에 저장할 때는 절대경로(config.getServletContext())를 path로 사용하며, 파일을 클라이언트에...

JSP의 레이아웃 모듈 구성 방법과 directive / action tag의 차이

들어가며 서버가 클라이언트에 view를 렌더링 할 때, 결과물은 한 페이지이다. 하지만 서버에서는 그 페이지가 정말 하나일 수 있고, 여러 페이지를 합친 결과일 수도 있다. 이를 레이아웃의 모듈화라 하며, jsp에서는 액션태그 방식과 디렉티브 방식으로 이를 지원한다. 두 가지의 이론적 차이는 다양한 곳에서 설명되었지만, 구체적인 활용 사례는 확인되지 않아 직접 확인해봤다. CSS의 외장/내장 값, getParam의 값, 메인 레이아웃의 지역변수의 값이 각각 적용되는지 확인해보자.

java, 타입 변환(promotion, casting)과 규모의 손실(Loss of magnitude)

타입 변환 타입 변환이란 처음 선언되고 초기화된 데이터 타입을 새로운 타입으로 변환하고 새로운 변수에 할당하는 행위를 의미한다. 타입 변환은 기본타입과 참조타입 모두 가능하다. 현재 글에서는 기본 타입을 기준으로 설명한다.

java, 변수의 선언과 생명주기

선언과 초기화 기본타입 기본 타입의 선언과 초기화는 다음과 같다.

java, 기본 타입과 참조 타입의 특징과 차이

자바의 데이터 타입 자바의 데이타 타입을 크게 분류하면 아래와 같이 두 개로 나뉜다. 기본 타입(primitive type) 참조 타입(reference type)

Thymeleaf 시작하기, 간단한 문법

타임리프(Thymeleaf)란? 타임리프는 현재 스프링부트에서 밀고 있는 프레임워크이다. jps는 별도의 .jsp 포맷에 구현한다. 타임리프는 순수한 html에 타임리프 태그를 추가하여 html을 조작한다. 이러한 특징 덕분에 순수한 html파일이 동작한다. 퍼블리셔와의 협업이 가능하다. 그 외 스프링과의 호응이 좋아졌고 성능이 좋아졌다.

HTTP의 request - response 메시지의 헤더와 친해지기

들어가며 HTTP 프로토콜의 통신 과정은 request와 response의 교환 과정이다. 클라이언트는 서버에 request를 통해 요구사항을 보내고, 서버는 클라이언트에게 response를 통해 응답한다. 정확한 통신을 위하여 HTTP 에는 통신 규칙이 있다. HTTP 메시지의 구조와 각각의 구성 요소의 역할을 이해하는 것을 목표로 한다. HTTP 메시지의 기본 형태

JVM은 무엇인가? java 코드는 어떻게 실행되는가?

JVM이란 무엇인가? JVM은 Java Virtual Machine의 준말로 자바의 코드를 컴퓨터가 이해할 수 있는 언어로 바꿔주는 가상 머신이다. 자바가 현재 C와 더불어 가장 많이 활용된 이유는 JVM에 의해서다. JVM으로 인하여 자바 코드는 어떤 OS에서도 동작한다. 이러한 특징 덕분에 2000년대 이후 프로그래밍 언어의 대세를 차지할 수 있었다. 자바의 이식성은 자바의 가장 중요한 특징이다. JVM의 장점은 아직도 유효하다. 개발 언어로서 자바가 힘을 잃는다 하더라도 JVM 기반의 언어는 계속 유지될 것이다. 현재 널리 사용 중인 코틀린과 스칼라는 JVM을 기반으로 작동한다. 안드로이드는 JVM과 유사한 구조의 안드로이드 컴파일러를 통해 동작한다. 컴파일 - JVM으로 읽을 수 있는 바이트 코드로 변환하기

싱글턴 패턴 Singleton Pattern

싱글턴 Singleton 이란? 인스턴스를 오직 한개만 만들어 제공하는 클래스 인터페이스나 상속을 사용하지 못한다. 결합도가 높아질 가능성이 높다. 가능한 최소한의 사용을 권장한다. 아래는 싱글턴을 구현하는 다양한 방법이다.

java, String의 다양한 특징

String는 참조 타입 String은 int, long, char 등 기본 타입(primitive type)과 달리 참조 타입이다. 동시에 보통의 참조타입과 성격이 다르다. 그러므로 String은 자바를 학습할 때 가장 먼저 배우는 타입이지만 동시에 이해하기 까다로운 타입이기도 하다. 기본타입과 참조타입의 차이는 메모리의 저장에 있다. int의 경우 stack에 저장된다. String의 객체는 heap에 저장되며 해당 변수는 heap의 주소를 가리킨다. 기본타입과 참조타입의 메모리 저장은 다음과 같은 방식과 같다.

java enum이란

enum이란 enum은 우리나라말로 열거 타입이라 말하며, 자바의 참조타입 중 하나이다. 열거는 몇 가지 한정된 필드값을 나열한 것으로 그 필드값을 상수(enumeration constant)라 부른다. 상수는 변하지 않는 값을 의미한다. enum은 일정 조건에서 기대되거나 한정되는 값을 미리 나열하고 변하지 않도록 고정하며 필요할 때 꺼내쓰기 위한 용도로 사용한다. 같은 상수는 언제나 동일함을 보장한다.

java servlet의 문자 인코딩 문제

들어가며 http 통신에 있어서 가장 먼저 부딪히는 것은 문자인코딩 문제이다. http의 통신 과정은 아래와 같다. 클라이언트(브라우져) -> request(get / post) -> 웹서버(was, tomcat) -> response(get / post) -> 클라이언트 위의 모든 과정을 단 한 번의 인코딩으로 정리할 수 있었으면 좋았을테다. 그러나 모든 과정마다 인코딩 문제가 발생한다. browser마다, web container마다 발생한다.

jsp, 원하는 option을 selected 하기

들어가며 html의 form 태그에서 다양한 input type이 존재한다. 대부분은 value 에 값을 부여하여 원하는 값을 주입할 수 있다. 하지만 option - selected의 사용법이 다소 다르다.

JSP만 사용하여 DB와 통신하기(jdbc, model1)

들어가며 JSP에서 DB와 통신 과정은 순수한 자바코드로 DAO를 만들어 통해 통신하는 과정과 동일하다. DB와의 통신을 위한 핵심적인 태그인 form의 활용 방법도 다루고자 한다.

JSP bean의 활용

bean의 초기화 빈은 아래와 같이 초기화하고 사용한다.

스프링부트와 jquery ajax로 rest api 통신하기

새로고침 없이 html의 변경을 위하여 렌더링 된 html 파일을 새로고침 없이 변경하기 위해서는 자바 스크립트의 도움이 필요하다. 이 경우 스프링에서는 rest api로 데이터만 송수신 하기 위한 컨트롤러가 필요하고, 뷰에서는 스프링에 요청하고 응답을 받을 통신 수단이 필요하다. 현재 예제는 ajax를 사용하였다. 스프링 부트에서 rest api 를 만드는 방법과 ajax 통신하는 방법을 간단하게 정리한다.

JSP의 실수를 줄이기 위한 작은 팁

자바 코드 블럭 선언 JSP내 자바 블럭을 선언하는 방법은 아래와 같다. <% %> 스크립트릿 : 자바 블럭. 자바 코드 입력. <%@ %> 지시자 : import, include, taglib 등 사용. <%= %> 표현식 : 객체/변수/데이타 타입 등을 입력.

Servlet JSP 와 서버사이드 렌더링

servlet이란? 서블릿(servlet)은 자바 웹 개발을 위해 만들어진 기능이다. 서블릿은 HTTP 통신의 핵심 흐름인 request와 response을 다룬다. 서블릿은 HTTP 통신을 위한 생명 주기를 가진다. init service doGet, doPost destroy 세션, 쿠키, 필터 등 기타 다양한 기능을 제공한다.

블로그를 시작하며

블로그를 시작합니다.

jsp model 의 pojo를 js의 객체로 변환하기

jsp 와 js 간 통신은 생각보다 자주 있다.