전체 글 143

Transaction(트랜잭션)

Transaction의 사전적 의미는 DB의 상태를 변화시키기 위해 수행하는 작업의 단위를 뜻합니다. 여기서 DB의 상태를 변화시킨다는 것은 SQL 질의어(Select, Insert, Delete, Update...)를 통해 DB에 접근하는 것을 의미합니다. 여기서 작업의 단위는 질의어 한 문장이 아니라 많은 질의어 명령문들을 사람이 정하는 기준에 따라 정하는 것을 의미합니다. 이 트랜잭션은 작업의 완전성을 보장해주는데, 논리적인 작업 셋을 모두 완벽하게 처리하거나 혹은 처리하지 못할 경우에는 원 상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않게 만들어주는 기능입니다. 사용자의 입장에서는 작업의 논리적 단위로 이해를 할 수 있고, 시스템의 입장에서는 데이터들을 접근/변경하는 프로그램의 단위가 ..

Java - Generic, 변성

Java에서 제네릭은 클래스나 메서드에서 사용할 내부 데이터 타입을 컴파일 시 미리 지정하는 것을 말합니다. 컴파일 타임에 타입을 체크함으로써 객테의 타입 안정성을 높일 수 있고, 반환 값에 대한 타입변환 및 검사에 들어가는 시간을 줄일 수 있다는 장점이 있습니다. 코드를 예시를 들어 살펴보겠습니다. List stringlist = new ArrayList(); stringList.add("it's not generic"); stringList.add(1); String result = (String) stringList.get(0) + (String) stringList.get(1); List stringList=new ArrayList(); stringList.add("it's generic"); s..

Skills/Java 2022.08.13

Stateful & Stateless

요즘은 HTTP를 이용해 HTML, TEXT, Image는 물론이고 Json이나 XML같은 API 파일 등 서버 간 데이터를 주고 받을 때 모두 HTTP 프로토콜을 사용합니다. 이 HTTP의 중요한 특징 중 하나는 무상태 프로토콜(Stateless)을 지향한다는 것입니다. 이는 서버가 클라이언트의 상태를 보존하지 않는다는 것을 의미합니다. HTTP에서는 클라이언트가 요청을 하면, 서버에서 응답을 하는 방식으로 이루어진다고 했는데 예시를 통해 살펴보겠습니다. 1. Stateful Stateful은 상태유지를 의미하며 서버가 클라이언트의 상태를 보존하는 것을 의미합니다. 클라이언트의 다음 요청이 이전 요청과 관계가 이어지는 것을 의미합니다. 웹 서버로 예를 들자면 브라우저의 상태, 쿠키, 세션 정보를 기억..

Java - 정적 바인딩, 동적 바인딩

Overloading, Overriding을 설명한 이전 글에서 정적 바인딩과 동적 바인딩이라는 개념이 나왔는데, 이해를 위해 글을 작성했습니다. 먼저 Binding이 무엇인지 정의한다면, 컴퓨터 프로그래밍에서 각종 값들이 확정되어 더 이상 변경할 수 없도록 구속(Bind)상태가 되는 것을 말합니다. 프로그램 내 변수, 배열, 절차 등의 명칭 즉 식별자가 그 대상인 메모리 주소, 데이터형 혹은 실제 값으로 배정되는 것이 이에 해당됩니다. 쉽게 말해서 개발자가 코딩하여 컴파일하게 되면, 값을 변경할 수 없는 상태가 되는데 이것을 바인딩이라고 합니다. (메모리에 값을 할당하는 것도 바인딩이라고 할 수 있습니다.) 이 바인딩의 종류는 정적 바인딩과 동적 바인딩으로 나뉘게 되는데 특징을 한번 살펴보도록 하..

Skills/Java 2022.08.06

Java- Overloading, Overriding

Java에는 Overloading, Overriding이라는 개념이 있습니다. 두 기능 모두 다형성을 높여주는 개념이고, 이름도 비슷하지만 실상 기능은 다른데 한번 살펴보겠습니다. 1. Overloding public class Test { public void show(String Name1, String Name2) { System.out.println("Name1: " + Name1); System.out.println("Name2: " + Name2); } public void show(String Name1) { System.out.println("Name1: " + Name1); } public static void main(String[] args) { MadPlay instance = ne..

Skills/Java 2022.08.05

Spring - 테스트 코드(TDD) 작성

어떤 소프트웨어를 개발한다고 할 때, 소프트웨어의 기능에서 무언가 필요하다거나 잘못된 점이 무엇인지 찾아내는 것부터 시작할 것입니다. 이어서 문제점을 찾은 개발자는 그것을 해결하는 기능을 구현하고, 구현의 검증을 위한 테스트를 수행하게됩니다. 이 때, 고전적인 개발 방식에서는 검증을 위해 console 화면에 값을 찍어 기능이 동작하는지 확인해볼 것입니다. 눈에 보이는 확실한 방법이지만 이러한 방식은 개발자의 두뇌에 의존해야 하는 맹점(?)이 있습니다. 사람이 판단하고, 사람에게 의존하는지라 실수가 언젠가는 하나씩 발견될 수도 있을 것입니다. 또한 작업 분량이 많아질 수록 로그를 찾아내기 힘들고, 귀찮아져 간소화하는 일이 생길 수도 있게되는 것이죠. 그래서 구안된 방식이 테스트 주도 개발(Test-Dr..

Skills/Spring 2022.08.02

Java - Wrapper Class

1. Wrapper Class Wrapper Class는 기본 자료형(Integer, Float, Boolean...)에 대한 클래스 표현을 말합니다. 이름처럼 무언가 감싸고 있다는 의미인데 기본 자료형을 감싸고 있음을 뜻합니다. 이 wrapper class의 사용 이유는 참조형 자료형을 사용하는 이유와 같습니다. 기본 자료형의 값을 단순 값으로 사용하지 않고, 그 값에 대한 메서드를 사용하거나 null값을 이용하기 위해 wrapper class를 사용합니다. 2. AutoBoxing JDK 1.5 부터는 AutoBoxiing,Unboxing을 제공하게 되는데 wrapper class에 상응하는 primitiva data type일 경우에 가능합니다. List list = new ArrayList(); ..

Skills/Java 2022.07.30

Java - Access Modifier

접근 제한자(Access Modifier)는 말 그대로 접근을 제한하는 것인데, 여기서 접근은 클래스, 인터페이스 그리고 이 둘이 가지고 있는 멤버들의 접근을 의미합니다. 프로그램 설계 시, 어떤 클래스와 인터페이스는 다른 패키지에서 사용을 못하도록 막는 경우도 있고, 객체의 생성을 막기 위해 생성자를 호출하지 못하게 하거나 필드나 메서드를 사용하지 못하도록 제한하는 경우가 있습니다. 이럴 때 접근 제한자를 사용해 막게됩니다. 종류를 통해 살펴보겠습니다. 1. public 첫 번째로 public 입니다. public을 직역하면 공공의, 일반(대중)의 라는 뜻을 가지는데 제한자 역할도 단어의 뜻과 같습니다. 1.1 클래스 접근 제한 public class name{} 클래스 선언 시, public으로 선언..

Skills/Java 2022.07.28

Spring - Spring Web Layer

Spring Boot로 아키텍쳐 설계 시 이해를 돕고자 Spring에서 Web 기반 프로그램을 만들 때 어떤 계층이 존재하고, 어떤 역할을 하는지 패키지를 어떻게 나눠야 좋은 것인지 알아보겠습니다. 1. Spring Web Layer Spring에서 Web 계층은 사진과 같이 분류되는데, 특징과 역할을 알아보겠습니다. 1.1 Presentation Layer(Web Layer) 프레젠테이션 계층은 브라우저 상의 웹 클라이언트의 요청, 응답을 처리하는 계층입니다. 서비스 계층과 데이터 엑세스 계층에서 발생하는 Exception(예외)를 처리, 인증 관리, 권한없는 사용자의 인가를 거부하는 역할을 합니다. @Controller 애노테이션을 사용해 작성된 Controller 클래스, @Filter, 인터셉터,..

Skills/Spring 2022.07.27

Spring - MockMvc를 이용한 HTTP 메시지 검증

1. MockMvc MockMvc는 웹 애플리케이션을 애플리케이션 서버에 배포하지 않고 Test용 MVC환경를 만들어 요청 및 전송 응답(HTTP request) 기능을 제공해주는 유틸리티 클래스입니다. 2. 사용 예 먼저 MockMVc 생성을 해주고, perform() 메서드를 이용해 요청 설정 메서드를 통해서 요청에 대한 설정을 할 수 있습니다. 이 때 요청에 대한 설정은 param, cookie, request * sessionAttr (객체설정), content(요청 본문 설정) 등 다양합니다. 2.1 .andExpect .andExpect() 메서드는 응답을 검증하는 메서드로 뒤에 패러미터에 따라 검증하는 값을 바꿀 수 있습니다. isOk() : 200, isNotFound() : 404 등....

Skills/Spring 2022.07.24