
마이바티스에서 제공하는 SqlSession 클래스에서는 CRUD를 위한 다양한 메서드를 제공합니다. 대표적인 select 관련 메서드는 아래 테이블과 같습니다. 메서드 기능 List selectList(query_id) id에 대한 select문을 실행한 후 레코드를 List로 반환합니다. List selectList(query_id, '조건') id에 대한 select문을 실행하면서 조건(쿼리문에서 사용할 인자)를 전달합니다. T selectOne(query_id) id에 대한 select문을 실행한 후 한개의 레코드를 지정한 타입으로 반환합니다. T selectOne(query_id, '조건') id에 대한 select문을 실행하면서 조건(쿼리문에서 사용할 인자)를 전달합니다. 역시 이해하는데 예시를..

l null null은 어떠한 값으로도 초기화 되지 않는 값입니다. 힙 메모리에 영역이 존재하지도 않죠. 만약 String str = null; 이런 식으로 선언해준다면 나중에 사용하겠다 예고한 상태이지 존재하는 것은 아닙니다. 사진처럼 휴지꽉도 없는 상태이죠. l "" ""은 하나의 String입니다. "str", "strstrstrstr"와 같은 것입니다. 따라서 메모리에 할당되어 있는 상태입니다. 위 사진에서 0이 ""와 같다고 생각하시면 됩니다. null 과 다르게 휴지꽉은 있습니다. l 요약 null : 사용하겠다 예고한 상태 "" : 이미 사용한 상태 읽어주셔서 감사합니다. 질문은 언제나 환영합니다. "난 반드시 백엔드 왕이 될거야"

개발을 하신 분이라면 간혹 href="javascript:void(0)"를 보신적이 있을 겁니다. 이렇게 말이죠 링크 내부링크가 위치한 a 태그의 속성으로 자주 보실수 있습니다. 개발자 도구에 찍어보면 undefined가 출력되는 것을 보실수 있습니다. 그럼 도대체 이 함수는 어디서 사용하는 것일까요? l void(0)을 사용하는 이유 쉽고 짧게 말하면 a 태그 경우 내부 링크가 걸려있는데 이 링크가 정상적으로 동작하지 않게끔 하기 위함입니다. 만약 a 태그에 내부링크가 걸려 있는데 a 태그에서 onclick 속성을 부여하고 싶을 때 내부 링크를 동작하지 않게 할 수 있습니다. href="" 이런 식으로 uri를 사용하지 않으면 된다 생각 하실수도 있지만 만약 저렇게 할 경우 최상위 링크를 이동하게 됩니..

마이바티스는 스프링에서 데이터베이스 연동을 도와주는 프레임워크입니다. 기존에는 JDBC 연동 과정도 복잡하고 SQL문이 코드내에 섞여 코드가 상당히 복잡해졌습니다. 늘 그렇듯 프레임워크는 편의를 위해 만들어집니다. 마이바티스도 결국 개발자들의 편의성을 위하여 만들어졌습니다. 마이바티스의 특징 sql 실행 결과를 Map 객체에 매핑해줍니다. sql을 소스 코드가 아닌 XML로 분리하여 작성합니다. 데이터소스 기능과 트랜잭션 처리 기능을 제공해줍니다. 그럼 간단히 마이바티스를 위한 개발환경을 구축한 후 간단한 sql문을 실행하여 결과값을 jsp에 가져와보겠습니다. DBMS는 오라클을 사용하였습니다. l 마이바티스 설정을 위한 xml 파일들 SqlMapConfig.xml 을 이용하여 마이바티스 설정을 해줍니다..

스프링의 특징을 5가지로 나눈다면 다음과 같이 나눌 수 있습니다. 경량 컨테이너 DI(Dependency Injection, 의존성 주입) IoC(제어의 역흐름, Inversion of Control) AOP(관점지향프로그래밍, Aspect oriented Programming) POJO 방식의 프레임워크 그 중 이번 글에서는 AOP(관점지향프로그래밍)에 대해 알아보려고 합니다. l AOP는 왜 필요할까? 웹 애플리케이션을 만들다 보면 해킹을 대비하기 위한 보안 기능, 사용자의 접속 내역을 위한 로깅 기능 그외에 트랜잭션, 이메일 발송 기능 등 수많은 기능들이 있습니다. 이들의 공통점은 무엇일까요? 모두 웹 애플리케이션을 구축할 때 공통적으로 필요한 기능들 입니다. 그리고 대부분의 클래스들이 이러한 기능..

자동차에서 만약 엔진이 오래되서 엔진을 바꾸고 싶다면, 자동자 전체가 아닌 엔진만 뽑아서 바꿔주면 됩니다. 객체 지향 프로그래밍에서도 클래스에 대한 변경이 필요하면 다른 클래스에 영향을 끼치지 않으면서 변경이 가능해야 합니다. 이러한 상황에 더 수월하게 변경이 가능케 도와줄수 있도록 도입된 기능이 바로 DI(Dependency Injection)와 IoC(Inversion of Control)입니다. 자바로 프로그래밍을 하면서 객체를 생성할 때 직접 클래스에 new 연산자를 이용하여 생성했습니다. 하지만 DI는 개발자가 직접 코딩을 하여 객체를 생성하는 것이 아니라, 컨테이너가 이를 생성시켜 주는 것입니다. 그렇게 된다면 코드에서 직접적인 연관 관계가 발생하지 않아 각 클래스들의 변경이 자유로워 집니다...

"자바를 정말 뭐랄까.. 육군사관학교 나오는 중대장 같은 느낌이다.. 엄청 대단하지만 엄격해서 싫다고 해야할까.. 분명 보이기엔 같아보이지만 다른게 너무 많다. 스크립트 언어가 관대한것에 비해 자바는 상당히 엄격하다. 엄격한 곳에서 오는 장점은 분명하지만 그만큼 개발자들을 가끔 괴롭힌다." 그래서 이번 글에는 저를 엄청나게 괴롭혔던 equals() 와 == 의 차이를 알아보려고 합니다. 글에 앞서 이해하는데 큰 도움을 주신 박 본부장님께 감사의 인사를 드립니다!! l String 변수를 생성할 때 String은 int, float, double 등과 다르게 자바에서는 클래스로 통합니다. 클래스이기 때문에 다른 데이터형과 다르게 객체로도 생성이 가능합니다. 리터럴을 이용하여 String 생성 new 연산자..

항상 볼때마다 너무 헷갈려서 글로 써봅니다. l HashMap HashMap이란 Map 인터페이스 종류로써 key와 value 형태로 데이터를 저장하는 구조를 가집니다. 그리고 이름에서 알수 있듯이 hashing(해싱)은 많의 양의 데이터를 검색하는 데 있어서 뛰어난 성능 보여준다고 합니다. 해싱이란?? 대부분의 탐색 방법들은 탐색 키를 저장된 키 값과 반복적으로 비교하면서 탐색을 원하는 항목에 접근합니다. 해싱은 키 값에 직접 산술적인 연산을 적용하여 항목이 저장되어 있는 테이블의 주소를 계산하여 항목에 접근합니다. 이렇듯 키 값의 연산에 의해 직접 접근이 가능한 구조를 해시 테이블이라 하고, 해시 테이블을 이용해 탐색하는 방법을 해싱이라고 합니다. key는 중복되면 안되지만 만약 중복된다면 최근 ke..

오늘의 자바에서 많이 사용하는 함수인 isEmpty에 대해 알아보겠습니다. isEmpty는 String 클래스의 메소드이므로 단독으로 사용할 수 없습니다. 그리고 isEmpty는 null을 체크해주진 않습니다. l 예시 package com.ex01; public class test01 { public static void main(String[] args) { String str = "test"; String str2 = "";//공백 없음 String str3 = " ";//공백 있음 System.out.println(str.isEmpty());//=>false System.out.println(str2.isEmpty());//=>true System.out.println(str3.isEmpty())..

SELECT SBJECT_MASTR_SEQ.NEXTVAL FROM DUAL INSERT INTO SBJECT_MASTR (SBJECT_MASTR_SN, SBJECT_NM, SBJECT_CODE, SBJECT_CTGRY, EDC_TRGET, SRCHWRD, USE_YN, CM, REGIST_DT, REGIST_MBER_SEQ) VALUES (#{sn}, #{sbject_nm}, 'ES'||LPAD(#{sn}, 6, 0), #{sbject_ctgry}, #{edc_trget}, #{srchwrd}, #{use_yn}, #{cm}, SYSDATE, #{mber_seq}) 오라클 기준의 글입니다. 태그를 이용하여 현재 시퀀스 다음의 시퀀스를 가져올수 있습니다. ㅣSELECT SBJECT_MASTR_SEQ.NEX..

스프링 프레임워크로 세션을 이용해 로그인을 간단하게 구현해보겠습니다. 세션이란? 세션에 대한 개념을 간단하게 알고 가겠습니다. 세션은 쿠키의 한 일종으로 session 쿠키를 말합니다. 이를 편하게 우리는 그냥 세션이라고 하죠. 그래서 세션과 쿠키를 다르게 아시는 분들이 많은데 사실 세션도 쿠키에 속합니다. 쿠키는 session 쿠키와 persistence 쿠키가 존재합니다. 그리고 session 쿠키가 이번 글에서 사용할 쿠키 입니다. session 쿠키는 persistence 쿠키와 다르게 휘발성을 뜁니다. 브라우저 메모리에 저장되기 때문에 만약 session 쿠키가 심어져 있는 브라우저가 종료된다면 session 쿠키는 사라지게 됩니다. session 쿠키에 대해 간단히 설명했고, 어떻게 이를 이용..

쿠키에 대해 자세한건 다른 글에서 알아보고, 이 글에서는 쿠키를 어떻게 이용하는지에 대해 알아보겠습니다. 늘 Persistence 쿠키와 session 쿠키에 대해 대충 알고 넘어가기만 했는데 이번 글에서는 쿠키에 대해 짚고 넘어가려합니다. 이 글의 코드는 제 회사의 코드를 기준으로 작성 하였기에 어떻게 작동하는지 흐름 파악하기에는 좋지만, 지금 당장 쿠키 관련한 코드가 필요하신분은 적합하지 않을 수 있습니다. l 쿠키는 어디있을까? 개발자 도구 Application 탭을 가보면 브라우저에 저장되어 있는 쿠키의 정보를 볼 수 있습니다. JSESSIONID는 Session 쿠키에 관한 정보이고, 그외에는 Persistence 쿠키에 관한 것인데 여기선 Persitence 쿠키를 그냥 쿠키라고 지칭하겠습니다..

서버에서 받은 데이터들을 개발자 도구 콘솔에서 출력하는 방법에 대해 알아보겠습니다. 만약 이미지와 같은 데이터들을 서버에서 받았다고 하면 result.data.result를 입력했을 때 출력이 에러없이 될까요?? 네 맞습니다. 안됩니다. 에러가 발생합니다. 왜 에러가 났고, 어떻게 접근을 하면 될까요?? 우선 에러가 나는 이유는 쉽게 말해 DOM 객체에 result 값이 없기 때문입니다. ㅣ객체에 담아줘야 한다! 결국 개발자 도구 콘솔에서 result.data.result 에 접근하기 위해서는 클라이언트로 데이터 값을 보낼 때 한 임의의 객체 안에 넣어주면 됩니다. var aaa = { dummy: null , init: function() { this.addEvent(); } , addEvent: fu..

웹 개발자분들이라면 DOM 이라는 단어 한번정도는 들어보셨을 겁니다. 저 역시 DOM에 대해 많이 들어봤지만 정확히 그게 무엇인지는 잘몰랐습니다. 개발자라면 궁금한 것에 대해 그냥 넘어가면 안되기에 DOM에 대해 공부해봤습니다. Aldev님, Code Playground님, WIT블로그의 고우영님의 자료를 토대로 제가 이해한 내용을 바탕으로 정리했습니다. 틀린 부분이 있으면 언제든 지적해주시면 감사하겠습니다. 참고한 블로그들에 대해서는 하단에 주소를 남깁니다. l BOM 과 DOM 웹은 기본적으로 웹 브라우저를 통해 서비스 됩니다. 크롬, 사파리, 익스플로어 등이 바로 웹 브라우저 입니다. 브라우저는 html 읽어들여 사용자에게 보여줍니다. 이러한 브라우저와 관련된 객체들의 집합을 브라우저 객체 모델 즉..

사진과 같이 동일한 클래스에 대해서 다르게 css 속성을 해주고 싶을 때 사용하는 방법입니다. 예를 들어 위에 2개의 이미지가 있는데 2개 모두 동일한 태그로 생성된 뒤 데이터 값만 다르게 받았습니다. 이미지 A 이미지 B 만약 class="background" 라고 할때 $('.background').css("color", "red"); 하게 되면 2개의 이미지 모두 폰트가 빨간색으로 됩니다. 이 경우 저는 첫번째 이미지에만 빨간색 폰트로 하고 싶을 때 다음과 같은 방법을 사용하여 해당 태그에 접근하면 됩니다. crud.list.onComplete = function(result) { console.log(result); if(result.result) { var dataList = result.dat..

# 서블릿??!! 서블릿은 서버 쪽에서 실행되며 클라이언트의 요청을 동적으로 처리할 수 있게끔 도와주는 자바 클래스입니다. 서블릿은 자바 클래스이므로 자바의 일반적인 특징은 모두 가지고 있습니다. 하지만 자바와 달리 서블릿은 톰캣과 같은 서블릿 컨테이너에서 실행되야 합니다. 클라이언트가 웹 서버에 요청을 하면 웹 서버는 그 요청을 톰캣과 같은 웹 애플리케이션 서버(WAS)에 위임합니다. 그러면 WAS 는 각 요청에 해당하는 서블릿을 실행합니다. 그 후 서블릿은 요청에 대한 기능을 수행한 후 결과를 반환하여 클라언트에게 응답하게 됩니다. 서블릿의 특징 서버에서 실행된다. 정적인 웹 프로그램을 동적으로 처리할수 있게 해준다. 스레드 방식으로 실행된다. 자바 클래스이기 때문에 자바의 특징을 갖는다. 서블릿 컨..

대부분 사람들은 데이터베이스와 데이터베이스 관리 시스템(DBMS : DataBase Management System)을 구별하지 않고 흔히 데이터베이스로 통합해서 말하곤 합니다. 하지만 정확히 이 둘의 개념은 엄연히 다릅니다. 데이터베이스 안에 데이터를 관리해주는 프로그램이 데이터베이스 관리 시스템입니다. 소위 아는 Mysql 나 오라클, 몽고비디 등이 있습니다. 데이터베이스 관리 시스템은 1960년대에 개발되어 현재까지도 꾸준히 진화를 거듭하고 발전되고 있습니다. 사용하는 데이터 모델에 따라 4세대로 나눌수 있습니다. 1세대인 네트워크 DBMS 2세대인 관계 DBMS 3세대인 객체지향 객체관계 DBMS 4세대인 NoSQL, NewSQL DBMS (데이터 모델이란? 데이터를 데이터베이스에 저장하는 구조를..

자바스크립트는 Java, Python 처럼 객체지향언어(Object-Oriented Programming, OOP)입니다. 객체지향이란 프로그램을 그저 데이터와 처리방법으로 나누는게 아니고, 프로그램을 다수의 "객체"로 만들고, 이들이 서로 상호작용을 통해 만들어지는 방식입니다. 예를 들어 자동차가 있다고 하면 자동차의 바퀴, 엔진, 도어 등을 객체라고 할 수 있습니다. 이 글은 프로토타입에 관한 글 이므로 객체 지향에 대해선 이 정도만 알고 가겠습니다. 하지만 클래스가 존재하는 Java와는 달리 자바스크립트(이하 JS)에는 클래스라는 개념이 없습니다. 대신 JS에는 프로토타입이라는 개념이 존재합니다. 이 때문에 JS가 프로토타입 기반의 객체지향 언어라고 불리는 이유입니다. ECMA6에서 클래스 문법이 ..

데이터베이스의 가장 원초적인 목적은 데이터를 수집하는 것입니다. 내가 필요한 데이터를 수집하기 위해선 먼저 수집 대상이 되는 데이터의 유형을 파악하고 있어야 합니다. 일반적으로 데이터는 형태에 따라 정형 데이터, 반정형 데이터, 비정형 데이터로 분류할 수 있습니다. 정형 데이터 정형데이터(structured data)는 이름 그대로 구조화된 데이터 입니다. 즉 미리 구조를 정하여 정해진 구조에 따라 저장되는 데이터입니다. 흔히 관계 데이터베이스의 테이블이 담고 있는 데이터들이 정형데이터입니다. 반정형 데이터 반정형 데이터(semi-structured data)는 정형 데이터처럼 구조에 따라 저장되지만 데이터 안에 구조에 대한 설명이 함께 포함되어 있습니다. 따라서 데이터 내용에 대한 설명, 즉 구조를 파..

우리는 현대사회에서 데이터와 정보라는 단어를 많이 사용하고 실제로 이를 사용하고 있습니다. 현대사회에서 데이터와 정보를 상당히 중요한 요소로 취급되고 있습니다. 우리는 데이터와 정보를 같은 의미로 많이 사용하고 있는데, 데이터와 정보를 엄연히 다릅니다. 둘의 정의를 살펴보면, 데이터 : 현실 세계에서 단순히 관찰하거나 측정하여 수집한 사실이나 값 정보 : 데이터를 의사결정에 유용하게 활용할 수 있도록 처리하여 체계적으로 조직한 결과물 입니다. 쉽게 비유하자면 데이터 : 목장에서 막 짠 우유(원유) 정보 : 목장에서 짠 우유를 가공하여 팩에 담은 우유 라고 볼수 있습니다. 좋은 우유를 얻으려면 품질 좋은 원유를 확보해야하는 것처럼, 가치 있는 정보를 얻으려면 현재 상황을 정확히 관찰하고 측정하여 의미있는 ..

회사에 인턴으로 입사를 하고, 대표님께서 과제 하나를 주셨습니다. 자바스크립트로 간단한 계산기를 만드는 것이였습니다. 어렵지 않게 구현을 하였고, 대표님께 보여드렸습니다. 계산기 기능 자체에는 문제가 전혀없었으나.. 계산기를 구현한 코드를 보시고는 이런 말을 하셨습니다. 아직도 정확히 기억납니다. 심지어 말투까지도 기억이 납니다. "코드에 철학이 담겨 있지 않아" ※처음에 제가 구현했던 코드입니다. 코드가 너무 길어 링크로 대체합니다. 얼핏보면 가독성도 있고 나름대로 함수화도 시켜서 문제가 없어 보일수 있습니다. 하지만 만약 계산기에 나머지를 구해주는 % 기능을 추가해주고 싶다면 계산 관련한 로직으로 들어가서 내부를 뜯어고쳐야 합니다. 물론 계산기 관련 코드도 복잡하고 길지 않아서 문제가 되지 않지만 여..

Express는 기존 Node.js 코드의 가독성과 확장성이 많이 떨어진다고 생각하여 만들어진 웹 서버 프레임워크입니다. Express는 http 모듈의 요청과 응답 객체에 추가 기능들을 부여했습니다. 또 라우터로 코드를 분리하기 쉬워 유지보수 또한 용이합니다. Express 외에도 koa나 hapi 같은 웹 서버 프레임워크가 있지만 다음 사진과 같이 Express가 압도적으로 인기가 많습니다. 물론 사용자가 많다고 항상 좋은건 아니지만, 사용자가 많은 것에는 이유가 있습니다. 사용자가 많을 수록 버그가 적고, 기능 추가나 유지보수도 활발이 되기 때문입니다. Express-generator는 Express 환경을 간단하게 구축해주는 npm입니다. 따라서 사용하면 쉽게 Node.js 개발을 할수 있습니다...

bcrypt란? 웹 페이지를 구현할 때 보안은 가장 기본적으로 수행되어야 할 요소입니다. 비밀번호를 텍스트 그대로 데이터 베이스에 저장해 관리하는 것은 해커에게 대놓고 데이터를 주는 것과 다름 없습니다. 이를 방지하고자 비밀번호를 암호화 하는 것이 bcrypt 모듈입니다. bcrypt는 단방향 해시 함수를 이용한 모듈로써 Salt 라는 개념을 사용합니다. Salt 라는 값과 해시된 비밀번호를 합쳐 데이터베이스에 저장하게 되는데 이렇게 하면, 만약 "1234" 같은 비밀번호를 해시함수에 넣었을때 항상 다른 값의 Salt 값과 비밀번호가 합쳐서 해커들이 비밀번호를 찾는데 있어 더욱 힘들게 만듭니다. 사용 방법 npm i bcrypt를 수행합니다. const bcrypt = require('bcrypt'); ..